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

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 (198) hide show
  1. package/CLAUDE.md +28 -35
  2. package/README.md +18 -16
  3. package/dist/adoption.d.ts +79 -0
  4. package/dist/adoption.d.ts.map +1 -0
  5. package/dist/adoption.js +95 -0
  6. package/dist/adoption.js.map +1 -0
  7. package/dist/case-emissions.d.ts +95 -0
  8. package/dist/case-emissions.d.ts.map +1 -0
  9. package/dist/case-emissions.js +208 -0
  10. package/dist/case-emissions.js.map +1 -0
  11. package/dist/case-machine.d.ts +28 -2
  12. package/dist/case-machine.d.ts.map +1 -1
  13. package/dist/case-machine.js +34 -7
  14. package/dist/case-machine.js.map +1 -1
  15. package/dist/cloudflare/authority-verdict-cache.d.ts +28 -1
  16. package/dist/cloudflare/authority-verdict-cache.d.ts.map +1 -1
  17. package/dist/cloudflare/authority-verdict-cache.js +32 -1
  18. package/dist/cloudflare/authority-verdict-cache.js.map +1 -1
  19. package/dist/cloudflare/exchange-store.d.ts +20 -1
  20. package/dist/cloudflare/exchange-store.d.ts.map +1 -1
  21. package/dist/cloudflare/exchange-store.js +26 -4
  22. package/dist/cloudflare/exchange-store.js.map +1 -1
  23. package/dist/cloudflare/index.d.ts +7 -4
  24. package/dist/cloudflare/index.d.ts.map +1 -1
  25. package/dist/cloudflare/index.js +8 -2
  26. package/dist/cloudflare/index.js.map +1 -1
  27. package/dist/cloudflare/interaction-store.d.ts +81 -0
  28. package/dist/cloudflare/interaction-store.d.ts.map +1 -0
  29. package/dist/cloudflare/interaction-store.js +281 -0
  30. package/dist/cloudflare/interaction-store.js.map +1 -0
  31. package/dist/cloudflare/orchestration-runtime.d.ts +19 -5
  32. package/dist/cloudflare/orchestration-runtime.d.ts.map +1 -1
  33. package/dist/cloudflare/orchestration-runtime.js +11 -6
  34. package/dist/cloudflare/orchestration-runtime.js.map +1 -1
  35. package/dist/cloudflare/principal-gateway-do.d.ts +360 -30
  36. package/dist/cloudflare/principal-gateway-do.d.ts.map +1 -1
  37. package/dist/cloudflare/principal-gateway-do.js +580 -58
  38. package/dist/cloudflare/principal-gateway-do.js.map +1 -1
  39. package/dist/cloudflare/receipt-signer.d.ts.map +1 -1
  40. package/dist/cloudflare/receipt-signer.js +6 -3
  41. package/dist/cloudflare/receipt-signer.js.map +1 -1
  42. package/dist/cloudflare/sql-vault.d.ts.map +1 -1
  43. package/dist/cloudflare/sql-vault.js +56 -0
  44. package/dist/cloudflare/sql-vault.js.map +1 -1
  45. package/dist/cloudflare/vault-exchange-store.d.ts +47 -0
  46. package/dist/cloudflare/vault-exchange-store.d.ts.map +1 -0
  47. package/dist/cloudflare/vault-exchange-store.js +135 -0
  48. package/dist/cloudflare/vault-exchange-store.js.map +1 -0
  49. package/dist/cloudflare/vault-interaction-store.d.ts +44 -0
  50. package/dist/cloudflare/vault-interaction-store.d.ts.map +1 -0
  51. package/dist/cloudflare/vault-interaction-store.js +259 -0
  52. package/dist/cloudflare/vault-interaction-store.js.map +1 -0
  53. package/dist/communicative-act.d.ts +24 -1
  54. package/dist/communicative-act.d.ts.map +1 -1
  55. package/dist/communicative-act.js +28 -0
  56. package/dist/communicative-act.js.map +1 -1
  57. package/dist/delivery-envelope.d.ts.map +1 -1
  58. package/dist/delivery-envelope.js +0 -1
  59. package/dist/delivery-envelope.js.map +1 -1
  60. package/dist/email/index.d.ts +79 -0
  61. package/dist/email/index.d.ts.map +1 -0
  62. package/dist/email/index.js +91 -0
  63. package/dist/email/index.js.map +1 -0
  64. package/dist/enum-retirement.d.ts +43 -0
  65. package/dist/enum-retirement.d.ts.map +1 -0
  66. package/dist/enum-retirement.js +93 -0
  67. package/dist/enum-retirement.js.map +1 -0
  68. package/dist/exchange-record.d.ts +35 -4
  69. package/dist/exchange-record.d.ts.map +1 -1
  70. package/dist/exchange-record.js.map +1 -1
  71. package/dist/exchange-reducer.d.ts +32 -4
  72. package/dist/exchange-reducer.d.ts.map +1 -1
  73. package/dist/exchange-reducer.js +75 -1
  74. package/dist/exchange-reducer.js.map +1 -1
  75. package/dist/exchange-state.d.ts +30 -8
  76. package/dist/exchange-state.d.ts.map +1 -1
  77. package/dist/exchange-state.js +12 -10
  78. package/dist/exchange-state.js.map +1 -1
  79. package/dist/inbox-doc.d.ts +2 -2
  80. package/dist/inbox-doc.d.ts.map +1 -1
  81. package/dist/inbox-doc.js.map +1 -1
  82. package/dist/inbox-projection.d.ts +2 -2
  83. package/dist/inbox-projection.d.ts.map +1 -1
  84. package/dist/inbox-projection.js.map +1 -1
  85. package/dist/inbox-revision.d.ts +42 -0
  86. package/dist/inbox-revision.d.ts.map +1 -0
  87. package/dist/inbox-revision.js +57 -0
  88. package/dist/inbox-revision.js.map +1 -0
  89. package/dist/index.d.ts +26 -3
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +40 -2
  92. package/dist/index.js.map +1 -1
  93. package/dist/interaction-machines.d.ts +136 -0
  94. package/dist/interaction-machines.d.ts.map +1 -0
  95. package/dist/interaction-machines.js +174 -0
  96. package/dist/interaction-machines.js.map +1 -0
  97. package/dist/interaction-profile.d.ts +136 -0
  98. package/dist/interaction-profile.d.ts.map +1 -0
  99. package/dist/interaction-profile.js +212 -0
  100. package/dist/interaction-profile.js.map +1 -0
  101. package/dist/interaction-record.d.ts +168 -0
  102. package/dist/interaction-record.d.ts.map +1 -0
  103. package/dist/interaction-record.js +108 -0
  104. package/dist/interaction-record.js.map +1 -0
  105. package/dist/interactions/grant-scopes.d.ts +21 -0
  106. package/dist/interactions/grant-scopes.d.ts.map +1 -0
  107. package/dist/interactions/grant-scopes.js +88 -0
  108. package/dist/interactions/grant-scopes.js.map +1 -0
  109. package/dist/interactions/index.d.ts +1 -0
  110. package/dist/interactions/index.d.ts.map +1 -1
  111. package/dist/interactions/index.js +3 -0
  112. package/dist/interactions/index.js.map +1 -1
  113. package/dist/interactions/machine.d.ts +2 -2
  114. package/dist/interactions/machine.d.ts.map +1 -1
  115. package/dist/interactions/machine.js +2 -2
  116. package/dist/interactions/machine.js.map +1 -1
  117. package/dist/interactions/open-case.d.ts +60 -0
  118. package/dist/interactions/open-case.d.ts.map +1 -0
  119. package/dist/interactions/open-case.js +83 -0
  120. package/dist/interactions/open-case.js.map +1 -0
  121. package/dist/interactions/store.d.ts +9 -0
  122. package/dist/interactions/store.d.ts.map +1 -1
  123. package/dist/interactions/store.js +57 -2
  124. package/dist/interactions/store.js.map +1 -1
  125. package/dist/messaging/board.d.ts +4 -4
  126. package/dist/messaging/board.d.ts.map +1 -1
  127. package/dist/messaging/board.js +2 -2
  128. package/dist/messaging/board.js.map +1 -1
  129. package/dist/messaging/consult-routing.d.ts +103 -23
  130. package/dist/messaging/consult-routing.d.ts.map +1 -1
  131. package/dist/messaging/consult-routing.js +157 -47
  132. package/dist/messaging/consult-routing.js.map +1 -1
  133. package/dist/messaging/consult.d.ts +4 -0
  134. package/dist/messaging/consult.d.ts.map +1 -1
  135. package/dist/messaging/consult.js +3 -1
  136. package/dist/messaging/consult.js.map +1 -1
  137. package/dist/messaging/conversation-interaction.d.ts +66 -0
  138. package/dist/messaging/conversation-interaction.d.ts.map +1 -0
  139. package/dist/messaging/conversation-interaction.js +139 -0
  140. package/dist/messaging/conversation-interaction.js.map +1 -0
  141. package/dist/messaging/conversation.d.ts +69 -1
  142. package/dist/messaging/conversation.d.ts.map +1 -1
  143. package/dist/messaging/conversation.js +131 -0
  144. package/dist/messaging/conversation.js.map +1 -1
  145. package/dist/messaging/delivery.d.ts +2 -2
  146. package/dist/messaging/delivery.d.ts.map +1 -1
  147. package/dist/messaging/delivery.js +8 -1
  148. package/dist/messaging/delivery.js.map +1 -1
  149. package/dist/messaging/envelope.d.ts +7 -3
  150. package/dist/messaging/envelope.d.ts.map +1 -1
  151. package/dist/messaging/envelope.js +18 -1
  152. package/dist/messaging/envelope.js.map +1 -1
  153. package/dist/messaging/hash.d.ts +8 -2
  154. package/dist/messaging/hash.d.ts.map +1 -1
  155. package/dist/messaging/hash.js +6 -0
  156. package/dist/messaging/hash.js.map +1 -1
  157. package/dist/messaging/inbox-assistant.d.ts +16 -4
  158. package/dist/messaging/inbox-assistant.d.ts.map +1 -1
  159. package/dist/messaging/inbox-assistant.js +27 -4
  160. package/dist/messaging/inbox-assistant.js.map +1 -1
  161. package/dist/messaging/index.d.ts +7 -3
  162. package/dist/messaging/index.d.ts.map +1 -1
  163. package/dist/messaging/index.js +11 -2
  164. package/dist/messaging/index.js.map +1 -1
  165. package/dist/messaging/outbound-message.d.ts +42 -0
  166. package/dist/messaging/outbound-message.d.ts.map +1 -0
  167. package/dist/messaging/outbound-message.js +64 -0
  168. package/dist/messaging/outbound-message.js.map +1 -0
  169. package/dist/messaging/projector.d.ts +3 -3
  170. package/dist/messaging/projector.d.ts.map +1 -1
  171. package/dist/messaging/projector.js.map +1 -1
  172. package/dist/messaging/receipts.d.ts +3 -3
  173. package/dist/messaging/receipts.d.ts.map +1 -1
  174. package/dist/messaging/receipts.js.map +1 -1
  175. package/dist/messaging/rules.d.ts +10 -3
  176. package/dist/messaging/rules.d.ts.map +1 -1
  177. package/dist/messaging/rules.js +8 -1
  178. package/dist/messaging/rules.js.map +1 -1
  179. package/dist/messaging/store.d.ts +4 -4
  180. package/dist/messaging/store.d.ts.map +1 -1
  181. package/dist/messaging/store.js +5 -3
  182. package/dist/messaging/store.js.map +1 -1
  183. package/dist/messaging/types.d.ts +30 -0
  184. package/dist/messaging/types.d.ts.map +1 -1
  185. package/dist/messaging/types.js +3 -0
  186. package/dist/messaging/types.js.map +1 -1
  187. package/dist/messaging/vault-store.d.ts +2 -2
  188. package/dist/messaging/vault-store.d.ts.map +1 -1
  189. package/dist/messaging/vault-store.js +8 -0
  190. package/dist/messaging/vault-store.js.map +1 -1
  191. package/dist/protocol-binding.d.ts +71 -0
  192. package/dist/protocol-binding.d.ts.map +1 -0
  193. package/dist/protocol-binding.js +0 -0
  194. package/dist/protocol-binding.js.map +1 -0
  195. package/dist/record-catalog.d.ts.map +1 -1
  196. package/dist/record-catalog.js +12 -0
  197. package/dist/record-catalog.js.map +1 -1
  198. package/package.json +28 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-record.js","sourceRoot":"","sources":["../src/interaction-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** Ops the record-scope gate distinguishes: a tombstone (`delete`) is a DISTINCT op from `write`. */
