@agenticprimitives/fabric 0.0.0-alpha.4 → 0.0.0-alpha.8

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 (130) hide show
  1. package/CLAUDE.md +22 -2
  2. package/README.md +16 -16
  3. package/dist/case-emissions.d.ts +95 -0
  4. package/dist/case-emissions.d.ts.map +1 -0
  5. package/dist/case-emissions.js +208 -0
  6. package/dist/case-emissions.js.map +1 -0
  7. package/dist/case-machine.d.ts +28 -2
  8. package/dist/case-machine.d.ts.map +1 -1
  9. package/dist/case-machine.js +34 -7
  10. package/dist/case-machine.js.map +1 -1
  11. package/dist/cloudflare/index.d.ts +1 -0
  12. package/dist/cloudflare/index.d.ts.map +1 -1
  13. package/dist/cloudflare/index.js +4 -0
  14. package/dist/cloudflare/index.js.map +1 -1
  15. package/dist/cloudflare/interaction-store.d.ts +55 -0
  16. package/dist/cloudflare/interaction-store.d.ts.map +1 -0
  17. package/dist/cloudflare/interaction-store.js +230 -0
  18. package/dist/cloudflare/interaction-store.js.map +1 -0
  19. package/dist/cloudflare/principal-gateway-do.d.ts +118 -2
  20. package/dist/cloudflare/principal-gateway-do.d.ts.map +1 -1
  21. package/dist/cloudflare/principal-gateway-do.js +182 -7
  22. package/dist/cloudflare/principal-gateway-do.js.map +1 -1
  23. package/dist/communicative-act.d.ts +24 -1
  24. package/dist/communicative-act.d.ts.map +1 -1
  25. package/dist/communicative-act.js +28 -0
  26. package/dist/communicative-act.js.map +1 -1
  27. package/dist/delivery-envelope.d.ts.map +1 -1
  28. package/dist/delivery-envelope.js +0 -1
  29. package/dist/delivery-envelope.js.map +1 -1
  30. package/dist/enum-retirement.d.ts +43 -0
  31. package/dist/enum-retirement.d.ts.map +1 -0
  32. package/dist/enum-retirement.js +93 -0
  33. package/dist/enum-retirement.js.map +1 -0
  34. package/dist/exchange-record.d.ts +35 -4
  35. package/dist/exchange-record.d.ts.map +1 -1
  36. package/dist/exchange-record.js.map +1 -1
  37. package/dist/exchange-reducer.d.ts +32 -4
  38. package/dist/exchange-reducer.d.ts.map +1 -1
  39. package/dist/exchange-reducer.js +75 -1
  40. package/dist/exchange-reducer.js.map +1 -1
  41. package/dist/exchange-state.d.ts +30 -8
  42. package/dist/exchange-state.d.ts.map +1 -1
  43. package/dist/exchange-state.js +12 -10
  44. package/dist/exchange-state.js.map +1 -1
  45. package/dist/inbox-doc.d.ts +2 -2
  46. package/dist/inbox-doc.d.ts.map +1 -1
  47. package/dist/inbox-doc.js.map +1 -1
  48. package/dist/inbox-projection.d.ts +2 -2
  49. package/dist/inbox-projection.d.ts.map +1 -1
  50. package/dist/inbox-projection.js.map +1 -1
  51. package/dist/index.d.ts +21 -3
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +32 -2
  54. package/dist/index.js.map +1 -1
  55. package/dist/interaction-machines.d.ts +136 -0
  56. package/dist/interaction-machines.d.ts.map +1 -0
  57. package/dist/interaction-machines.js +174 -0
  58. package/dist/interaction-machines.js.map +1 -0
  59. package/dist/interaction-profile.d.ts +126 -0
  60. package/dist/interaction-profile.d.ts.map +1 -0
  61. package/dist/interaction-profile.js +192 -0
  62. package/dist/interaction-profile.js.map +1 -0
  63. package/dist/interaction-record.d.ts +168 -0
  64. package/dist/interaction-record.d.ts.map +1 -0
  65. package/dist/interaction-record.js +108 -0
  66. package/dist/interaction-record.js.map +1 -0
  67. package/dist/interactions/machine.d.ts +2 -2
  68. package/dist/interactions/machine.d.ts.map +1 -1
  69. package/dist/interactions/machine.js +2 -2
  70. package/dist/interactions/machine.js.map +1 -1
  71. package/dist/interactions/store.d.ts +9 -0
  72. package/dist/interactions/store.d.ts.map +1 -1
  73. package/dist/interactions/store.js +57 -2
  74. package/dist/interactions/store.js.map +1 -1
  75. package/dist/messaging/board.d.ts +3 -3
  76. package/dist/messaging/board.d.ts.map +1 -1
  77. package/dist/messaging/board.js +2 -2
  78. package/dist/messaging/board.js.map +1 -1
  79. package/dist/messaging/conversation-interaction.d.ts +66 -0
  80. package/dist/messaging/conversation-interaction.d.ts.map +1 -0
  81. package/dist/messaging/conversation-interaction.js +139 -0
  82. package/dist/messaging/conversation-interaction.js.map +1 -0
  83. package/dist/messaging/delivery.d.ts +2 -2
  84. package/dist/messaging/delivery.d.ts.map +1 -1
  85. package/dist/messaging/delivery.js +8 -1
  86. package/dist/messaging/delivery.js.map +1 -1
  87. package/dist/messaging/envelope.d.ts +7 -3
  88. package/dist/messaging/envelope.d.ts.map +1 -1
  89. package/dist/messaging/envelope.js +18 -1
  90. package/dist/messaging/envelope.js.map +1 -1
  91. package/dist/messaging/hash.d.ts +8 -2
  92. package/dist/messaging/hash.d.ts.map +1 -1
  93. package/dist/messaging/hash.js +6 -0
  94. package/dist/messaging/hash.js.map +1 -1
  95. package/dist/messaging/inbox-assistant.d.ts +16 -4
  96. package/dist/messaging/inbox-assistant.d.ts.map +1 -1
  97. package/dist/messaging/inbox-assistant.js +27 -4
  98. package/dist/messaging/inbox-assistant.js.map +1 -1
  99. package/dist/messaging/index.d.ts +4 -1
  100. package/dist/messaging/index.d.ts.map +1 -1
  101. package/dist/messaging/index.js +4 -0
  102. package/dist/messaging/index.js.map +1 -1
  103. package/dist/messaging/projector.d.ts +3 -3
  104. package/dist/messaging/projector.d.ts.map +1 -1
  105. package/dist/messaging/projector.js.map +1 -1
  106. package/dist/messaging/receipts.d.ts +3 -3
  107. package/dist/messaging/receipts.d.ts.map +1 -1
  108. package/dist/messaging/receipts.js.map +1 -1
  109. package/dist/messaging/rules.d.ts +10 -3
  110. package/dist/messaging/rules.d.ts.map +1 -1
  111. package/dist/messaging/rules.js +8 -1
  112. package/dist/messaging/rules.js.map +1 -1
  113. package/dist/messaging/store.d.ts +4 -4
  114. package/dist/messaging/store.d.ts.map +1 -1
  115. package/dist/messaging/store.js +5 -3
  116. package/dist/messaging/store.js.map +1 -1
  117. package/dist/messaging/types.d.ts +30 -0
  118. package/dist/messaging/types.d.ts.map +1 -1
  119. package/dist/messaging/types.js +3 -0
  120. package/dist/messaging/types.js.map +1 -1
  121. package/dist/messaging/vault-store.d.ts +2 -2
  122. package/dist/messaging/vault-store.d.ts.map +1 -1
  123. package/dist/protocol-binding.d.ts +71 -0
  124. package/dist/protocol-binding.d.ts.map +1 -0
  125. package/dist/protocol-binding.js +0 -0
  126. package/dist/protocol-binding.js.map +1 -0
  127. package/dist/record-catalog.d.ts.map +1 -1
  128. package/dist/record-catalog.js +7 -0
  129. package/dist/record-catalog.js.map +1 -1
  130. package/package.json +7 -7
