capacity-attest 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ // completeness.ts — detect (never prevent) a host that hides claims.
2
+ //
3
+ // Background, in one paragraph: get_delivery_history is served by whoever runs
4
+ // this installation, and in the general case that party is not trusted (see
5
+ // DECISIONS.md D-005/D-006). Every claim it shows is individually authentic
6
+ // (signature re-verified on read since the 2026-09-06 fix in ledger.ts), but
7
+ // nothing in a single flat answer proves the SET is complete. A host could
8
+ // return every positive claim and silently drop the negative ones. There is
9
+ // no way to prove completeness directly from one answer — that is a real
10
+ // impossibility, not a gap we forgot to close (confirmed against the
11
+ // Certificate Transparency literature and 2024-2026 transparency-log research;
12
+ // even CT leans on external monitors, not on a proof inside the log).
13
+ //
14
+ // What IS possible is to make an omission LEAVE A TRACE. `priorClaimId`
15
+ // (schema.ts) chains each buyer's successive claims about one seller: claim N
16
+ // carries the claimId of that buyer's claim N-1 about the same seller, inside
17
+ // the signed content, so the host cannot strip or alter it. This function
18
+ // reads a set of claims (already filtered to one seller by getDeliveryHistory)
19
+ // and asks: does any shown claim point back to a prior claim that is NOT in
20
+ // the set? If so, the host either hid that prior claim or it lives on another
21
+ // installation — either way it is a concrete, checkable signal, not a vibe.
22
+ //
23
+ // WHO COMPUTES THIS, AND WHY IT IS THE WHOLE POINT: the report this function
24
+ // produces is DERIVED data, not signed. The trust does NOT live in the report;
25
+ // it lives in the `priorClaimId` links, which sit inside each claim's signed
26
+ // content and so cannot be forged or stripped by a host. A reader who does NOT
27
+ // run this installation must therefore recompute this report LOCALLY, by
28
+ // calling analyzeCompleteness() themselves over the returned claims (each of
29
+ // which they independently verify with verifyClaim()). The `completeness` field
30
+ // that get_delivery_history returns is only a convenience for the honest /
31
+ // self-hosted case: a malicious host can just put chainConsistent:true in it
32
+ // and still omit claims, because it controls its own response. Trusting the
33
+ // field from an untrusted host is worth exactly as much as trusting that host;
34
+ // recomputing it from the signed claims is the part with teeth. Stated again in
35
+ // COMPLETENESS_NOTE, the tool description, README and DECISIONS.md D-006.
36
+ //
37
+ // HONEST BOUNDARY, stated in code so it is never oversold downstream:
38
+ // - Catches (when recomputed locally, see above): a hidden claim in the
39
+ // MIDDLE of a buyer's chain (the next link dangles).
40
+ // - Does NOT catch: a hidden MOST-RECENT claim (a tail truncation leaves no
41
+ // dangling reference), nor a hidden ENTIRE buyer (no link to dangle from a
42
+ // chain you were shown zero links of). Those need the external witnesses
43
+ // no schema field can replace: the buyer's own retained copy and the
44
+ // on-chain payment record. This function never claims otherwise.
45
+ // - A dangling reference is NOT proof of dishonesty: the prior claim may
46
+ // simply have been recorded on a DIFFERENT installation (the D-005
47
+ // scenario). possibleOmissions means "look closer", not "the host lied".
48
+ const COMPLETENESS_NOTE = "This report is DERIVED, not signed. If you did not run this installation yourself, do NOT trust this field: recompute it locally with " +
49
+ "analyzeCompleteness() over the returned claims, whose priorClaimId links ARE signed and cannot be forged or stripped by a host. " +
50
+ "chainConsistent=true (when you recompute it) means every shown claim's priorClaimId links to another shown claim, so no MIDDLE claim was " +
51
+ "hidden from any chain present here. It does NOT prove you were shown everything: a host can still hide a buyer's most recent claim, or an " +
52
+ "entire buyer, without breaking any link. A dangling reference (possibleOmissions) can also be innocent: the prior claim may just have been " +
53
+ "recorded on a different installation (see D-005). For real assurance, cross-check against the buyer's own retained copy and the on-chain " +
54
+ "payment (settlementRef). See DECISIONS.md D-006.";
55
+ function lower(s) {
56
+ return s.toLowerCase();
57
+ }
58
+ /**
59
+ * Analyze the per-buyer, per-seller claim chains in a set of claims (already
60
+ * scoped to one seller by getDeliveryHistory) for hidden-middle-claim and
61
+ * fork signals. Pure and offline: no network, no ledger access, operates only
62
+ * on the claims handed in. Safe on an empty set (reports consistent).
63
+ *
64
+ * ASSUMES its inputs are already signature-verified and de-duplicated (which
65
+ * is true for everything getDeliveryHistory feeds it: the read path in
66
+ * ledger.ts re-verifies every claim and appendClaim rejects duplicate
67
+ * claimIds). Because claimId is a content hash, a self-referencing or cyclic
68
+ * priorClaimId is cryptographically unconstructible and cross-buyer claimId
69
+ * collisions are impossible, so those degenerate shapes are not defended
70
+ * against here. If you ever call this on RAW, unverified claims, verify them
71
+ * first — this function trusts that claimId really is the content hash.
72
+ */
73
+ export function analyzeCompleteness(claims) {
74
+ const presentIds = new Set();
75
+ for (const c of claims)
76
+ presentIds.add(lower(c.claimId));
77
+ const possibleOmissions = [];
78
+ // Per-buyer map of priorClaimId -> claimIds that reference it, to find forks.
79
+ const referencesByBuyer = new Map();
80
+ for (const c of claims) {
81
+ if (c.priorClaimId === undefined)
82
+ continue; // genesis link, nothing to check
83
+ const prior = lower(c.priorClaimId);
84
+ const buyer = lower(c.buyerAddress);
85
+ if (!presentIds.has(prior)) {
86
+ possibleOmissions.push({ buyerAddress: buyer, missingPriorClaimId: c.priorClaimId, referencedBy: c.claimId });
87
+ }
88
+ let byPrior = referencesByBuyer.get(buyer);
89
+ if (!byPrior) {
90
+ byPrior = new Map();
91
+ referencesByBuyer.set(buyer, byPrior);
92
+ }
93
+ const refs = byPrior.get(prior);
94
+ if (refs)
95
+ refs.push(c.claimId);
96
+ else
97
+ byPrior.set(prior, [c.claimId]);
98
+ }
99
+ const forks = [];
100
+ for (const [buyerAddress, byPrior] of referencesByBuyer) {
101
+ for (const [priorClaimId, claimIds] of byPrior) {
102
+ if (claimIds.length > 1)
103
+ forks.push({ buyerAddress, priorClaimId, claimIds });
104
+ }
105
+ }
106
+ return {
107
+ chainConsistent: possibleOmissions.length === 0 && forks.length === 0,
108
+ possibleOmissions,
109
+ forks,
110
+ note: COMPLETENESS_NOTE,
111
+ };
112
+ }
113
+ //# sourceMappingURL=completeness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeness.js","sourceRoot":"","sources":["../src/completeness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import * as z from "zod/v4";
2
+ export declare const ResolveAgentIdentityInputSchema: z.ZodObject<{
3
+ agentRegistryRef: z.ZodString;
4
+ agentId: z.ZodString;
5
+ rpcUrl: z.ZodString;
6
+ }, z.core.$strip>;
7
+ export type ResolveAgentIdentityInput = z.infer<typeof ResolveAgentIdentityInputSchema>;
8
+ export type ResolveAgentIdentityResult = {
9
+ ok: true;
10
+ chainId: string;
11
+ registryAddress: string;
12
+ agentId: string;
13
+ owner: string;
14
+ tokenUri: string;
15
+ } | {
16
+ ok: false;
17
+ reason: string;
18
+ };
19
+ /** The minimal read surface this module needs — real ethers.Contract satisfies this shape structurally. */
20
+ export interface Erc721ReadContract {
21
+ ownerOf(agentId: bigint): Promise<string>;
22
+ tokenURI(agentId: bigint): Promise<string>;
23
+ }
24
+ /**
25
+ * Dependency-injection seam so tests can supply a fake contract instead of
26
+ * making a real network call, without needing to fake ethers' own ABI
27
+ * encoding/decoding. Defaults to a real ethers Contract over a real
28
+ * JsonRpcProvider.
29
+ */
30
+ export type ContractFactory = (registryAddress: string, rpcUrl: string) => Erc721ReadContract;
31
+ /**
32
+ * Read-only lookup against an ERC-8004 Identity Registry: who owns
33
+ * `agentId` (`ownerOf`) and where its registration file lives (`tokenURI`).
34
+ * Never resolves, verifies, or trusts the content the returned `tokenUri`
35
+ * points to — see file header. This is the logic behind the
36
+ * `resolve_agent_identity` MCP tool.
37
+ */
38
+ export declare function resolveAgentIdentity(input: ResolveAgentIdentityInput, contractFactory?: ContractFactory): Promise<ResolveAgentIdentityResult>;
39
+ //# sourceMappingURL=erc8004.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc8004.d.ts","sourceRoot":"","sources":["../src/erc8004.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AA2B5B,eAAO,MAAM,+BAA+B;;;;iBAM1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBlC,2GAA2G;AAC3G,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,kBAAkB,CAAC;AAO9F;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,eAAe,GAAE,eAAwC,GACxD,OAAO,CAAC,0BAA0B,CAAC,CA8BrC"}
@@ -0,0 +1,122 @@
1
+ // erc8004.ts — read-only resolution against an ERC-8004 Identity Registry.
2
+ //
3
+ // ERC-8004 ("Trustless Agents") defines its Identity Registry as a standard
4
+ // ERC-721 contract: an agent's on-chain identity IS an NFT, `agentId` IS the
5
+ // tokenId. There is no bespoke `getAgent()` function in the spec — lookup is
6
+ // exactly `ownerOf(agentId)` (who controls this identity) and
7
+ // `tokenURI(agentId)` (a pointer to the agent's registration file: an IPFS/
8
+ // HTTPS/data URI, per eips.ethereum.org/EIPS/eip-8004, confirmed 2026-09-06
9
+ // against the spec text directly). This module calls only those two
10
+ // standard, universal ERC-721 read functions — nothing ERC-8004-specific.
11
+ //
12
+ // Deliberately NOT done here: fetching or parsing what `tokenURI` points to.
13
+ // That string is caller-controlled data embedded in on-chain state by
14
+ // whoever registered the agent, and auto-fetching it (an ipfs:// gateway
15
+ // call, or a fetch to an arbitrary https:// URL surfaced from someone
16
+ // else's on-chain write) is a real SSRF-shaped risk this project does not
17
+ // need to take on for a read-only identity check. Callers get the raw
18
+ // tokenUri string back and decide for themselves whether and how to fetch
19
+ // it — same "cite, never resolve further" posture as externalRefs
20
+ // (DECISIONS.md D-007).
21
+ //
22
+ // Deliberately NOT hardcoded here: any specific registry contract address
23
+ // or chain RPC endpoint. ERC-8004 is deployed independently on multiple
24
+ // chains (mainnet, Base, and others per the EIP's own multi-chain design),
25
+ // and the EIP text itself lists no canonical deployment address anywhere.
26
+ // Guessing one would risk querying the wrong contract and returning
27
+ // misleading data. Both the registry reference and the RPC endpoint are
28
+ // therefore required, caller-supplied inputs — this module is a thin,
29
+ // chain-agnostic resolver, never an authority on which deployment is "the"
30
+ // one, and never a source of its own RPC credentials for a published
31
+ // open-source package to leak or rate-limit on other people's behalf.
32
+ import { ethers } from "ethers";
33
+ import * as z from "zod/v4";
34
+ // The EIP's own compound reference format: "{namespace}:{chainId}:
35
+ // {identityRegistry}", namespace fixed to "eip155" for EVM chains
36
+ // (CAIP-2/CAIP-10-style). Captures chainId and the registry contract
37
+ // address separately; the address half accepts either case, normalized to
38
+ // lower case in the result, same convention as sellerAddress/buyerAddress
39
+ // in schema.ts.
40
+ const AGENT_REGISTRY_REF_RE = /^eip155:(\d+):(0x[0-9a-fA-F]{40})$/;
41
+ // ERC-721's two standard read functions. This is the ENTIRE interface this
42
+ // module depends on — see the file header for why nothing ERC-8004-specific
43
+ // is needed.
44
+ const ERC721_READ_ABI = ["function ownerOf(uint256 tokenId) view returns (address)", "function tokenURI(uint256 tokenId) view returns (string)"];
45
+ // uint256's maximum value (2^256 - 1) has exactly 78 decimal digits. A
46
+ // longer digit string can never be a valid ERC-721 tokenId; bounding the
47
+ // length before BigInt() parses it avoids handing an unboundedly large
48
+ // digit string to the runtime's bignum parser.
49
+ const MAX_AGENT_ID_DIGITS = 78;
50
+ const CALL_TIMEOUT_MS = 8_000;
51
+ // Mirrors the plain-TS validation below in isValidAgentId/isHttpUrl at the
52
+ // MCP tool-input boundary (index.ts's inputSchema), so a caller gets a
53
+ // schema-shaped rejection before resolveAgentIdentity() is even called.
54
+ // The runtime function still re-checks everything itself, since it is
55
+ // also callable directly (tests, examples), not only through the MCP tool.
56
+ export const ResolveAgentIdentityInputSchema = z.object({
57
+ agentRegistryRef: z
58
+ .string()
59
+ .describe('Compound ERC-8004 registry reference: "eip155:<chainId>:<registryAddress>", e.g. "eip155:1:0x1234567890123456789012345678901234567890"'),
60
+ agentId: z.string().describe("The ERC-721 tokenId / ERC-8004 agentId, as a decimal string"),
61
+ rpcUrl: z.string().describe("JSON-RPC endpoint (http:// or https://) for the chain named in agentRegistryRef — never assumed or defaulted"),
62
+ });
63
+ function isValidAgentId(v) {
64
+ return v.length <= MAX_AGENT_ID_DIGITS && /^(0|[1-9][0-9]*)$/.test(v);
65
+ }
66
+ function isHttpUrl(v) {
67
+ try {
68
+ const protocol = new URL(v).protocol;
69
+ return protocol === "http:" || protocol === "https:";
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ function withTimeout(p, ms) {
76
+ return Promise.race([
77
+ p,
78
+ new Promise((_, reject) => {
79
+ setTimeout(() => reject(new Error(`timed out after ${ms}ms`)), ms);
80
+ }),
81
+ ]);
82
+ }
83
+ const defaultContractFactory = (registryAddress, rpcUrl) => {
84
+ const provider = new ethers.JsonRpcProvider(rpcUrl);
85
+ return new ethers.Contract(registryAddress, ERC721_READ_ABI, provider);
86
+ };
87
+ /**
88
+ * Read-only lookup against an ERC-8004 Identity Registry: who owns
89
+ * `agentId` (`ownerOf`) and where its registration file lives (`tokenURI`).
90
+ * Never resolves, verifies, or trusts the content the returned `tokenUri`
91
+ * points to — see file header. This is the logic behind the
92
+ * `resolve_agent_identity` MCP tool.
93
+ */
94
+ export async function resolveAgentIdentity(input, contractFactory = defaultContractFactory) {
95
+ const match = AGENT_REGISTRY_REF_RE.exec(input.agentRegistryRef);
96
+ if (!match) {
97
+ return {
98
+ ok: false,
99
+ reason: 'agentRegistryRef must match "eip155:<chainId>:<registryAddress>", e.g. "eip155:1:0x1234567890123456789012345678901234567890"',
100
+ };
101
+ }
102
+ const chainId = match[1];
103
+ const registryAddress = match[2];
104
+ if (!isValidAgentId(input.agentId)) {
105
+ return { ok: false, reason: "agentId must be a non-negative decimal integer string (no leading zeros, no sign, at most 78 digits)" };
106
+ }
107
+ if (!isHttpUrl(input.rpcUrl)) {
108
+ return { ok: false, reason: "rpcUrl must be an http:// or https:// URL" };
109
+ }
110
+ let owner;
111
+ let tokenUri;
112
+ try {
113
+ const contract = contractFactory(registryAddress, input.rpcUrl);
114
+ const agentIdBig = BigInt(input.agentId);
115
+ [owner, tokenUri] = await withTimeout(Promise.all([contract.ownerOf(agentIdBig), contract.tokenURI(agentIdBig)]), CALL_TIMEOUT_MS);
116
+ }
117
+ catch (e) {
118
+ return { ok: false, reason: `on-chain lookup failed: ${e.message}` };
119
+ }
120
+ return { ok: true, chainId, registryAddress: registryAddress.toLowerCase(), agentId: input.agentId, owner, tokenUri };
121
+ }
122
+ //# sourceMappingURL=erc8004.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc8004.js","sourceRoot":"","sources":["../src/erc8004.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAA2C,MAAM,aAAa,CAAC;AAwDrG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAA2C,MAAM,aAAa,CAAC;AA2GrG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
7
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
8
  import { ASSET_TYPES, DELIVERED_VALUES, ClaimContentSchema, DeliveryClaimSchema } from "./schema.js";
9
9
  import { recordDelivery, getDeliveryHistory } from "./tools.js";
10
+ import { resolveAgentIdentity, ResolveAgentIdentityInputSchema } from "./erc8004.js";
10
11
  const server = new McpServer({
11
12
  name: "capacity-attest",
12
13
  version: "0.1.0",
@@ -24,7 +25,10 @@ server.registerTool("record_delivery", {
24
25
  "The buyer agent calls this AFTER paying, once it knows whether what was promised actually arrived. " +
25
26
  "The claim's schema and signature (must recover to buyerAddress) are validated before it is written to the " +
26
27
  "append-only ledger. This is a factual receipt, not a reputation score — see get_delivery_history for how " +
27
- "other agents read it back.",
28
+ "other agents read it back. OPTIONAL priorClaimId: set it to the claimId of your (this buyer's) previous claim " +
29
+ "about the SAME sellerAddress, so your claims about that seller form a chain. It is optional and omitted on your " +
30
+ "first claim about a seller. Chaining lets a reader later detect a host that hides one of your middle claims; it " +
31
+ "is signed into the claim so a host cannot strip it. See DECISIONS.md D-006.",
28
32
  inputSchema: DeliveryClaimSchema.shape,
29
33
  }, async (args) => {
30
34
  const result = await recordDelivery(args);
@@ -34,15 +38,58 @@ server.registerTool("record_delivery", {
34
38
  });
35
39
  server.registerTool("get_delivery_history", {
36
40
  title: "Get a seller's delivery history",
37
- description: "Return every known, signature-verified delivery claim recorded against a given sellerAddress, oldest first. " +
38
- "Purely factual — no aggregate score, rating, or reputation judgment is computed. A buying agent can call this " +
39
- "BEFORE paying a seller to see that seller's raw delivery history for gpu-hours, storage, api-credits, and " +
40
- "bandwidth claims.",
41
+ description: "Return every signature-verified delivery claim recorded against a given sellerAddress in THIS installation's " +
42
+ "local ledger, oldest first. Purely factual — no aggregate score, rating, or reputation judgment is computed. " +
43
+ "IMPORTANT, two separate caveats, both repeated in the response's own `note` field: (1) this is scoped to the " +
44
+ "local ledger only — a different installation may hold other claims against the same seller that this call " +
45
+ "cannot see, so an empty or short result does NOT mean the seller has a clean record elsewhere, only that no " +
46
+ "claims have been recorded here; (2) even within this installation, a shown claim's signature is genuinely " +
47
+ "verified, but nothing proves this is the COMPLETE set of claims the operator actually holds — completeness " +
48
+ "depends on the operator's honesty, not cryptography. The response's `completeness` field analyzes the per-buyer " +
49
+ "claim chains (priorClaimId) and flags, in possibleOmissions, any shown claim that links back to a claim NOT in " +
50
+ "the result — a concrete sign the operator may be hiding a middle claim. IMPORTANT: that field is computed by " +
51
+ "this same server, so if you do not run it yourself, do NOT trust the field — recompute it locally by calling " +
52
+ "analyzeCompleteness() over the returned claims, whose priorClaimId links are signed and cannot be forged or " +
53
+ "stripped. It cannot catch a hidden most-recent claim or a hidden whole buyer, and a dangling link can also just " +
54
+ "mean the prior claim lives on another installation; see DECISIONS.md D-006. " +
55
+ "A buying agent can call this BEFORE paying a seller to see that seller's raw delivery history for gpu-hours, " +
56
+ "storage, api-credits, and bandwidth claims.",
41
57
  inputSchema: {
42
58
  sellerAddress: ClaimContentSchema.shape.sellerAddress,
43
59
  },
44
60
  }, async ({ sellerAddress }) => {
45
- return textResult(await getDeliveryHistory(sellerAddress));
61
+ // NINTH FIX (2026-09-06, found by the same adversarial audit as the
62
+ // ledger.ts SEVENTH/EIGHTH fixes): every other handler/entry point in
63
+ // this codebase (record_delivery below, recordDelivery() in tools.ts)
64
+ // is deliberately wrapped so untrusted-input-triggered errors degrade to
65
+ // the tool's normal {ok:false}/errorResult contract instead of an
66
+ // uncaught exception — this handler was the one place that discipline
67
+ // was not applied. A real fs error surfaced from getFreshCache()/
68
+ // resyncFromDisk() (e.g. a transient EACCES/EBUSY, deliberately made
69
+ // non-swallowed by an earlier fix in ledger.ts) would otherwise escape
70
+ // this handler unhandled instead of returning a normal error result.
71
+ try {
72
+ return textResult(await getDeliveryHistory(sellerAddress));
73
+ }
74
+ catch (e) {
75
+ return errorResult(e.message);
76
+ }
77
+ });
78
+ server.registerTool("resolve_agent_identity", {
79
+ title: "Resolve an ERC-8004 agent identity (read-only, on-chain)",
80
+ description: "Look up an agent's on-chain identity registration in an ERC-8004 Identity Registry: who owns the agentId " +
81
+ "(ownerOf) and where its registration file lives (tokenURI). Read-only — never writes anything, never touches " +
82
+ "the delivery ledger. Requires the caller to supply BOTH the registry reference (chain + contract address) AND " +
83
+ "an RPC endpoint for that chain: this tool does not assume, default, or bundle its own RPC provider or a " +
84
+ "canonical registry address, since ERC-8004 has independent deployments on multiple chains. This tool does NOT " +
85
+ "fetch or parse what tokenURI points to — it returns that pointer as-is for the caller to resolve themselves. " +
86
+ "capacity-attest never verifies or endorses what an ERC-8004 registration claims; see DECISIONS.md D-007.",
87
+ inputSchema: ResolveAgentIdentityInputSchema.shape,
88
+ }, async (args) => {
89
+ const result = await resolveAgentIdentity(args);
90
+ if (!result.ok)
91
+ return errorResult(result.reason);
92
+ return textResult(result);
46
93
  });
47
94
  // Re-exported so callers embedding this package can reference the same enums
48
95
  // / schema the tools validate against without duplicating them.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,2EAA2E;AAC3E,oDAAoD;AACpD,uDAAuD;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,oHAAoH;QACpH,qGAAqG;QACrG,4GAA4G;QAC5G,2GAA2G;QAC3G,4BAA4B;IAC9B,WAAW,EAAE,mBAAmB,CAAC,KAAK;CACvC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;IACE,KAAK,EAAE,iCAAiC;IACxC,WAAW,EACT,8GAA8G;QAC9G,gHAAgH;QAChH,4GAA4G;QAC5G,mBAAmB;IACrB,WAAW,EAAE;QACX,aAAa,EAAE,kBAAkB,CAAC,KAAK,CAAC,aAAa;KACtD;CACF,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;IAC1B,OAAO,UAAU,CAAC,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF,6EAA6E;AAC7E,gEAAgE;AAChE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,2EAA2E;AAC3E,oDAAoD;AACpD,uDAAuD;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,oHAAoH;QACpH,qGAAqG;QACrG,4GAA4G;QAC5G,2GAA2G;QAC3G,gHAAgH;QAChH,kHAAkH;QAClH,kHAAkH;QAClH,6EAA6E;IAC/E,WAAW,EAAE,mBAAmB,CAAC,KAAK;CACvC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;IACE,KAAK,EAAE,iCAAiC;IACxC,WAAW,EACT,+GAA+G;QAC/G,+GAA+G;QAC/G,+GAA+G;QAC/G,4GAA4G;QAC5G,8GAA8G;QAC9G,4GAA4G;QAC5G,6GAA6G;QAC7G,kHAAkH;QAClH,iHAAiH;QACjH,+GAA+G;QAC/G,+GAA+G;QAC/G,8GAA8G;QAC9G,kHAAkH;QAClH,8EAA8E;QAC9E,+GAA+G;QAC/G,6CAA6C;IAC/C,WAAW,EAAE;QACX,aAAa,EAAE,kBAAkB,CAAC,KAAK,CAAC,aAAa;KACtD;CACF,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;IAC1B,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,yEAAyE;IACzE,kEAAkE;IAClE,sEAAsE;IACtE,kEAAkE;IAClE,qEAAqE;IACrE,uEAAuE;IACvE,qEAAqE;IACrE,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,WAAW,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;IACE,KAAK,EAAE,0DAA0D;IACjE,WAAW,EACT,2GAA2G;QAC3G,+GAA+G;QAC/G,gHAAgH;QAChH,0GAA0G;QAC1G,gHAAgH;QAChH,+GAA+G;QAC/G,0GAA0G;IAC5G,WAAW,EAAE,+BAA+B,CAAC,KAAK;CACnD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CACF,CAAC;AAEF,6EAA6E;AAC7E,gEAAgE;AAChE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAYA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAoftE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA0D9E;AAED,4DAA4D;AAC5D,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQrF;AAED,mFAAmF;AACnF,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAG1D"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAYA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AA0hBtE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA0D9E;AAED,4DAA4D;AAC5D,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQrF;AAED,mFAAmF;AACnF,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAG1D"}
package/dist/ledger.js CHANGED
@@ -10,6 +10,7 @@ import { readFileSync, appendFileSync, openSync, closeSync, unlinkSync, statSync
10
10
  import { join } from "node:path";
11
11
  import { dataDir, ensureDataDir } from "./config.js";
12
12
  import { DeliveryClaimSchema } from "./schema.js";
13
+ import { verifyClaim } from "./signing.js";
13
14
  function claimsFile() {
14
15
  return join(dataDir(), "claims.jsonl");
15
16
  }
@@ -100,7 +101,18 @@ async function acquireLock(path) {
100
101
  continue;
101
102
  }
102
103
  if (Date.now() > deadline) {
103
- throw new Error(`ledger_lock_timeout: could not acquire lock at ${path}`);
104
+ // EIGHTH FIX (2026-09-06, found by the same adversarial audit as the
105
+ // SEVENTH FIX above): this used to interpolate the full resolved
106
+ // `path` (== CAPACITY_ATTEST_DATA_DIR + "/claims.jsonl.lock") into the
107
+ // thrown message. That propagates unchanged through appendClaim() ->
108
+ // recordDelivery()'s `{ok:false, reason: e.message}` -> the MCP
109
+ // tool's error text (index.ts's errorResult) — a caller who simply
110
+ // triggers ordinary lock contention (trivial: a few concurrent
111
+ // record_delivery calls) gets the server's absolute filesystem path
112
+ // handed back, which on a real deployment can reveal the install
113
+ // location and, on Windows, the operating user's name. No caller
114
+ // needs that path to understand or retry the failure.
115
+ throw new Error("ledger_lock_timeout: could not acquire the ledger lock in time");
104
116
  }
105
117
  // Non-blocking backoff: await a real timer instead of spinning, so the
106
118
  // event loop stays free to process other work (timers, other
@@ -387,8 +399,34 @@ async function resyncFromDisk(file) {
387
399
  const line = lines[i];
388
400
  try {
389
401
  const claim = DeliveryClaimSchema.parse(JSON.parse(line));
390
- decorated.push({ claim, ts: timestampMs(claim) });
391
- claimIdSet.add(claim.claimId.toLowerCase());
402
+ // SEVENTH FIX (2026-09-06, found by an adversarial audit): until this
403
+ // fix, a line only had to match DeliveryClaimSchema's SHAPE (claimId a
404
+ // 0x+64-hex string, signature a 0x+130-hex string — see schema.ts's
405
+ // claimIdField/signatureField, both plain regexes) to be accepted into
406
+ // the cache and served back out through get_delivery_history. Neither
407
+ // claimId (does it really hash the claim's own content?) nor signature
408
+ // (does it really recover to buyerAddress?) was ever recomputed on
409
+ // this READ path — only appendClaim()'s caller (recordDelivery() in
410
+ // tools.ts) verifies before writing. That is airtight for claims that
411
+ // only ever arrive via record_delivery, but this ledger's own header
412
+ // comment documents a deployment shape this package is explicitly
413
+ // built for — multiple OS processes sharing one
414
+ // CAPACITY_ATTEST_DATA_DIR — where nothing stops a second writer (or a
415
+ // corrupted/hand-edited file) from appending a well-shaped but entirely
416
+ // fabricated line directly to claims.jsonl, bypassing recordDelivery()
417
+ // and its verifyClaim() gate completely. Before this fix such a line
418
+ // would resync into the cache and get returned as if genuine,
419
+ // contradicting both get_delivery_history's own tool description
420
+ // ("every SIGNATURE-VERIFIED delivery claim") and DECISIONS.md D-006's
421
+ // reasoning, which assumed authenticity of every shown claim was never
422
+ // in question — it was, on this exact path. Fix: reuse the same
423
+ // verifyClaim() the write path already trusts, and treat a claim that
424
+ // fails it exactly like a corrupt/truncated line below — silently
425
+ // excluded, ledger stays readable, no new error surface.
426
+ if (verifyClaim(claim).ok) {
427
+ decorated.push({ claim, ts: timestampMs(claim) });
428
+ claimIdSet.add(claim.claimId.toLowerCase());
429
+ }
392
430
  }
393
431
  catch {
394
432
  // A corrupt/partial line (e.g. a truncated write) must not take down
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}