@agenticprimitives/agent-profile 1.0.0-alpha.4 → 1.0.0-alpha.41

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 (93) hide show
  1. package/README.md +91 -37
  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 +327 -0
  39. package/dist/a2a/types.d.ts.map +1 -0
  40. package/dist/a2a/types.js +49 -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 +506 -0
  45. package/dist/a2a/validation.js.map +1 -0
  46. package/dist/caip10.d.ts +4 -3
  47. package/dist/caip10.d.ts.map +1 -1
  48. package/dist/caip10.js +8 -5
  49. package/dist/caip10.js.map +1 -1
  50. package/dist/calls.d.ts +23 -0
  51. package/dist/calls.d.ts.map +1 -1
  52. package/dist/calls.js +31 -1
  53. package/dist/calls.js.map +1 -1
  54. package/dist/card.d.ts +70 -0
  55. package/dist/card.d.ts.map +1 -0
  56. package/dist/card.js +130 -0
  57. package/dist/card.js.map +1 -0
  58. package/dist/client-key-binding.d.ts +196 -0
  59. package/dist/client-key-binding.d.ts.map +1 -0
  60. package/dist/client-key-binding.js +282 -0
  61. package/dist/client-key-binding.js.map +1 -0
  62. package/dist/client.d.ts +6 -4
  63. package/dist/client.d.ts.map +1 -1
  64. package/dist/client.js +79 -8
  65. package/dist/client.js.map +1 -1
  66. package/dist/constants.d.ts +31 -1
  67. package/dist/constants.d.ts.map +1 -1
  68. package/dist/constants.js +38 -1
  69. package/dist/constants.js.map +1 -1
  70. package/dist/derived-type.d.ts +14 -0
  71. package/dist/derived-type.d.ts.map +1 -0
  72. package/dist/derived-type.js +56 -0
  73. package/dist/derived-type.js.map +1 -0
  74. package/dist/distribution.d.ts +32 -0
  75. package/dist/distribution.d.ts.map +1 -0
  76. package/dist/distribution.js +167 -0
  77. package/dist/distribution.js.map +1 -0
  78. package/dist/errors.d.ts +6 -0
  79. package/dist/errors.d.ts.map +1 -1
  80. package/dist/errors.js +11 -0
  81. package/dist/errors.js.map +1 -1
  82. package/dist/index.d.ts +12 -8
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +19 -7
  85. package/dist/index.js.map +1 -1
  86. package/dist/profile.d.ts +4 -4
  87. package/dist/profile.d.ts.map +1 -1
  88. package/dist/profile.js +25 -3
  89. package/dist/profile.js.map +1 -1
  90. package/dist/types.d.ts +135 -9
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +32 -12
  93. 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,327 @@
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
+ /**
92
+ * THE SAME FIVE KINDS IN A2A 1.0's PROTO-JSON FORM — the wrapper keys of the `oneof` in `a2a.proto` v1.0.0.
93
+ *
94
+ * A2A 1.0 has two JSON representations of one card and both are legitimate. The OpenAPI-style form keys a scheme
95
+ * by a `type` discriminator (the five above). The proto-JSON form, which is what the official TCK validates
96
+ * against (its bundled `a2a.json`, generated from the proto), has no untagged unions, so each kind is a WRAPPER
97
+ * object and the requirement's scopes are a `{ list: [] }` message rather than a bare array.
98
+ *
99
+ * This substrate's own wire is the proto-JSON one (`@agenticprimitives/a2a` `src/standard/`, TCK-green at
100
+ * MUST/SHOULD/MAY), so every card this runtime and every Service Host serves arrives in this shape. A validator
101
+ * that accepted only the other form refused our own conformant cards — which is how the most important
102
+ * self-hosted service in the estate came to serve a card our own tooling called invalid on three counts
103
+ * (2026-10-14). Both forms are accepted; neither is converted into the other, because a card is published bytes.
104
+ */
105
+ export declare const A2A_PROTO_SECURITY_SCHEME_KEYS: readonly ["apiKeySecurityScheme", "httpAuthSecurityScheme", "oauth2SecurityScheme", "openIdConnectSecurityScheme", "mtlsSecurityScheme"];
106
+ /** One requirement: every named scheme (→ its scopes) must be satisfied together. Names MUST resolve
107
+ * into `securitySchemes` (`SECURITY_REF_UNRESOLVED`). Alternatives are separate array entries. */
108
+ export type A2ASecurityRequirementV1 = Record<string, string[]>;
109
+ export interface A2AAgentSkillV1 {
110
+ id: string;
111
+ name: string;
112
+ description: string;
113
+ tags: string[];
114
+ examples?: string[];
115
+ inputModes?: string[];
116
+ outputModes?: string[];
117
+ securityRequirements?: A2ASecurityRequirementV1[];
118
+ }
119
+ /** One A2A card signature: detached JWS over the canonical card bytes (§4.2). */
120
+ export interface A2AAgentCardSignatureV1 {
121
+ /** base64url(JSON protected header) — carries `alg` + `kid`. */
122
+ protected: string;
123
+ /** base64url(JWS signature bytes). */
124
+ signature: string;
125
+ /** Unprotected header (never covered by the signature; informational only). */
126
+ header?: Record<string, unknown>;
127
+ }
128
+ export interface A2AAgentCardV1 {
129
+ /** A2A protocol version this card conforms to (`'1.0'`). */
130
+ protocolVersion: string;
131
+ name: string;
132
+ description: string;
133
+ /** The AGENT IMPLEMENTATION version — never the protocol version (`VERSION_EQUALS_PROTOCOL_VERSION`). */
134
+ version: string;
135
+ provider?: A2AAgentProviderV1;
136
+ documentationUrl?: string;
137
+ iconUrl?: string;
138
+ /** Ordered: the FIRST entry is the preferred interface; the rest are equivalent bindings. */
139
+ supportedInterfaces: A2AAgentInterfaceV1[];
140
+ capabilities: A2AAgentCapabilitiesV1;
141
+ defaultInputModes: string[];
142
+ defaultOutputModes: string[];
143
+ securitySchemes?: Record<string, A2ASecuritySchemeV1>;
144
+ securityRequirements?: A2ASecurityRequirementV1[];
145
+ skills: A2AAgentSkillV1[];
146
+ /** Excluded from the canonical bytes; each entry signs everything else. */
147
+ signatures?: A2AAgentCardSignatureV1[];
148
+ }
149
+ /** Top-level A2A 1.0 field names. Anything else on an imported document is an unknown field. */
150
+ export declare const A2A_CARD_KNOWN_FIELDS: readonly ["protocolVersion", "name", "description", "version", "provider", "documentationUrl", "iconUrl", "supportedInterfaces", "capabilities", "defaultInputModes", "defaultOutputModes", "securitySchemes", "securityRequirements", "skills", "signatures"];
151
+ /**
152
+ * An imported card: the typed card PLUS everything the import could not type, keyed by RFC 6901 JSON
153
+ * pointer, PLUS the untouched source. The source is evidence; the typed card is a derived view of it.
154
+ */
155
+ export interface A2AImportedCardV1 {
156
+ card: A2AAgentCardV1;
157
+ /** Fields the A2A 1.0 model does not define, by JSON pointer (`/agentAddress`, `/capabilities/foo`). */
158
+ unknownFields: Record<string, unknown>;
159
+ /** The exact bytes received — never mutated. */
160
+ sourceBytes: Uint8Array;
161
+ /** `sha256:` of `sourceBytes` (NOT of the canonical form). */
162
+ sourceDigest: Sha256;
163
+ retrievedAt?: string;
164
+ uri?: string;
165
+ }
166
+ /**
167
+ * Editor-only tri-state for optional fields: "omitted" and "explicitly set to the default" are DIFFERENT
168
+ * documents (different bytes, different digests), and a form must be able to say which one it means.
169
+ * Never serialized into a card.
170
+ */
171
+ export type OptionalPresence<T> = {
172
+ presence: 'unset';
173
+ } | {
174
+ presence: 'set';
175
+ value: T;
176
+ };
177
+ export type FieldBindingMode = 'inherit' | 'override' | 'computed' | 'manual';
178
+ export type FieldBindingSourceKind = 'agent-profile' | 'agent-naming' | 'surface-catalog' | 'runtime' | 'capability-claims' | 'attestation' | 'deployment' | 'import' | 'user';
179
+ export type FieldBindingState = 'fresh' | 'stale' | 'conflict' | 'verified';
180
+ /** Provenance of ONE effective card field. A human override is a recorded, reviewable decision. */
181
+ export interface FieldBindingV1 {
182
+ /** RFC 6901 JSON pointer into the card (`/name`, `/skills/2`). */
183
+ pointer: string;
184
+ mode: FieldBindingMode;
185
+ source: {
186
+ kind: FieldBindingSourceKind;
187
+ ref?: string;
188
+ };
189
+ evidence?: EvidenceRefV1[];
190
+ state: FieldBindingState;
191
+ updatedAt: string;
192
+ /**
193
+ * For `override`: `sha256:` of the INHERITED value this override replaced (JCS of the value). Lets
194
+ * `detectStale` tell "the base changed under my override" (→ `conflict`) apart from "still what I overrode".
195
+ */
196
+ baseDigest?: Sha256;
197
+ }
198
+ export type CardEnvironment = 'production' | 'staging' | 'development';
199
+ export type CardDraftState = 'draft' | 'validated' | 'stale';
200
+ /** Release lifecycle (spec 347 §3). Editing at `approved` or later forks a NEW draft. */
201
+ export type CardReleaseState = 'validated' | 'approvalPending' | 'approved' | 'signed' | 'published' | 'superseded' | 'deprecated' | 'revoked';
202
+ /** Audience overlay on the public base card — the effective extended card is base + policy, never a copy. */
203
+ export interface ExtendedCardPolicyV1 {
204
+ policyId: string;
205
+ audienceId: string;
206
+ requiredScheme?: string;
207
+ /** Entitlement resource/action or scope a caller must hold to receive the overlay. Never a grant. */
208
+ requiredEntitlement?: string;
209
+ additionalSkills?: A2AAgentSkillV1[];
210
+ additionalInterfaces?: A2AAgentInterfaceV1[];
211
+ additionalDocumentationUrl?: string;
212
+ additionalSecuritySchemes?: Record<string, A2ASecuritySchemeV1>;
213
+ expiresAt?: string;
214
+ reviewBy?: string;
215
+ auditRequirements?: string[];
216
+ }
217
+ /** The managed object: one canonical agent → 0..n card resources; one production primary. */
218
+ export interface A2AAgentCardResourceV1 {
219
+ cardResourceId: string;
220
+ /** `eip155:<chain>:<sa>` — the canonical agent this card describes. */
221
+ canonicalAgentId: string;
222
+ displayName?: string;
223
+ environment: CardEnvironment;
224
+ primary: boolean;
225
+ currentDraftRevision?: number;
226
+ latestReleaseId?: string;
227
+ createdAt: string;
228
+ updatedAt: string;
229
+ }
230
+ /** The mutable draft: card + provenance. Optimistic-concurrent by `revision` / `etag`. */
231
+ export interface A2AAgentCardDraftV1 {
232
+ cardResourceId: string;
233
+ revision: number;
234
+ state: CardDraftState;
235
+ card: A2AAgentCardV1;
236
+ fieldBindings: Record<string, FieldBindingV1>;
237
+ extendedCardPolicies: ExtendedCardPolicyV1[];
238
+ /** `sha256:` of the inherited base card the draft was derived from (`inheritCardBase` output). */
239
+ sourceSnapshotDigest: Sha256;
240
+ etag: string;
241
+ updatedAt: string;
242
+ basedOnReleaseId?: string;
243
+ }
244
+ /** Reference to one JWS signature on a release. */
245
+ export interface A2ACardSignatureRefV1 {
246
+ kid: string;
247
+ alg: 'ES256' | 'EdDSA';
248
+ protected: string;
249
+ signature: string;
250
+ signedAt?: string;
251
+ }
252
+ /** EIP-712 message (§4.2). Digests are `sha256:` strings here; `bytes32` on the wire (`sha256ToBytes32`). */
253
+ export interface SmartAgentCardBindingV1 {
254
+ canonicalAgentId: string;
255
+ cardResourceId: string;
256
+ cardReleaseId: string;
257
+ cardUri: string;
258
+ unsignedCardDigest: Sha256;
259
+ signedCardDigest: Sha256;
260
+ /** RFC 7638 JWK thumbprint (base64url, sha256) of the JWS signing key. */
261
+ signerKeyThumbprint: string;
262
+ /** Unix seconds. */
263
+ validFrom: number;
264
+ validUntil: number;
265
+ }
266
+ /** A binding plus the SA's ERC-1271-validatable signature over its EIP-712 digest. */
267
+ export interface SignedSmartAgentCardBindingV1 {
268
+ binding: SmartAgentCardBindingV1;
269
+ chainId: number;
270
+ /** The Smart Agent (EIP-712 `verifyingContract`; ERC-1271 validator). */
271
+ verifyingContract: Address;
272
+ signature: Hex;
273
+ }
274
+ export interface CardRevocationV1 {
275
+ reason: string;
276
+ /** Who/what authorized the revocation (approval id, authority ref). */
277
+ authority: string;
278
+ revokedAt: string;
279
+ successor?: string;
280
+ }
281
+ /** An immutable release, identified by release id AND content digest. */
282
+ export interface A2AAgentCardReleaseV1 {
283
+ releaseId: string;
284
+ cardResourceId: string;
285
+ releaseNumber: number;
286
+ agentVersion: string;
287
+ protocolVersion: string;
288
+ unsignedContentDigest: Sha256;
289
+ signedContentDigest?: Sha256;
290
+ unsignedCard: A2AAgentCardV1;
291
+ signedCard?: A2AAgentCardV1;
292
+ fieldBindings: Record<string, FieldBindingV1>;
293
+ extendedCardPolicies: ExtendedCardPolicyV1[];
294
+ approvals: ApprovalRefV1[];
295
+ signatures: A2ACardSignatureRefV1[];
296
+ smartAgentBinding?: SignedSmartAgentCardBindingV1;
297
+ state: CardReleaseState;
298
+ createdAt: string;
299
+ supersedes?: string;
300
+ supersededBy?: string;
301
+ publication?: {
302
+ uri: string;
303
+ publishedAt: string;
304
+ };
305
+ revocation?: CardRevocationV1;
306
+ }
307
+ /**
308
+ * The SA's published authorization of a card-signing key (§4.2): an AP-aware verifier checks
309
+ * JWS valid → key thumbprint authorized → binding valid. Published beside the card in the AP Registry entry.
310
+ * This record DESCRIBES the authorization; the grant itself is issued by the SA through its authority
311
+ * machinery — carrying this record grants nothing.
312
+ */
313
+ export interface CardSigningKeyAuthorizationV1 {
314
+ keyThumbprint: string;
315
+ permittedCardIds: string[];
316
+ permittedDomains: string[];
317
+ algorithms: ('ES256' | 'EdDSA')[];
318
+ validity: {
319
+ from: string;
320
+ until: string;
321
+ };
322
+ /** Where a verifier checks for revocation of this authorization. */
323
+ revocationRef?: string;
324
+ /** Reference to the SA-issued grant record this authorization mirrors. */
325
+ authorityRef?: string;
326
+ }
327
+ //# 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,49 @@
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
+ /**
15
+ * THE SAME FIVE KINDS IN A2A 1.0's PROTO-JSON FORM — the wrapper keys of the `oneof` in `a2a.proto` v1.0.0.
16
+ *
17
+ * A2A 1.0 has two JSON representations of one card and both are legitimate. The OpenAPI-style form keys a scheme
18
+ * by a `type` discriminator (the five above). The proto-JSON form, which is what the official TCK validates
19
+ * against (its bundled `a2a.json`, generated from the proto), has no untagged unions, so each kind is a WRAPPER
20
+ * object and the requirement's scopes are a `{ list: [] }` message rather than a bare array.
21
+ *
22
+ * This substrate's own wire is the proto-JSON one (`@agenticprimitives/a2a` `src/standard/`, TCK-green at
23
+ * MUST/SHOULD/MAY), so every card this runtime and every Service Host serves arrives in this shape. A validator
24
+ * that accepted only the other form refused our own conformant cards — which is how the most important
25
+ * self-hosted service in the estate came to serve a card our own tooling called invalid on three counts
26
+ * (2026-10-14). Both forms are accepted; neither is converted into the other, because a card is published bytes.
27
+ */
28
+ export const A2A_PROTO_SECURITY_SCHEME_KEYS = [
29
+ 'apiKeySecurityScheme', 'httpAuthSecurityScheme', 'oauth2SecurityScheme', 'openIdConnectSecurityScheme', 'mtlsSecurityScheme',
30
+ ];
31
+ /** Top-level A2A 1.0 field names. Anything else on an imported document is an unknown field. */
32
+ export const A2A_CARD_KNOWN_FIELDS = [
33
+ 'protocolVersion',
34
+ 'name',
35
+ 'description',
36
+ 'version',
37
+ 'provider',
38
+ 'documentationUrl',
39
+ 'iconUrl',
40
+ 'supportedInterfaces',
41
+ 'capabilities',
42
+ 'defaultInputModes',
43
+ 'defaultOutputModes',
44
+ 'securitySchemes',
45
+ 'securityRequirements',
46
+ 'skills',
47
+ 'signatures',
48
+ ];
49
+ //# 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;AAE7G;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,sBAAsB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,oBAAoB;CACrH,CAAC;AAiDX,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"}