@@ -1,10 +1,44 @@
1
1
  // In-memory InteractionStore: cases + transition log with idempotent replay
2
2
  // and deterministic expiry sweeps (spec 309 §6.1, §8.10).
3
3
  import { applyInteractionTransition, isTerminalState } from './machine.js';
4
+ import { applyCaseEmissions, caseTransitionEmissions } from '../case-emissions.js';
4
5
  export function createInMemoryInteractionStore() {
5
6
  const cases = new Map();
6
7
  const events = new Map();
7
8
  const appliedKeys = new Map();
9
+ const decisions = new Map();
10
+ const commitments = new Map();
11
+ /**
12
+ * spec 340 W10 — record what the transition emitted into the other two machines.
13
+ *
14
+ * Called only after the case machine ACCEPTED, and derived from the PRE-transition case: the seed
15
+ * reads identity and party fields, none of which a transition changes.
16
+ *
17
+ * A rejected emission does not roll back the case. That is deliberate and it is the honest option:
18
+ * the case transition is already a fact, and the alternatives are worse — silently dropping it would
19
+ * make an unrecorded determination indistinguishable from a recorded one, and unwinding an accepted
20
+ * transition would let the decision machine veto a move the case machine's own rules permitted.
21
+ * `void` on a case that never had a commitment is the ordinary, expected case of this.
22
+ */
23
+ function emit(before, event) {
24
+ const emissions = caseTransitionEmissions(before, {
25
+ version: 'ap.case.event.v1',
26
+ caseId: event.interactionId,
27
+ transition: event.transition,
28
+ actor: event.actor,
29
+ at: event.at,
30
+ });
31
+ if (!emissions.decision && !emissions.commitment)
32
+ return;
33
+ const out = applyCaseEmissions(emissions, {
34
+ decision: decisions.get(event.interactionId) ?? null,
35
+ commitment: commitments.get(event.interactionId) ?? null,
36
+ }, { actor: event.actor, at: event.at });
37
+ if (out.decision?.applied)
38
+ decisions.set(event.interactionId, out.decision.record);
39
+ if (out.commitment?.applied)
40
+ commitments.set(event.interactionId, out.commitment.record);
41
+ }
8
42
  return {
9
43
  putCase(c) {
10
44
  if (c.state !== 'draft') {
@@ -27,15 +61,26 @@ export function createInMemoryInteractionStore() {
27
61
  if (event.idempotencyKey !== undefined && keys.has(event.idempotencyKey)) {
28
62
  return { ok: true, case: current };
29
63
  }
30
- const result = applyInteractionTransition(current, event);
64
+ // W10b-3: the case machine cannot see the decision machine, so the store — which holds both —
65
+ // supplies it. `issue-credential` refuses without a granted determination.
66
+ const result = applyInteractionTransition(current, event, {
67
+ decisionState: decisions.get(event.interactionId)?.state ?? null,
68
+ });
31
69
  if (!result.ok)
32
70
  return result;
33
71
  cases.set(event.interactionId, result.case);
34
72
  events.get(event.interactionId).push(event);
35
73
  if (event.idempotencyKey !== undefined)
36
74
  keys.add(event.idempotencyKey);
75
+ emit(current, event);
37
76
  return result;
38
77
  },
78
+ getDecision(id) {
79
+ return decisions.get(id) ?? null;
80
+ },
81
+ getCommitment(id) {
82
+ return commitments.get(id) ?? null;
83
+ },
39
84
  listEvents(id) {
40
85
  return [...(events.get(id) ?? [])];
41
86
  },
@@ -55,10 +100,20 @@ export function createInMemoryInteractionStore() {
55
100
  transition: 'expire',
56
101
  actor: c.responder, // role 'any' — deterministic sweep, not a user action
57
102
  at: nowIso,
58
- });
103
+ }, { decisionState: decisions.get(c.id)?.state ?? null });
59
104
  if (result.ok) {
60
105
  cases.set(c.id, result.case);
61
106
  expired.push(result.case);
107
+ // The sweep records the determination too. `expire` is the one decision transition the
108
+ // machine lets any actor make, and the emission attributes it to the creditor rather than
109
+ // to `c.responder` — the sweep's stand-in actor, who decided nothing.
110
+ emit(c, {
111
+ version: 'ap.interaction.event.v1',
112
+ interactionId: c.id,
113
+ transition: 'expire',
114
+ actor: c.responder,
115
+ at: nowIso,
116
+ });
62
117
  }
63
118
  }
