@animalabs/agent-framework 0.7.4 → 0.9.0

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 (237) hide show
  1. package/dist/src/agent.d.ts +10 -0
  2. package/dist/src/agent.d.ts.map +1 -1
  3. package/dist/src/agent.js +33 -3
  4. package/dist/src/agent.js.map +1 -1
  5. package/dist/src/code-execution/index.d.ts +1 -1
  6. package/dist/src/code-execution/index.d.ts.map +1 -1
  7. package/dist/src/code-execution/index.js.map +1 -1
  8. package/dist/src/code-execution/py-runner.d.ts +23 -1
  9. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  10. package/dist/src/code-execution/py-runner.js +40 -4
  11. package/dist/src/code-execution/py-runner.js.map +1 -1
  12. package/dist/src/code-execution/runtime-py.d.ts +15 -2
  13. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  14. package/dist/src/code-execution/runtime-py.js +156 -7
  15. package/dist/src/code-execution/runtime-py.js.map +1 -1
  16. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  17. package/dist/src/code-execution/tool-definition.js +27 -2
  18. package/dist/src/code-execution/tool-definition.js.map +1 -1
  19. package/dist/src/framework.d.ts +234 -5
  20. package/dist/src/framework.d.ts.map +1 -1
  21. package/dist/src/framework.js +1818 -188
  22. package/dist/src/framework.js.map +1 -1
  23. package/dist/src/gate/event-gate.d.ts +11 -0
  24. package/dist/src/gate/event-gate.d.ts.map +1 -1
  25. package/dist/src/gate/event-gate.js +66 -0
  26. package/dist/src/gate/event-gate.js.map +1 -1
  27. package/dist/src/index.d.ts +1 -0
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +1 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/mcpl/capability-grant.d.ts +115 -0
  32. package/dist/src/mcpl/capability-grant.d.ts.map +1 -0
  33. package/dist/src/mcpl/capability-grant.js +291 -0
  34. package/dist/src/mcpl/capability-grant.js.map +1 -0
  35. package/dist/src/mcpl/capability-mask.d.ts +51 -0
  36. package/dist/src/mcpl/capability-mask.d.ts.map +1 -0
  37. package/dist/src/mcpl/capability-mask.js +190 -0
  38. package/dist/src/mcpl/capability-mask.js.map +1 -0
  39. package/dist/src/mcpl/channel-registry.d.ts +30 -2
  40. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  41. package/dist/src/mcpl/channel-registry.js +216 -43
  42. package/dist/src/mcpl/channel-registry.js.map +1 -1
  43. package/dist/src/mcpl/checkpoint-manager.d.ts +8 -3
  44. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  45. package/dist/src/mcpl/checkpoint-manager.js +28 -8
  46. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  47. package/dist/src/mcpl/errors.d.ts +6 -0
  48. package/dist/src/mcpl/errors.d.ts.map +1 -1
  49. package/dist/src/mcpl/errors.js +6 -0
  50. package/dist/src/mcpl/errors.js.map +1 -1
  51. package/dist/src/mcpl/feature-set-manager.d.ts +10 -1
  52. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
  53. package/dist/src/mcpl/feature-set-manager.js +45 -4
  54. package/dist/src/mcpl/feature-set-manager.js.map +1 -1
  55. package/dist/src/mcpl/hook-orchestrator.d.ts +10 -14
  56. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  57. package/dist/src/mcpl/hook-orchestrator.js +58 -67
  58. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  59. package/dist/src/mcpl/index.d.ts +1 -1
  60. package/dist/src/mcpl/index.d.ts.map +1 -1
  61. package/dist/src/mcpl/index.js.map +1 -1
  62. package/dist/src/mcpl/prose-stream-router.d.ts +9 -0
  63. package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -1
  64. package/dist/src/mcpl/prose-stream-router.js +16 -0
  65. package/dist/src/mcpl/prose-stream-router.js.map +1 -1
  66. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  67. package/dist/src/mcpl/push-handler.js +20 -2
  68. package/dist/src/mcpl/push-handler.js.map +1 -1
  69. package/dist/src/mcpl/server-connection.d.ts +93 -9
  70. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  71. package/dist/src/mcpl/server-connection.js +231 -32
  72. package/dist/src/mcpl/server-connection.js.map +1 -1
  73. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  74. package/dist/src/mcpl/server-registry.js +4 -3
  75. package/dist/src/mcpl/server-registry.js.map +1 -1
  76. package/dist/src/mcpl/tags.d.ts +24 -0
  77. package/dist/src/mcpl/tags.d.ts.map +1 -0
  78. package/dist/src/mcpl/tags.js +52 -0
  79. package/dist/src/mcpl/tags.js.map +1 -0
  80. package/dist/src/mcpl/transport.d.ts +1 -1
  81. package/dist/src/mcpl/transport.d.ts.map +1 -1
  82. package/dist/src/mcpl/transport.js +35 -7
  83. package/dist/src/mcpl/transport.js.map +1 -1
  84. package/dist/src/mcpl/types.d.ts +169 -64
  85. package/dist/src/mcpl/types.d.ts.map +1 -1
  86. package/dist/src/mcpl/types.js +16 -2
  87. package/dist/src/mcpl/types.js.map +1 -1
  88. package/dist/src/module-registry.d.ts +12 -0
  89. package/dist/src/module-registry.d.ts.map +1 -1
  90. package/dist/src/module-registry.js +26 -0
  91. package/dist/src/module-registry.js.map +1 -1
  92. package/dist/src/modules/workspace/index.d.ts +20 -0
  93. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  94. package/dist/src/modules/workspace/index.js +48 -15
  95. package/dist/src/modules/workspace/index.js.map +1 -1
  96. package/dist/src/modules/workspace/sync.d.ts +4 -0
  97. package/dist/src/modules/workspace/sync.d.ts.map +1 -1
  98. package/dist/src/modules/workspace/sync.js +1 -1
  99. package/dist/src/modules/workspace/sync.js.map +1 -1
  100. package/dist/src/refusal-reactions.d.ts +27 -0
  101. package/dist/src/refusal-reactions.d.ts.map +1 -0
  102. package/dist/src/refusal-reactions.js +35 -0
  103. package/dist/src/refusal-reactions.js.map +1 -0
  104. package/dist/src/tool-result-history.d.ts +10 -0
  105. package/dist/src/tool-result-history.d.ts.map +1 -1
  106. package/dist/src/tool-result-history.js +16 -5
  107. package/dist/src/tool-result-history.js.map +1 -1
  108. package/dist/src/types/agent.d.ts +35 -0
  109. package/dist/src/types/agent.d.ts.map +1 -1
  110. package/dist/src/types/framework.d.ts +26 -0
  111. package/dist/src/types/framework.d.ts.map +1 -1
  112. package/dist/src/types/module.d.ts +22 -0
  113. package/dist/src/types/module.d.ts.map +1 -1
  114. package/dist/src/types/trace.d.ts +24 -0
  115. package/dist/src/types/trace.d.ts.map +1 -1
  116. package/dist/test/busy-agent-scheduler.test.js +1 -0
  117. package/dist/test/busy-agent-scheduler.test.js.map +1 -1
  118. package/dist/test/channel-registry-routing.test.js +38 -10
  119. package/dist/test/channel-registry-routing.test.js.map +1 -1
  120. package/dist/test/channel-registry-typing.test.js +10 -1
  121. package/dist/test/channel-registry-typing.test.js.map +1 -1
  122. package/dist/test/checkpoint-attribution.test.js +168 -8
  123. package/dist/test/checkpoint-attribution.test.js.map +1 -1
  124. package/dist/test/code-execution.test.js +327 -1
  125. package/dist/test/code-execution.test.js.map +1 -1
  126. package/dist/test/conversation-fork-injection-scoping.test.js +8 -3
  127. package/dist/test/conversation-fork-injection-scoping.test.js.map +1 -1
  128. package/dist/test/deferred-wake-integrity.test.d.ts +29 -0
  129. package/dist/test/deferred-wake-integrity.test.d.ts.map +1 -0
  130. package/dist/test/deferred-wake-integrity.test.js +320 -0
  131. package/dist/test/deferred-wake-integrity.test.js.map +1 -0
  132. package/dist/test/event-gate-selfwake.test.d.ts +15 -0
  133. package/dist/test/event-gate-selfwake.test.d.ts.map +1 -0
  134. package/dist/test/event-gate-selfwake.test.js +125 -0
  135. package/dist/test/event-gate-selfwake.test.js.map +1 -0
  136. package/dist/test/machine-close-provenance.test.d.ts +2 -0
  137. package/dist/test/machine-close-provenance.test.d.ts.map +1 -0
  138. package/dist/test/machine-close-provenance.test.js +116 -0
  139. package/dist/test/machine-close-provenance.test.js.map +1 -0
  140. package/dist/test/mcpl-access-provider.test.d.ts +2 -0
  141. package/dist/test/mcpl-access-provider.test.d.ts.map +1 -0
  142. package/dist/test/mcpl-access-provider.test.js +20 -0
  143. package/dist/test/mcpl-access-provider.test.js.map +1 -0
  144. package/dist/test/mcpl-awareness-barrier.test.js +10 -0
  145. package/dist/test/mcpl-awareness-barrier.test.js.map +1 -1
  146. package/dist/test/mcpl-capability-grant.test.d.ts +10 -0
  147. package/dist/test/mcpl-capability-grant.test.d.ts.map +1 -0
  148. package/dist/test/mcpl-capability-grant.test.js +109 -0
  149. package/dist/test/mcpl-capability-grant.test.js.map +1 -0
  150. package/dist/test/mcpl-capability-scoping.test.d.ts +2 -0
  151. package/dist/test/mcpl-capability-scoping.test.d.ts.map +1 -0
  152. package/dist/test/mcpl-capability-scoping.test.js +266 -0
  153. package/dist/test/mcpl-capability-scoping.test.js.map +1 -0
  154. package/dist/test/mcpl-gate-roundtrip.test.js +13 -0
  155. package/dist/test/mcpl-gate-roundtrip.test.js.map +1 -1
  156. package/dist/test/mcpl-list-status.test.d.ts +2 -0
  157. package/dist/test/mcpl-list-status.test.d.ts.map +1 -0
  158. package/dist/test/mcpl-list-status.test.js +78 -0
  159. package/dist/test/mcpl-list-status.test.js.map +1 -0
  160. package/dist/test/mcpl-manifest-changed.test.d.ts +2 -0
  161. package/dist/test/mcpl-manifest-changed.test.d.ts.map +1 -0
  162. package/dist/test/mcpl-manifest-changed.test.js +177 -0
  163. package/dist/test/mcpl-manifest-changed.test.js.map +1 -0
  164. package/dist/test/mcpl-reconnect-events.test.js +27 -2
  165. package/dist/test/mcpl-reconnect-events.test.js.map +1 -1
  166. package/dist/test/mcpl-reconnect-reregistration.test.js +53 -17
  167. package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -1
  168. package/dist/test/mcpl-request-timeout.test.js +1 -1
  169. package/dist/test/mcpl-request-timeout.test.js.map +1 -1
  170. package/dist/test/module-context-integration.test.d.ts +18 -0
  171. package/dist/test/module-context-integration.test.d.ts.map +1 -0
  172. package/dist/test/module-context-integration.test.js +181 -0
  173. package/dist/test/module-context-integration.test.js.map +1 -0
  174. package/dist/test/physical-window-restart.test.d.ts +14 -0
  175. package/dist/test/physical-window-restart.test.d.ts.map +1 -0
  176. package/dist/test/physical-window-restart.test.js +222 -0
  177. package/dist/test/physical-window-restart.test.js.map +1 -0
  178. package/dist/test/present-while-acting.test.js +270 -0
  179. package/dist/test/present-while-acting.test.js.map +1 -1
  180. package/dist/test/refusal-reaction-baseline.test.d.ts +2 -0
  181. package/dist/test/refusal-reaction-baseline.test.d.ts.map +1 -0
  182. package/dist/test/refusal-reaction-baseline.test.js +74 -0
  183. package/dist/test/refusal-reaction-baseline.test.js.map +1 -0
  184. package/dist/test/state-scaling-e2e.test.js +7 -1
  185. package/dist/test/state-scaling-e2e.test.js.map +1 -1
  186. package/dist/test/state-scaling.test.js +9 -1
  187. package/dist/test/state-scaling.test.js.map +1 -1
  188. package/dist/test/tool-result-spill.test.d.ts +13 -0
  189. package/dist/test/tool-result-spill.test.d.ts.map +1 -0
  190. package/dist/test/tool-result-spill.test.js +463 -0
  191. package/dist/test/tool-result-spill.test.js.map +1 -0
  192. package/dist/test/trunk-channel-routing.test.js +45 -0
  193. package/dist/test/trunk-channel-routing.test.js.map +1 -1
  194. package/dist/test/utils-surface.test.d.ts +2 -0
  195. package/dist/test/utils-surface.test.d.ts.map +1 -0
  196. package/dist/test/utils-surface.test.js +145 -0
  197. package/dist/test/utils-surface.test.js.map +1 -0
  198. package/dist/test/workspace-read-image.test.js +71 -0
  199. package/dist/test/workspace-read-image.test.js.map +1 -1
  200. package/dist/test/workspace-restore-order.test.d.ts +16 -0
  201. package/dist/test/workspace-restore-order.test.d.ts.map +1 -0
  202. package/dist/test/workspace-restore-order.test.js +140 -0
  203. package/dist/test/workspace-restore-order.test.js.map +1 -0
  204. package/dist/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +4 -4
  206. package/src/agent.ts +37 -3
  207. package/src/code-execution/index.ts +1 -0
  208. package/src/code-execution/py-runner.ts +56 -4
  209. package/src/code-execution/runtime-py.ts +156 -7
  210. package/src/code-execution/tool-definition.ts +27 -2
  211. package/src/framework.ts +2080 -203
  212. package/src/gate/event-gate.ts +72 -0
  213. package/src/index.ts +1 -0
  214. package/src/mcpl/capability-grant.ts +319 -0
  215. package/src/mcpl/capability-mask.ts +228 -0
  216. package/src/mcpl/channel-registry.ts +265 -43
  217. package/src/mcpl/checkpoint-manager.ts +28 -8
  218. package/src/mcpl/errors.ts +7 -0
  219. package/src/mcpl/feature-set-manager.ts +50 -5
  220. package/src/mcpl/hook-orchestrator.ts +64 -86
  221. package/src/mcpl/index.ts +0 -2
  222. package/src/mcpl/prose-stream-router.ts +17 -0
  223. package/src/mcpl/push-handler.ts +18 -2
  224. package/src/mcpl/server-connection.ts +262 -34
  225. package/src/mcpl/server-registry.ts +4 -3
  226. package/src/mcpl/tags.ts +50 -0
  227. package/src/mcpl/transport.ts +37 -7
  228. package/src/mcpl/types.ts +187 -78
  229. package/src/module-registry.ts +34 -0
  230. package/src/modules/workspace/index.ts +49 -15
  231. package/src/modules/workspace/sync.ts +1 -1
  232. package/src/refusal-reactions.ts +37 -0
  233. package/src/tool-result-history.ts +17 -5
  234. package/src/types/agent.ts +36 -0
  235. package/src/types/framework.ts +27 -0
  236. package/src/types/module.ts +24 -0
  237. package/src/types/trace.ts +22 -0
