WalletWall plugin (Agent Plugins 1.0.0)
This directory is the Copilot plugin. It is self-contained.
plugin/
plugin.json manifest (name: walletwall, version 0.3.0)
mcp.json one local stdio server
skills/walletwall-evidence/ skill: how to use the tools without over-claiming
server/walletwall-mcp.mjs GENERATED bundle of packages/mcp: WalletWall MCP (do not edit)
THIRD_PARTY_NOTICES.md GENERATED license notices for the bundled packages and embedded fonts
com.github.copilot/extensions/
walletwall-evidence-explorer/ canvas extension: WalletWall (canvas id kept for continuity)
server/walletwall-mcp.mjs is produced by npm run build:bundle and checked for reproducibility by npm run verify:bundle (hash in security/bundle.sha512). THIRD_PARTY_NOTICES.md is produced by npm run gen:notices and checked by npm run verify:notices.
It needs no WalletWall account, no WalletWall backend, no GitHub App authentication and no remote service. It needs node on PATH.
WalletWall canvas
com.github.copilot/extensions/walletwall-evidence-explorer/ is a Copilot canvas extension (plain .mjs, no dependencies). It shows one WWEP evidence bundle as The Wall (a deterministic relationship graph of sources, observations, claims, WalletWall derivation and the vault readiness keystone), with the selected piece's support, authority class, freshness, finality, conflicts, limitations, sources and source lineage beside it, the readiness assembly, a Wallprint and a reserved (disabled) Receipt area. Design rules: docs/CANVAS_DESIGN_SYSTEM.md.
- It asks the bundled MCP server (the same
server/walletwall-mcp.mjs) for every state it displays. It computes nothing itself. - It serves its page from a loopback-only (
127.0.0.1) listener that the Copilot app embeds. The listener is protected by an unguessable path key and a Host check, refuses a foreign Origin on its one state-changing route, and the page carries a Content-Security-Policy that allows no origin but its own. Fonts and brand images are embedded (brand.mjs, generated bynpm run gen:canvas-brandfromcanvas/brand/); nothing is fetched. - Addresses are shown in full with their chain ID and Copy controls that copy exactly the full value.
- It writes nothing to disk, stores nothing in the browser, and contacts no remote service. See
docs/PLUGIN_PATH_PRIVACY.mdfor what is tested and what is not. fixtures.mjsis generated from the conformance corpus bynpm run gen:canvas(synthetic data only).- WallPrint disclosure view (
wallprint-render.mjs,wallprint-styles.mjs,wallprint-client.mjs): opened with{ "wallprint": "<lineage>" }, the same page shows one bundled synthetic WallPrint disclosure lineage as a disclosure document: the record, its lifecycle, every assessment as recorded, provenance, corrections and supersessions with the engine's semantic diff, and the receipt and replay results with their boundary.wallprint-fixtures.mjsis generated from the canonical WallPrint engine bynpm run gen:wallprint; the page decides nothing. Contract:canvas/README.md, items 11 to 14.
Installing
The repository root carries a marketplace manifest (.github/plugin/marketplace.json) so the plugin can be added from a local checkout or from this repository. The exact steps and what was verified are in docs/DESKTOP_INSTALL_PROOF.md.