64
119
  return expired;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/interactions/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/interactions/store.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { CanonicalAgentId } from '@agenticprimitives/types';
2
- import type { ContextRefV1, ConversationDescriptorV1, MessageEnvelopeV1 } from './types.js';
2
+ import type { AnyMessageEnvelope, ContextRefV1, ConversationDescriptorV1 } from './types.js';
3
3
  import { type ConsultProvenanceV1 } from './consult.js';
4
4
  export interface ChannelMessageEntryV1 {
5
- envelope: MessageEnvelopeV1;
5
+ envelope: AnyMessageEnvelope;
6
6
  authorName: string;
7
7
  /** spec 324 §9 acting-agent provenance (spec 327): WHO performed the authoring move when it was
8
8
  * not a human session — for org-assistant posts, the org SA (CAIP-10). Absent ⇒ human-session
@@ -129,6 +129,6 @@ export declare function appendBoardPost(board: ChannelV1[], opts: {
129
129
  /** spec 329 §6 — PROV attribution stored on the entry (synthesis posts only). */
130
130
  prov?: ConsultProvenanceV1;
131
131
  }): Promise<BoardResult<{
132
- envelope: MessageEnvelopeV1;
132
+ envelope: AnyMessageEnvelope;
133
133
  }>>;
134
134
  //# sourceMappingURL=board.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/messaging/board.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/messaging/board.ts"],"names":[],"mappings":"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"}
