agent-passport-system 4.5.0 → 5.0.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.
- package/dist/src/adapters/a2a.d.ts +10 -2
- package/dist/src/adapters/a2a.d.ts.map +1 -1
- package/dist/src/adapters/a2a.js +13 -6
- package/dist/src/adapters/a2a.js.map +1 -1
- package/dist/src/adapters/crewai.d.ts +19 -0
- package/dist/src/adapters/crewai.d.ts.map +1 -1
- package/dist/src/adapters/crewai.js +5 -5
- package/dist/src/adapters/crewai.js.map +1 -1
- package/dist/src/adapters/gonka.d.ts +19 -0
- package/dist/src/adapters/gonka.d.ts.map +1 -1
- package/dist/src/adapters/gonka.js +5 -5
- package/dist/src/adapters/gonka.js.map +1 -1
- package/dist/src/adapters/langchain.d.ts +19 -0
- package/dist/src/adapters/langchain.d.ts.map +1 -1
- package/dist/src/adapters/langchain.js +5 -5
- package/dist/src/adapters/langchain.js.map +1 -1
- package/dist/src/adapters/mcp.d.ts +19 -0
- package/dist/src/adapters/mcp.d.ts.map +1 -1
- package/dist/src/adapters/mcp.js +5 -5
- package/dist/src/adapters/mcp.js.map +1 -1
- package/dist/src/cli/index.js +47 -8
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contract.d.ts +60 -2
- package/dist/src/contract.d.ts.map +1 -1
- package/dist/src/contract.js +78 -6
- package/dist/src/contract.js.map +1 -1
- package/dist/src/core/agora.d.ts +21 -0
- package/dist/src/core/agora.d.ts.map +1 -1
- package/dist/src/core/agora.js +47 -3
- package/dist/src/core/agora.js.map +1 -1
- package/dist/src/core/aps-txt.d.ts +28 -6
- package/dist/src/core/aps-txt.d.ts.map +1 -1
- package/dist/src/core/aps-txt.js +52 -13
- package/dist/src/core/aps-txt.js.map +1 -1
- package/dist/src/core/attribution.d.ts +23 -1
- package/dist/src/core/attribution.d.ts.map +1 -1
- package/dist/src/core/attribution.js +60 -34
- package/dist/src/core/attribution.js.map +1 -1
- package/dist/src/core/delegation.d.ts +49 -4
- package/dist/src/core/delegation.d.ts.map +1 -1
- package/dist/src/core/delegation.js +90 -23
- package/dist/src/core/delegation.js.map +1 -1
- package/dist/src/core/governance.d.ts +1 -1
- package/dist/src/core/governance.d.ts.map +1 -1
- package/dist/src/core/governance.js +33 -4
- package/dist/src/core/governance.js.map +1 -1
- package/dist/src/crypto/ed25519-admissibility.d.ts +13 -0
- package/dist/src/crypto/ed25519-admissibility.d.ts.map +1 -0
- package/dist/src/crypto/ed25519-admissibility.js +191 -0
- package/dist/src/crypto/ed25519-admissibility.js.map +1 -0
- package/dist/src/crypto/keys.d.ts +11 -0
- package/dist/src/crypto/keys.d.ts.map +1 -1
- package/dist/src/crypto/keys.js +21 -1
- package/dist/src/crypto/keys.js.map +1 -1
- package/dist/src/index.d.ts +10 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/agora.d.ts +9 -0
- package/dist/src/types/agora.d.ts.map +1 -1
- package/dist/src/types/governance.d.ts +30 -0
- package/dist/src/types/governance.d.ts.map +1 -1
- package/dist/src/types/governance.js +19 -1
- package/dist/src/types/governance.js.map +1 -1
- package/dist/src/types/passport.d.ts +16 -0
- package/dist/src/types/passport.d.ts.map +1 -1
- package/dist/src/types/passport.js.map +1 -1
- package/dist/src/v2/credential-check-policy/check.d.ts +9 -0
- package/dist/src/v2/credential-check-policy/check.d.ts.map +1 -1
- package/dist/src/v2/credential-check-policy/check.js +1 -1
- package/dist/src/v2/credential-check-policy/check.js.map +1 -1
- package/dist/src/v2/instruction-provenance/verify.d.ts.map +1 -1
- package/dist/src/v2/instruction-provenance/verify.js +12 -14
- package/dist/src/v2/instruction-provenance/verify.js.map +1 -1
- package/dist/src/v2/offline-verifier/middleware.d.ts +45 -7
- package/dist/src/v2/offline-verifier/middleware.d.ts.map +1 -1
- package/dist/src/v2/offline-verifier/middleware.js +40 -14
- package/dist/src/v2/offline-verifier/middleware.js.map +1 -1
- package/dist/src/v2/sub-delegate-advisor.d.ts +4 -0
- package/dist/src/v2/sub-delegate-advisor.d.ts.map +1 -1
- package/dist/src/v2/sub-delegate-advisor.js +13 -5
- package/dist/src/v2/sub-delegate-advisor.js.map +1 -1
- package/dist/src/verification/trust-anchors.d.ts +31 -0
- package/dist/src/verification/trust-anchors.d.ts.map +1 -0
- package/dist/src/verification/trust-anchors.js +97 -0
- package/dist/src/verification/trust-anchors.js.map +1 -0
- package/dist/src/verification/trust-posture.d.ts +45 -0
- package/dist/src/verification/trust-posture.d.ts.map +1 -0
- package/dist/src/verification/trust-posture.js +88 -0
- package/dist/src/verification/trust-posture.js.map +1 -0
- package/dist/src/verification/verify.d.ts +17 -3
- package/dist/src/verification/verify.d.ts.map +1 -1
- package/dist/src/verification/verify.js +48 -9
- package/dist/src/verification/verify.js.map +1 -1
- package/package.json +9 -5
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* This module is a pure mapping layer. Runtime governance (the stateful
|
|
8
8
|
* lifecycle hook) lives in the gateway.
|
|
9
9
|
*/
|
|
10
|
+
import { type TrustPostureOptions } from '../verification/trust-posture.js';
|
|
10
11
|
import type { A2AAgentCard } from '../types/a2a.js';
|
|
11
12
|
import type { Delegation, SignedPassport } from '../types/passport.js';
|
|
12
13
|
/** Derive APS-compatible scopes from an A2A Agent Card. */
|
|
@@ -53,8 +54,15 @@ export declare function a2aCardToPassportMeta(card: A2AAgentCardV2): {
|
|
|
53
54
|
agentId: string;
|
|
54
55
|
metadata: Record<string, unknown>;
|
|
55
56
|
};
|
|
56
|
-
/** Verify an A2A agent has valid APS identity
|
|
57
|
-
|
|
57
|
+
/** Verify an A2A agent has valid APS identity.
|
|
58
|
+
*
|
|
59
|
+
* Identity here means the passport verifies AND this verifier has a stated
|
|
60
|
+
* basis for accepting whoever stands behind it. Without `opts`, a self-signed
|
|
61
|
+
* passport is REFUSED: it used to return { valid: true, errors: [] } for a
|
|
62
|
+
* passport an attacker minted for themselves, which is a claim of identity
|
|
63
|
+
* rather than a verification of one. Pass `trustedIssuers`, or
|
|
64
|
+
* `allowSelfSigned: true` on a closed network. */
|
|
65
|
+
export declare function verifyA2AIdentity(card: A2AAgentCardV2, passport: SignedPassport, opts?: TrustPostureOptions): {
|
|
58
66
|
valid: boolean;
|
|
59
67
|
errors: string[];
|
|
60
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/adapters/a2a.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/adapters/a2a.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEtE,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAW5D;AAOD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;QAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;KACjC,CAAA;IACD,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;QACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KACvB,CAAC,CAAA;IACF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC3D;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;IACL,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IACjC,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;CAC9C,GACA,cAAc,CAgChB;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAaxD;AAED;;;;;;;mDAOmD;AACnD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,mBAAwB,GAC7B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBtC;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAChC,MAAM,EAAE,CAGV;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,cAAc,CAahB"}
|
package/dist/src/adapters/a2a.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* This module is a pure mapping layer. Runtime governance (the stateful
|
|
10
10
|
* lifecycle hook) lives in the gateway.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { checkPassportTrustPosture } from '../verification/trust-posture.js';
|
|
13
13
|
/** Derive APS-compatible scopes from an A2A Agent Card. */
|
|
14
14
|
export function deriveA2AScopes(card) {
|
|
15
15
|
const scopes = [];
|
|
@@ -73,12 +73,19 @@ export function a2aCardToPassportMeta(card) {
|
|
|
73
73
|
},
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
|
-
/** Verify an A2A agent has valid APS identity
|
|
77
|
-
|
|
76
|
+
/** Verify an A2A agent has valid APS identity.
|
|
77
|
+
*
|
|
78
|
+
* Identity here means the passport verifies AND this verifier has a stated
|
|
79
|
+
* basis for accepting whoever stands behind it. Without `opts`, a self-signed
|
|
80
|
+
* passport is REFUSED: it used to return { valid: true, errors: [] } for a
|
|
81
|
+
* passport an attacker minted for themselves, which is a claim of identity
|
|
82
|
+
* rather than a verification of one. Pass `trustedIssuers`, or
|
|
83
|
+
* `allowSelfSigned: true` on a closed network. */
|
|
84
|
+
export function verifyA2AIdentity(card, passport, opts = {}) {
|
|
78
85
|
const errors = [];
|
|
79
|
-
const pc =
|
|
80
|
-
if (!pc.
|
|
81
|
-
errors.push(
|
|
86
|
+
const pc = checkPassportTrustPosture(passport, opts);
|
|
87
|
+
if (!pc.ok)
|
|
88
|
+
errors.push(pc.detail ?? 'Passport rejected at the gate');
|
|
82
89
|
const p = passport.passport;
|
|
83
90
|
if (card.name !== p.agentName && card.name !== p.agentId) {
|
|
84
91
|
errors.push(`Card name "${card.name}" does not match passport agentName "${p.agentName}" or agentId "${p.agentId}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../../src/adapters/a2a.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC;;;;;;;;GAQG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../../src/adapters/a2a.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* spend tracking, gateway reporting) lives in the gateway — callers that
|
|
6
6
|
* need those behaviours supply them via the `onReceipt` / `onDenied` hooks.
|
|
7
7
|
*/
|
|
8
|
+
import { type RevocationCheckOptions } from '../core/delegation.js';
|
|
8
9
|
import type { Delegation, ActionReceipt, SignedPassport } from '../types/passport.js';
|
|
9
10
|
export interface CrewTask {
|
|
10
11
|
description: string;
|
|
@@ -22,6 +23,24 @@ export interface CrewGovernanceConfig {
|
|
|
22
23
|
agent: string;
|
|
23
24
|
reason: string;
|
|
24
25
|
}) => void;
|
|
26
|
+
/** Trust anchors for this gate: issuer public keys whose countersignature
|
|
27
|
+
* is accepted. A NON-EMPTY list requires a valid countersignature from one
|
|
28
|
+
* of them. An empty list, or omitting it, means this gate holds no
|
|
29
|
+
* anchors; it does not mean "trust anyone". */
|
|
30
|
+
trustedIssuers?: string[];
|
|
31
|
+
/** Explicit wildcard trust: admit a passport whose only authority is its
|
|
32
|
+
* own signature. Required to admit a self-signed credential, because a
|
|
33
|
+
* signature that verifies under a key the passport itself supplied is not
|
|
34
|
+
* an authorization by a trusted issuer. Default false. */
|
|
35
|
+
allowSelfSigned?: boolean;
|
|
36
|
+
/** Revocation posture applied to the delegation check before every
|
|
37
|
+
* governed call. This adapter is an execution gate: it verifies the
|
|
38
|
+
* delegation immediately before the tool runs, which is exactly where a
|
|
39
|
+
* caller who will not act on unknown revocation state says so. Pass
|
|
40
|
+
* { revocationCheckPolicy: 'fail_closed', cachedRevocationState } to
|
|
41
|
+
* refuse when revocation evidence is absent or stale. Omitted leaves the
|
|
42
|
+
* previous behaviour, signature and expiry only. */
|
|
43
|
+
revocation?: RevocationCheckOptions;
|
|
25
44
|
}
|
|
26
45
|
export interface GovernedTaskResult {
|
|
27
46
|
output: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crewai.d.ts","sourceRoot":"","sources":["../../../src/adapters/crewai.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"crewai.d.ts","sourceRoot":"","sources":["../../../src/adapters/crewai.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAItG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErF,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1E;;;oDAGgD;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB;;;+DAG2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;yDAMqD;IACrD,UAAU,CAAC,EAAE,sBAAsB,CAAA;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,aAAa,CAAA;IACtB,YAAY,EAAE,aAAa,EAAE,CAAA;CAC9B;AAmBD,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAQzD;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,oBAAoB,GAC3B;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiBxD;AAED,0CAA0C;AAC1C,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,EAC7C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,kBAAkB,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAyBxF"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* need those behaviours supply them via the `onReceipt` / `onDenied` hooks.
|
|
9
9
|
*/
|
|
10
10
|
import { scopeAuthorizes, verifyDelegation } from '../core/delegation.js';
|
|
11
|
-
import {
|
|
11
|
+
import { checkPassportTrustPosture } from '../verification/trust-posture.js';
|
|
12
12
|
import { sign } from '../crypto/keys.js';
|
|
13
13
|
import { canonicalizeForWrite } from '../core/canonical.js';
|
|
14
14
|
function buildCrewReceipt(agentId, delegationId, privateKey, target, scope, status, summary) {
|
|
@@ -38,10 +38,10 @@ export function crewTaskToScopes(task) {
|
|
|
38
38
|
export function verifyCrewMember(agentName, task, config) {
|
|
39
39
|
const scopes = crewTaskToScopes(task);
|
|
40
40
|
const mainScope = scopes[0];
|
|
41
|
-
const pc =
|
|
42
|
-
if (!pc.
|
|
43
|
-
return { authorized: false, reason:
|
|
44
|
-
const dc = verifyDelegation(config.delegation);
|
|
41
|
+
const pc = checkPassportTrustPosture(config.passport, config);
|
|
42
|
+
if (!pc.ok)
|
|
43
|
+
return { authorized: false, reason: pc.detail ?? 'Passport rejected at the gate', scope: mainScope };
|
|
44
|
+
const dc = verifyDelegation(config.delegation, config.revocation);
|
|
45
45
|
if (!dc.valid)
|
|
46
46
|
return { authorized: false, reason: `Delegation invalid: ${dc.errors.join(', ')}`, scope: mainScope };
|
|
47
47
|
for (const scope of scopes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crewai.js","sourceRoot":"","sources":["../../../src/adapters/crewai.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"crewai.js","sourceRoot":"","sources":["../../../src/adapters/crewai.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* No Gonka SDK dependency. All types are local interfaces.
|
|
9
9
|
*/
|
|
10
|
+
import { type RevocationCheckOptions } from '../core/delegation.js';
|
|
10
11
|
import type { Delegation, ActionReceipt, SignedPassport } from '../types/passport.js';
|
|
11
12
|
export interface GonkaInferenceRequest {
|
|
12
13
|
model: string;
|
|
@@ -27,6 +28,24 @@ export interface GonkaHostConfig {
|
|
|
27
28
|
host: string;
|
|
28
29
|
reason: string;
|
|
29
30
|
}) => void;
|
|
31
|
+
/** Trust anchors for this gate: issuer public keys whose countersignature
|
|
32
|
+
* is accepted. A NON-EMPTY list requires a valid countersignature from one
|
|
33
|
+
* of them. An empty list, or omitting it, means this gate holds no
|
|
34
|
+
* anchors; it does not mean "trust anyone". */
|
|
35
|
+
trustedIssuers?: string[];
|
|
36
|
+
/** Explicit wildcard trust: admit a passport whose only authority is its
|
|
37
|
+
* own signature. Required to admit a self-signed credential, because a
|
|
38
|
+
* signature that verifies under a key the passport itself supplied is not
|
|
39
|
+
* an authorization by a trusted issuer. Default false. */
|
|
40
|
+
allowSelfSigned?: boolean;
|
|
41
|
+
/** Revocation posture applied to the delegation check before every
|
|
42
|
+
* governed call. This adapter is an execution gate: it verifies the
|
|
43
|
+
* delegation immediately before the tool runs, which is exactly where a
|
|
44
|
+
* caller who will not act on unknown revocation state says so. Pass
|
|
45
|
+
* { revocationCheckPolicy: 'fail_closed', cachedRevocationState } to
|
|
46
|
+
* refuse when revocation evidence is absent or stale. Omitted leaves the
|
|
47
|
+
* previous behaviour, signature and expiry only. */
|
|
48
|
+
revocation?: RevocationCheckOptions;
|
|
30
49
|
}
|
|
31
50
|
export interface GonkaInferenceReceipt {
|
|
32
51
|
receipt: ActionReceipt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gonka.d.ts","sourceRoot":"","sources":["../../../src/adapters/gonka.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"gonka.d.ts","sourceRoot":"","sources":["../../../src/adapters/gonka.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { createHash } from 'node:crypto';
|
|
13
13
|
import { scopeAuthorizes, verifyDelegation } from '../core/delegation.js';
|
|
14
|
-
import {
|
|
14
|
+
import { checkPassportTrustPosture } from '../verification/trust-posture.js';
|
|
15
15
|
import { sign } from '../crypto/keys.js';
|
|
16
16
|
import { canonicalizeForWrite } from '../core/canonical.js';
|
|
17
17
|
// ── Helpers ──
|
|
@@ -40,11 +40,11 @@ function getEpochKey(agentId, epochId) {
|
|
|
40
40
|
/** Verify a host has authority to serve inference for a model */
|
|
41
41
|
export function verifyGonkaHost(hostAddress, model, config) {
|
|
42
42
|
const scope = `inference:serve:${model}`;
|
|
43
|
-
const pc =
|
|
44
|
-
if (!pc.
|
|
45
|
-
return { authorized: false, reason:
|
|
43
|
+
const pc = checkPassportTrustPosture(config.passport, config);
|
|
44
|
+
if (!pc.ok) {
|
|
45
|
+
return { authorized: false, reason: pc.detail ?? 'Passport rejected at the gate', scope, hostAddress, model };
|
|
46
46
|
}
|
|
47
|
-
const dc = verifyDelegation(config.delegation);
|
|
47
|
+
const dc = verifyDelegation(config.delegation, config.revocation);
|
|
48
48
|
if (!dc.valid) {
|
|
49
49
|
return { authorized: false, reason: `Delegation invalid: ${dc.errors.join(', ')}`, scope, hostAddress, model };
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gonka.js","sourceRoot":"","sources":["../../../src/adapters/gonka.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"gonka.js","sourceRoot":"","sources":["../../../src/adapters/gonka.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* audit trail, gateway reporting) lives in the gateway — callers that need those
|
|
6
6
|
* behaviours supply them via the `onReceipt` / `onDenied` hooks.
|
|
7
7
|
*/
|
|
8
|
+
import { type RevocationCheckOptions } from '../core/delegation.js';
|
|
8
9
|
import type { Delegation, ActionReceipt, SignedPassport } from '../types/passport.js';
|
|
9
10
|
export interface LangChainToolCall {
|
|
10
11
|
name: string;
|
|
@@ -30,6 +31,24 @@ export interface LangChainGovernanceConfig {
|
|
|
30
31
|
tool: string;
|
|
31
32
|
reason: string;
|
|
32
33
|
}) => void;
|
|
34
|
+
/** Trust anchors for this gate: issuer public keys whose countersignature
|
|
35
|
+
* is accepted. A NON-EMPTY list requires a valid countersignature from one
|
|
36
|
+
* of them. An empty list, or omitting it, means this gate holds no
|
|
37
|
+
* anchors; it does not mean "trust anyone". */
|
|
38
|
+
trustedIssuers?: string[];
|
|
39
|
+
/** Explicit wildcard trust: admit a passport whose only authority is its
|
|
40
|
+
* own signature. Required to admit a self-signed credential, because a
|
|
41
|
+
* signature that verifies under a key the passport itself supplied is not
|
|
42
|
+
* an authorization by a trusted issuer. Default false. */
|
|
43
|
+
allowSelfSigned?: boolean;
|
|
44
|
+
/** Revocation posture applied to the delegation check before every
|
|
45
|
+
* governed call. This adapter is an execution gate: it verifies the
|
|
46
|
+
* delegation immediately before the tool runs, which is exactly where a
|
|
47
|
+
* caller who will not act on unknown revocation state says so. Pass
|
|
48
|
+
* { revocationCheckPolicy: 'fail_closed', cachedRevocationState } to
|
|
49
|
+
* refuse when revocation evidence is absent or stale. Omitted leaves the
|
|
50
|
+
* previous behaviour, signature and expiry only. */
|
|
51
|
+
revocation?: RevocationCheckOptions;
|
|
33
52
|
}
|
|
34
53
|
/** Map LangChain tool name to APS scope */
|
|
35
54
|
export declare function langchainToolToScope(toolName: string, scopeMapping?: Record<string, string>): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../../src/adapters/langchain.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../../src/adapters/langchain.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAItG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC3D;;;oDAGgD;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB;;;+DAG2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;yDAMqD;IACrD,UAAU,CAAC,EAAE,sBAAsB,CAAA;CACpC;AAmBD,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAGR;AAED,0CAA0C;AAC1C,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EAC5D,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,CAsChD;AAED,mDAAmD;AACnD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,UAC3D,iBAAiB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,oDAE9F"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* behaviours supply them via the `onReceipt` / `onDenied` hooks.
|
|
9
9
|
*/
|
|
10
10
|
import { scopeAuthorizes, verifyDelegation } from '../core/delegation.js';
|
|
11
|
-
import {
|
|
11
|
+
import { checkPassportTrustPosture } from '../verification/trust-posture.js';
|
|
12
12
|
import { sign } from '../crypto/keys.js';
|
|
13
13
|
import { canonicalizeForWrite } from '../core/canonical.js';
|
|
14
14
|
function buildLCReceipt(agentId, delegationId, privateKey, toolName, scope, status, summary) {
|
|
@@ -35,9 +35,9 @@ export async function governLangChainTool(call, execute, config) {
|
|
|
35
35
|
const scope = langchainToolToScope(call.name, config.scopeMapping);
|
|
36
36
|
const { passport, delegation, privateKey } = config;
|
|
37
37
|
// Passport check
|
|
38
|
-
const pc =
|
|
39
|
-
if (!pc.
|
|
40
|
-
const reason =
|
|
38
|
+
const pc = checkPassportTrustPosture(passport, config);
|
|
39
|
+
if (!pc.ok) {
|
|
40
|
+
const reason = pc.detail ?? 'Passport rejected at the gate';
|
|
41
41
|
if (config.onDenied)
|
|
42
42
|
config.onDenied({ tool: call.name, reason });
|
|
43
43
|
const receipt = buildLCReceipt(passport.passport.agentId, delegation.delegationId, privateKey, call.name, scope, 'failure', reason);
|
|
@@ -46,7 +46,7 @@ export async function governLangChainTool(call, execute, config) {
|
|
|
46
46
|
return { denied: true, reason, receipt };
|
|
47
47
|
}
|
|
48
48
|
// Delegation check
|
|
49
|
-
const dc = verifyDelegation(delegation);
|
|
49
|
+
const dc = verifyDelegation(delegation, config.revocation);
|
|
50
50
|
if (!dc.valid) {
|
|
51
51
|
const reason = `Delegation invalid: ${dc.errors.join(', ')}`;
|
|
52
52
|
if (config.onDenied)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../../src/adapters/langchain.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../../src/adapters/langchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Works with any MCP server, any client. No MCP SDK dependency.
|
|
5
5
|
* Wraps tool calls with APS delegation checks and signed receipts.
|
|
6
6
|
*/
|
|
7
|
+
import { type RevocationCheckOptions } from '../core/delegation.js';
|
|
7
8
|
import type { Delegation, ActionReceipt, SignedPassport } from '../types/passport.js';
|
|
8
9
|
export interface MCPToolCall {
|
|
9
10
|
name: string;
|
|
@@ -21,6 +22,24 @@ export interface MCPGovernanceConfig {
|
|
|
21
22
|
tool: string;
|
|
22
23
|
reason: string;
|
|
23
24
|
}) => void;
|
|
25
|
+
/** Trust anchors for this gate: issuer public keys whose countersignature
|
|
26
|
+
* is accepted. A NON-EMPTY list requires a valid countersignature from one
|
|
27
|
+
* of them. An empty list, or omitting it, means this gate holds no
|
|
28
|
+
* anchors; it does not mean "trust anyone". */
|
|
29
|
+
trustedIssuers?: string[];
|
|
30
|
+
/** Explicit wildcard trust: admit a passport whose only authority is its
|
|
31
|
+
* own signature. Required to admit a self-signed credential, because a
|
|
32
|
+
* signature that verifies under a key the passport itself supplied is not
|
|
33
|
+
* an authorization by a trusted issuer. Default false. */
|
|
34
|
+
allowSelfSigned?: boolean;
|
|
35
|
+
/** Revocation posture applied to the delegation check before every
|
|
36
|
+
* governed call. This adapter is an execution gate: it verifies the
|
|
37
|
+
* delegation immediately before the tool runs, which is exactly where a
|
|
38
|
+
* caller who will not act on unknown revocation state says so. Pass
|
|
39
|
+
* { revocationCheckPolicy: 'fail_closed', cachedRevocationState } to
|
|
40
|
+
* refuse when revocation evidence is absent or stale. Omitted leaves the
|
|
41
|
+
* previous behaviour, signature and expiry only. */
|
|
42
|
+
revocation?: RevocationCheckOptions;
|
|
24
43
|
}
|
|
25
44
|
/** Derive APS scope from MCP tool call */
|
|
26
45
|
export declare function mcpToolToScope(call: MCPToolCall, config: Pick<MCPGovernanceConfig, 'scopePrefix' | 'destructiveTools'>): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAItG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIrF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC3D;;;oDAGgD;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB;;;+DAG2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;yDAMqD;IACrD,UAAU,CAAC,EAAE,sBAAsB,CAAA;CACpC;AA+BD,0CAA0C;AAC1C,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,GAAG,kBAAkB,CAAC,GACpE,MAAM,CAMR;AAED,oCAAoC;AACpC,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EAC5D,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAkCjH;AAED,wDAAwD;AACxD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,mBAAmB,UAC1D,WAAW,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC;YAtCpE,OAAO;aAAW,aAAa;;YAAe,IAAI;YAAU,MAAM;aAAW,aAAa;GAwC9G"}
|
package/dist/src/adapters/mcp.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Wraps tool calls with APS delegation checks and signed receipts.
|
|
8
8
|
*/
|
|
9
9
|
import { scopeAuthorizes, verifyDelegation } from '../core/delegation.js';
|
|
10
|
-
import {
|
|
10
|
+
import { checkPassportTrustPosture } from '../verification/trust-posture.js';
|
|
11
11
|
import { sign } from '../crypto/keys.js';
|
|
12
12
|
import { canonicalizeForWrite } from '../core/canonical.js';
|
|
13
13
|
// ── Helpers ──
|
|
@@ -43,9 +43,9 @@ export function mcpToolToScope(call, config) {
|
|
|
43
43
|
export async function governMCPToolCall(call, execute, config) {
|
|
44
44
|
const scope = mcpToolToScope(call, config);
|
|
45
45
|
const { passport, delegation, privateKey } = config;
|
|
46
|
-
const pc =
|
|
47
|
-
if (!pc.
|
|
48
|
-
const reason =
|
|
46
|
+
const pc = checkPassportTrustPosture(passport, config);
|
|
47
|
+
if (!pc.ok) {
|
|
48
|
+
const reason = pc.detail ?? 'Passport rejected at the gate';
|
|
49
49
|
if (config.onDenied)
|
|
50
50
|
config.onDenied({ tool: call.name, reason });
|
|
51
51
|
const receipt = buildMCPReceipt(passport.passport.agentId, delegation.delegationId, privateKey, call.name, scope, 'failure', reason);
|
|
@@ -53,7 +53,7 @@ export async function governMCPToolCall(call, execute, config) {
|
|
|
53
53
|
config.onReceipt(receipt);
|
|
54
54
|
return { denied: true, reason, receipt };
|
|
55
55
|
}
|
|
56
|
-
const dc = verifyDelegation(delegation);
|
|
56
|
+
const dc = verifyDelegation(delegation, config.revocation);
|
|
57
57
|
if (!dc.valid) {
|
|
58
58
|
const reason = `Delegation invalid: ${dc.errors.join(', ')}`;
|
|
59
59
|
if (config.onDenied)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -513,8 +513,11 @@ function fallbackManual(owner, repo, json, agentName) {
|
|
|
513
513
|
function cmdVerify() {
|
|
514
514
|
const file = args[1];
|
|
515
515
|
if (!file) {
|
|
516
|
-
console.error('Usage: passport verify <passport.json>');
|
|
517
|
-
console.error(' passport verify <agent.json>');
|
|
516
|
+
console.error('Usage: passport verify <passport.json> [--trusted-issuer <hex> ...]');
|
|
517
|
+
console.error(' passport verify <agent.json> [--trusted-issuer <hex> ...]');
|
|
518
|
+
console.error('');
|
|
519
|
+
console.error('Without --trusted-issuer nothing external vouches for the passport;');
|
|
520
|
+
console.error('the report says SELF-SIGNED rather than TRUSTED.');
|
|
518
521
|
process.exit(1);
|
|
519
522
|
}
|
|
520
523
|
if (!existsSync(file)) {
|
|
@@ -525,13 +528,30 @@ function cmdVerify() {
|
|
|
525
528
|
// Support both full agent files and passport-only files
|
|
526
529
|
const passport = data.passport || data;
|
|
527
530
|
const attestation = data.attestation || null;
|
|
528
|
-
|
|
531
|
+
// --trusted-issuer may be repeated or comma-separated. Without it there is
|
|
532
|
+
// no trust root to check against and the report says so instead of
|
|
533
|
+
// printing TRUSTED over a passport that vouches for itself.
|
|
534
|
+
const trustedIssuers = (getFlags('--trusted-issuer'))
|
|
535
|
+
.flatMap(v => v.split(','))
|
|
536
|
+
.map(v => v.trim())
|
|
537
|
+
.filter(v => v.length > 0);
|
|
538
|
+
const trust = verifySocialContract(passport, attestation, { trustedIssuers });
|
|
539
|
+
// Four states, not two. The passport's own soundness and the presence of a
|
|
540
|
+
// trust root are separate axes, so a passport that verifies is never
|
|
541
|
+
// reported as a failure just because no issuer vouched for it.
|
|
529
542
|
console.log('');
|
|
530
|
-
if (trust.
|
|
531
|
-
console.log('
|
|
543
|
+
if (!trust.structurallyValid) {
|
|
544
|
+
console.log('❌ DOES NOT VERIFY');
|
|
545
|
+
}
|
|
546
|
+
else if (trust.issuerTrusted) {
|
|
547
|
+
console.log('✅ TRUSTED (countersigned by a trusted issuer)');
|
|
548
|
+
}
|
|
549
|
+
else if (trust.issuerChecked) {
|
|
550
|
+
console.log('❌ NOT TRUSTED — the passport verifies, but no supplied issuer countersigned it');
|
|
532
551
|
}
|
|
533
552
|
else {
|
|
534
|
-
console.log('
|
|
553
|
+
console.log('⚠️ SELF-SIGNED — verifies, but no trusted issuer vouches for it');
|
|
554
|
+
console.log(' Pass --trusted-issuer <issuer-public-key> to check against a trust root.');
|
|
535
555
|
}
|
|
536
556
|
console.log('');
|
|
537
557
|
console.log(` Identity: ${trust.identity.valid ? '✓ valid' : '✗ INVALID'}`);
|
|
@@ -539,6 +559,11 @@ function cmdVerify() {
|
|
|
539
559
|
for (const e of trust.identity.errors)
|
|
540
560
|
console.log(` ✗ ${e}`);
|
|
541
561
|
}
|
|
562
|
+
for (const w of trust.identity.warnings)
|
|
563
|
+
console.log(` ! ${w}`);
|
|
564
|
+
console.log(` Issuer: ${trust.issuerTrusted ? '✓ trusted' : trust.issuerChecked ? '✗ NOT TRUSTED' : '— no trust root supplied'}`);
|
|
565
|
+
for (const e of trust.issuerErrors)
|
|
566
|
+
console.log(` ✗ ${e}`);
|
|
542
567
|
if (trust.values) {
|
|
543
568
|
console.log(` Values: ${trust.values.valid ? '✓ attested' : '✗ INVALID'}`);
|
|
544
569
|
if (trust.values.errors.length) {
|
|
@@ -1007,7 +1032,11 @@ function cmdAgoraRead() {
|
|
|
1007
1032
|
console.log('═'.repeat(60));
|
|
1008
1033
|
for (const msg of messages) {
|
|
1009
1034
|
const v = verifyAgoraMessage(msg, registry);
|
|
1010
|
-
|
|
1035
|
+
// Three states, not two: verified member, authentic signature from an
|
|
1036
|
+
// author the registry does not list, and a signature that did not verify.
|
|
1037
|
+
// A message from an unlisted author is no longer `valid`, so the middle
|
|
1038
|
+
// state now reads off signatureValid rather than off valid.
|
|
1039
|
+
const verifyIcon = !v.signatureValid ? '❌' : (v.knownAgent ? '✅' : '⚠️');
|
|
1011
1040
|
const typeIcon = msg.type === 'announcement' ? '📢' :
|
|
1012
1041
|
msg.type === 'proposal' ? '📋' :
|
|
1013
1042
|
msg.type === 'request' ? '🔧' :
|
|
@@ -1139,7 +1168,7 @@ function cmdHelp() {
|
|
|
1139
1168
|
--capabilities <cap1,cap2>
|
|
1140
1169
|
|
|
1141
1170
|
verify Verify another agent's passport
|
|
1142
|
-
passport verify <agent.json or passport.json>
|
|
1171
|
+
passport verify <agent.json or passport.json> [--trusted-issuer <hex>]
|
|
1143
1172
|
|
|
1144
1173
|
verify-bundle Verify an evidence bundle: passport verify-bundle <bundle.json> [--json] [--strict]
|
|
1145
1174
|
|
|
@@ -1181,6 +1210,16 @@ function getFlag(flag) {
|
|
|
1181
1210
|
return undefined;
|
|
1182
1211
|
return args[idx + 1];
|
|
1183
1212
|
}
|
|
1213
|
+
/** Every value given for a repeatable flag, in argv order. getFlag returns
|
|
1214
|
+
* only the first, which silently drops the rest of a trust-anchor list. */
|
|
1215
|
+
function getFlags(flag) {
|
|
1216
|
+
const values = [];
|
|
1217
|
+
for (let i = 0; i < args.length; i++) {
|
|
1218
|
+
if (args[i] === flag && i + 1 < args.length)
|
|
1219
|
+
values.push(args[i + 1]);
|
|
1220
|
+
}
|
|
1221
|
+
return values;
|
|
1222
|
+
}
|
|
1184
1223
|
/**
|
|
1185
1224
|
* Read an authority-bearing numeric flag as exactly one of three outcomes: ABSENT
|
|
1186
1225
|
* (the caller applies its own default), a VALID number, or a TYPED ERROR that exits
|