2
+ export type RecordScopeOp = 'read' | 'write' | 'delete';
3
+ /** A group of resources granted the same ops, before a server is named. */
4
+ export interface RecordScopeSpec {
5
+ resources: ReadonlyArray<string>;
6
+ ops: ReadonlyArray<RecordScopeOp>;
7
+ }
8
+ /** One group bound to an MCP server — structurally the delegation package's `VaultRecordScopeGrant`, so it
9
+ * feeds `buildVaultRecordScopeCaveat` directly; fabric does not depend on delegation (ADR-0047 boundary). */
10
+ export interface RecordScopeGroup {
11
+ server: string;
12
+ resources: string[];
13
+ ops: RecordScopeOp[];
14
+ }
15
+ export declare const INTERACTIONS_GRANT_CORE_SCOPES: ReadonlyArray<RecordScopeSpec>;
16
+ /**
17
+ * The grant's scope groups for one MCP server: the core, then the product's extensions (its own app
18
+ * namespaces — read-only for the agent's grounding, read+write for steward seeding), in that order.
19
+ */
20
+ export declare function interactionsGrantScopes(server: string, extensions?: ReadonlyArray<RecordScopeSpec>): RecordScopeGroup[];
21
+ //# sourceMappingURL=grant-scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant-scopes.d.ts","sourceRoot":"","sources":["../../src/interactions/grant-scopes.ts"],"names":[],"mappings":"AAgBA,qGAAqG;AACrG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAAG,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAAE;AAExG;8GAC8G;AAC9G,MAAM,WAAW,gBAAgB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,aAAa,EAAE,CAAA;CAAE;AAE/F,eAAO,MAAM,8BAA8B,EAAE,aAAa,CAAC,eAAe,CA+EzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,aAAa,CAAC,eAAe,CAAM,GAAG,gBAAgB,EAAE,CAE3H"}
@@ -0,0 +1,88 @@
1
+ export const INTERACTIONS_GRANT_CORE_SCOPES = [
2
+ { resources: [
3
+ 'vault:conversation.index', 'vault:conversation.topic:*', 'vault:message.body:topic:*',
4
+ 'vault:inbox.data', 'vault:directory.data', 'vault:relationships.data', 'vault:member.profile:*',
5
+ 'vault:org.membership:*', 'vault:org.applications', 'vault:impact-profile', 'vault:capabilities.data',
6
+ 'vault:skills.data', 'vault:home.manifest', 'vault:control-events.data', 'vault:coordination.requests',
7
+ 'vault:coordination.index', 'vault:coordination.endeavor:*', 'vault:content.*',
8
+ 'vault:resolution.requests', 'vault:resolution.grants', 'vault:archetype.assignment', 'vault:payment.receipt:*',
9
+ 'vault:household.data',
10
+ // Spec 370 P7 — the person's own recent asks, so "him" can mean whom they just meant.
11
+ 'vault:conversation.recent',
12
+ // Spec 381 — a run's provenance, kept where the authority was spent (the DO copy is the rebuild).
13
+ 'vault:run.provenance:*',
14
+ // Spec 391 — a step's raw result, too large for the run's record, kept where the run ran.
15
+ 'vault:run.artifact:*',
16
+ // Spec 410 §4.4 — where the run's bundle is anchored (chain-qualified), beside it: a Home in another estate reads it.
17
+ 'vault:run.anchor:*',
18
+ // Spec 414 A2 — a run's measurements (numbers from its trace alone), beside its provenance.
19
+ 'vault:run.measures:*',
20
+ // Spec 410 §8 — the countersigned form of a relationship, each party's copy in its own vault; and its revocation.
21
+ 'vault:relationships.credential:*', 'vault:relationships.revocation:*',
22
+ // Spec 410 §1.2 — a wire re-issued for a rotation, in the delegator's own vault (`supersedes` links the lineage).
23
+ 'vault:delegation.lineage:*',
24
+ // Spec 410 §10 — a dispute over a receipt (both parties' copies) and the run's pointer to it.
25
+ 'vault:interaction.dispute:*', 'vault:run.dispute:*',
26
+ // Spec 438 §5 — a judgment of a run, signed by its evaluator, stored BESIDE the run and never as an
27
+ // edit to it. Additive at the estate (the household precedent): an older grant cannot write one until
28
+ // re-issued, and is told so, rather than every grant going stale for a record few will write.
29
+ 'vault:run.assessment:*',
30
+ // Spec 398 §9 (ap-build B3) — what a build run left, in the workspace's vault; the PR opened from it names it.
31
+ 'vault:build.run:*',
32
+ 'vault:build.promotion:*',
33
+ // P1.4 — the agent's declared budget (asks and vault calls per day), set by its steward.
34
+ 'vault:agent.budget',
35
+ // Spec 404 — the external MCP servers the holder attached as connectors (the token is elsewhere, never a record).
36
+ 'vault:connector.mcp:*',
37
+ // Spec 385 — the person's scoped confirmation memory (which "David", per word + capability + argument).
38
+ 'vault:confirmation.preferences',
39
+ // Spec 394 — the person's standing instructions (a declared default per room + capability + argument).
40
+ 'vault:standing.instructions',
41
+ // Spec 422 §9.3 — the person's Security section: the LABELS of what signs for her (the chain holds the set) and the
42
+ // channels that open her home. ADDITIVE, deliberately not in demo-a2a's REQUIRED_SCOPES: a grant signed before this
43
+ // line keeps working and is denied only for these two records until its owner re-issues it.
44
+ 'vault:security.credentials', 'vault:security.channels',
45
+ // Spec 402 W1 — what the person's agent remembers about THEM (their own facts, in their own words).
46
+ 'vault:memory.facts',
47
+ // Spec 402 W3 / 323 W6 — the person's declared routines, the record the agent's schedule rows are rebuilt from.
48
+ 'vault:routines.data',
49
+ // Spec 403 W2/W4 — the person's preferences (nudges, how to answer).
50
+ 'vault:person.preferences',
51
+ // What the playbook remembers about the subjects of a skill family (counts a review folds in).
52
+ 'vault:playbook.memory:*',
53
+ // Spec 436 §5.5 — the day's pulse a context agent keeps (`apinf:TownPulse`): one record a day, written by the
54
+ // town under a wire scoped to this family alone, read back when a stranger asks the agent how things are going.
55
+ // ADDITIVE, deliberately not in demo-a2a's REQUIRED_SCOPES: a grant signed before this line keeps working and is
56
+ // denied only for these records until its owner re-issues it — which is how it failed first, silently, because
57
+ // every reader of a denied record catches and reads it as "no record".
58
+ 'vault:pulse.day:*',
59
+ ], ops: ['read', 'write'] },
60
+ // Spec 354 K3 — the PLAYBOOK may also be REMOVED, which is a real custodial act: an agent goes back to the
61
+ // bare harness. A tombstone is a DISTINCT op at the record-scope gate (spec 317 §3.2 / audit F1 — a
62
+ // write-only delegate must not be able to censor records), so the broad bucket above cannot express it.
63
+ { resources: ['vault:archetype.assignment'], ops: ['read', 'write', 'delete'] },
64
+ // Spec 322 W3f — dm bodies are READ-only here: the DO serves the owner's mail reads, while only the
65
+ // (write-only) delivery plane may create them. Planes stay disjoint on writes.
66
+ { resources: ['vault:message.body:dm:*'], ops: ['read'] },
67
+ // The org's own invitations, read-only — what makes membership-read's invited-member path live. Writes
68
+ // stay on the delivery plane.
69
+ { resources: ['vault:org.invite:*'], ops: ['read'] },
70
+ // A governed workspace's pointer to the organization that governs it (the owner's rule, 2026-10-02), READ-only:
71
+ // the workspace's board gate asks that organization whether a caller is a member, and the club's standing and the
72
+ // `org.recordMembership` guard resolve the governor from it. Written by the Home under the steward's wire, never
73
+ // here. ADDITIVE, deliberately not in demo-a2a's REQUIRED_SCOPES: a grant signed before this line keeps working
74
+ // and reads as "no governor" until its owner re-issues it.
75
+ { resources: ['vault:workspace.governor'], ops: ['read'] },
76
+ // Spec 401 §10 — a PERSON's friendship offers (`friend:<sa>`, aporg:FriendshipOffer): their own half of each
77
+ // friendship, written by their own agent under their own mandate (the act that signs the grant) and read back for
78
+ // their friends view and for standing. Read+write: it is the person's own record in the person's own vault.
79
+ { resources: ['vault:friend:*'], ops: ['read', 'write'] },
80
+ ];
81
+ /**
82
+ * The grant's scope groups for one MCP server: the core, then the product's extensions (its own app
83
+ * namespaces — read-only for the agent's grounding, read+write for steward seeding), in that order.
84
+ */
85
+ export function interactionsGrantScopes(server, extensions = []) {
86
+ return [...INTERACTIONS_GRANT_CORE_SCOPES, ...extensions].map((g) => ({ server, resources: [...g.resources], ops: [...g.ops] }));
87
+ }
88
+ //# sourceMappingURL=grant-scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant-scopes.js","sourceRoot":"","sources":["../../src/interactions/grant-scopes.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,MAAM,8BAA8B,GAAmC;IAC5E,EAAE,SAAS,EAAE;YACX,0BAA0B,EAAE,4BAA4B,EAAE,4BAA4B;YACtF,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,wBAAwB;YAChG,wBAAwB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,yBAAyB;YACrG,mBAAmB,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,6BAA6B;YACtG,0BAA0B,EAAE,+BAA+B,EAAE,iBAAiB;YAC9E,2BAA2B,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,yBAAyB;YAC/G,sBAAsB;YACtB,sFAAsF;YACtF,2BAA2B;YAC3B,kGAAkG;YAClG,wBAAwB;YACxB,0FAA0F;YAC1F,sBAAsB;YACtB,sHAAsH;YACtH,oBAAoB;YACpB,4FAA4F;YAC5F,sBAAsB;YACtB,kHAAkH;YAClH,kCAAkC,EAAE,kCAAkC;YACtE,kHAAkH;YAClH,4BAA4B;YAC5B,8FAA8F;YAC9F,6BAA6B,EAAE,qBAAqB;YACpD,oGAAoG;YACpG,sGAAsG;YACtG,8FAA8F;YAC9F,wBAAwB;YACxB,+GAA+G;YAC/G,mBAAmB;YACnB,yBAAyB;YACzB,yFAAyF;YACzF,oBAAoB;YACpB,kHAAkH;YAClH,uBAAuB;YACvB,wGAAwG;YACxG,gCAAgC;YAChC,uGAAuG;YACvG,6BAA6B;YAC7B,oHAAoH;YACpH,oHAAoH;YACpH,4FAA4F;YAC5F,4BAA4B,EAAE,yBAAyB;YACvD,oGAAoG;YACpG,oBAAoB;YACpB,gHAAgH;YAChH,qBAAqB;YACrB,qEAAqE;YACrE,0BAA0B;YAC1B,+FAA+F;YAC/F,yBAAyB;YACzB,8GAA8G;YAC9G,gHAAgH;YAChH,iHAAiH;YACjH,+GAA+G;YAC/G,uEAAuE;YACvE,mBAAmB;SACpB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC3B,2GAA2G;IAC3G,oGAAoG;IACpG,wGAAwG;IACxG,EAAE,SAAS,EAAE,CAAC,4BAA4B,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;IAC/E,oGAAoG;IACpG,+EAA+E;IAC/E,EAAE,SAAS,EAAE,CAAC,yBAAyB,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;IACzD,uGAAuG;IACvG,8BAA8B;IAC9B,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;IACpD,gHAAgH;IAChH,kHAAkH;IAClH,iHAAiH;IACjH,gHAAgH;IAChH,2DAA2D;IAC3D,EAAE,SAAS,EAAE,CAAC,0BAA0B,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;IAC1D,6GAA6G;IAC7G,kHAAkH;IAClH,4GAA4G;IAC5G,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;CAC1D,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,aAA6C,EAAE;IACrG,OAAO,CAAC,GAAG,8BAA8B,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnI,CAAC"}
@@ -12,4 +12,5 @@ export { type PresentationDefinitionRef, type CredentialFormat, type PermissionT
12
12
  export { type DataSensitivity, type ActionRiskMetadataV1, type RiskDisposition, type RiskEvaluationOpts, type RiskEvaluation, evaluateActionRisk, } from './risk.js';
13
13
  export { type ActionCardKind, type ActionDescriptorV1, type ActionCardV1, type CardValidationError, validateActionCard, } from './cards.js';
14
14
  export { type InteractionExchangeRecordV1, buildExchangeRecord, type RelationshipExchangePort, } from './relationship.js';
15
+ export { INTERACTIONS_GRANT_CORE_SCOPES, interactionsGrantScopes, type RecordScopeOp, type RecordScopeSpec, type RecordScopeGroup, } from './grant-scopes.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interactions/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,2CAA2C,CAAC;AACrE,eAAO,MAAM,cAAc,EAAG,qBAA8B,CAAC;AAC7D,eAAO,MAAM,QAAQ,4CAA4C,CAAC;AAElE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,OAAO,GACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAE,KAAK,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,sBAAsB,EACtB,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,iCAAiC,GAClC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interactions/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,2CAA2C,CAAC;AACrE,eAAO,MAAM,cAAc,EAAG,qBAA8B,CAAC;AAC7D,eAAO,MAAM,QAAQ,4CAA4C,CAAC;AAElE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,OAAO,GACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAE,KAAK,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,sBAAsB,EACtB,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,iCAAiC,GAClC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -20,4 +20,7 @@ export { createPermissionTicket, isTicketExpired, checkPresentationAnswersChalle
20
20
  export { evaluateActionRisk, } from './risk.js';
21
21
  export { validateActionCard, } from './cards.js';
22
22
  export { buildExchangeRecord, } from './relationship.js';
23
+ // The interactions grant's record scopes — one list the Home (issuing the grant) and the agent runtime
24
+ // (a chartered child's genesis planes) both compose from; the product appends its own namespaces.
25
+ export { INTERACTIONS_GRANT_CORE_SCOPES, interactionsGrantScopes, } from './grant-scopes.js';
23
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interactions/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,4CAA4C;AAC5C,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAG,wCAAwC,CAAC;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,qBAA8B,CAAC;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,yCAAyC,CAAC;AA0BlE,OAAO,EACL,eAAe,EACf,eAAe,EAGf,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EAEnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAGL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,OAAO,GACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAyB,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAgC,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAML,yBAAyB,EAIzB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAOL,sBAAsB,EACtB,eAAe,EAGf,iCAAiC,GAClC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAML,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAKL,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAEL,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interactions/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,4CAA4C;AAC5C,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAG,wCAAwC,CAAC;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,qBAA8B,CAAC;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,yCAAyC,CAAC;AA0BlE,OAAO,EACL,eAAe,EACf,eAAe,EAGf,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EAEnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAGL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,EACX,OAAO,GACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAyB,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAgC,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAML,yBAAyB,EAIzB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAOL,sBAAsB,EACtB,eAAe,EAGf,iCAAiC,GAClC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAML,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAKL,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAEL,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAE3B,uGAAuG;AACvG,kGAAkG;AAClG,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,GAIxB,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { isTerminalCaseState, type CaseRejection } from '../case-machine.js';
1
+ import { isTerminalCaseState, type CaseRejection, type CaseTransitionContext } from '../case-machine.js';
2
2
  import type { InteractionCaseV1, InteractionState, InteractionTransitionEventV1 } from './types.js';
3
3
  export declare const TERMINAL_STATES: readonly InteractionState[];
4
4
  export declare const isTerminalState: typeof isTerminalCaseState;
@@ -15,5 +15,5 @@ export type TransitionResult = {
15
15
  * interactions `interactionId` onto the case `caseId` and delegates to `applyCaseTransition`. Pure,
16
16
  * fail-closed, role-checked — unchanged semantics for the surviving transitions.
17
17
  */
18
- export declare function applyInteractionTransition(current: InteractionCaseV1, event: InteractionTransitionEventV1): TransitionResult;
18
+ export declare function applyInteractionTransition(current: InteractionCaseV1, event: InteractionTransitionEventV1, ctx?: CaseTransitionContext): TransitionResult;
19
19
  //# sourceMappingURL=machine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/interactions/machine.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,mBAAmB,EAEnB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAAyB,CAAC;AACjF,eAAO,MAAM,eAAe,4BAAsB,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAChD,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,4BAA4B,GAClC,gBAAgB,CAclB"}
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/interactions/machine.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,mBAAmB,EAEnB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAAyB,CAAC;AACjF,eAAO,MAAM,eAAe,4BAAsB,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAChD,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,4BAA4B,EACnC,GAAG,GAAE,qBAA0B,GAC9B,gBAAgB,CAclB"}
@@ -13,7 +13,7 @@ export const isTerminalState = isTerminalCaseState;
13
13
  * interactions `interactionId` onto the case `caseId` and delegates to `applyCaseTransition`. Pure,
14
14
  * fail-closed, role-checked — unchanged semantics for the surviving transitions.
15
15
  */
16
- export function applyInteractionTransition(current, event) {
16
+ export function applyInteractionTransition(current, event, ctx = {}) {
17
17
  return applyCaseTransition(current, {
18
18
  version: 'ap.case.event.v1',
19
19
  caseId: event.interactionId,
@@ -26,6 +26,6 @@ export function applyInteractionTransition(current, event) {
26
26
  evidenceRef: event.evidenceRef,
27
27
  authorityRef: event.authorityRef,
28
28
  signature: event.signature,
29
- });
29
+ }, ctx);
30
30
  }
31
31
  //# sourceMappingURL=machine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine.js","sourceRoot":"","sources":["../../src/interactions/machine.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,2GAA2G;AAC3G,2GAA2G;AAC3G,sGAAsG;AACtG,EAAE;AACF,iGAAiG;AACjG,6EAA6E;AAE7E,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,eAAe,GAAgC,oBAAoB,CAAC;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAOnD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA0B,EAC1B,KAAmC;IAEnC,OAAO,mBAAmB,CAAC,OAAO,EAAE;QAClC,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,KAAK,CAAC,aAAa;QAC3B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"machine.js","sourceRoot":"","sources":["../../src/interactions/machine.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,2GAA2G;AAC3G,2GAA2G;AAC3G,sGAAsG;AACtG,EAAE;AACF,iGAAiG;AACjG,6EAA6E;AAE7E,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,eAAe,GAAgC,oBAAoB,CAAC;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAOnD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA0B,EAC1B,KAAmC,EACnC,MAA6B,EAAE;IAE/B,OAAO,mBAAmB,CAAC,OAAO,EAAE;QAClC,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,KAAK,CAAC,aAAa;QAC3B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,EAAE,GAAG,CAAC,CAAC;AACV,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { CanonicalAgentId } from '@agenticprimitives/types';
2
+ import type { ContextRefV1, MessageId } from '../messaging/index.js';
3
+ import type { InteractionCaseV1, InteractionId, InteractionKind } from './types.js';
4
+ export interface OpenCaseInput {
5
+ /** The Interaction this case belongs to. DERIVED by the caller (e.g. `ixn_work_<workItemId>`), never
6
+ * minted — see `derivedCaseId` for why. */
7
+ interactionId: string;
8
+ /** Who is asking. The party the decision is about, verified by the recipient's gate before this runs. */
9
+ requester: CanonicalAgentId;
10
+ /** Who must answer. */
11
+ responder: CanonicalAgentId;
12
+ kind: InteractionKind;
13
+ /** Human-facing one-liner. What the responder is being asked, in their words not the system's. */
14
+ subject: string;
15
+ /** The message that opened it — the case's root in the exchange stream. */
16
+ rootMessageId: MessageId;
17
+ /** What this case is ABOUT (the work item, the artifact). About-ness, never authority. */
18
+ contextRefs?: ContextRefV1[];
19
+ at: string;
20
+ expiresAt?: string;
21
+ }
22
+ /**
23
+ * The case id, DERIVED from what makes it the same request.
24
+ *
25
+ * NOT a uuid, and this is the whole of §N.7.2. A transition can be retried — a delivery re-attempt, a
26
+ * user pressing twice, an at-least-once queue — and a minted id would make every retry a NEW obligation
27
+ * sitting in someone's inbox. Deriving it means a retry finds the case that already exists.
28
+ *
29
+ * The tuple is (interaction, requester, responder, kind): the same party asking the same party for the
30
+ * same thing about the same interaction IS the same request. A different KIND is a different ask, so it
31
+ * gets its own case — an access request and an approval request about one work item are two questions.
32
+ *
33
+ * Precedent: W11 derives `ixn_topic_<channelId>` so "the two cannot drift and no join table exists to go
34
+ * stale", and `org.applications` keeps one entry per applicant so re-applying updates in place rather
35
+ * than flooding the queue.
36
+ */
37
+ export declare function derivedCaseId(input: {
38
+ interactionId: string;
39
+ requester: CanonicalAgentId;
40
+ responder: CanonicalAgentId;
41
+ kind: InteractionKind;
42
+ }): InteractionId;
43
+ export type OpenCaseResult = {
44
+ ok: true;
45
+ case: InteractionCaseV1;
46
+ created: boolean;
47
+ } | {
48
+ ok: false;
49
+ reason: 'self-addressed' | 'missing-subject';
50
+ };
51
+ /**
52
+ * Open a case, or return the one already open for this request.
53
+ *
54
+ * `created: false` is a SUCCESS, not a conflict — a retried transition is supposed to be a no-op, and
55
+ * reporting it as an error would push every caller into distinguishing "already asked" from "failed to
56
+ * ask". The existing case is returned unchanged: re-asking does not reset a decision already in progress,
57
+ * and must never revive one already answered.
58
+ */
59
+ export declare function openCase(input: OpenCaseInput, existing?: InteractionCaseV1 | null): OpenCaseResult;
60
+ //# sourceMappingURL=open-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-case.d.ts","sourceRoot":"","sources":["../../src/interactions/open-case.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B;gDAC4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,yGAAyG;IACzG,SAAS,EAAE,gBAAgB,CAAC;IAC5B,uBAAuB;IACvB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,kGAAkG;IAClG,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,aAAa,EAAE,SAAS,CAAC;IACzB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,YAAY,EAAE,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,eAAe,CAAC;CACvB,GAAG,aAAa,CAGhB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG,cAAc,CAoClG"}
@@ -0,0 +1,83 @@
1
+ // `openCase` — the CASE PRODUCER (spec 340 §N).
2
+ //
3
+ // THE GAP THIS FILLS. Everything downstream of a case was built and wired — the store, the reducer,
4
+ // `applyApproveWithMandate` with its four gates, the server action, the UI button — and nothing ever
5
+ // created one. `putCase` was called in exactly one place: `hydrate`, reading a stored document back. So
6
+ // `cases`/`cards`/`mandates` were structurally always empty and the governed-situation half of the model
7
+ // had never executed against a live deployment.
8
+ //
9
+ // WHAT THIS DOES NOT KNOW. It has no idea what a work item is, and it must not learn (§N.7.1). The
10
+ // coordination profile decides WHICH transitions open a case; this decides what a case IS. The boundary
11
+ // has a test: if this function ever needs a work-item field, the boundary has moved and the design is
12
+ // wrong. Callers pass a `subject` and `contextRefs` — about-ness, never authority.
13
+ //
14
+ // OPENING A CASE GRANTS NOTHING (§N.7.3, ADR-0041). It creates an obligation to ANSWER, not permission to
15
+ // act. `authorityRefs` starts empty and stays empty until a mandate is issued; the case points at
16
+ // authority and never becomes it. That is why this function takes no grant, no delegation and no
17
+ // credential — there is nothing it could legitimately do with one.
18
+ /**
19
+ * The case id, DERIVED from what makes it the same request.
20
+ *
21
+ * NOT a uuid, and this is the whole of §N.7.2. A transition can be retried — a delivery re-attempt, a
22
+ * user pressing twice, an at-least-once queue — and a minted id would make every retry a NEW obligation
23
+ * sitting in someone's inbox. Deriving it means a retry finds the case that already exists.
24
+ *
25
+ * The tuple is (interaction, requester, responder, kind): the same party asking the same party for the
26
+ * same thing about the same interaction IS the same request. A different KIND is a different ask, so it
27
+ * gets its own case — an access request and an approval request about one work item are two questions.
28
+ *
29
+ * Precedent: W11 derives `ixn_topic_<channelId>` so "the two cannot drift and no join table exists to go
30
+ * stale", and `org.applications` keeps one entry per applicant so re-applying updates in place rather
31
+ * than flooding the queue.
32
+ */
33
+ export function derivedCaseId(input) {
34
+ const part = (s) => String(s).toLowerCase().replace(/[^a-z0-9:_.-]/g, '');
35
+ return `${part(input.interactionId)}:${input.kind}:${part(input.requester)}:${part(input.responder)}`;
36
+ }
37
+ /**
38
+ * Open a case, or return the one already open for this request.
39
+ *
40
+ * `created: false` is a SUCCESS, not a conflict — a retried transition is supposed to be a no-op, and
41
+ * reporting it as an error would push every caller into distinguishing "already asked" from "failed to
42
+ * ask". The existing case is returned unchanged: re-asking does not reset a decision already in progress,
43
+ * and must never revive one already answered.
44
+ */
45
+ export function openCase(input, existing) {
46
+ if (!input.subject.trim())
47
+ return { ok: false, reason: 'missing-subject' };
48
+ // A case is a question addressed to somebody else. Asking yourself for a decision would create an
49
+ // obligation with no counterparty, and it is the shape a mis-wired emitter produces — worth refusing
50
+ // loudly rather than filling an inbox with self-addressed requests.
51
+ if (input.requester.toLowerCase() === input.responder.toLowerCase())
52
+ return { ok: false, reason: 'self-addressed' };
53
+ if (existing)
54
+ return { ok: true, case: existing, created: false };
55
+ return {
56
+ ok: true,
57
+ created: true,
58
+ case: {
59
+ version: 'ap.interaction.v1',
60
+ id: derivedCaseId(input),
61
+ kind: input.kind,
62
+ subject: input.subject.trim(),
63
+ requester: input.requester,
64
+ responder: input.responder,
65
+ // SUBMITTED, not 'draft' and not an invented 'requested'. W10b made `CaseState` execution-only
66
+ // (11 → 8), and a case that has been asked but not yet triaged is exactly `submitted` — 'draft'
67
+ // would mean the requester had not sent it. Reusing the existing vocabulary rather than widening
68
+ // it is the point: the enum retirement (§R) exists so states are not added per feature.
69
+ state: 'submitted',
70
+ createdAt: input.at,
71
+ updatedAt: input.at,
72
+ rootMessageId: input.rootMessageId,
73
+ latestMessageId: input.rootMessageId,
74
+ evidenceRefs: [],
75
+ // EMPTY, AND IT STAYS EMPTY UNTIL A MANDATE EXISTS. The case points at authority; it never carries
76
+ // it (ADR-0041). A producer that seeded this would make opening a case a way to acquire permission.
77
+ authorityRefs: [],
78
+ ...(input.contextRefs?.length ? { contextRefs: input.contextRefs } : {}),
79
+ ...(input.expiresAt ? { expiresAt: input.expiresAt } : {}),
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=open-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-case.js","sourceRoot":"","sources":["../../src/interactions/open-case.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,wGAAwG;AACxG,yGAAyG;AACzG,gDAAgD;AAChD,EAAE;AACF,mGAAmG;AACnG,wGAAwG;AACxG,sGAAsG;AACtG,mFAAmF;AACnF,EAAE;AACF,0GAA0G;AAC1G,kGAAkG;AAClG,iGAAiG;AACjG,mEAAmE;AAyBnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,KAK7B;IACC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC1F,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAmB,CAAC;AACzH,CAAC;AAMD;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB,EAAE,QAAmC;IAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC3E,kGAAkG;IAClG,qGAAqG;IACrG,oEAAoE;IACpE,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAEpH,IAAI,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAElE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,OAAO,EAAE,mBAAmB;YAC5B,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,+FAA+F;YAC/F,gGAAgG;YAChG,iGAAiG;YACjG,wFAAwF;YACxF,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,KAAK,CAAC,EAAE;YACnB,SAAS,EAAE,KAAK,CAAC,EAAE;YACnB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,aAAa;YACpC,YAAY,EAAE,EAAE;YAChB,mGAAmG;YACnG,oGAAoG;YACpG,aAAa,EAAE,EAAE;YACjB,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D;KACF,CAAC;AACJ,CAAC"}
@@ -1,9 +1,18 @@
1
1
  import { type TransitionResult } from './machine.js';
2
+ import type { CommitmentRecordV1, DecisionRecordV1 } from '../interaction-machines.js';
2
3
  import type { InteractionCaseV1, InteractionId, InteractionState, InteractionTransitionEventV1 } from './types.js';
3
4
  export interface InteractionStore {
4
5
  /** Register a new case. Fail-closed: only `draft` cases enter; duplicate ids throw. */
5
6
  putCase(c: InteractionCaseV1): void;
6
7
  getCase(id: InteractionId): InteractionCaseV1 | null;
8
+ /**
9
+ * The determination this case produced, if any (spec 340 W10). `null` until a transition emits one —
10
+ * `approve`/`deny`/`expire` are the three that do. Separate from the case's own state on purpose:
11
+ * a decision has its own lifecycle, its own signer, and outlives the transition that recorded it.
12
+ */
13
+ getDecision(id: InteractionId): DecisionRecordV1 | null;
14
+ /** The obligation this case gave rise to, if any. `null` until `issue-credential` creates one. */
15
+ getCommitment(id: InteractionId): CommitmentRecordV1 | null;
7
16
  /**
8
17
  * Apply a signed transition event. Idempotent: replaying an event whose
9
18
  * `idempotencyKey` was already applied returns the current case unchanged
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interactions/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEnH,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,OAAO,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACrD;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,4BAA4B,GAAG,gBAAgB,CAAC;IAClE,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,4BAA4B,EAAE,CAAC;IAC9D,SAAS,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;IACzD;iEAC6D;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CACjD;AAED,wBAAgB,8BAA8B,IAAI,gBAAgB,CA6DjE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interactions/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAElG,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEnH,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,OAAO,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACrD;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACxD,kGAAkG;IAClG,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAC5D;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,4BAA4B,GAAG,gBAAgB,CAAC;IAClE,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,4BAA4B,EAAE,CAAC;IAC9D,SAAS,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;IACzD;iEAC6D;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CACjD;AAED,wBAAgB,8BAA8B,IAAI,gBAAgB,CAyHjE"}
@@ -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":"AAAA,4EAA4E;AAC5E,0DAA0D;AAE1D,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAyB,MAAM,cAAc,CAAC;AAoBlG,MAAM,UAAU,8BAA8B;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiD,CAAC;IACxE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE1D,OAAO;QACL,OAAO,CAAC,CAAC;YACP,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,6CAA6C,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,EAAE;YACR,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;QAC/B,CAAC;QACD,UAAU,CAAC,KAAK;YACd,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YAEzD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAE,CAAC;YACnD,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBACzE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;YAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC;YAE9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,UAAU,CAAC,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,SAAS,CAAC,KAAK;YACb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,UAAU,CAAC,MAAM;YACf,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/B,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACvC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBAAE,SAAS;gBACxF,MAAM,MAAM,GAAG,0BAA0B,CAAC,CAAC,EAAE;oBAC3C,OAAO,EAAE,yBAAyB;oBAClC,aAAa,EAAE,CAAC,CAAC,EAAE;oBACnB,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,sDAAsD;oBAC1E,EAAE,EAAE,MAAM;iBACX,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
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
@@ -19,7 +19,7 @@ export interface ChannelMessageEntryV1 {
19
19
  export interface TopicAssistantV1 {
20
20
  /** 'mention' — reply only when a post @-mentions the org. 'all' — reply to every member post. */
21
21
  trigger: 'mention' | 'all';
22
- /** Lowercased mention label, e.g. 'grace' for grace.impact — matched as @grace / @grace.impact.
22
+ /** Lowercased mention label, e.g. 'grace' for grace.me — matched as @grace / @grace.me.
23
23
  * Empty ONLY for trigger:'all' (a nameless org cannot be mentioned). */
24
24
  mentionHandle: string;
25
25
  /** Author display name stamped on assistant posts (org primary name / profile display name). */
@@ -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],