@agenticprimitives/agent-profile 1.0.0-alpha.21 → 1.0.0-alpha.23

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,242 @@
1
+ /**
2
+ * Field provenance (spec 347 §4.3; ADR-0062 §4): inherit the card base, curate with recorded overrides,
3
+ * detect when an inherited source moved under a draft. PURE — the clock is an input.
4
+ *
5
+ * Sources are STRUCTURAL (no package import): `surfaceCards` is shaped like `surface-catalog`'s
6
+ * `toCardProjectionSet(...)` output, `publicSkillCandidates` like `capability-claims`'
7
+ * `A2aAgentSkillDescriptor`. surface-catalog remains the only generator of inherited interface/skill
8
+ * fields; capability claims add PUBLIC skills with their own provenance.
9
+ */
10
+ import { cardContentDigest, jcsDigest } from './canonical.js';
11
+ import { getAtPointer, joinPointer, setAtPointer } from './pointer.js';
12
+ const DEFAULT_MODES = ['text/plain', 'application/json'];
13
+ /** Generate the card base from canonical sources. Every field carries an `inherit` or `computed` binding. */
14
+ export function inheritCardBase(input) {
15
+ const b = {};
16
+ const bind = (pointer, mode, kind, ref) => {
17
+ b[pointer] = { pointer, mode, source: ref ? { kind, ref } : { kind }, state: 'fresh', updatedAt: input.now };
18
+ };
19
+ const profileName = input.profile.displayName;
20
+ const name = input.names?.primary ?? profileName ?? 'agent';
21
+ bind('/name', 'inherit', input.names?.primary ? 'agent-naming' : 'agent-profile');
22
+ const description = input.profile.description ?? `A2A endpoint for ${name}.`;
23
+ bind('/description', input.profile.description ? 'inherit' : 'computed', 'agent-profile');
24
+ const protocolVersion = input.protocolVersion ?? '1.0';
25
+ bind('/protocolVersion', 'computed', 'runtime');
26
+ const version = input.agentVersion ?? '0.1.0';
27
+ bind('/version', input.agentVersion ? 'inherit' : 'computed', 'deployment');
28
+ const card = {
29
+ protocolVersion,
30
+ name,
31
+ description,
32
+ version,
33
+ supportedInterfaces: [],
34
+ capabilities: {},
35
+ defaultInputModes: input.mediaModes?.input ?? DEFAULT_MODES.slice(),
36
+ defaultOutputModes: input.mediaModes?.output ?? DEFAULT_MODES.slice(),
37
+ skills: [],
38
+ };
39
+ bind('/defaultInputModes', input.mediaModes?.input ? 'inherit' : 'computed', input.mediaModes?.input ? 'surface-catalog' : 'runtime');
40
+ bind('/defaultOutputModes', input.mediaModes?.output ? 'inherit' : 'computed', input.mediaModes?.output ? 'surface-catalog' : 'runtime');
41
+ const providerUrl = input.deployment.provider?.url ?? input.profile.homepage ?? input.deployment.host;
42
+ const providerOrg = input.deployment.provider?.organization ?? profileName;
43
+ if (providerOrg && providerUrl) {
44
+ card.provider = { organization: providerOrg, url: providerUrl };
45
+ bind('/provider', 'inherit', input.deployment.provider ? 'deployment' : 'agent-profile');
46
+ }
47
+ const docUrl = input.deployment.documentationUrl ?? input.profile.homepage;
48
+ if (docUrl) {
49
+ card.documentationUrl = docUrl;
50
+ bind('/documentationUrl', 'inherit', input.deployment.documentationUrl ? 'deployment' : 'agent-profile');
51
+ }
52
+ if (input.profile.avatar) {
53
+ card.iconUrl = input.profile.avatar;
54
+ bind('/iconUrl', 'inherit', 'agent-profile');
55
+ }
56
+ if (input.surfaceInterfaces && input.surfaceInterfaces.length > 0) {
57
+ card.supportedInterfaces = input.surfaceInterfaces.map((i) => ({ ...i }));
58
+ bind('/supportedInterfaces', 'inherit', 'surface-catalog');
59
+ }
60
+ else {
61
+ card.supportedInterfaces = [{ url: input.deployment.a2aUrl, protocolBinding: input.deployment.protocolBinding ?? 'JSONRPC' }];
62
+ bind('/supportedInterfaces', 'computed', 'deployment');
63
+ }
64
+ // `card.capabilities` is A2A's PROTOCOL flags, not what the agent can do (that is `card.skills`, fed
65
+ // from `profile.capabilities` below). Two sources feed it, and the precedence is not arbitrary:
66
+ // RUNTIME EVIDENCE WINS. `profile.protocolFeatures` is the owner's declaration and fills only what the
67
+ // runtime did not report — a declaration must never overrule what the runtime says it implements,
68
+ // because `pushNotifications` in particular is derived, and claiming it without evidence is
69
+ // CAPABILITY_UNVERIFIED (ADR-0059). Absent both, every flag is false rather than omitted: silence here
70
+ // reads as "no", which is the honest default for a capability claim.
71
+ const rc = input.runtimeCapabilities;
72
+ const pf = input.profile.protocolFeatures;
73
+ const flag = (k) => rc?.[k] ?? pf?.[k] ?? false;
74
+ const extendedAgentCard = rc?.extendedAgentCard ?? pf?.extendedAgentCard;
75
+ const extensions = rc?.extensions ?? pf?.extensions;
76
+ card.capabilities = {
77
+ streaming: flag('streaming'),
78
+ pushNotifications: flag('pushNotifications'),
79
+ stateTransitionHistory: flag('stateTransitionHistory'),
80
+ ...(extendedAgentCard !== undefined ? { extendedAgentCard } : {}),
81
+ ...(extensions ? { extensions: extensions.map((e) => ({ ...e })) } : {}),
82
+ };
83
+ bind('/capabilities', rc || pf ? 'inherit' : 'computed', rc ? 'runtime' : pf ? 'agent-profile' : 'runtime');
84
+ // `card.skills` is the WIRE NAME for advertised capabilities. This projector is the only writer of it,
85
+ // and `profile.capabilities` is now the system of record — the card used to be the only place these
86
+ // lived, which made a signed wire document the source of truth for a fact the owner should own.
87
+ //
88
+ // Three sources, in precedence order, first id wins:
89
+ // 1. profile.capabilities — what the owner declared
90
+ // 2. surface-catalog — public surfaces the runtime actually serves but the profile omits
91
+ // 3. capability-claims — eligible public claims not covered above
92
+ // Later sources only ADD ids; they never restate one the profile already describes, so editing the
93
+ // profile is always what changes the card.
94
+ const toSkill = (c) => ({
95
+ id: c.id,
96
+ name: c.name,
97
+ description: c.description,
98
+ tags: c.tags.slice(),
99
+ ...(c.examples ? { examples: c.examples.slice() } : {}),
100
+ ...(c.inputModes ? { inputModes: c.inputModes.slice() } : {}),
101
+ ...(c.outputModes ? { outputModes: c.outputModes.slice() } : {}),
102
+ });
103
+ const profileCaps = input.profile.capabilities ?? [];
104
+ const skills = profileCaps.map(toSkill);
105
+ bind('/skills', 'inherit', profileCaps.length > 0 ? 'agent-profile' : 'surface-catalog');
106
+ const seen = new Set(skills.map((s) => s.id));
107
+ for (const [i] of profileCaps.entries())
108
+ bind(joinPointer('skills', i), 'inherit', 'agent-profile', profileCaps[i].id);
109
+ for (const s2 of input.surfaceCards.public) {
110
+ if (seen.has(s2.id))
111
+ continue;
112
+ seen.add(s2.id);
113
+ const idx = skills.length;
114
+ skills.push({ id: s2.id, name: s2.name, description: s2.description ?? s2.name, tags: [] });
115
+ bind(joinPointer('skills', idx), 'inherit', 'surface-catalog', s2.id);
116
+ }
117
+ for (const cand of input.publicSkillCandidates ?? []) {
118
+ if (seen.has(cand.id))
119
+ continue;
120
+ seen.add(cand.id);
121
+ const idx = skills.length;
122
+ skills.push(toSkill(cand));
123
+ bind(joinPointer('skills', idx), 'inherit', 'capability-claims', cand.id);
124
+ }
125
+ card.skills = skills;
126
+ return { card, fieldBindings: b, snapshotDigest: cardContentDigest(card) };
127
+ }
128
+ /** Start a draft from an inherited base. */
129
+ export function draftFromBase(base, opts) {
130
+ const revision = opts.revision ?? 1;
131
+ const draft = {
132
+ cardResourceId: opts.cardResourceId,
133
+ revision,
134
+ state: 'draft',
135
+ card: base.card,
136
+ fieldBindings: base.fieldBindings,
137
+ extendedCardPolicies: [],
138
+ sourceSnapshotDigest: base.snapshotDigest,
139
+ etag: '',
140
+ updatedAt: opts.now,
141
+ ...(opts.basedOnReleaseId ? { basedOnReleaseId: opts.basedOnReleaseId } : {}),
142
+ };
143
+ return { ...draft, etag: draftEtag(draft) };
144
+ }
145
+ /** Opaque optimistic-concurrency token: digest of card + bindings + revision. */
146
+ export function draftEtag(d) {
147
+ return jcsDigest({ card: d.card, fieldBindings: d.fieldBindings, revision: d.revision, policies: d.extendedCardPolicies }).slice(7, 39);
148
+ }
149
+ /**
150
+ * Curate one field. Returns a NEW draft (revision+1) with an `override` binding at `pointer` that remembers
151
+ * the digest of the value it replaced. Nothing is mutated. `value === undefined` removes the field.
152
+ */
153
+ export function applyOverride(draft, pointer, value, opts) {
154
+ const previous = getAtPointer(draft.card, pointer);
155
+ const card = setAtPointer(draft.card, pointer, value);
156
+ const existing = draft.fieldBindings[pointer];
157
+ const binding = {
158
+ pointer,
159
+ mode: 'override',
160
+ source: opts.source ?? { kind: 'user' },
161
+ ...(opts.evidence ? { evidence: opts.evidence } : {}),
162
+ state: 'fresh',
163
+ updatedAt: opts.now,
164
+ // Keep the ORIGINAL inherited value's digest across repeated overrides of the same field.
165
+ baseDigest: existing?.mode === 'override' && existing.baseDigest ? existing.baseDigest : jcsDigest(previous ?? null),
166
+ };
167
+ const next = {
168
+ ...draft,
169
+ revision: draft.revision + 1,
170
+ state: 'draft',
171
+ card,
172
+ fieldBindings: { ...draft.fieldBindings, [pointer]: binding },
173
+ updatedAt: opts.now,
174
+ };
175
+ return { ...next, etag: draftEtag(next) };
176
+ }
177
+ /**
178
+ * Compare a draft against a freshly inherited base. Published releases are never touched; the draft's
179
+ * bindings become `stale` (inherited value moved) or `conflict` (base moved under an override). The
180
+ * editor then shows old / new / effective and the user accepts, retains, or revises.
181
+ */
182
+ export function detectStale(draft, freshBase) {
183
+ const stale = [];
184
+ const conflict = [];
185
+ const bindings = {};
186
+ for (const [pointer, binding] of Object.entries(draft.fieldBindings)) {
187
+ const fresh = getAtPointer(freshBase.card, pointer);
188
+ const freshDigest = jcsDigest(fresh ?? null);
189
+ if (binding.mode === 'override') {
190
+ if (binding.baseDigest && binding.baseDigest !== freshDigest) {
191
+ conflict.push(pointer);
192
+ bindings[pointer] = { ...binding, state: 'conflict' };
193
+ }
194
+ else
195
+ bindings[pointer] = binding;
196
+ continue;
197
+ }
198
+ if (binding.mode === 'manual') {
199
+ bindings[pointer] = binding;
200
+ continue;
201
+ }
202
+ const current = getAtPointer(draft.card, pointer);
203
+ if (jcsDigest(current ?? null) !== freshDigest) {
204
+ stale.push(pointer);
205
+ bindings[pointer] = { ...binding, state: 'stale' };
206
+ }
207
+ else
208
+ bindings[pointer] = binding.state === 'stale' ? { ...binding, state: 'fresh' } : binding;
209
+ }
210
+ const anyStale = stale.length > 0 || conflict.length > 0;
211
+ const next = {
212
+ ...draft,
213
+ fieldBindings: bindings,
214
+ state: anyStale ? 'stale' : draft.state === 'stale' ? 'draft' : draft.state,
215
+ };
216
+ return { stale, conflict, draft: { ...next, etag: draftEtag(next) } };
217
+ }
218
+ /** Accept the fresh inherited value for one stale pointer (binding back to `inherit`, state `fresh`). */
219
+ export function acceptInherited(draft, pointer, freshBase, now) {
220
+ const freshBinding = freshBase.fieldBindings[pointer];
221
+ const value = getAtPointer(freshBase.card, pointer);
222
+ const prefix = `${pointer}/`;
223
+ // Accepting a container replaces its per-item bindings (`/skills/3`) with the fresh base's — positional
224
+ // pointers below the accepted value are meaningless once the value itself changed.
225
+ const kept = Object.fromEntries(Object.entries(draft.fieldBindings).filter(([p]) => p !== pointer && !p.startsWith(prefix)));
226
+ const below = Object.fromEntries(Object.entries(freshBase.fieldBindings)
227
+ .filter(([p]) => p.startsWith(prefix))
228
+ .map(([p, b]) => [p, { ...b, updatedAt: now }]));
229
+ const next = {
230
+ ...draft,
231
+ revision: draft.revision + 1,
232
+ card: setAtPointer(draft.card, pointer, value),
233
+ fieldBindings: {
234
+ ...kept,
235
+ ...below,
236
+ [pointer]: freshBinding ? { ...freshBinding, updatedAt: now } : { pointer, mode: 'inherit', source: { kind: 'import' }, state: 'fresh', updatedAt: now },
237
+ },
238
+ updatedAt: now,
239
+ };
240
+ return { ...next, etag: draftEtag(next) };
241
+ }
242
+ //# sourceMappingURL=field-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-binding.js","sourceRoot":"","sources":["../../src/a2a/field-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA8EvE,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAEzD,6GAA6G;AAC7G,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,GAAmC,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,IAA4B,EAAE,IAA4B,EAAE,GAAY,EAAQ,EAAE;QAC/G,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/G,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,WAAW,IAAI,OAAO,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,oBAAoB,IAAI,GAAG,CAAC;IAC7E,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC;IACvD,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;IAC9C,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAmB;QAC3B,eAAe;QACf,IAAI;QACJ,WAAW;QACX,OAAO;QACP,mBAAmB,EAAE,EAAE;QACvB,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK,EAAE;QACnE,kBAAkB,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,aAAa,CAAC,KAAK,EAAE;QACrE,MAAM,EAAE,EAAE;KACX,CAAC;IACF,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtI,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzI,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IACtG,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,IAAI,WAAW,CAAC;IAC3E,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3E,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAC/B,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9H,IAAI,CAAC,sBAAsB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,qGAAqG;IACrG,gGAAgG;IAChG,uGAAuG;IACvG,kGAAkG;IAClG,4FAA4F;IAC5F,uGAAuG;IACvG,qEAAqE;IACrE,MAAM,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACrC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,CAA+D,EAAW,EAAE,CACxF,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IAC9B,MAAM,iBAAiB,GAAG,EAAE,EAAE,iBAAiB,IAAI,EAAE,EAAE,iBAAiB,CAAC;IACzE,MAAM,UAAU,GAAG,EAAE,EAAE,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC;IACpD,IAAI,CAAC,YAAY,GAAG;QAClB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;QAC5B,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC;QAC5C,sBAAsB,EAAE,IAAI,CAAC,wBAAwB,CAAC;QACtD,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;IACF,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5G,uGAAuG;IACvG,oGAAoG;IACpG,gGAAgG;IAChG,EAAE;IACF,qDAAqD;IACrD,uDAAuD;IACvD,iGAAiG;IACjG,wEAAwE;IACxE,mGAAmG;IACnG,2CAA2C;IAC3C,MAAM,OAAO,GAAG,CAAC,CAA2B,EAAmB,EAAE,CAAC,CAAC;QACjE,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;QACpB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAAsB,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC;IACxH,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAAE,SAAS;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAErB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,IAAuB,EAAE,IAA2F;IAChJ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAwB;QACjC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,QAAQ;QACR,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,oBAAoB,EAAE,EAAE;QACxB,oBAAoB,EAAE,IAAI,CAAC,cAAc;QACzC,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,IAAI,CAAC,GAAG;QACnB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;IACF,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,CAA4F;IACpH,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1I,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B,EAAE,OAAe,EAAE,KAAc,EAAE,IAA0B;IACnH,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAmB;QAC9B,OAAO;QACP,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QACvC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,IAAI,CAAC,GAAG;QACnB,0FAA0F;QAC1F,UAAU,EAAE,QAAQ,EAAE,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC;KACrH,CAAC;IACF,MAAM,IAAI,GAAwB;QAChC,GAAG,KAAK;QACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;QAC5B,KAAK,EAAE,OAAO;QACd,IAAI;QACJ,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QAC7D,SAAS,EAAE,IAAI,CAAC,GAAG;KACpB,CAAC;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAA0B,EAAE,SAA6D;IACnH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAmC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YACxD,CAAC;;gBAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YACnC,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACrD,CAAC;;YAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAClG,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAwB;QAChC,GAAG,KAAK;QACR,aAAa,EAAE,QAAQ;QACvB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;KAC5E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AACxE,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,eAAe,CAAC,KAA0B,EAAE,OAAe,EAAE,SAA4D,EAAE,GAAW;IACpJ,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;IAC7B,wGAAwG;IACxG,mFAAmF;IACnF,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7H,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC;SACpC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAClD,CAAC;IACF,MAAM,IAAI,GAAwB;QAChC,GAAG,KAAK;QACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;QAC5B,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;QAC9C,aAAa,EAAE;YACb,GAAG,IAAI;YACP,GAAG,KAAK;YACR,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE;SACzJ;QACD,SAAS,EAAE,GAAG;KACf,CAAC;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Import an A2A Agent Card document (spec 347 §7).
3
+ *
4
+ * 1. keep the exact source bytes + their digest (evidence — never mutated);
5
+ * 2. verify EXISTING signatures over the raw object BEFORE any normalization (with keys ⇒ pass/fail;
6
+ * without keys ⇒ `evidenceNeeded`, never "assumed fine");
7
+ * 3. split known A2A 1.0 fields from unknown ones (unknown recorded by JSON pointer + `UNKNOWN_FIELD`);
8
+ * 4. validate the typed view.
9
+ *
10
+ * The result is an import PROPOSAL — the caller decides what (if anything) becomes a draft. Nothing here
11
+ * writes canonical profile data.
12
+ */
13
+ import type { ProjectionDiagnosticV1 } from '@agenticprimitives/types';
14
+ import { type A2ACardKeyResolver, type VerifyA2ACardSignaturesResult } from './jws.js';
15
+ import { type A2AImportedCardV1, type CardEnvironment } from './types.js';
16
+ import { type ValidateA2ACardOptions } from './validation.js';
17
+ export declare class A2ACardImportError extends Error {
18
+ readonly code: string;
19
+ constructor(message: string, code: string);
20
+ }
21
+ export interface ImportA2ACardOptions {
22
+ uri?: string;
23
+ retrievedAt?: string;
24
+ /** `kid` → key for verifying signatures already on the document. Absent ⇒ `SIGNATURE_UNVERIFIED`. */
25
+ verifyKeys?: A2ACardKeyResolver;
26
+ /** Validation context for the typed view. Default `{ environment: 'development' }`. */
27
+ validation?: Partial<ValidateA2ACardOptions> & {
28
+ environment?: CardEnvironment;
29
+ };
30
+ }
31
+ export interface ImportA2ACardResult {
32
+ imported: A2AImportedCardV1;
33
+ diagnostics: ProjectionDiagnosticV1[];
34
+ /** Present only when the source carried signatures. */
35
+ signatureVerification?: VerifyA2ACardSignaturesResult;
36
+ }
37
+ /** Import a card document. Throws `A2ACardImportError` only when the source is not a JSON object. */
38
+ export declare function importA2ACard(source: Uint8Array | string, opts?: ImportA2ACardOptions): Promise<ImportA2ACardResult>;
39
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/a2a/import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAA2B,KAAK,kBAAkB,EAAE,KAAK,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAEhH,OAAO,EAA8C,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAqC,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEjG,qBAAa,kBAAmB,SAAQ,KAAK;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM;CAInD;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;CAClF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACtC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,6BAA6B,CAAC;CACvD;AAcD,qGAAqG;AACrG,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuF9H"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Import an A2A Agent Card document (spec 347 §7).
3
+ *
4
+ * 1. keep the exact source bytes + their digest (evidence — never mutated);
5
+ * 2. verify EXISTING signatures over the raw object BEFORE any normalization (with keys ⇒ pass/fail;
6
+ * without keys ⇒ `evidenceNeeded`, never "assumed fine");
7
+ * 3. split known A2A 1.0 fields from unknown ones (unknown recorded by JSON pointer + `UNKNOWN_FIELD`);
8
+ * 4. validate the typed view.
9
+ *
10
+ * The result is an import PROPOSAL — the caller decides what (if anything) becomes a draft. Nothing here
11
+ * writes canonical profile data.
12
+ */
13
+ import { sha256Digest } from './canonical.js';
14
+ import { verifyA2ACardSignatures } from './jws.js';
15
+ import { joinPointer } from './pointer.js';
16
+ import { A2A_CARD_KNOWN_FIELDS } from './types.js';
17
+ import { DIAGNOSTIC_CODES, validateA2ACard } from './validation.js';
18
+ export class A2ACardImportError extends Error {
19
+ code;
20
+ constructor(message, code) {
21
+ super(message);
22
+ this.code = code;
23
+ this.name = 'A2ACardImportError';
24
+ }
25
+ }
26
+ const KNOWN_TOP = new Set(A2A_CARD_KNOWN_FIELDS);
27
+ const KNOWN_NESTED = {
28
+ provider: new Set(['organization', 'url']),
29
+ capabilities: new Set(['streaming', 'pushNotifications', 'stateTransitionHistory', 'extendedAgentCard', 'extensions']),
30
+ supportedInterfaces: new Set(['url', 'protocolBinding', 'protocolVersion', 'tenant']),
31
+ skills: new Set(['id', 'name', 'description', 'tags', 'examples', 'inputModes', 'outputModes', 'securityRequirements']),
32
+ signatures: new Set(['protected', 'signature', 'header']),
33
+ };
34
+ const utf8 = new TextEncoder();
35
+ const utf8dec = new TextDecoder();
36
+ /** Import a card document. Throws `A2ACardImportError` only when the source is not a JSON object. */
37
+ export async function importA2ACard(source, opts = {}) {
38
+ const sourceBytes = typeof source === 'string' ? utf8.encode(source) : new Uint8Array(source);
39
+ const sourceDigest = sha256Digest(sourceBytes);
40
+ let raw;
41
+ try {
42
+ raw = JSON.parse(utf8dec.decode(sourceBytes));
43
+ }
44
+ catch (e) {
45
+ throw new A2ACardImportError(`source is not JSON: ${e.message}`, DIAGNOSTIC_CODES.SOURCE_NOT_JSON);
46
+ }
47
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
48
+ throw new A2ACardImportError('source is not a JSON object', DIAGNOSTIC_CODES.SOURCE_NOT_JSON);
49
+ }
50
+ const rawObj = raw;
51
+ const diagnostics = [];
52
+ // 2. signatures — over the RAW object (unknown fields included), before any normalization.
53
+ let signatureVerification;
54
+ if (Array.isArray(rawObj.signatures) && rawObj.signatures.length > 0) {
55
+ if (opts.verifyKeys) {
56
+ signatureVerification = await verifyA2ACardSignatures(rawObj, { keys: opts.verifyKeys });
57
+ if (!signatureVerification.ok) {
58
+ diagnostics.push({
59
+ code: DIAGNOSTIC_CODES.SIGNATURE_INVALID,
60
+ severity: 'error',
61
+ sourcePointer: '/signatures',
62
+ message: `signature verification failed: ${signatureVerification.failures.map((f) => `${f.kid || '?'}:${f.reason}`).join(', ')}`,
63
+ });
64
+ }
65
+ }
66
+ else {
67
+ diagnostics.push({
68
+ code: DIAGNOSTIC_CODES.SIGNATURE_UNVERIFIED,
69
+ severity: 'evidenceNeeded',
70
+ sourcePointer: '/signatures',
71
+ message: 'the document carries signatures but no verification keys were supplied',
72
+ explanation: 'Unverified is not verified. Supply `verifyKeys` (kid → public key) to establish who signed this card.',
73
+ });
74
+ }
75
+ }
76
+ // 3. known vs unknown.
77
+ const unknownFields = {};
78
+ const known = {};
79
+ for (const [k, v] of Object.entries(rawObj)) {
80
+ if (!KNOWN_TOP.has(k)) {
81
+ unknownFields[joinPointer(k)] = v;
82
+ continue;
83
+ }
84
+ known[k] = v;
85
+ }
86
+ for (const [field, allowed] of Object.entries(KNOWN_NESTED)) {
87
+ const v = known[field];
88
+ if (Array.isArray(v)) {
89
+ known[field] = v.map((item, i) => splitUnknown(item, allowed, joinPointer(field, i), unknownFields));
90
+ }
91
+ else if (v && typeof v === 'object') {
92
+ known[field] = splitUnknown(v, allowed, joinPointer(field), unknownFields);
93
+ }
94
+ }
95
+ for (const pointer of Object.keys(unknownFields)) {
96
+ diagnostics.push({
97
+ code: DIAGNOSTIC_CODES.UNKNOWN_FIELD,
98
+ severity: 'warning',
99
+ sourcePointer: pointer,
100
+ message: `field ${pointer} is not part of the A2A 1.0 Agent Card model; preserved as an unknown field`,
101
+ explanation: 'Unknown fields are kept beside the typed card and reported, never silently dropped or promoted.',
102
+ });
103
+ }
104
+ const card = known;
105
+ // 4. validate the typed view.
106
+ const env = opts.validation?.environment ?? 'development';
107
+ diagnostics.push(...validateA2ACard(card, {
108
+ ...opts.validation,
109
+ environment: env,
110
+ protocolVersion: opts.validation?.protocolVersion ?? (typeof card.protocolVersion === 'string' ? card.protocolVersion : '1.0'),
111
+ }));
112
+ const imported = {
113
+ card,
114
+ unknownFields,
115
+ sourceBytes,
116
+ sourceDigest,
117
+ ...(opts.retrievedAt ? { retrievedAt: opts.retrievedAt } : {}),
118
+ ...(opts.uri ? { uri: opts.uri } : {}),
119
+ };
120
+ return { imported, diagnostics, ...(signatureVerification ? { signatureVerification } : {}) };
121
+ }
122
+ function splitUnknown(item, allowed, base, unknownFields) {
123
+ if (!item || typeof item !== 'object' || Array.isArray(item))
124
+ return item;
125
+ const out = {};
126
+ for (const [k, v] of Object.entries(item)) {
127
+ if (allowed.has(k))
128
+ out[k] = v;
129
+ else
130
+ unknownFields[`${base}${joinPointer(k)}`] = v;
131
+ }
132
+ return out;
133
+ }
134
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/a2a/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type { A2AProtocolBinding, A2AAgentInterfaceV1, A2AAgentProviderV1, A2AAgentExtensionV1, A2AAgentCapabilitiesV1, A2AApiKeySecuritySchemeV1, A2AHttpSecuritySchemeV1, A2AOAuthFlowV1, A2AOAuth2SecuritySchemeV1, A2AOpenIdConnectSecuritySchemeV1, A2AMutualTlsSecuritySchemeV1, A2ASecuritySchemeV1, A2ASecurityRequirementV1, A2AAgentSkillV1, A2AAgentCardSignatureV1, A2AAgentCardV1, A2AImportedCardV1, OptionalPresence, FieldBindingMode, FieldBindingSourceKind, FieldBindingState, FieldBindingV1, CardEnvironment, CardDraftState, CardReleaseState, ExtendedCardPolicyV1, A2AAgentCardResourceV1, A2AAgentCardDraftV1, A2ACardSignatureRefV1, SmartAgentCardBindingV1, SignedSmartAgentCardBindingV1, CardRevocationV1, A2AAgentCardReleaseV1, CardSigningKeyAuthorizationV1, Sha256, } from './types.js';
2
+ export { A2A_SECURITY_SCHEME_TYPES, A2A_CARD_KNOWN_FIELDS } from './types.js';
3
+ export { unsignedCard, canonicalCardJson, canonicalCardBytes, cardContentDigest, signedCardContentDigest, sha256Digest, jcsDigest, type CardLike, } from './canonical.js';
4
+ export { base64UrlEncode, base64UrlDecode, jwkThumbprint, supportsEdDSA, generateA2ACardSigningKey, importVerificationKey, signA2ACard, verifyA2ACardSignatures, decodeProtectedHeader, type A2ACardJwsAlg, type A2ACardSigningKeyPair, type SignA2ACardOptions, type SignA2ACardResult, type A2ACardKeyResolver, type VerifyA2ACardSignaturesOptions, type VerifyA2ACardSignaturesResult, type A2ACardSignatureFailureReason, } from './jws.js';
5
+ export { SMART_AGENT_CARD_BINDING_DOMAIN_NAME, SMART_AGENT_CARD_BINDING_DOMAIN_VERSION, SMART_AGENT_CARD_BINDING_TYPES, SMART_AGENT_CARD_BINDING_TYPE_STRING, smartAgentCardBindingDomain, smartAgentCardBindingMessage, smartAgentCardBindingDigest, verifySmartAgentCardBinding, sha256ToBytes32, bytes32ToSha256, thumbprintToBytes32, bytes32ToThumbprint, type VerifySmartAgentCardBindingResult, type VerifySmartAgentCardBindingOptions, } from './binding.js';
6
+ export type { Erc1271Verifier } from '../card.js';
7
+ export { parsePointer, escapePointerToken, joinPointer, getAtPointer, setAtPointer } from './pointer.js';
8
+ export { inheritCardBase, draftFromBase, draftEtag, applyOverride, detectStale, acceptInherited, type SurfaceCardSkillLike, type PublicSkillCandidateLike, type InheritCardBaseInput, type InheritedCardBase, type ApplyOverrideOptions, type StaleReport, } from './field-binding.js';
9
+ export { DIAGNOSTIC_CODES, validateA2ACard, hasErrors, isPrivateHost, type DiagnosticCode, type CatalogSkillLike, type RuntimeCapabilityEvidence, type ValidateA2ACardOptions, } from './validation.js';
10
+ export { importA2ACard, A2ACardImportError, type ImportA2ACardOptions, type ImportA2ACardResult } from './import.js';
11
+ export { CARD_RELEASE_TRANSITIONS, TERMINAL_RELEASE_STATES, isProjectionReady, createRelease, transition, attachSignature, attachSmartAgentBinding, revoke, forkDraft, A2ACardLifecycleError, A2ACardValidationError, type CreateReleaseOptions, type TransitionContext, type AttachSignatureInput, type RevokeOptions, } from './release.js';
12
+ export { PLAYBOOK_BINDING_EXT_URI, playbookBindingExtension, readPlaybookBinding, withPlaybookBinding, playbookBoundRelease, type PlaybookBindingV1, } from './playbook-binding.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ // @agenticprimitives/agent-profile/a2a — the A2A Agent Card model (spec 347 §4; ADR-0062).
2
+ //
3
+ // The A2A card says what THIS A2A server does and how to reach it. It is NOT the identity (the SA address),
4
+ // NOT the Canonical Agent Profile (`CanonicalAgentProfileV1`, root export), and NOT a registry entry.
5
+ //
6
+ // types A2AAgentCardV1 + resource / draft / release / binding / provenance records
7
+ // canonical strip `signatures` → RFC 8785 JCS → bytes → sha256 digests
8
+ // jws ES256 (WebCrypto) detached JWS sign / fail-closed verify, RFC 7638 thumbprints
9
+ // binding SmartAgentCardBindingV1 EIP-712 digest + ERC-1271 verify (injected port)
10
+ // field-binding inheritCardBase / applyOverride / detectStale (pure provenance)
11
+ // validation validateA2ACard → ProjectionDiagnosticV1[] (stable DIAGNOSTIC_CODES)
12
+ // import importA2ACard: source bytes kept, signatures verified BEFORE normalizing, unknown fields
13
+ // release createRelease / transition / attachSignature / attachSmartAgentBinding / revoke / forkDraft
14
+ export { A2A_SECURITY_SCHEME_TYPES, A2A_CARD_KNOWN_FIELDS } from './types.js';
15
+ export { unsignedCard, canonicalCardJson, canonicalCardBytes, cardContentDigest, signedCardContentDigest, sha256Digest, jcsDigest, } from './canonical.js';
16
+ export { base64UrlEncode, base64UrlDecode, jwkThumbprint, supportsEdDSA, generateA2ACardSigningKey, importVerificationKey, signA2ACard, verifyA2ACardSignatures, decodeProtectedHeader, } from './jws.js';
17
+ export { SMART_AGENT_CARD_BINDING_DOMAIN_NAME, SMART_AGENT_CARD_BINDING_DOMAIN_VERSION, SMART_AGENT_CARD_BINDING_TYPES, SMART_AGENT_CARD_BINDING_TYPE_STRING, smartAgentCardBindingDomain, smartAgentCardBindingMessage, smartAgentCardBindingDigest, verifySmartAgentCardBinding, sha256ToBytes32, bytes32ToSha256, thumbprintToBytes32, bytes32ToThumbprint, } from './binding.js';
18
+ export { parsePointer, escapePointerToken, joinPointer, getAtPointer, setAtPointer } from './pointer.js';
19
+ export { inheritCardBase, draftFromBase, draftEtag, applyOverride, detectStale, acceptInherited, } from './field-binding.js';
20
+ export { DIAGNOSTIC_CODES, validateA2ACard, hasErrors, isPrivateHost, } from './validation.js';
21
+ export { importA2ACard, A2ACardImportError } from './import.js';
22
+ export { CARD_RELEASE_TRANSITIONS, TERMINAL_RELEASE_STATES, isProjectionReady, createRelease, transition, attachSignature, attachSmartAgentBinding, revoke, forkDraft, A2ACardLifecycleError, A2ACardValidationError, } from './release.js';
23
+ export { PLAYBOOK_BINDING_EXT_URI, playbookBindingExtension, readPlaybookBinding, withPlaybookBinding, playbookBoundRelease, } from './playbook-binding.js';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,EAAE;AACF,4GAA4G;AAC5G,sGAAsG;AACtG,EAAE;AACF,8FAA8F;AAC9F,8EAA8E;AAC9E,kGAAkG;AAClG,4FAA4F;AAC5F,mFAAmF;AACnF,wFAAwF;AACxF,4GAA4G;AAC5G,+GAA+G;AAuC/G,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,SAAS,GAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,GAStB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,oCAAoC,EACpC,uCAAuC,EACvC,8BAA8B,EAC9B,oCAAoC,EACpC,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEzG,OAAO,EACL,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,eAAe,GAOhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,aAAa,GAKd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAuD,MAAM,aAAa,CAAC;AAErH,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,sBAAsB,GAKvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Standard A2A card signatures: detached JWS over the canonical card bytes (spec 347 §4.2).
3
+ *
4
+ * signing input = base64url(protected) "." base64url(canonicalCardBytes)
5
+ * protected = { alg: 'ES256' | 'EdDSA', kid: <RFC 7638 JWK thumbprint> }
6
+ *
7
+ * WebCrypto only (`globalThis.crypto.subtle`, Node ≥ 20 and workerd) — no `jose`. ES256 (P-256) is the
8
+ * Ring-0 default; EdDSA is used only when the runtime can do it (`supportsEdDSA()`), never required.
9
+ *
10
+ * Verification is FAIL-CLOSED (ADR-0013): no signatures, an unknown `kid`, an unsupported `alg`, a header
11
+ * that cannot be parsed, or any bad signature ⇒ `ok: false`. A non-AP A2A client verifies these signatures
12
+ * and never needs the Smart Agent binding (`binding.ts`).
13
+ */
14
+ import { type CardLike } from './canonical.js';
15
+ import type { A2AAgentCardSignatureV1, A2AAgentCardV1 } from './types.js';
16
+ export type A2ACardJwsAlg = 'ES256' | 'EdDSA';
17
+ export declare function base64UrlEncode(bytes: Uint8Array): string;
18
+ export declare function base64UrlDecode(s: string): Uint8Array;
19
+ /** RFC 7638 thumbprint: sha256 over the JCS of the REQUIRED public members only, base64url. */
20
+ export declare function jwkThumbprint(jwk: JsonWebKey): Promise<string>;
21
+ /** Is EdDSA (Ed25519) usable here? Feature-detected, never assumed (workerd has no Ed25519). */
22
+ export declare function supportsEdDSA(): Promise<boolean>;
23
+ export interface A2ACardSigningKeyPair {
24
+ alg: A2ACardJwsAlg;
25
+ privateKey: CryptoKey;
26
+ publicKey: CryptoKey;
27
+ publicJwk: JsonWebKey;
28
+ /** RFC 7638 thumbprint of `publicJwk` — the `kid`. */
29
+ kid: string;
30
+ }
31
+ /** Generate a card-signing key pair. ES256 by default; `EdDSA` throws where the runtime lacks it. */
32
+ export declare function generateA2ACardSigningKey(alg?: A2ACardJwsAlg): Promise<A2ACardSigningKeyPair>;
33
+ /** Import a public JWK as a verification key for `alg`. */
34
+ export declare function importVerificationKey(jwk: JsonWebKey, alg: A2ACardJwsAlg): Promise<CryptoKey>;
35
+ export interface SignA2ACardOptions {
36
+ privateKey: CryptoKey;
37
+ /** RFC 7638 thumbprint of the matching public key (`jwkThumbprint`). */
38
+ kid: string;
39
+ alg?: A2ACardJwsAlg;
40
+ }
41
+ export interface SignA2ACardResult<T extends CardLike> {
42
+ /** `card` with the new signature APPENDED to `signatures` (existing ones kept). */
43
+ card: T & {
44
+ signatures: A2AAgentCardSignatureV1[];
45
+ };
46
+ signature: A2AAgentCardSignatureV1;
47
+ /** RFC 7515 compact serialization with a DETACHED payload (`<protected>..<signature>`). */
48
+ compact: string;
49
+ /** base64url of the canonical bytes — the detached payload a verifier re-derives. */
50
+ payload: string;
51
+ }
52
+ /** Sign the canonical card bytes; returns the card with the signature appended. Pure apart from the key op. */
53
+ export declare function signA2ACard<T extends CardLike>(card: T, opts: SignA2ACardOptions): Promise<SignA2ACardResult<T>>;
54
+ export type A2ACardKeyResolver = (kid: string) => CryptoKey | JsonWebKey | undefined | Promise<CryptoKey | JsonWebKey | undefined>;
55
+ export interface VerifyA2ACardSignaturesOptions {
56
+ /** `kid` → public key. Returning `undefined` fails that entry (`unknown_kid`); never guesses. */
57
+ keys: A2ACardKeyResolver;
58
+ }
59
+ export type A2ACardSignatureFailureReason = 'no_signatures' | 'bad_entry' | 'bad_protected_header' | 'unsupported_alg' | 'unknown_kid' | 'key_import_failed' | 'signature_invalid';
60
+ export interface VerifyA2ACardSignaturesResult {
61
+ /** True ONLY when ≥ 1 signature is present and EVERY signature verified. */
62
+ ok: boolean;
63
+ verified: string[];
64
+ failures: {
65
+ kid: string;
66
+ reason: A2ACardSignatureFailureReason;
67
+ }[];
68
+ }
69
+ /** Re-derive the canonical bytes and verify every signature entry. Fail-closed. */
70
+ export declare function verifyA2ACardSignatures(card: CardLike | A2AAgentCardV1, opts: VerifyA2ACardSignaturesOptions): Promise<VerifyA2ACardSignaturesResult>;
71
+ /** Decode a signature entry's protected header (`alg`, `kid`) without verifying anything. */
72
+ export declare function decodeProtectedHeader(entry: A2AAgentCardSignatureV1): {
73
+ alg?: string;
74
+ kid?: string;
75
+ };
76
+ //# sourceMappingURL=jws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jws.d.ts","sourceRoot":"","sources":["../../src/a2a/jws.ts"],"names":[],"mappings":"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"}