@@ -1,3 +1,4 @@
1
+ import { CapabilityGrant, ALL_CAPABILITY_PATHS } from '../src/mcpl/capability-grant.js';
1
2
  import { test } from 'node:test';
2
3
  import assert from 'node:assert/strict';
3
4
  import { ChannelRegistry } from '../src/mcpl/channel-registry.js';
@@ -13,6 +14,8 @@ function makeRegistry(publishResult, homeChannelResolver, activeChannelResolver,
13
14
  const closeCalls = [];
14
15
  let failOpens = false;
15
16
  const mockServer = {
17
+ // Post-policy state: full grant, so tests exercise delivery, not §5.3 denial.
18
+ grant: new CapabilityGrant(new Set(ALL_CAPABILITY_PATHS), []),
16
19
  sendChannelsPublish: async (params) => {
17
20
  publishCalls.push(params);
18
21
  return publishResult;
@@ -57,23 +60,32 @@ function incoming(channelId, text, channelName) {
57
60
  }],
58
61
  };
59
62
  }
60
- test('handleIncoming lazy-registers an unknown channel so it becomes a publishable locus', async () => {
63
+ /** §14.5: channels/incoming no longer mints unknown channels — seed the
64
+ * registered state a conforming server would have created via
65
+ * channels/register before feeding incoming traffic. */
66
+ function seedRegistered(registry, serverId, ...ids) {
67
+ const map = registry.channels;
68
+ for (const id of ids) {
69
+ if (!map.has(`${serverId}:${id}`)) {
70
+ map.set(`${serverId}:${id}`, { serverId, descriptor: { id, type: serverId, label: id }, open: false });
71
+ }
72
+ }
73
+ }
74
+ test('handleIncoming REJECTS an unknown channel instead of minting it (§14.5)', async () => {
61
75
  const { registry, traces, lookup } = makeRegistry({ delivered: true });
62
76
  // Channel "post-boot-ch" was never registered via channels/register|changed.
63
77
  assert.equal(lookup('post-boot-ch'), undefined);
64
78
  registry.handleIncoming('discord', incoming('post-boot-ch', 'hi', '#cairn'));
65
- const entry = lookup('post-boot-ch');
66
- assert.ok(entry, 'channel should be lazy-registered from the inbound message');
67
- assert.equal(entry.serverId, 'discord');
68
- assert.equal(entry.descriptor.label, '#cairn');
69
- assert.equal(entry.descriptor.metadata?.lazyRegistered, true);
70
- assert.ok(traces.some(t => t.type === 'mcpl:channel-lazy-registered'));
71
- // routeSpeech now resolves the locus and publishes (no failure).
72
- const res = await registry.routeSpeech('cairn', 'my reply', registry.resolveLocus('cairn'));
73
- assert.deepEqual(res, { delivered: true, channelId: 'post-boot-ch' });
79
+ // §14.5: the unknown channel is NOT minted, the message is rejected with
80
+ // a diagnostic, and the locus never becomes routable — a server cannot
81
+ // self-attest a channel identity by messaging it into existence.
82
+ assert.equal(lookup('post-boot-ch'), undefined, 'unknown channel must not be registered by its first message');
83
+ assert.ok(traces.some(t => t.type === 'mcpl:channel-incoming-rejected'));
84
+ assert.equal(registry.resolveLocus('cairn'), null, 'a rejected message must not establish a locus');
74
85
  });
75
86
  test('routeSpeech surfaces a failure when the server reports delivered:false', async () => {
76
87
  const { registry, failures, traces } = makeRegistry({ delivered: false });
88
+ seedRegistered(registry, 'discord', 'ch-x');
77
89
  registry.handleIncoming('discord', incoming('ch-x', 'hi'));
78
90
  const res = await registry.routeSpeech('cairn', 'undeliverable reply', registry.resolveLocus('cairn'));
79
91
  assert.equal(res, null, 'a non-delivered send must not report success');
@@ -88,7 +100,9 @@ test('routeSpeech routes a conversation fork to its HOME channel, not the global
88
100
  // bound to chanA must still publish to chanA.
89
101
  const homes = { 'conversation-chanA-g1': 'chanA' };
90
102
  const { registry, publishCalls } = makeRegistry({ delivered: true }, (agentName) => homes[agentName]);
103
+ seedRegistered(registry, 'discord', 'chanA');
91
104
  registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
105
+ seedRegistered(registry, 'discord', 'chanB');
92
106
  registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
93
107
  // Global locus is now chanB.
94
108
  assert.equal(registry.getDefaultPublishChannel(), 'chanB');
@@ -100,7 +114,9 @@ test('routeSpeech falls back to the global locus for the trunk agent (no home)',
100
114
  // The trunk/primary agent has no home entry; it correctly uses the global
101
115
  // most-recent-inbound channel.
102
116
  const { registry, publishCalls } = makeRegistry({ delivered: true }, () => undefined);
117
+ seedRegistered(registry, 'discord', 'chanA');
103
118
  registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
119
+ seedRegistered(registry, 'discord', 'chanB');
104
120
  registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
105
121
  const res = await registry.routeSpeech('trunk', 'heartbeat reply', registry.resolveLocus('trunk'));
106
122
  assert.deepEqual(res, { delivered: true, channelId: 'chanB' });
@@ -109,7 +125,9 @@ test('routeSpeech falls back to the global locus for the trunk agent (no home)',
109
125
  test('buildChannelContext advertises the fork home as defaultOutgoing (item 3)', () => {
110
126
  const homes = { 'conversation-chanA-g1': 'chanA' };
111
127
  const { registry } = makeRegistry({ delivered: true }, (agentName) => homes[agentName]);
128
+ seedRegistered(registry, 'discord', 'chanA');
112
129
  registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
130
+ seedRegistered(registry, 'discord', 'chanB');
113
131
  registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
114
132
  // The fork is told chanA (where its speech actually lands)...
115
133
  const forkCtx = registry.buildChannelContext('conversation-chanA-g1');
@@ -137,7 +155,9 @@ test('routeSpeech routes a TRUNK agent to its ACTIVE triggering channel, not the
137
155
  const active = { scout: 'chanA' };
138
156
  const { registry, publishCalls } = makeRegistry({ delivered: true }, () => undefined, // no fork homes (trunk-only, connectome-host mode)
139
157
  (agentName) => active[agentName]);
158
+ seedRegistered(registry, 'discord', 'chanA');
140
159
  registry.handleIncoming('discord', incoming('chanA', 'A: sleep && date'));
160
+ seedRegistered(registry, 'discord', 'chanB');
141
161
  registry.handleIncoming('discord', incoming('chanB', 'B: unrelated')); // flips global to chanB
142
162
  assert.equal(registry.getDefaultPublishChannel(), 'chanB');
143
163
  const res = await registry.routeSpeech('scout', 'the date is ...', registry.resolveLocus('scout'));
@@ -148,7 +168,9 @@ test('routeSpeech precedence: fork HOME wins over the active triggering channel'
148
168
  // A fork bound to chanA must route home even if its live turn was (somehow)
149
169
  // triggered from chanB — home is the strongest signal and must not regress.
150
170
  const { registry, publishCalls } = makeRegistry({ delivered: true }, (n) => (n === 'conversation-chanA-g1' ? 'chanA' : undefined), () => 'chanB');
171
+ seedRegistered(registry, 'discord', 'chanA');
151
172
  registry.handleIncoming('discord', incoming('chanA', 'hi'));
173
+ seedRegistered(registry, 'discord', 'chanB');
152
174
  registry.handleIncoming('discord', incoming('chanB', 'hi'));
153
175
  const res = await registry.routeSpeech('conversation-chanA-g1', 'reply', registry.resolveLocus('conversation-chanA-g1'));
154
176
  assert.deepEqual(res, { delivered: true, channelId: 'chanA' });
@@ -157,7 +179,9 @@ test('routeSpeech precedence: fork HOME wins over the active triggering channel'
157
179
  test('buildChannelContext advertises the active triggering channel as defaultOutgoing (item-3 redux)', () => {
158
180
  const active = { scout: 'chanA' };
159
181
  const { registry } = makeRegistry({ delivered: true }, () => undefined, (n) => active[n]);
182
+ seedRegistered(registry, 'discord', 'chanA');
160
183
  registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
184
+ seedRegistered(registry, 'discord', 'chanB');
161
185
  registry.handleIncoming('discord', incoming('chanB', 'hi from B')); // global → chanB
162
186
  // The trunk is TOLD chanA (where its speech will actually land), matching
163
187
  // what routeSpeech resolves — not the global chanB.
@@ -204,6 +228,7 @@ test('ensureChannelRegistered is idempotent and does not reopen a closed channel
204
228
  test('routeSpeech into a closed locus opens the channel first, then delivers', async () => {
205
229
  const { registry, publishCalls, openCalls, lookup } = makeRegistry({ delivered: true });
206
230
  // A DM-shaped situation: the channel is registered but closed.
231
+ seedRegistered(registry, 'discord', 'dm-alice');
207
232
  registry.handleIncoming('discord', incoming('dm-alice', 'hello?'));
208
233
  lookup('dm-alice').open = false;
209
234
  const res = await registry.routeSpeech('sol', 'a reply meant for the DM', 'dm-alice');
@@ -216,6 +241,7 @@ test('routeSpeech into a closed locus opens the channel first, then delivers', a
216
241
  });
217
242
  test('routeSpeech does NOT deliver when the open-on-delivery fails', async () => {
218
243
  const { registry, failures, publishCalls, lookup, setFailOpens } = makeRegistry({ delivered: true });
244
+ seedRegistered(registry, 'discord', 'dm-alice');
219
245
  registry.handleIncoming('discord', incoming('dm-alice', 'hello?'));
220
246
  lookup('dm-alice').open = false;
221
247
  const publishesBefore = publishCalls.length;
@@ -228,6 +254,7 @@ test('routeSpeech does NOT deliver when the open-on-delivery fails', async () =>
228
254
  });
229
255
  test('routeSpeech with an omitted locus fails loudly as a routing bug', async () => {
230
256
  const { registry, failures } = makeRegistry({ delivered: true });
257
+ seedRegistered(registry, 'discord', 'ch-y');
231
258
  registry.handleIncoming('discord', incoming('ch-y', 'hi'));
232
259
  const res = await registry.routeSpeech('cairn', 'who knows where');
233
260
  assert.equal(res, null);
@@ -308,6 +335,7 @@ test('policy admissions are announced to the agent exactly once, as one batch',
308
335
  test('opened-by-delivery is announced to the delivering agent', async () => {
309
336
  const autoOpened = [];
310
337
  const { registry, lookup } = makeRegistry({ delivered: true }, undefined, undefined, (info) => autoOpened.push(info));
338
+ seedRegistered(registry, 'discord', 'dm-alice');
311
339
  registry.handleIncoming('discord', incoming('dm-alice', 'hello?'));
312
340
  lookup('dm-alice').open = false;
313
341
  await registry.routeSpeech('sol', 'reply', 'dm-alice');
@@ -1 +1 @@
1
- {"version":3,"file":"channel-registry-routing.test.js","sourceRoot":"","sources":["../../test/channel-registry-routing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel-registry-routing.test.js","sourceRoot":"","sources":["../../test/channel-registry-routing.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,21 @@
1
1
  import { test } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { ChannelRegistry } from '../src/mcpl/channel-registry.js';
4
+ import { CapabilityGrant } from '../src/mcpl/capability-grant.js';
4
5
  function makeRegistry() {
5
6
  const calls = [];
6
7
  const sendTypingFn = (serverId, channelId, metadata, op) => {
7
8
  calls.push({ serverId, channelId, metadata, op });
8
9
  };
9
- const registry = new ChannelRegistry({}, {}, () => { }, () => { }, { sendTypingFn });
10
+ const registry = new ChannelRegistry(
11
+ // §14.1: the typing gate reads the server's grant now — a bare {} stub
12
+ // has no getServer and crashes. Model a post-policy server with
13
+ // channels.typing granted so the tests exercise dispatch, not denial.
14
+ {
15
+ getServer: () => ({
16
+ grant: new CapabilityGrant(new Set(['channels.typing']), []),
17
+ }),
18
+ }, {}, () => { }, () => { }, { sendTypingFn });
10
19
  // Register a channel directly via the private map — avoids the full
11
20
  // channel-incoming event plumbing, which isn't under test here.
12
21
  registry.channels.set('srv:ch1', {
@@ -1 +1 @@
1
- {"version":3,"file":"channel-registry-typing.test.js","sourceRoot":"","sources":["../../test/channel-registry-typing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel-registry-typing.test.js","sourceRoot":"","sources":["../../test/channel-registry-typing.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert';
3
+ import { AgentFramework } from '../src/framework.js';
3
4
  import { CheckpointManager } from '../src/mcpl/checkpoint-manager.js';
4
5
  // Minimal in-memory JsStore covering the slots CheckpointManager touches.
5
6
  function fakeStore() {
@@ -10,31 +11,190 @@ function fakeStore() {
10
11
  setStateJson(id, v) { m.set(id, v); },
11
12
  };
12
13
  }
14
+ function tool(name, attribution) {
15
+ return {
16
+ name,
17
+ inputSchema: { type: 'object' },
18
+ ...(attribution?.direct ? { featureSet: attribution.direct } : {}),
19
+ ...(attribution?.meta ? { _meta: { featureSet: attribution.meta } } : {}),
20
+ };
21
+ }
22
+ function makeFrameworkHarness(tools, resultFor) {
23
+ const checkpointManager = new CheckpointManager(fakeStore(), () => { });
24
+ const calls = [];
25
+ const server = {
26
+ id: 'srv',
27
+ async sendToolsList() { return { tools }; },
28
+ async sendToolsCall(name, _args, stateParams) {
29
+ calls.push({ name, stateParams });
30
+ return resultFor(name);
31
+ },
32
+ };
33
+ const framework = Object.create(AgentFramework.prototype);
34
+ framework.mcplTools = [];
35
+ framework.mcplToolFeatureSets = new Map();
36
+ framework.mcplServerConfigs = new Map([['srv', { id: 'srv', toolPrefix: 'test' }]]);
37
+ framework.mcplServerRegistry = {
38
+ getAllServers: () => [server],
39
+ getServer: (id) => id === 'srv' ? server : null,
40
+ };
41
+ framework.checkpointManager = checkpointManager;
42
+ framework.channelRegistry = null;
43
+ framework.emitTrace = () => { };
44
+ async function callTool(name) {
45
+ await framework.refreshMcplTools();
46
+ await new Promise((resolve, reject) => {
47
+ const timeout = setTimeout(() => reject(new Error(`Timed out waiting for ${name} result`)), 1000);
48
+ framework.pushEvent = (event) => {
49
+ if (event.type === 'tool-result' && event.callId === `call-${name}`) {
50
+ clearTimeout(timeout);
51
+ resolve();
52
+ }
53
+ };
54
+ framework.dispatchMcplToolCall('agent', { id: `call-${name}`, name: `test--${name}`, input: {} }, 'srv', 'test');
55
+ });
56
+ }
57
+ return { checkpointManager, calls, callTool };
58
+ }
59
+ function checkpoint(checkpoint, featureSet) {
60
+ return { checkpoint, parent: null, ...(featureSet ? { featureSet } : {}) };
61
+ }
13
62
  describe('CheckpointManager host-managed attribution', () => {
14
- it('threads the host-managed set even when a server-managed set registers first', () => {
63
+ it('threads the host-managed set even when server-managed sets register first', () => {
15
64
  const cm = new CheckpointManager(fakeStore(), () => { });
16
65
  const srv = 'xgate';
17
- // Mirror x-mcpl's declaration order: x.post (rollback) BEFORE x.feed (host).
18
66
  cm.registerFeatureSet(srv, 'x.post', { hostState: false, rollback: true });
19
67
  cm.registerFeatureSet(srv, 'x.feed', { hostState: true, rollback: true });
20
68
  cm.registerFeatureSet(srv, 'x.dm', { hostState: false, rollback: true });
21
- // The old blind "first stateful" pick returns x.post (the bug); the fix
22
- // selects the host-managed set for state threading.
23
- assert.equal(cm.getStatefulFeatureSet(srv), 'x.post');
69
+ assert.equal(cm.getStatefulFeatureSet(srv), null);
70
+ assert.equal(cm.hasAmbiguousServerManagedFeatureSets(srv), true);
71
+ assert.equal(cm.getStatefulFeatureSet(srv, 'x.post'), 'x.post');
24
72
  assert.equal(cm.getHostManagedFeatureSet(srv), 'x.feed');
25
- // A tagged feed checkpoint lands on x.feed and is retrievable for injection.
26
73
  cm.recordCheckpoint(srv, 'x.feed', {
27
74
  checkpoint: '1', parent: null, featureSet: 'x.feed', data: { sources: ['alice'] },
28
75
  });
29
76
  assert.deepEqual(cm.getCurrentState(srv, 'x.feed'), { sources: ['alice'] });
30
- // The server-managed set is not polluted by the feed's state.
31
77
  assert.equal(cm.getCurrentState(srv, 'x.post'), undefined);
32
78
  });
33
- it('getHostManagedFeatureSet is null when the server has no host-managed set', () => {
79
+ it('keeps the unique server-managed fallback when there is no host-managed set', () => {
34
80
  const cm = new CheckpointManager(fakeStore(), () => { });
35
81
  cm.registerFeatureSet('s', 'x.post', { hostState: false, rollback: true });
36
82
  assert.equal(cm.getHostManagedFeatureSet('s'), null);
37
83
  assert.equal(cm.getStatefulFeatureSet('s'), 'x.post');
84
+ assert.equal(cm.hasAmbiguousServerManagedFeatureSets('s'), false);
85
+ });
86
+ });
87
+ describe('AgentFramework tool-call checkpoint attribution', () => {
88
+ it('uses direct tool featureSet metadata for injection and untagged recording', async () => {
89
+ const harness = makeFrameworkHarness([tool('post', { direct: 'x.post' })], () => ({ content: [], state: checkpoint('post-2') }));
90
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
91
+ harness.checkpointManager.registerFeatureSet('srv', 'x.dm', { hostState: false, rollback: true });
92
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
93
+ harness.checkpointManager.recordCheckpoint('srv', 'x.dm', checkpoint('dm-1'));
94
+ await harness.callTool('post');
95
+ assert.deepEqual(harness.calls[0]?.stateParams, { checkpoint: 'post-1' });
96
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-2');
97
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.dm'), 'dm-1');
98
+ });
99
+ it('uses _meta.featureSet metadata the same way', async () => {
100
+ const harness = makeFrameworkHarness([tool('dm', { meta: 'x.dm' })], () => ({ content: [], state: checkpoint('dm-2') }));
101
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
102
+ harness.checkpointManager.registerFeatureSet('srv', 'x.dm', { hostState: false, rollback: true });
103
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
104
+ harness.checkpointManager.recordCheckpoint('srv', 'x.dm', checkpoint('dm-1'));
105
+ await harness.callTool('dm');
106
+ assert.deepEqual(harness.calls[0]?.stateParams, { checkpoint: 'dm-1' });
107
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
108
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.dm'), 'dm-2');
109
+ });
110
+ it('keeps explicit result.state.featureSet authoritative over tool metadata', async () => {
111
+ const harness = makeFrameworkHarness([tool('post', { direct: 'x.post' })], () => ({ content: [], state: checkpoint('dm-2', 'x.dm') }));
112
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
113
+ harness.checkpointManager.registerFeatureSet('srv', 'x.dm', { hostState: false, rollback: true });
114
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
115
+ harness.checkpointManager.recordCheckpoint('srv', 'x.dm', checkpoint('dm-1'));
116
+ await harness.callTool('post');
117
+ assert.deepEqual(harness.calls[0]?.stateParams, { checkpoint: 'post-1' });
118
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
119
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.dm'), 'dm-2');
120
+ });
121
+ it('does not fall back when explicit result attribution is not stateful', async () => {
122
+ const harness = makeFrameworkHarness([tool('post', { direct: 'x.post' })], () => ({ content: [], state: checkpoint('wrong-2', 'x.events') }));
123
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
124
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
125
+ await harness.callTool('post');
126
+ assert.deepEqual(harness.calls[0]?.stateParams, { checkpoint: 'post-1' });
127
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
128
+ });
129
+ it('records explicit result attribution even when an untagged tool is ambiguous', async () => {
130
+ const originalWarn = console.warn;
131
+ const warnings = [];
132
+ console.warn = (...args) => { warnings.push(args); };
133
+ try {
134
+ const harness = makeFrameworkHarness([tool('explicit')], () => ({ content: [], state: checkpoint('dm-2', 'x.dm') }));
135
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
136
+ harness.checkpointManager.registerFeatureSet('srv', 'x.dm', { hostState: false, rollback: true });
137
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
138
+ harness.checkpointManager.recordCheckpoint('srv', 'x.dm', checkpoint('dm-1'));
139
+ await harness.callTool('explicit');
140
+ assert.equal(harness.calls[0]?.stateParams, undefined);
141
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
142
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.dm'), 'dm-2');
143
+ assert.equal(warnings.length, 1);
144
+ }
145
+ finally {
146
+ console.warn = originalWarn;
147
+ }
148
+ });
149
+ it('retains injection and recording for an untagged tool with one stateful set', async () => {
150
+ const harness = makeFrameworkHarness([tool('single')], () => ({ content: [], state: checkpoint('only-2') }));
151
+ harness.checkpointManager.registerFeatureSet('srv', 'x.only', { hostState: false, rollback: true });
152
+ harness.checkpointManager.recordCheckpoint('srv', 'x.only', checkpoint('only-1'));
153
+ await harness.callTool('single');
154
+ assert.deepEqual(harness.calls[0]?.stateParams, { checkpoint: 'only-1' });
155
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.only'), 'only-2');
156
+ });
157
+ it('warns and skips untagged state exchange when server-managed sets are ambiguous', async () => {
158
+ const originalWarn = console.warn;
159
+ const warnings = [];
160
+ console.warn = (...args) => { warnings.push(args); };
161
+ try {
162
+ const harness = makeFrameworkHarness([tool('ambiguous')], () => ({ content: [], state: checkpoint('wrong-2') }));
163
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
164
+ harness.checkpointManager.registerFeatureSet('srv', 'x.dm', { hostState: false, rollback: true });
165
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
166
+ harness.checkpointManager.recordCheckpoint('srv', 'x.dm', checkpoint('dm-1'));
167
+ await harness.callTool('ambiguous');
168
+ assert.equal(harness.calls[0]?.stateParams, undefined);
169
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
170
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.dm'), 'dm-1');
171
+ assert.equal(warnings.length, 1);
172
+ assert.match(String(warnings[0]?.[0]), /multiple server-managed/);
173
+ }
174
+ finally {
175
+ console.warn = originalWarn;
176
+ }
177
+ });
178
+ it('warns and skips state exchange for unknown or non-stateful tool tags', async () => {
179
+ const originalWarn = console.warn;
180
+ const warnings = [];
181
+ console.warn = (...args) => { warnings.push(args); };
182
+ try {
183
+ const harness = makeFrameworkHarness([tool('unknown', { direct: 'x.missing' }), tool('stateless', { meta: 'x.events' })], () => ({ content: [], state: checkpoint('wrong-2') }));
184
+ harness.checkpointManager.registerFeatureSet('srv', 'x.post', { hostState: false, rollback: true });
185
+ harness.checkpointManager.recordCheckpoint('srv', 'x.post', checkpoint('post-1'));
186
+ await harness.callTool('unknown');
187
+ await harness.callTool('stateless');
188
+ assert.equal(harness.calls[0]?.stateParams, undefined);
189
+ assert.equal(harness.calls[1]?.stateParams, undefined);
190
+ assert.equal(harness.checkpointManager.getCurrentCheckpoint('srv', 'x.post'), 'post-1');
191
+ assert.equal(warnings.length, 2);
192
+ assert.match(String(warnings[0]?.[0]), /unknown or non-stateful/);
193
+ assert.match(String(warnings[1]?.[0]), /unknown or non-stateful/);
194
+ }
195
+ finally {
196
+ console.warn = originalWarn;
197
+ }
38
198
  });
39
199
  });
40
200
  //# sourceMappingURL=checkpoint-attribution.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-attribution.test.js","sourceRoot":"","sources":["../../test/checkpoint-attribution.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint-attribution.test.js","sourceRoot":"","sources":["../../test/checkpoint-attribution.test.ts"],"names":[],"mappings":"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"}