@agenticprimitives/agent-profile 1.0.0-alpha.22 → 1.0.0-alpha.24

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.
Files changed (85) hide show
  1. package/README.md +54 -6
  2. package/dist/a2a/binding.d.ts +99 -0
  3. package/dist/a2a/binding.d.ts.map +1 -0
  4. package/dist/a2a/binding.js +142 -0
  5. package/dist/a2a/binding.js.map +1 -0
  6. package/dist/a2a/canonical.d.ts +31 -0
  7. package/dist/a2a/canonical.d.ts.map +1 -0
  8. package/dist/a2a/canonical.js +43 -0
  9. package/dist/a2a/canonical.js.map +1 -0
  10. package/dist/a2a/field-binding.d.ts +125 -0
  11. package/dist/a2a/field-binding.d.ts.map +1 -0
  12. package/dist/a2a/field-binding.js +242 -0
  13. package/dist/a2a/field-binding.js.map +1 -0
  14. package/dist/a2a/import.d.ts +39 -0
  15. package/dist/a2a/import.d.ts.map +1 -0
  16. package/dist/a2a/import.js +134 -0
  17. package/dist/a2a/import.js.map +1 -0
  18. package/dist/a2a/index.d.ts +13 -0
  19. package/dist/a2a/index.d.ts.map +1 -0
  20. package/dist/a2a/index.js +24 -0
  21. package/dist/a2a/index.js.map +1 -0
  22. package/dist/a2a/jws.d.ts +76 -0
  23. package/dist/a2a/jws.d.ts.map +1 -0
  24. package/dist/a2a/jws.js +186 -0
  25. package/dist/a2a/jws.js.map +1 -0
  26. package/dist/a2a/playbook-binding.d.ts +29 -0
  27. package/dist/a2a/playbook-binding.d.ts.map +1 -0
  28. package/dist/a2a/playbook-binding.js +65 -0
  29. package/dist/a2a/playbook-binding.js.map +1 -0
  30. package/dist/a2a/pointer.d.ts +13 -0
  31. package/dist/a2a/pointer.d.ts.map +1 -0
  32. package/dist/a2a/pointer.js +78 -0
  33. package/dist/a2a/pointer.js.map +1 -0
  34. package/dist/a2a/release.d.ts +77 -0
  35. package/dist/a2a/release.d.ts.map +1 -0
  36. package/dist/a2a/release.js +197 -0
  37. package/dist/a2a/release.js.map +1 -0
  38. package/dist/a2a/types.d.ts +312 -0
  39. package/dist/a2a/types.d.ts.map +1 -0
  40. package/dist/a2a/types.js +32 -0
  41. package/dist/a2a/types.js.map +1 -0
  42. package/dist/a2a/validation.d.ts +81 -0
  43. package/dist/a2a/validation.d.ts.map +1 -0
  44. package/dist/a2a/validation.js +477 -0
  45. package/dist/a2a/validation.js.map +1 -0
  46. package/dist/calls.d.ts +12 -0
  47. package/dist/calls.d.ts.map +1 -1
  48. package/dist/calls.js +16 -0
  49. package/dist/calls.js.map +1 -1
  50. package/dist/card.d.ts +12 -6
  51. package/dist/card.d.ts.map +1 -1
  52. package/dist/card.js +12 -6
  53. package/dist/card.js.map +1 -1
  54. package/dist/client.d.ts +4 -4
  55. package/dist/client.d.ts.map +1 -1
  56. package/dist/client.js +20 -2
  57. package/dist/client.js.map +1 -1
  58. package/dist/constants.d.ts +23 -1
  59. package/dist/constants.d.ts.map +1 -1
  60. package/dist/constants.js +30 -1
  61. package/dist/constants.js.map +1 -1
  62. package/dist/derived-type.d.ts +14 -0
  63. package/dist/derived-type.d.ts.map +1 -0
  64. package/dist/derived-type.js +56 -0
  65. package/dist/derived-type.js.map +1 -0
  66. package/dist/distribution.d.ts +32 -0
  67. package/dist/distribution.d.ts.map +1 -0
  68. package/dist/distribution.js +167 -0
  69. package/dist/distribution.js.map +1 -0
  70. package/dist/errors.d.ts +6 -0
  71. package/dist/errors.d.ts.map +1 -1
  72. package/dist/errors.js +11 -0
  73. package/dist/errors.js.map +1 -1
  74. package/dist/index.d.ts +7 -5
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +12 -5
  77. package/dist/index.js.map +1 -1
  78. package/dist/profile.d.ts +4 -4
  79. package/dist/profile.d.ts.map +1 -1
  80. package/dist/profile.js +12 -1
  81. package/dist/profile.js.map +1 -1
  82. package/dist/types.d.ts +104 -7
  83. package/dist/types.d.ts.map +1 -1
  84. package/package.json +13 -6
  85. package/spec.md +5 -1
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Card release lifecycle (spec 347 §3):
3
+ *
4
+ * draft → validated → approvalPending → approved → signed → published → { superseded | deprecated | revoked }
5
+ *
6
+ * A release is immutable and identified by release id AND content digest. Editing at `approved` or later
7
+ * forks a NEW draft (`forkDraft`). Superseding never erases; revocation records reason, authority, date and
8
+ * successor, and a revoked release is not projection-ready. Every function here is pure and returns a new
9
+ * object; illegal moves throw `A2ACardLifecycleError` instead of being ignored.
10
+ */
11
+ import { cardContentDigest, signedCardContentDigest } from './canonical.js';
12
+ import { draftEtag } from './field-binding.js';
13
+ import { decodeProtectedHeader } from './jws.js';
14
+ import { hasErrors, validateA2ACard } from './validation.js';
15
+ export class A2ACardLifecycleError extends Error {
16
+ from;
17
+ to;
18
+ constructor(message, from, to) {
19
+ super(message);
20
+ this.from = from;
21
+ this.to = to;
22
+ this.name = 'A2ACardLifecycleError';
23
+ }
24
+ }
25
+ /** Legal transitions. `revoked` is reachable from every non-terminal state via `revoke()`. */
26
+ export const CARD_RELEASE_TRANSITIONS = {
27
+ validated: ['approvalPending', 'revoked'],
28
+ approvalPending: ['approved', 'revoked'],
29
+ approved: ['signed', 'deprecated', 'revoked'],
30
+ signed: ['published', 'deprecated', 'revoked'],
31
+ published: ['superseded', 'deprecated', 'revoked'],
32
+ superseded: [],
33
+ deprecated: [],
34
+ revoked: [],
35
+ };
36
+ export const TERMINAL_RELEASE_STATES = new Set(['superseded', 'deprecated', 'revoked']);
37
+ /** Can a projection consume this release? Only approved-and-signed (or published) releases, never revoked. */
38
+ export function isProjectionReady(r) {
39
+ return (r.state === 'signed' || r.state === 'published') && r.signatures.length > 0 && !r.revocation;
40
+ }
41
+ export class A2ACardValidationError extends Error {
42
+ diagnostics;
43
+ constructor(diagnostics) {
44
+ super(`card has ${diagnostics.filter((d) => d.severity === 'error').length} validation error(s): ${diagnostics.filter((d) => d.severity === 'error').map((d) => d.code).join(', ')}`);
45
+ this.diagnostics = diagnostics;
46
+ this.name = 'A2ACardValidationError';
47
+ }
48
+ }
49
+ /** Freeze a draft into a `validated` release. Throws `A2ACardValidationError` when validation has errors. */
50
+ export function createRelease(draft, opts) {
51
+ const diagnostics = validateA2ACard(draft.card, {
52
+ ...opts.validation,
53
+ fieldBindings: opts.validation.fieldBindings ?? draft.fieldBindings,
54
+ extendedCardPolicyConfigured: opts.validation.extendedCardPolicyConfigured ?? draft.extendedCardPolicies.length > 0,
55
+ });
56
+ if (hasErrors(diagnostics))
57
+ throw new A2ACardValidationError(diagnostics);
58
+ const { signatures: _drop, ...unsigned } = draft.card;
59
+ if (unsigned.version !== opts.agentVersion) {
60
+ throw new A2ACardValidationError([
61
+ { code: 'VERSION_MISMATCH', severity: 'error', sourcePointer: '/version', message: `card.version "${unsigned.version}" ≠ release agentVersion "${opts.agentVersion}"` },
62
+ ]);
63
+ }
64
+ const unsignedCard = unsigned;
65
+ return {
66
+ releaseId: opts.releaseId ?? `${draft.cardResourceId}:r${opts.releaseNumber}`,
67
+ cardResourceId: draft.cardResourceId,
68
+ releaseNumber: opts.releaseNumber,
69
+ agentVersion: opts.agentVersion,
70
+ protocolVersion: unsignedCard.protocolVersion,
71
+ unsignedContentDigest: cardContentDigest(unsignedCard),
72
+ unsignedCard,
73
+ fieldBindings: { ...draft.fieldBindings },
74
+ extendedCardPolicies: draft.extendedCardPolicies.map((p) => ({ ...p })),
75
+ approvals: [],
76
+ signatures: [],
77
+ state: 'validated',
78
+ createdAt: opts.now,
79
+ ...(opts.supersedes ? { supersedes: opts.supersedes } : {}),
80
+ };
81
+ }
82
+ /** Move a release along a legal transition. Throws `A2ACardLifecycleError` otherwise. */
83
+ export function transition(release, to, ctx) {
84
+ const from = release.state;
85
+ const fail = (why) => {
86
+ throw new A2ACardLifecycleError(`illegal release transition ${from} → ${to}: ${why}`, from, to);
87
+ };
88
+ if (to === 'revoked')
89
+ return fail('use revoke() — a revocation records reason and authority');
90
+ if (!CARD_RELEASE_TRANSITIONS[from].includes(to))
91
+ return fail('no such transition (spec 347 §3)');
92
+ switch (to) {
93
+ case 'approved': {
94
+ const a = ctx.approval;
95
+ if (!a)
96
+ return fail('an ApprovalRefV1 is required');
97
+ if (a.approvedDigest !== release.unsignedContentDigest)
98
+ return fail(`approval names digest ${a.approvedDigest}, release is ${release.unsignedContentDigest}`);
99
+ if (a.expiresAt && Date.parse(a.expiresAt) < Date.parse(ctx.now))
100
+ return fail('approval has expired');
101
+ return { ...release, state: 'approved', approvals: [...release.approvals, a] };
102
+ }
103
+ case 'signed':
104
+ if (release.signatures.length === 0 || !release.signedCard)
105
+ return fail('attach at least one signature first (attachSignature)');
106
+ return { ...release, state: 'signed' };
107
+ case 'published':
108
+ if (!ctx.publication?.uri)
109
+ return fail('a publication uri is required');
110
+ return { ...release, state: 'published', publication: { uri: ctx.publication.uri, publishedAt: ctx.now } };
111
+ case 'superseded':
112
+ if (!ctx.successor)
113
+ return fail('a successor release id is required');
114
+ return { ...release, state: 'superseded', supersededBy: ctx.successor };
115
+ case 'deprecated':
116
+ case 'approvalPending':
117
+ return { ...release, state: to };
118
+ default:
119
+ return fail('unhandled');
120
+ }
121
+ }
122
+ /** Attach a JWS signature (state `approved` or `signed` → `signed`). Refuses a signature over other bytes. */
123
+ export function attachSignature(release, input) {
124
+ if (release.state !== 'approved' && release.state !== 'signed') {
125
+ throw new A2ACardLifecycleError(`cannot sign a release in state ${release.state}`, release.state, 'signed');
126
+ }
127
+ if (cardContentDigest(input.signedCard) !== release.unsignedContentDigest) {
128
+ throw new A2ACardLifecycleError('signed card bytes differ from the released unsigned card', release.state, 'signed');
129
+ }
130
+ const sigs = input.signedCard.signatures ?? [];
131
+ if (!sigs.some((s) => s.protected === input.signature.protected && s.signature === input.signature.signature)) {
132
+ throw new A2ACardLifecycleError('signature entry is not present on the signed card', release.state, 'signed');
133
+ }
134
+ const header = decodeProtectedHeader(input.signature);
135
+ if ((header.alg !== 'ES256' && header.alg !== 'EdDSA') || !header.kid) {
136
+ throw new A2ACardLifecycleError('signature protected header must carry alg ∈ ES256|EdDSA and kid', release.state, 'signed');
137
+ }
138
+ const ref = {
139
+ kid: header.kid,
140
+ alg: header.alg,
141
+ protected: input.signature.protected,
142
+ signature: input.signature.signature,
143
+ ...(input.signedAt ? { signedAt: input.signedAt } : {}),
144
+ };
145
+ return {
146
+ ...release,
147
+ state: 'signed',
148
+ signedCard: input.signedCard,
149
+ signedContentDigest: signedCardContentDigest(input.signedCard),
150
+ signatures: [...release.signatures, ref],
151
+ };
152
+ }
153
+ /** Attach the SA's EIP-712 binding (state `signed` or `published`). Digests MUST match this release. */
154
+ export function attachSmartAgentBinding(release, signed) {
155
+ if (release.state !== 'signed' && release.state !== 'published') {
156
+ throw new A2ACardLifecycleError(`cannot bind a release in state ${release.state}`, release.state, release.state);
157
+ }
158
+ const b = signed.binding;
159
+ if (b.cardReleaseId !== release.releaseId || b.cardResourceId !== release.cardResourceId) {
160
+ throw new A2ACardLifecycleError('binding names a different card resource / release', release.state, release.state);
161
+ }
162
+ if (b.unsignedCardDigest !== release.unsignedContentDigest || !release.signedContentDigest || b.signedCardDigest !== release.signedContentDigest) {
163
+ throw new A2ACardLifecycleError('binding digests do not match this release', release.state, release.state);
164
+ }
165
+ return { ...release, smartAgentBinding: signed };
166
+ }
167
+ /** Revoke from any non-terminal state. Records reason / authority / date / successor; never erases. */
168
+ export function revoke(release, opts) {
169
+ if (TERMINAL_RELEASE_STATES.has(release.state)) {
170
+ throw new A2ACardLifecycleError(`cannot revoke a release in terminal state ${release.state}`, release.state, 'revoked');
171
+ }
172
+ if (!opts.reason || !opts.authority) {
173
+ throw new A2ACardLifecycleError('revocation requires reason and authority', release.state, 'revoked');
174
+ }
175
+ return {
176
+ ...release,
177
+ state: 'revoked',
178
+ revocation: { reason: opts.reason, authority: opts.authority, revokedAt: opts.now, ...(opts.successor ? { successor: opts.successor } : {}) },
179
+ };
180
+ }
181
+ /** Editing after `approved` = a new draft. Starts from the release's unsigned card + bindings. */
182
+ export function forkDraft(release, opts) {
183
+ const draft = {
184
+ cardResourceId: release.cardResourceId,
185
+ revision: opts.revision ?? 1,
186
+ state: 'draft',
187
+ card: { ...release.unsignedCard },
188
+ fieldBindings: { ...release.fieldBindings },
189
+ extendedCardPolicies: release.extendedCardPolicies.map((p) => ({ ...p })),
190
+ sourceSnapshotDigest: release.unsignedContentDigest,
191
+ etag: '',
192
+ updatedAt: opts.now,
193
+ basedOnReleaseId: release.releaseId,
194
+ };
195
+ return { ...draft, etag: draftEtag(draft) };
196
+ }
197
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/a2a/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,312 @@
1
+ /**
2
+ * A2A Agent Card model (spec 347 §4.1; ADR-0062).
3
+ *
4
+ * `A2AAgentCardV1` mirrors the A2A 1.0 Agent Card — what THIS A2A server does and how to talk to it. It is
5
+ * NOT the identity (that is the Smart Agent address, ADR-0010), NOT the Canonical Agent Profile
6
+ * (`CanonicalAgentProfileV1`, registry-neutral facts), and NOT a registry entry (registries are projected
7
+ * FROM a released card, never the reverse).
8
+ *
9
+ * Hand-authored to mirror A2A 1.0; the standards lock (`docs/standards-lock.json`, spec 347 §6.5) records the
10
+ * pinned source digest once the proto is vendored. Unknown fields are never dropped silently on import —
11
+ * they travel beside the typed card in `A2AImportedCardV1.unknownFields` (§7).
12
+ */
13
+ import type { Address, Hex, ApprovalRefV1, EvidenceRefV1 } from '@agenticprimitives/types';
14
+ import type { Sha256 } from '../types.js';
15
+ export type { Sha256 };
16
+ /** Well-known protocol bindings; the open string keeps forward-compat with bindings A2A adds later. */
17
+ export type A2AProtocolBinding = 'JSONRPC' | 'GRPC' | 'HTTP+JSON' | (string & {});
18
+ export interface A2AAgentInterfaceV1 {
19
+ /** Absolute URL of the endpoint. In production MUST be `https:` (validation `URL_NOT_HTTPS`). */
20
+ url: string;
21
+ protocolBinding: A2AProtocolBinding;
22
+ /** Protocol version served at this interface when it differs from the card's `protocolVersion`. */
23
+ protocolVersion?: string;
24
+ /** Multi-tenant deployments: the tenant this interface serves. */
25
+ tenant?: string;
26
+ }
27
+ export interface A2AAgentProviderV1 {
28
+ organization: string;
29
+ url: string;
30
+ }
31
+ export interface A2AAgentExtensionV1 {
32
+ uri: string;
33
+ required?: boolean;
34
+ description?: string;
35
+ params?: Record<string, unknown>;
36
+ }
37
+ export interface A2AAgentCapabilitiesV1 {
38
+ streaming?: boolean;
39
+ /** DERIVED by the runtime. Claiming it without runtime evidence is `CAPABILITY_UNVERIFIED`. */
40
+ pushNotifications?: boolean;
41
+ stateTransitionHistory?: boolean;
42
+ /** MAY be true only when an extended-card policy is configured AND the authenticated op is implemented. */
43
+ extendedAgentCard?: boolean;
44
+ extensions?: A2AAgentExtensionV1[];
45
+ }
46
+ /**
47
+ * Security schemes — exactly ONE scheme kind per entry, discriminated on `type`. A verifier that finds an
48
+ * entry claiming two kinds (or none) rejects it (`SECURITY_SCHEME_INVALID`).
49
+ */
50
+ export interface A2AApiKeySecuritySchemeV1 {
51
+ type: 'apiKey';
52
+ name: string;
53
+ in: 'header' | 'query' | 'cookie';
54
+ description?: string;
55
+ }
56
+ export interface A2AHttpSecuritySchemeV1 {
57
+ type: 'http';
58
+ /** RFC 7235 scheme, e.g. `bearer`, `basic`. */
59
+ scheme: string;
60
+ bearerFormat?: string;
61
+ description?: string;
62
+ }
63
+ export interface A2AOAuthFlowV1 {
64
+ authorizationUrl?: string;
65
+ tokenUrl?: string;
66
+ refreshUrl?: string;
67
+ scopes: Record<string, string>;
68
+ }
69
+ export interface A2AOAuth2SecuritySchemeV1 {
70
+ type: 'oauth2';
71
+ flows: {
72
+ authorizationCode?: A2AOAuthFlowV1;
73
+ clientCredentials?: A2AOAuthFlowV1;
74
+ implicit?: A2AOAuthFlowV1;
75
+ password?: A2AOAuthFlowV1;
76
+ };
77
+ oauth2MetadataUrl?: string;
78
+ description?: string;
79
+ }
80
+ export interface A2AOpenIdConnectSecuritySchemeV1 {
81
+ type: 'openIdConnect';
82
+ openIdConnectUrl: string;
83
+ description?: string;
84
+ }
85
+ export interface A2AMutualTlsSecuritySchemeV1 {
86
+ type: 'mutualTLS';
87
+ description?: string;
88
+ }
89
+ export type A2ASecuritySchemeV1 = A2AApiKeySecuritySchemeV1 | A2AHttpSecuritySchemeV1 | A2AOAuth2SecuritySchemeV1 | A2AOpenIdConnectSecuritySchemeV1 | A2AMutualTlsSecuritySchemeV1;
90
+ export declare const A2A_SECURITY_SCHEME_TYPES: readonly ["apiKey", "http", "oauth2", "openIdConnect", "mutualTLS"];
91
+ /** One requirement: every named scheme (→ its scopes) must be satisfied together. Names MUST resolve
92
+ * into `securitySchemes` (`SECURITY_REF_UNRESOLVED`). Alternatives are separate array entries. */
93
+ export type A2ASecurityRequirementV1 = Record<string, string[]>;
94
+ export interface A2AAgentSkillV1 {
95
+ id: string;
96
+ name: string;
97
+ description: string;
98
+ tags: string[];
99
+ examples?: string[];
100
+ inputModes?: string[];
101
+ outputModes?: string[];
102
+ securityRequirements?: A2ASecurityRequirementV1[];
103
+ }
104
+ /** One A2A card signature: detached JWS over the canonical card bytes (§4.2). */
105
+ export interface A2AAgentCardSignatureV1 {
106
+ /** base64url(JSON protected header) — carries `alg` + `kid`. */
107
+ protected: string;
108
+ /** base64url(JWS signature bytes). */
109
+ signature: string;
110
+ /** Unprotected header (never covered by the signature; informational only). */
111
+ header?: Record<string, unknown>;
112
+ }
113
+ export interface A2AAgentCardV1 {
114
+ /** A2A protocol version this card conforms to (`'1.0'`). */
115
+ protocolVersion: string;
116
+ name: string;
117
+ description: string;
118
+ /** The AGENT IMPLEMENTATION version — never the protocol version (`VERSION_EQUALS_PROTOCOL_VERSION`). */
119
+ version: string;
120
+ provider?: A2AAgentProviderV1;
121
+ documentationUrl?: string;
122
+ iconUrl?: string;
123
+ /** Ordered: the FIRST entry is the preferred interface; the rest are equivalent bindings. */
124
+ supportedInterfaces: A2AAgentInterfaceV1[];
125
+ capabilities: A2AAgentCapabilitiesV1;
126
+ defaultInputModes: string[];
127
+ defaultOutputModes: string[];
128
+ securitySchemes?: Record<string, A2ASecuritySchemeV1>;
129
+ securityRequirements?: A2ASecurityRequirementV1[];
130
+ skills: A2AAgentSkillV1[];
131
+ /** Excluded from the canonical bytes; each entry signs everything else. */
132
+ signatures?: A2AAgentCardSignatureV1[];
133
+ }
134
+ /** Top-level A2A 1.0 field names. Anything else on an imported document is an unknown field. */
135
+ export declare const A2A_CARD_KNOWN_FIELDS: readonly ["protocolVersion", "name", "description", "version", "provider", "documentationUrl", "iconUrl", "supportedInterfaces", "capabilities", "defaultInputModes", "defaultOutputModes", "securitySchemes", "securityRequirements", "skills", "signatures"];
136
+ /**
137
+ * An imported card: the typed card PLUS everything the import could not type, keyed by RFC 6901 JSON
138
+ * pointer, PLUS the untouched source. The source is evidence; the typed card is a derived view of it.
139
+ */
140
+ export interface A2AImportedCardV1 {
141
+ card: A2AAgentCardV1;
142
+ /** Fields the A2A 1.0 model does not define, by JSON pointer (`/agentAddress`, `/capabilities/foo`). */
143
+ unknownFields: Record<string, unknown>;
144
+ /** The exact bytes received — never mutated. */
145
+ sourceBytes: Uint8Array;
146
+ /** `sha256:` of `sourceBytes` (NOT of the canonical form). */
147
+ sourceDigest: Sha256;
148
+ retrievedAt?: string;
149
+ uri?: string;
150
+ }
151
+ /**
152
+ * Editor-only tri-state for optional fields: "omitted" and "explicitly set to the default" are DIFFERENT
153
+ * documents (different bytes, different digests), and a form must be able to say which one it means.
154
+ * Never serialized into a card.
155
+ */
156
+ export type OptionalPresence<T> = {
157
+ presence: 'unset';
158
+ } | {
159
+ presence: 'set';
160
+ value: T;
161
+ };
162
+ export type FieldBindingMode = 'inherit' | 'override' | 'computed' | 'manual';
163
+ export type FieldBindingSourceKind = 'agent-profile' | 'agent-naming' | 'surface-catalog' | 'runtime' | 'capability-claims' | 'attestation' | 'deployment' | 'import' | 'user';
164
+ export type FieldBindingState = 'fresh' | 'stale' | 'conflict' | 'verified';
165
+ /** Provenance of ONE effective card field. A human override is a recorded, reviewable decision. */
166
+ export interface FieldBindingV1 {
167
+ /** RFC 6901 JSON pointer into the card (`/name`, `/skills/2`). */
168
+ pointer: string;
169
+ mode: FieldBindingMode;
170
+ source: {
171
+ kind: FieldBindingSourceKind;
172
+ ref?: string;
173
+ };
174
+ evidence?: EvidenceRefV1[];
175
+ state: FieldBindingState;
176
+ updatedAt: string;
177
+ /**
178
+ * For `override`: `sha256:` of the INHERITED value this override replaced (JCS of the value). Lets
179
+ * `detectStale` tell "the base changed under my override" (→ `conflict`) apart from "still what I overrode".
180
+ */
181
+ baseDigest?: Sha256;
182
+ }
183
+ export type CardEnvironment = 'production' | 'staging' | 'development';
184
+ export type CardDraftState = 'draft' | 'validated' | 'stale';
185
+ /** Release lifecycle (spec 347 §3). Editing at `approved` or later forks a NEW draft. */
186
+ export type CardReleaseState = 'validated' | 'approvalPending' | 'approved' | 'signed' | 'published' | 'superseded' | 'deprecated' | 'revoked';
187
+ /** Audience overlay on the public base card — the effective extended card is base + policy, never a copy. */
188
+ export interface ExtendedCardPolicyV1 {
189
+ policyId: string;
190
+ audienceId: string;
191
+ requiredScheme?: string;
192
+ /** Entitlement resource/action or scope a caller must hold to receive the overlay. Never a grant. */
193
+ requiredEntitlement?: string;
194
+ additionalSkills?: A2AAgentSkillV1[];
195
+ additionalInterfaces?: A2AAgentInterfaceV1[];
196
+ additionalDocumentationUrl?: string;
197
+ additionalSecuritySchemes?: Record<string, A2ASecuritySchemeV1>;
198
+ expiresAt?: string;
199
+ reviewBy?: string;
200
+ auditRequirements?: string[];
201
+ }
202
+ /** The managed object: one canonical agent → 0..n card resources; one production primary. */
203
+ export interface A2AAgentCardResourceV1 {
204
+ cardResourceId: string;
205
+ /** `eip155:<chain>:<sa>` — the canonical agent this card describes. */
206
+ canonicalAgentId: string;
207
+ displayName?: string;
208
+ environment: CardEnvironment;
209
+ primary: boolean;
210
+ currentDraftRevision?: number;
211
+ latestReleaseId?: string;
212
+ createdAt: string;
213
+ updatedAt: string;
214
+ }
215
+ /** The mutable draft: card + provenance. Optimistic-concurrent by `revision` / `etag`. */
216
+ export interface A2AAgentCardDraftV1 {
217
+ cardResourceId: string;
218
+ revision: number;
219
+ state: CardDraftState;
220
+ card: A2AAgentCardV1;
221
+ fieldBindings: Record<string, FieldBindingV1>;
222
+ extendedCardPolicies: ExtendedCardPolicyV1[];
223
+ /** `sha256:` of the inherited base card the draft was derived from (`inheritCardBase` output). */
224
+ sourceSnapshotDigest: Sha256;
225
+ etag: string;
226
+ updatedAt: string;
227
+ basedOnReleaseId?: string;
228
+ }
229
+ /** Reference to one JWS signature on a release. */
230
+ export interface A2ACardSignatureRefV1 {
231
+ kid: string;
232
+ alg: 'ES256' | 'EdDSA';
233
+ protected: string;
234
+ signature: string;
235
+ signedAt?: string;
236
+ }
237
+ /** EIP-712 message (§4.2). Digests are `sha256:` strings here; `bytes32` on the wire (`sha256ToBytes32`). */
238
+ export interface SmartAgentCardBindingV1 {
239
+ canonicalAgentId: string;
240
+ cardResourceId: string;
241
+ cardReleaseId: string;
242
+ cardUri: string;
243
+ unsignedCardDigest: Sha256;
244
+ signedCardDigest: Sha256;
245
+ /** RFC 7638 JWK thumbprint (base64url, sha256) of the JWS signing key. */
246
+ signerKeyThumbprint: string;
247
+ /** Unix seconds. */
248
+ validFrom: number;
249
+ validUntil: number;
250
+ }
251
+ /** A binding plus the SA's ERC-1271-validatable signature over its EIP-712 digest. */
252
+ export interface SignedSmartAgentCardBindingV1 {
253
+ binding: SmartAgentCardBindingV1;
254
+ chainId: number;
255
+ /** The Smart Agent (EIP-712 `verifyingContract`; ERC-1271 validator). */
256
+ verifyingContract: Address;
257
+ signature: Hex;
258
+ }
259
+ export interface CardRevocationV1 {
260
+ reason: string;
261
+ /** Who/what authorized the revocation (approval id, authority ref). */
262
+ authority: string;
263
+ revokedAt: string;
264
+ successor?: string;
265
+ }
266
+ /** An immutable release, identified by release id AND content digest. */
267
+ export interface A2AAgentCardReleaseV1 {
268
+ releaseId: string;
269
+ cardResourceId: string;
270
+ releaseNumber: number;
271
+ agentVersion: string;
272
+ protocolVersion: string;
273
+ unsignedContentDigest: Sha256;
274
+ signedContentDigest?: Sha256;
275
+ unsignedCard: A2AAgentCardV1;
276
+ signedCard?: A2AAgentCardV1;
277
+ fieldBindings: Record<string, FieldBindingV1>;
278
+ extendedCardPolicies: ExtendedCardPolicyV1[];
279
+ approvals: ApprovalRefV1[];
280
+ signatures: A2ACardSignatureRefV1[];
281
+ smartAgentBinding?: SignedSmartAgentCardBindingV1;
282
+ state: CardReleaseState;
283
+ createdAt: string;
284
+ supersedes?: string;
285
+ supersededBy?: string;
286
+ publication?: {
287
+ uri: string;
288
+ publishedAt: string;
289
+ };
290
+ revocation?: CardRevocationV1;
291
+ }
292
+ /**
293
+ * The SA's published authorization of a card-signing key (§4.2): an AP-aware verifier checks
294
+ * JWS valid → key thumbprint authorized → binding valid. Published beside the card in the AP Registry entry.
295
+ * This record DESCRIBES the authorization; the grant itself is issued by the SA through its authority
296
+ * machinery — carrying this record grants nothing.
297
+ */
298
+ export interface CardSigningKeyAuthorizationV1 {
299
+ keyThumbprint: string;
300
+ permittedCardIds: string[];
301
+ permittedDomains: string[];
302
+ algorithms: ('ES256' | 'EdDSA')[];
303
+ validity: {
304
+ from: string;
305
+ until: string;
306
+ };
307
+ /** Where a verifier checks for revocation of this authorization. */
308
+ revocationRef?: string;
309
+ /** Reference to the SA-issued grant record this authorization mirrors. */
310
+ authorityRef?: string;
311
+ }
312
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A2A Agent Card model (spec 347 §4.1; ADR-0062).
3
+ *
4
+ * `A2AAgentCardV1` mirrors the A2A 1.0 Agent Card — what THIS A2A server does and how to talk to it. It is
5
+ * NOT the identity (that is the Smart Agent address, ADR-0010), NOT the Canonical Agent Profile
6
+ * (`CanonicalAgentProfileV1`, registry-neutral facts), and NOT a registry entry (registries are projected
7
+ * FROM a released card, never the reverse).
8
+ *
9
+ * Hand-authored to mirror A2A 1.0; the standards lock (`docs/standards-lock.json`, spec 347 §6.5) records the
10
+ * pinned source digest once the proto is vendored. Unknown fields are never dropped silently on import —
11
+ * they travel beside the typed card in `A2AImportedCardV1.unknownFields` (§7).
12
+ */
13
+ export const A2A_SECURITY_SCHEME_TYPES = ['apiKey', 'http', 'oauth2', 'openIdConnect', 'mutualTLS'];
14
+ /** Top-level A2A 1.0 field names. Anything else on an imported document is an unknown field. */
15
+ export const A2A_CARD_KNOWN_FIELDS = [
16
+ 'protocolVersion',
17
+ 'name',
18
+ 'description',
19
+ 'version',
20
+ 'provider',
21
+ 'documentationUrl',
22
+ 'iconUrl',
23
+ 'supportedInterfaces',
24
+ 'capabilities',
25
+ 'defaultInputModes',
26
+ 'defaultOutputModes',
27
+ 'securitySchemes',
28
+ 'securityRequirements',
29
+ 'skills',
30
+ 'signatures',
31
+ ];
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8FH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAU,CAAC;AAiD7G,gGAAgG;AAChG,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,iBAAiB;IACjB,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,kBAAkB;IAClB,SAAS;IACT,qBAAqB;IACrB,cAAc;IACd,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;IACjB,sBAAsB;IACtB,QAAQ;IACR,YAAY;CACwC,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Pure validation of an A2A Agent Card (spec 347 §4.4) → `ProjectionDiagnosticV1[]`.
3
+ *
4
+ * Four families, all PURE (no network, no clock, no randomness):
5
+ * structural — required fields, one-of security schemes, absolute HTTPS URLs (production), MIME shape,
6
+ * unique skill ids, security refs resolve;
7
+ * serialization — JCS reproducible (canonicalize twice, compare);
8
+ * semantic — ≥1 interface (first = preferred), `extendedAgentCard` only with a policy, push claims
9
+ * need runtime evidence (`CAPABILITY_UNVERIFIED`), version ≠ protocol version, catalog
10
+ * agreement without an `override` binding (`CATALOG_DIVERGENCE`, spec 347 §13(b));
11
+ * security/privacy — secret-looking strings, loopback/private/link-local/metadata URLs, vault refs,
12
+ * PII patterns (warning).
13
+ * Runtime checks (reachability, handshake, TLS, digest-at-well-known) are a separate app-side port —
14
+ * deliberately NOT here.
15
+ */
16
+ import type { ProjectionDiagnosticV1 } from '@agenticprimitives/types';
17
+ import { type CardLike } from './canonical.js';
18
+ import { type A2AAgentCardV1, type A2AAgentInterfaceV1, type CardEnvironment, type FieldBindingV1 } from './types.js';
19
+ /** Stable diagnostic codes. Each is emitted by exactly one check; consumers key on these, not messages. */
20
+ export declare const DIAGNOSTIC_CODES: {
21
+ readonly STRUCT_MISSING_FIELD: "STRUCT_MISSING_FIELD";
22
+ readonly STRUCT_INVALID_TYPE: "STRUCT_INVALID_TYPE";
23
+ readonly PROTOCOL_VERSION_MISMATCH: "PROTOCOL_VERSION_MISMATCH";
24
+ readonly URL_NOT_ABSOLUTE: "URL_NOT_ABSOLUTE";
25
+ readonly URL_NOT_HTTPS: "URL_NOT_HTTPS";
26
+ readonly MIME_TYPE_INVALID: "MIME_TYPE_INVALID";
27
+ readonly SKILL_ID_DUPLICATE: "SKILL_ID_DUPLICATE";
28
+ readonly SECURITY_SCHEME_INVALID: "SECURITY_SCHEME_INVALID";
29
+ readonly SECURITY_REF_UNRESOLVED: "SECURITY_REF_UNRESOLVED";
30
+ readonly EXTENSION_URI_INVALID: "EXTENSION_URI_INVALID";
31
+ readonly CANONICALIZATION_FAILED: "CANONICALIZATION_FAILED";
32
+ readonly JCS_NOT_REPRODUCIBLE: "JCS_NOT_REPRODUCIBLE";
33
+ readonly NO_INTERFACE: "NO_INTERFACE";
34
+ readonly INTERFACE_BINDING_UNKNOWN: "INTERFACE_BINDING_UNKNOWN";
35
+ readonly EXTENDED_CARD_WITHOUT_POLICY: "EXTENDED_CARD_WITHOUT_POLICY";
36
+ readonly CAPABILITY_UNVERIFIED: "CAPABILITY_UNVERIFIED";
37
+ readonly VERSION_EQUALS_PROTOCOL_VERSION: "VERSION_EQUALS_PROTOCOL_VERSION";
38
+ readonly PROVIDER_MISSING: "PROVIDER_MISSING";
39
+ readonly CATALOG_DIVERGENCE: "CATALOG_DIVERGENCE";
40
+ readonly SECRET_MATERIAL_DETECTED: "SECRET_MATERIAL_DETECTED";
41
+ readonly PRIVATE_URL_DETECTED: "PRIVATE_URL_DETECTED";
42
+ readonly VAULT_REFERENCE_DETECTED: "VAULT_REFERENCE_DETECTED";
43
+ readonly PII_SUSPECTED: "PII_SUSPECTED";
44
+ readonly UNKNOWN_FIELD: "UNKNOWN_FIELD";
45
+ readonly SIGNATURE_INVALID: "SIGNATURE_INVALID";
46
+ readonly SIGNATURE_UNVERIFIED: "SIGNATURE_UNVERIFIED";
47
+ readonly SOURCE_NOT_JSON: "SOURCE_NOT_JSON";
48
+ };
49
+ export type DiagnosticCode = (typeof DIAGNOSTIC_CODES)[keyof typeof DIAGNOSTIC_CODES];
50
+ /** Structural view of `surface-catalog`'s `A2aCardSkillLike` — no package dependency (spec 347 §10.2 note). */
51
+ export interface CatalogSkillLike {
52
+ id: string;
53
+ name?: string;
54
+ description?: string;
55
+ }
56
+ /** Runtime-declared capabilities — evidence for `capabilities.*` claims. */
57
+ export interface RuntimeCapabilityEvidence {
58
+ streaming?: boolean;
59
+ pushNotifications?: boolean;
60
+ stateTransitionHistory?: boolean;
61
+ extendedAgentCard?: boolean;
62
+ }
63
+ export interface ValidateA2ACardOptions {
64
+ /** Pinned A2A version the card MUST declare. Default `'1.0'`. */
65
+ protocolVersion?: string;
66
+ environment: CardEnvironment;
67
+ /** Interfaces the surface catalog / deployment says are served. Disagreement without an override ⇒ error. */
68
+ surfaceInterfaces?: Pick<A2AAgentInterfaceV1, 'url' | 'protocolBinding'>[];
69
+ /** What the runtime actually implements. Absent ⇒ `pushNotifications:true` is unverifiable. */
70
+ runtimeCapabilities?: RuntimeCapabilityEvidence;
71
+ /** Skills the surface catalog serves (`toCardProjectionSet(...).public`). */
72
+ catalogSkills?: CatalogSkillLike[];
73
+ fieldBindings?: Record<string, FieldBindingV1>;
74
+ /** Whether ≥1 extended-card policy is configured (needed for `capabilities.extendedAgentCard`). */
75
+ extendedCardPolicyConfigured?: boolean;
76
+ }
77
+ export declare function hasErrors(diagnostics: readonly ProjectionDiagnosticV1[]): boolean;
78
+ /** Validate a card. Returns diagnostics; never throws on card content. */
79
+ export declare function validateA2ACard(card: A2AAgentCardV1 | CardLike, opts: ValidateA2ACardOptions): ProjectionDiagnosticV1[];
80
+ export declare function isPrivateHost(hostname: string): boolean;
81
+ //# sourceMappingURL=validation.d.ts.map