@@ -155,10 +155,10 @@ export async function appendBoardPost(board, opts) {
155
155
  const extraRefs = (opts.contextRefs ?? []).filter((r) => !baseRefs.some((b) => b.kind === r.kind && b.id === r.id));
156
156
  const contextRefs = [...baseRefs, ...extraRefs];
157
157
  const envelope = {
158
- version: 'ap.message.v1',
158
+ version: 'ap.message.v2',
159
159
  id: messageId,
160
160
  conversationId: channel.descriptor.id,
161
- kind: 'plain',
161
+ performative: 'INFORM',
162
162
  from: opts.from,
163
163
  // Shared-board addressing: the descriptor's owner stands for the board (spec 313 §6).
164
164
  to: [channel.descriptor.owner],
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/messaging/board.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/messaging/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { CanonicalAgentId } from '@agenticprimitives/types';
2
+ import type { ConversationDescriptorV1, ConversationId } from './types.js';
3
+ import type { InteractionId, ProfileVersion, ParticipationV1 } from '../interaction-record.js';
4
+ import type { InteractionState } from '../interaction-machines.js';
5
+ import { type ChannelV1 } from './board.js';
6
+ /** Derived from the conversation id, so the two can never disagree and no field needs adding. */
7
+ export declare function conversationInteractionId(conversationId: ConversationId | string): InteractionId;
8
+ /** The inverse, or `null` for an id that is not a conversation interaction. Null rather than a guess —
9
+ * the same rule that keeps derived-participation resolution fail-closed. */
10
+ export declare function conversationIdFromInteraction(interactionId: string): string | null;
11
+ /**
12
+ * `participantPolicy` IS `participationMode`, and noticing that is what made this a projection.
13
+ *
14
+ * `open-to-context` means "anyone in the anchored org" — membership owned elsewhere, resolved at read
15
+ * time, never copied per conversation. That is precisely `derived`. `fixed` and `owner-managed` both
16
+ * mean the participant list on the record is the membership: `asserted`.
17
+ */
18
+ export declare function participationModeOfConversation(descriptor: Pick<ConversationDescriptorV1, 'participantPolicy'>): 'asserted' | 'derived';
19
+ /**
20
+ * Which profile governs this conversation.
21
+ *
22
+ * `forum`/`discussion` are boards — `topic`. Everything else is conversation — `direct`. Neither can
23
+ * create an obligation, which is true of both today and stated rather than left to inference. A
24
+ * conversation that needs to negotiate is promoted to its own Interaction under the negotiation
25
+ * profile (ADR-0058 §14), not granted extra acts here.
26
+ */
27
+ export declare function profileVersionOfConversation(descriptor: Pick<ConversationDescriptorV1, 'profile'>): ProfileVersion;
28
+ /**
29
+ * Lifecycle state.
30
+ *
31
+ * `archived` is deliberately NOT read as an ending. Spec 340 §P settled that shelving is a display
32
+ * concern that already lives in `InboxState`; an archived conversation has still either concluded or
33
+ * not, and conflating them would mean unarchiving a board silently reopened a concluded situation.
34
+ * The descriptor carries no concluded flag today, so every live conversation is `active` — stated here
35
+ * rather than invented, because inferring a conclusion from `archived` would be exactly the wrong fix.
36
+ */
37
+ export declare function lifecycleStateOfConversation(_descriptor: Pick<ConversationDescriptorV1, 'archived'>): InteractionState;
38
+ /** Participations, for an `asserted` conversation. Empty for a `derived` one — the whole point. */
39
+ export declare function participationsOfConversation(descriptor: Pick<ConversationDescriptorV1, 'participantPolicy' | 'participants' | 'createdAt'>): readonly ParticipationV1[];
40
+ /** What an Exchange in this conversation pins — `interactionId` + `profileVersion` in one call, so a
41
+ * caller cannot set one and forget the other. */
42
+ export interface ConversationExchangePins {
43
+ interactionId: InteractionId;
44
+ profileVersion: ProfileVersion;
45
+ }
46
+ export declare function conversationPins(descriptor: Pick<ConversationDescriptorV1, 'id' | 'profile'>): ConversationExchangePins;
47
+ /** The full interaction view of a conversation — the projection, assembled. */
48
+ export interface ConversationInteractionView {
49
+ interactionId: InteractionId;
50
+ profileVersion: ProfileVersion;
51
+ principal: CanonicalAgentId;
52
+ lifecycleState: InteractionState;
53
+ participationMode: 'asserted' | 'derived';
54
+ participations: readonly ParticipationV1[];
55
+ }
56
+ export declare function interactionViewOfConversation(descriptor: ConversationDescriptorV1): ConversationInteractionView;
57
+ /** Participation mode of a board channel — `open` topics derive membership, `restricted` assert it. */
58
+ export declare function participationModeOfChannel(channel: Pick<ChannelV1, 'participationPolicy' | 'visibility'>): 'asserted' | 'derived';
59
+ /**
60
+ * The interaction view of a live board channel — the one `demo-a2a` actually serves.
61
+ *
62
+ * Zero storage change: every field is read from what the board already persists. A topic in the vault
63
+ * IS an Interaction; this is how to read it as one.
64
+ */
65
+ export declare function interactionViewOfChannel(channel: ChannelV1): ConversationInteractionView;
66
+ //# sourceMappingURL=conversation-interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-interaction.d.ts","sourceRoot":"","sources":["../../src/messaging/conversation-interaction.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAIxE,iGAAiG;AACjG,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,GAAG,aAAa,CAEhG;AAED;6EAC6E;AAC7E,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAElF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,GAC9D,UAAU,GAAG,SAAS,CAExB;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,SAAS,CAAC,GACpD,cAAc,CAIhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,IAAI,CAAC,wBAAwB,EAAE,UAAU,CAAC,GACtD,gBAAgB,CAElB;AAED,mGAAmG;AACnG,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,GAAG,cAAc,GAAG,WAAW,CAAC,GAC7F,SAAS,eAAe,EAAE,CAU5B;AAED;kDACkD;AAClD,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,GAAG,SAAS,CAAC,GAC3D,wBAAwB,CAK1B;AAED,+EAA+E;AAC/E,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,cAAc,EAAE,gBAAgB,CAAC;IACjC,iBAAiB,EAAE,UAAU,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,SAAS,eAAe,EAAE,CAAC;CAC5C;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,wBAAwB,GACnC,2BAA2B,CAU7B;AAcD,uGAAuG;AACvG,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,GAAG,YAAY,CAAC,GAC7D,UAAU,GAAG,SAAS,CAExB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,SAAS,GAAG,2BAA2B,CAkBxF"}
@@ -0,0 +1,139 @@
1
+ // The vault-backed conversation, viewed as the Interaction it already is (spec 340 W12).
2
+ //
3
+ // WHY THIS FILE EXISTS, stated plainly because it is a correction. W11 made org topics a real
4
+ // Interaction by wiring `PrincipalGatewayDO.createChannel`/`postToChannel` — the DO-SQL channel store.
5
+ // `demo-a2a`, the only app that actually serves topics, does not use that store. It uses the
6
+ // VAULT-backed board (`createBoardChannel` / `appendBoardPost` over `ConversationDescriptorV1`). So
7
+ // W11 landed in a code path no demo runs, which is the same dormancy the whole exercise was meant to
8
+ // end — this time with the added problem that a third model of "a governed conversation" now existed.
9
+ //
10
+ // THE FIX IS A PROJECTION, NOT A MIGRATION. `ConversationDescriptorV1` already carries every field the
11
+ // Interaction needs, under different names:
12
+ //
13
+ // descriptor.id → the interaction identity (derived, see below)
14
+ // descriptor.owner → the custodian (`principal`)
15
+ // descriptor.participantPolicy → `participationMode`, exactly
16
+ // descriptor.participants → the asserted list, when there is one
17
+ // descriptor.profile → which InteractionProfile applies
18
+ // descriptor.archived → shelving, NOT the lifecycle (spec 340 §P)
19
+ //
20
+ // So nothing is stored twice and nothing migrates. A conversation IS an interaction; this says how to
21
+ // read it as one. Deriving rather than storing is deliberate: a stored copy of a value computable from
22
+ // the record is the drift this ontology work exists to remove, and it would need a migration to add.
23
+ import { TOPIC_PROFILE, DIRECT_PROFILE } from '../interaction-profile.js';
24
+ import { channelParticipationPolicy } from './board.js';
25
+ const CONVERSATION_PREFIX = 'ixn_conv_';
26
+ /** Derived from the conversation id, so the two can never disagree and no field needs adding. */
27
+ export function conversationInteractionId(conversationId) {
28
+ return `${CONVERSATION_PREFIX}${conversationId}`;
29
+ }
30
+ /** The inverse, or `null` for an id that is not a conversation interaction. Null rather than a guess —
31
+ * the same rule that keeps derived-participation resolution fail-closed. */
32
+ export function conversationIdFromInteraction(interactionId) {
33
+ return interactionId.startsWith(CONVERSATION_PREFIX) ? interactionId.slice(CONVERSATION_PREFIX.length) : null;
34
+ }
35
+ /**
36
+ * `participantPolicy` IS `participationMode`, and noticing that is what made this a projection.
37
+ *
38
+ * `open-to-context` means "anyone in the anchored org" — membership owned elsewhere, resolved at read
39
+ * time, never copied per conversation. That is precisely `derived`. `fixed` and `owner-managed` both
40
+ * mean the participant list on the record is the membership: `asserted`.
41
+ */
42
+ export function participationModeOfConversation(descriptor) {
43
+ return descriptor.participantPolicy === 'open-to-context' ? 'derived' : 'asserted';
44
+ }
45
+ /**
46
+ * Which profile governs this conversation.
47
+ *
48
+ * `forum`/`discussion` are boards — `topic`. Everything else is conversation — `direct`. Neither can
49
+ * create an obligation, which is true of both today and stated rather than left to inference. A
50
+ * conversation that needs to negotiate is promoted to its own Interaction under the negotiation
51
+ * profile (ADR-0058 §14), not granted extra acts here.
52
+ */
53
+ export function profileVersionOfConversation(descriptor) {
54
+ return descriptor.profile === 'forum' || descriptor.profile === 'discussion'
55
+ ? TOPIC_PROFILE.profileVersion
56
+ : DIRECT_PROFILE.profileVersion;
57
+ }
58
+ /**
59
+ * Lifecycle state.
60
+ *
61
+ * `archived` is deliberately NOT read as an ending. Spec 340 §P settled that shelving is a display
62
+ * concern that already lives in `InboxState`; an archived conversation has still either concluded or
63
+ * not, and conflating them would mean unarchiving a board silently reopened a concluded situation.
64
+ * The descriptor carries no concluded flag today, so every live conversation is `active` — stated here
65
+ * rather than invented, because inferring a conclusion from `archived` would be exactly the wrong fix.
66
+ */
67
+ export function lifecycleStateOfConversation(_descriptor) {
68
+ return 'active';
69
+ }
70
+ /** Participations, for an `asserted` conversation. Empty for a `derived` one — the whole point. */
71
+ export function participationsOfConversation(descriptor) {
72
+ if (participationModeOfConversation(descriptor) === 'derived')
73
+ return [];
74
+ return descriptor.participants.map((agent) => ({
75
+ agent,
76
+ role: 'participant',
77
+ // The descriptor records no per-participant join time, so the conversation's own is the honest
78
+ // answer: it is when membership was first observable, and claiming a more precise one would be
79
+ // inventing provenance.
80
+ joinedAt: descriptor.createdAt,
81
+ }));
82
+ }
83
+ export function conversationPins(descriptor) {
84
+ return {
85
+ interactionId: conversationInteractionId(descriptor.id),
86
+ profileVersion: profileVersionOfConversation(descriptor),
87
+ };
88
+ }
89
+ export function interactionViewOfConversation(descriptor) {
90
+ return {
91
+ ...conversationPins(descriptor),
92
+ // The descriptor's `owner` is the store that holds this copy, which for an org board is the org —
93
+ // the same custodial rule W3 enforces, arrived at from the other direction.
94
+ principal: descriptor.owner,
95
+ lifecycleState: lifecycleStateOfConversation(descriptor),
96
+ participationMode: participationModeOfConversation(descriptor),
97
+ participations: participationsOfConversation(descriptor),
98
+ };
99
+ }
100
+ // ─── Board channels ──────────────────────────────────────────────────────────
101
+ //
102
+ // A board `ChannelV1` (this subpath) is NOT the DO-SQL `ChannelV1` in `../cloudflare/channel-store.ts`.
103
+ // Same name, two different concepts, two subpaths — noted here rather than renamed, because renaming a
104
+ // live wire type is its own change; see spec 340 §C.
105
+ //
106
+ // The board channel is the better projection source than its descriptor: it carries
107
+ // `participationPolicy` DIRECTLY (`open` = derived from org membership and never stored; `restricted` =
108
+ // `members` is the list), with `channelParticipationPolicy` already resolving the legacy `visibility`
109
+ // spelling. Reading that instead of re-deriving from `participantPolicy` means one answer, from the
110
+ // field that actually decides it.
111
+ /** Participation mode of a board channel — `open` topics derive membership, `restricted` assert it. */
112
+ export function participationModeOfChannel(channel) {
113
+ return channelParticipationPolicy(channel) === 'open' ? 'derived' : 'asserted';
114
+ }
115
+ /**
116
+ * The interaction view of a live board channel — the one `demo-a2a` actually serves.
117
+ *
118
+ * Zero storage change: every field is read from what the board already persists. A topic in the vault
119
+ * IS an Interaction; this is how to read it as one.
120
+ */
121
+ export function interactionViewOfChannel(channel) {
122
+ const mode = participationModeOfChannel(channel);
123
+ return {
124
+ ...conversationPins(channel.descriptor),
125
+ principal: channel.descriptor.owner,
126
+ lifecycleState: lifecycleStateOfConversation(channel.descriptor),
127
+ participationMode: mode,
128
+ // A restricted topic's `members` IS the participant list (legacy field name; these are discussion
129
+ // participants, not the org roster). An open topic stores none, by design.
130
+ participations: mode === 'derived'
131
+ ? []
132
+ : (channel.members ?? []).map((agent) => ({
133
+ agent: agent,
134
+ role: 'participant',
135
+ joinedAt: channel.descriptor.createdAt,
136
+ })),
137
+ };
138
+ }
139
+ //# sourceMappingURL=conversation-interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-interaction.js","sourceRoot":"","sources":["../../src/messaging/conversation-interaction.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { AuditSink } from '@agenticprimitives/audit';
2
2
  import type { InboxProjector } from './projector.js';
3
- import type { MessageEnvelopeV1, MessageEventV1 } from './types.js';
3
+ import type { AnyMessageEnvelope, MessageEventV1 } from './types.js';
4
4
  import type { RuleApplication } from './rules.js';
5
5
  export interface AuditedInboxDelivery {
6
6
  /**
@@ -8,7 +8,7 @@ export interface AuditedInboxDelivery {
8
8
  * `bodyBytes` is provided the body-hash binding is enforced (§8.4); pass the
9
9
  * bytes fetched from the vault whenever the body was transported.
10
10
  */
11
- admit(envelope: MessageEnvelopeV1, event: MessageEventV1, bodyBytes?: Uint8Array): Promise<RuleApplication>;
11
+ admit(envelope: AnyMessageEnvelope, event: MessageEventV1, bodyBytes?: Uint8Array): Promise<RuleApplication>;
12
12
  }
13
13
  export declare function createAuditedInboxDelivery(opts: {
14
14
  projector: InboxProjector;
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/messaging/delivery.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmBlD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,KAAK,CACH,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,cAAc,EACrB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,oBAAoB,CAiCvB"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/messaging/delivery.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwBlD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,KAAK,CACH,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,cAAc,EACrB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,oBAAoB,CAiCvB"}
@@ -3,6 +3,8 @@
3
3
  // Fail-closed ordering: validate → verify body hash → AUDIT (await) → commit.
4
4
  // If the audit write fails the message is NOT admitted (spec 291 discipline for
5
5
  // privileged outcomes); rejects are audited as `denied` before throwing.
6
+ import { isEnvelopeV2 } from './types.js';
7
+ import { performativeOf } from '../communicative-act.js';
6
8
  import { validateMessageEnvelope } from './envelope.js';
7
9
  import { verifyBodyHash } from './hash.js';
8
10
  function auditEventBase(envelope, recipient) {
@@ -14,7 +16,12 @@ function auditEventBase(envelope, recipient) {
14
16
  // Hashes/ids only — never bodies, subjects, or PII (spec 309 §9).
15
17
  context: {
16
18
  from: envelope.from,
17
- kind: envelope.kind,
19
+ // spec 340 — the audit records what the message DOES, which spans both wire versions. `kind` is
20
+ // kept when the envelope is V1 so historical rows stay comparable, and is simply absent on V2
21
+ // rather than being back-derived: `performativeForKind` is not injective, so a reconstructed
22
+ // `kind` would be a guess written into an audit trail.
23
+ performative: performativeOf(envelope),
24
+ ...(isEnvelopeV2(envelope) ? {} : { kind: envelope.kind }),
18
25
  classification: envelope.classification,
19
26
  bodyHash: envelope.bodyHash,
20
27
  conversationId: envelope.conversationId,
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/messaging/delivery.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AAKzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,SAAS,cAAc,CAAC,QAA2B,EAAE,SAAiB;IACpE,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,EAAE,EAAE,SAAS,EAAE;QAClD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC7C,kEAAkE;QAClE,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC;KACF,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,0BAA0B,CAAC,IAK1C;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE7C,KAAK,UAAU,MAAM,CAAC,QAA2B,EAAE,MAAc;QAC/D,MAAM,KAAK,CAAC,KAAK,CAAC;YAChB,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC;YACtC,MAAM,EAAE,0BAA0B;YAClC,OAAO,EAAE,QAAQ;YACjB,MAAM;SACP,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS;YACpC,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YAC3F,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC5E,OAAO,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAC/C,CAAC;YAED,oEAAoE;YACpE,MAAM,KAAK,CAAC,KAAK,CAAC;gBAChB,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC;gBACtC,MAAM,EAAE,0BAA0B;gBAClC,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;YAEH,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/messaging/delivery.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AAKzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,SAAS,cAAc,CAAC,QAA4B,EAAE,SAAiB;IACrE,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,EAAE,EAAE,SAAS,EAAE;QAClD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC7C,kEAAkE;QAClE,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,gGAAgG;YAChG,8FAA8F;YAC9F,6FAA6F;YAC7F,uDAAuD;YACvD,YAAY,EAAE,cAAc,CAAC,QAAQ,CAAC;YACtC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1D,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC;KACF,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,0BAA0B,CAAC,IAK1C;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE7C,KAAK,UAAU,MAAM,CAAC,QAA4B,EAAE,MAAc;QAChE,MAAM,KAAK,CAAC,KAAK,CAAC;YAChB,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC;YACtC,MAAM,EAAE,0BAA0B;YAClC,OAAO,EAAE,QAAQ;YACjB,MAAM;SACP,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,CAAC,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS;YACpC,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YAC3F,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC5E,OAAO,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAC/C,CAAC;YAED,oEAAoE;YACpE,MAAM,KAAK,CAAC,KAAK,CAAC;gBAChB,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC;gBACtC,MAAM,EAAE,0BAA0B;gBAClC,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;YAEH,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,8 +1,12 @@
1
- import type { ConversationId, MessageEnvelopeV1, MessageId, ThreadId } from './types.js';
1
+ import type { AnyMessageEnvelope, ConversationId, MessageId, ThreadId } from './types.js';
2
2
  export declare function generateMessageId(): MessageId;
3
3
  export declare function generateConversationId(): ConversationId;
4
4
  export declare function generateThreadId(): ThreadId;
5
- export type EnvelopeValidationError = 'bad_version' | 'bad_id' | 'bad_conversation_id' | 'missing_from' | 'empty_recipients' | 'bad_created_at' | 'bad_expires_at' | 'expired_before_created' | 'bad_body_hash' | 'missing_body_content_type' | 'bad_attachment_hash' | 'too_many_context_refs' | 'bad_context_ref';
5
+ export type EnvelopeValidationError = 'bad_version' | 'bad_id' | 'bad_conversation_id' | 'missing_from' | 'empty_recipients' | 'bad_created_at' | 'bad_expires_at' | 'expired_before_created' | 'bad_body_hash' | 'missing_body_content_type' | 'bad_attachment_hash' | 'too_many_context_refs' | 'bad_context_ref'
6
+ /** V2-only (spec 340 cutover): the version says v2 but the act it performs is absent. */
7
+ | 'missing_performative'
8
+ /** V2-only: a half-migrated sender stamped v2 while still emitting the retired `kind` taxonomy. */
9
+ | 'v2_carries_retired_kind';
6
10
  /** Envelope context refs are bounded so refs stay metadata, not payload. */
7
11
  export declare const MAX_CONTEXT_REFS = 8;
8
12
  /**
@@ -10,5 +14,5 @@ export declare const MAX_CONTEXT_REFS = 8;
10
14
  * recipient admission policy are the recipient runtime's job (spec 309 §4.4).
11
15
  * Returns an empty array iff the envelope is structurally admissible.
12
16
  */
13
- export declare function validateMessageEnvelope(env: MessageEnvelopeV1): EnvelopeValidationError[];
17
+ export declare function validateMessageEnvelope(env: AnyMessageEnvelope): EnvelopeValidationError[];
14
18
  //# sourceMappingURL=envelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/messaging/envelope.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUzF,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,sBAAsB,IAAI,cAAc,CAEvD;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,MAAM,MAAM,uBAAuB,GAC/B,aAAa,GACb,QAAQ,GACR,qBAAqB,GACrB,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,wBAAwB,GACxB,eAAe,GACf,2BAA2B,GAC3B,qBAAqB,GACrB,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAQlC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,uBAAuB,EAAE,CA+BzF"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/messaging/envelope.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAqB,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAW7G,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,sBAAsB,IAAI,cAAc,CAEvD;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,MAAM,MAAM,uBAAuB,GAC/B,aAAa,GACb,QAAQ,GACR,qBAAqB,GACrB,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,wBAAwB,GACxB,eAAe,GACf,2BAA2B,GAC3B,qBAAqB,GACrB,uBAAuB,GACvB,iBAAiB;AACnB,yFAAyF;GACvF,sBAAsB;AACxB,mGAAmG;GACjG,yBAAyB,CAAC;AAE9B,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAQlC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,kBAAkB,GAAG,uBAAuB,EAAE,CA6C1F"}
@@ -1,4 +1,5 @@
1
1
  // Envelope construction + structural validation (fail-closed, spec 309 §8).
2
+ import { isEnvelopeV2 } from './types.js';
2
3
  function randomSuffix() {
3
4
  const bytes = new Uint8Array(16);
4
5
  globalThis.crypto.getRandomValues(bytes);
@@ -28,8 +29,24 @@ function isIsoDate(s) {
28
29
  */
29
30
  export function validateMessageEnvelope(env) {
30
31
  const errors = [];
31
- if (env.version !== 'ap.message.v1')
32
+ // spec 340 — the ap.message.v2 cutover, reader half. BOTH wire versions are structurally
33
+ // admissible. This must ship and be DEPLOYED EVERYWHERE before any sender emits V2: a V2 envelope
34
+ // reaching a validator that only knows V1 is rejected as `bad_version`, which on a peer hop is a
35
+ // delivery failure, not a degraded read.
36
+ //
37
+ // The two shapes are checked for what each one IS, not merely tolerated: V2 must carry a
38
+ // `performative` and must NOT carry `kind`, so a half-migrated sender that stamps v2 while still
39
+ // emitting the retired taxonomy fails here instead of quietly producing an envelope whose version
40
+ // and content disagree.
41
+ if (isEnvelopeV2(env)) {
42
+ if (!env.performative)
43
+ errors.push('missing_performative');
44
+ if (env.kind !== undefined)
45
+ errors.push('v2_carries_retired_kind');
46
+ }
47
+ else if (env.version !== 'ap.message.v1') {
32
48
  errors.push('bad_version');
49
+ }
33
50
  if (!env.id?.startsWith('msg_'))
34
51
  errors.push('bad_id');
35
52
  if (!env.conversationId?.startsWith('conv_'))
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/messaging/envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/messaging/envelope.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Hex32, MessageEnvelopeV1 } from './types.js';
1
+ import type { AnyMessageEnvelope, Hex32, MessageEnvelopeV1 } from './types.js';
2
2
  import { canonicalizeJson } from '@agenticprimitives/types';
3
3
  /** Deterministic JSON: sorted keys, `undefined` members dropped. Hoisted to `@agenticprimitives/types` as
4
4
  * `canonicalizeJson` (spec 316 Open Decision F); kept here as an alias for back-compat. */
@@ -8,8 +8,14 @@ export declare function sha256Hex32(input: string | Uint8Array): Promise<Hex32>;
8
8
  * Hash of the canonical envelope EXCLUDING `signature` — this is the payload a
9
9
  * sender signs and a recipient verifies (spec 309 §8.1). Deterministic across
10
10
  * key order and undefined optional fields.
11
+ *
12
+ * Version-agnostic BY CONSTRUCTION, and that is the property the ap.message.v2 cutover rests on: it
13
+ * canonicalizes whatever fields the envelope has. A V1 envelope hashes today exactly as it hashed
14
+ * before V2 existed, so every historical signature and delivery receipt still verifies. `version` is
15
+ * itself inside the hashed body, so V1 and V2 of otherwise-identical content are domain-separated for
16
+ * free — no envelope can be replayed across versions.
11
17
  */
12
- export declare function hashMessageEnvelope(envelope: MessageEnvelopeV1): Promise<Hex32>;
18
+ export declare function hashMessageEnvelope(envelope: AnyMessageEnvelope): Promise<Hex32>;
13
19
  /**
14
20
  * Body-hash binding (spec 309 §8.4): the envelope's `bodyHash` MUST equal the
15
21
  * digest of the vault-resident body bytes. Recipients enforce this BEFORE
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/messaging/hash.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D;4FAC4F;AAC5F,eAAO,MAAM,mBAAmB,yBAAmB,CAAC;AAEpD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAO5E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGrF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAC7C,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/messaging/hash.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D;4FAC4F;AAC5F,eAAO,MAAM,mBAAmB,yBAAmB,CAAC;AAEpD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAO5E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGtF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAC7C,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB"}
@@ -20,6 +20,12 @@ export async function sha256Hex32(input) {
20
20
  * Hash of the canonical envelope EXCLUDING `signature` — this is the payload a
21
21
  * sender signs and a recipient verifies (spec 309 §8.1). Deterministic across
22
22
  * key order and undefined optional fields.
23
+ *
24
+ * Version-agnostic BY CONSTRUCTION, and that is the property the ap.message.v2 cutover rests on: it
25
+ * canonicalizes whatever fields the envelope has. A V1 envelope hashes today exactly as it hashed
26
+ * before V2 existed, so every historical signature and delivery receipt still verifies. `version` is
27
+ * itself inside the hashed body, so V1 and V2 of otherwise-identical content are domain-separated for
28
+ * free — no envelope can be replayed across versions.
23
29
  */
24
30
  export async function hashMessageEnvelope(envelope) {
25
31
  const { signature: _signature, ...unsigned } = envelope;