@animalabs/agent-framework 0.22.2 → 0.22.3

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 (935) hide show
  1. package/README.md +3 -1
  2. package/dist/src/agent.d.ts +77 -12
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +136 -40
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server-core.js +1 -1
  7. package/dist/src/api/mcp-server-core.js.map +1 -1
  8. package/dist/src/api/server.d.ts.map +1 -1
  9. package/dist/src/api/server.js +5 -1
  10. package/dist/src/api/server.js.map +1 -1
  11. package/dist/src/api/types.d.ts +1 -1
  12. package/dist/src/api/types.d.ts.map +1 -1
  13. package/dist/src/branch-names.d.ts +14 -0
  14. package/dist/src/branch-names.d.ts.map +1 -0
  15. package/dist/src/branch-names.js +22 -0
  16. package/dist/src/branch-names.js.map +1 -0
  17. package/dist/src/closest-names.d.ts +28 -0
  18. package/dist/src/closest-names.d.ts.map +1 -0
  19. package/dist/src/closest-names.js +98 -0
  20. package/dist/src/closest-names.js.map +1 -0
  21. package/dist/src/code-execution/py-runner.d.ts +16 -5
  22. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  23. package/dist/src/code-execution/py-runner.js +186 -74
  24. package/dist/src/code-execution/py-runner.js.map +1 -1
  25. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  26. package/dist/src/code-execution/runtime-py.js +49 -3
  27. package/dist/src/code-execution/runtime-py.js.map +1 -1
  28. package/dist/src/code-execution/tool-definition.d.ts +12 -1
  29. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  30. package/dist/src/code-execution/tool-definition.js +21 -3
  31. package/dist/src/code-execution/tool-definition.js.map +1 -1
  32. package/dist/src/config-checks.d.ts +28 -0
  33. package/dist/src/config-checks.d.ts.map +1 -0
  34. package/dist/src/config-checks.js +52 -0
  35. package/dist/src/config-checks.js.map +1 -0
  36. package/dist/src/deadline-timer.d.ts +21 -0
  37. package/dist/src/deadline-timer.d.ts.map +1 -0
  38. package/dist/src/deadline-timer.js +43 -0
  39. package/dist/src/deadline-timer.js.map +1 -0
  40. package/dist/src/error-message.d.ts +30 -0
  41. package/dist/src/error-message.d.ts.map +1 -0
  42. package/dist/src/error-message.js +50 -0
  43. package/dist/src/error-message.js.map +1 -0
  44. package/dist/src/framework.d.ts +828 -88
  45. package/dist/src/framework.d.ts.map +1 -1
  46. package/dist/src/framework.js +5011 -1326
  47. package/dist/src/framework.js.map +1 -1
  48. package/dist/src/gate/event-gate.d.ts +8 -0
  49. package/dist/src/gate/event-gate.d.ts.map +1 -1
  50. package/dist/src/gate/event-gate.js +27 -3
  51. package/dist/src/gate/event-gate.js.map +1 -1
  52. package/dist/src/index.d.ts +4 -2
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +4 -2
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/mcpl/channel-registry.d.ts +144 -6
  57. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  58. package/dist/src/mcpl/channel-registry.js +424 -263
  59. package/dist/src/mcpl/channel-registry.js.map +1 -1
  60. package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
  61. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  62. package/dist/src/mcpl/checkpoint-manager.js +91 -30
  63. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  64. package/dist/src/mcpl/conversation-router.d.ts +19 -3
  65. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  66. package/dist/src/mcpl/conversation-router.js +23 -8
  67. package/dist/src/mcpl/conversation-router.js.map +1 -1
  68. package/dist/src/mcpl/convert-block.d.ts +20 -0
  69. package/dist/src/mcpl/convert-block.d.ts.map +1 -0
  70. package/dist/src/mcpl/convert-block.js +89 -0
  71. package/dist/src/mcpl/convert-block.js.map +1 -0
  72. package/dist/src/mcpl/errors.d.ts +13 -0
  73. package/dist/src/mcpl/errors.d.ts.map +1 -1
  74. package/dist/src/mcpl/errors.js +28 -0
  75. package/dist/src/mcpl/errors.js.map +1 -1
  76. package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
  77. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  78. package/dist/src/mcpl/hook-orchestrator.js +83 -72
  79. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  80. package/dist/src/mcpl/inbound-source.d.ts +114 -0
  81. package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
  82. package/dist/src/mcpl/inbound-source.js +83 -0
  83. package/dist/src/mcpl/inbound-source.js.map +1 -0
  84. package/dist/src/mcpl/index.d.ts +3 -1
  85. package/dist/src/mcpl/index.d.ts.map +1 -1
  86. package/dist/src/mcpl/index.js +3 -1
  87. package/dist/src/mcpl/index.js.map +1 -1
  88. package/dist/src/mcpl/inference-router.d.ts +15 -11
  89. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  90. package/dist/src/mcpl/inference-router.js +153 -84
  91. package/dist/src/mcpl/inference-router.js.map +1 -1
  92. package/dist/src/mcpl/push-coalescer.d.ts +33 -11
  93. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  94. package/dist/src/mcpl/push-coalescer.js +52 -20
  95. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  96. package/dist/src/mcpl/push-handler.d.ts +16 -9
  97. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  98. package/dist/src/mcpl/push-handler.js +18 -83
  99. package/dist/src/mcpl/push-handler.js.map +1 -1
  100. package/dist/src/mcpl/reference-fetcher.d.ts +14 -2
  101. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  102. package/dist/src/mcpl/reference-fetcher.js +72 -30
  103. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  104. package/dist/src/mcpl/references.d.ts +47 -12
  105. package/dist/src/mcpl/references.d.ts.map +1 -1
  106. package/dist/src/mcpl/references.js +74 -21
  107. package/dist/src/mcpl/references.js.map +1 -1
  108. package/dist/src/mcpl/server-connection.d.ts +89 -10
  109. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  110. package/dist/src/mcpl/server-connection.js +405 -129
  111. package/dist/src/mcpl/server-connection.js.map +1 -1
  112. package/dist/src/mcpl/server-registry.d.ts +10 -1
  113. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  114. package/dist/src/mcpl/server-registry.js +14 -3
  115. package/dist/src/mcpl/server-registry.js.map +1 -1
  116. package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
  117. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
  118. package/dist/src/mcpl/skip-reply-wake.js +55 -0
  119. package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
  120. package/dist/src/mcpl/transport.d.ts +51 -2
  121. package/dist/src/mcpl/transport.d.ts.map +1 -1
  122. package/dist/src/mcpl/transport.js +114 -20
  123. package/dist/src/mcpl/transport.js.map +1 -1
  124. package/dist/src/mcpl/types.d.ts +14 -3
  125. package/dist/src/mcpl/types.d.ts.map +1 -1
  126. package/dist/src/mcpl/types.js.map +1 -1
  127. package/dist/src/mcpl/visible-content.d.ts +15 -0
  128. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  129. package/dist/src/mcpl/visible-content.js +25 -0
  130. package/dist/src/mcpl/visible-content.js.map +1 -1
  131. package/dist/src/module-registry.d.ts +19 -1
  132. package/dist/src/module-registry.d.ts.map +1 -1
  133. package/dist/src/module-registry.js +54 -25
  134. package/dist/src/module-registry.js.map +1 -1
  135. package/dist/src/modules/api/index.js +1 -1
  136. package/dist/src/modules/api/index.js.map +1 -1
  137. package/dist/src/modules/discord/discord-js-client.d.ts +1 -0
  138. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
  139. package/dist/src/modules/discord/discord-js-client.js +25 -9
  140. package/dist/src/modules/discord/discord-js-client.js.map +1 -1
  141. package/dist/src/modules/discord/index.d.ts +29 -3
  142. package/dist/src/modules/discord/index.d.ts.map +1 -1
  143. package/dist/src/modules/discord/index.js +379 -143
  144. package/dist/src/modules/discord/index.js.map +1 -1
  145. package/dist/src/modules/discord/types.d.ts +14 -1
  146. package/dist/src/modules/discord/types.d.ts.map +1 -1
  147. package/dist/src/modules/health/index.d.ts.map +1 -1
  148. package/dist/src/modules/health/index.js +2 -1
  149. package/dist/src/modules/health/index.js.map +1 -1
  150. package/dist/src/modules/history/index.d.ts +3 -1
  151. package/dist/src/modules/history/index.d.ts.map +1 -1
  152. package/dist/src/modules/history/index.js +359 -127
  153. package/dist/src/modules/history/index.js.map +1 -1
  154. package/dist/src/modules/history/semantic.d.ts +28 -1
  155. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  156. package/dist/src/modules/history/semantic.js +177 -32
  157. package/dist/src/modules/history/semantic.js.map +1 -1
  158. package/dist/src/modules/unknown-tool.d.ts +10 -0
  159. package/dist/src/modules/unknown-tool.d.ts.map +1 -0
  160. package/dist/src/modules/unknown-tool.js +17 -0
  161. package/dist/src/modules/unknown-tool.js.map +1 -0
  162. package/dist/src/modules/workspace/disk-agreement.d.ts +32 -2
  163. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  164. package/dist/src/modules/workspace/disk-agreement.js +30 -2
  165. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  166. package/dist/src/modules/workspace/effects.d.ts +64 -6
  167. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  168. package/dist/src/modules/workspace/effects.js +291 -44
  169. package/dist/src/modules/workspace/effects.js.map +1 -1
  170. package/dist/src/modules/workspace/index.d.ts +119 -23
  171. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  172. package/dist/src/modules/workspace/index.js +793 -247
  173. package/dist/src/modules/workspace/index.js.map +1 -1
  174. package/dist/src/modules/workspace/observe.d.ts +75 -8
  175. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  176. package/dist/src/modules/workspace/observe.js +174 -14
  177. package/dist/src/modules/workspace/observe.js.map +1 -1
  178. package/dist/src/modules/workspace/reconcile.d.ts +58 -7
  179. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  180. package/dist/src/modules/workspace/reconcile.js +521 -56
  181. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  182. package/dist/src/modules/workspace/types.d.ts +18 -4
  183. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  184. package/dist/src/modules/workspace/types.js.map +1 -1
  185. package/dist/src/modules/workspace/watcher.d.ts +7 -2
  186. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  187. package/dist/src/modules/workspace/watcher.js +28 -4
  188. package/dist/src/modules/workspace/watcher.js.map +1 -1
  189. package/dist/src/prose-drafts.d.ts +240 -0
  190. package/dist/src/prose-drafts.d.ts.map +1 -0
  191. package/dist/src/prose-drafts.js +362 -0
  192. package/dist/src/prose-drafts.js.map +1 -0
  193. package/dist/src/prose-segments.d.ts +21 -2
  194. package/dist/src/prose-segments.d.ts.map +1 -1
  195. package/dist/src/prose-segments.js +46 -9
  196. package/dist/src/prose-segments.js.map +1 -1
  197. package/dist/src/recovery/offline-branch.d.ts +1 -0
  198. package/dist/src/recovery/offline-branch.d.ts.map +1 -1
  199. package/dist/src/recovery/offline-branch.js +3 -1
  200. package/dist/src/recovery/offline-branch.js.map +1 -1
  201. package/dist/src/safe-slice.d.ts +5 -1
  202. package/dist/src/safe-slice.d.ts.map +1 -1
  203. package/dist/src/safe-slice.js +9 -1
  204. package/dist/src/safe-slice.js.map +1 -1
  205. package/dist/src/tool-image-ledger.d.ts +87 -19
  206. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  207. package/dist/src/tool-image-ledger.js +135 -32
  208. package/dist/src/tool-image-ledger.js.map +1 -1
  209. package/dist/src/tool-presentation.d.ts +9 -0
  210. package/dist/src/tool-presentation.d.ts.map +1 -1
  211. package/dist/src/tool-presentation.js +257 -60
  212. package/dist/src/tool-presentation.js.map +1 -1
  213. package/dist/src/tool-result-guard.d.ts.map +1 -1
  214. package/dist/src/tool-result-guard.js +7 -10
  215. package/dist/src/tool-result-guard.js.map +1 -1
  216. package/dist/src/tool-result-history.d.ts +32 -3
  217. package/dist/src/tool-result-history.d.ts.map +1 -1
  218. package/dist/src/tool-result-history.js +106 -19
  219. package/dist/src/tool-result-history.js.map +1 -1
  220. package/dist/src/tune-out/coordinator.d.ts +25 -1
  221. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  222. package/dist/src/tune-out/coordinator.js +260 -65
  223. package/dist/src/tune-out/coordinator.js.map +1 -1
  224. package/dist/src/types/agent.d.ts +17 -5
  225. package/dist/src/types/agent.d.ts.map +1 -1
  226. package/dist/src/types/events.d.ts +17 -0
  227. package/dist/src/types/events.d.ts.map +1 -1
  228. package/dist/src/types/framework.d.ts +21 -5
  229. package/dist/src/types/framework.d.ts.map +1 -1
  230. package/dist/src/types/inference-log.d.ts +1 -1
  231. package/dist/src/types/inference-log.d.ts.map +1 -1
  232. package/dist/src/types/module.d.ts +23 -4
  233. package/dist/src/types/module.d.ts.map +1 -1
  234. package/dist/src/types/trace.d.ts +95 -6
  235. package/dist/src/types/trace.d.ts.map +1 -1
  236. package/dist/src/usage/usage-tracker.d.ts +5 -0
  237. package/dist/src/usage/usage-tracker.d.ts.map +1 -1
  238. package/dist/src/usage/usage-tracker.js +35 -8
  239. package/dist/src/usage/usage-tracker.js.map +1 -1
  240. package/package.json +3 -4
  241. package/src/agent.ts +162 -40
  242. package/src/api/mcp-server-core.ts +1 -1
  243. package/src/api/server.ts +4 -1
  244. package/src/api/types.ts +1 -1
  245. package/src/branch-names.ts +19 -0
  246. package/src/closest-names.ts +94 -0
  247. package/src/code-execution/py-runner.ts +200 -76
  248. package/src/code-execution/runtime-py.ts +49 -3
  249. package/src/code-execution/tool-definition.ts +28 -4
  250. package/src/config-checks.ts +48 -0
  251. package/src/deadline-timer.ts +44 -0
  252. package/src/error-message.ts +48 -0
  253. package/src/framework.ts +5352 -1388
  254. package/src/gate/event-gate.ts +28 -3
  255. package/src/index.ts +11 -2
  256. package/src/mcpl/channel-registry.ts +517 -286
  257. package/src/mcpl/checkpoint-manager.ts +104 -29
  258. package/src/mcpl/conversation-router.ts +28 -8
  259. package/src/mcpl/convert-block.ts +97 -0
  260. package/src/mcpl/errors.ts +28 -0
  261. package/src/mcpl/hook-orchestrator.ts +84 -77
  262. package/src/mcpl/inbound-source.ts +156 -0
  263. package/src/mcpl/index.ts +10 -1
  264. package/src/mcpl/inference-router.ts +174 -99
  265. package/src/mcpl/push-coalescer.ts +60 -24
  266. package/src/mcpl/push-handler.ts +20 -90
  267. package/src/mcpl/reference-fetcher.ts +71 -26
  268. package/src/mcpl/references.ts +81 -22
  269. package/src/mcpl/server-connection.ts +427 -132
  270. package/src/mcpl/server-registry.ts +15 -4
  271. package/src/mcpl/skip-reply-wake.ts +73 -0
  272. package/src/mcpl/transport.ts +120 -18
  273. package/src/mcpl/types.ts +14 -3
  274. package/src/mcpl/visible-content.ts +27 -0
  275. package/src/module-registry.ts +58 -23
  276. package/src/modules/api/index.ts +1 -1
  277. package/src/modules/discord/discord-js-client.ts +26 -10
  278. package/src/modules/discord/index.ts +391 -158
  279. package/src/modules/discord/types.ts +15 -2
  280. package/src/modules/health/index.ts +2 -1
  281. package/src/modules/history/index.ts +410 -120
  282. package/src/modules/history/semantic.ts +189 -32
  283. package/src/modules/unknown-tool.ts +16 -0
  284. package/src/modules/workspace/disk-agreement.ts +51 -3
  285. package/src/modules/workspace/effects.ts +279 -35
  286. package/src/modules/workspace/index.ts +810 -260
  287. package/src/modules/workspace/observe.ts +194 -20
  288. package/src/modules/workspace/reconcile.ts +619 -64
  289. package/src/modules/workspace/types.ts +18 -4
  290. package/src/modules/workspace/watcher.ts +27 -4
  291. package/src/prose-drafts.ts +481 -0
  292. package/src/prose-segments.ts +51 -8
  293. package/src/recovery/offline-branch.ts +4 -1
  294. package/src/safe-slice.ts +9 -1
  295. package/src/tool-image-ledger.ts +153 -34
  296. package/src/tool-presentation.ts +224 -40
  297. package/src/tool-result-guard.ts +7 -8
  298. package/src/tool-result-history.ts +124 -20
  299. package/src/tune-out/coordinator.ts +259 -65
  300. package/src/types/agent.ts +17 -7
  301. package/src/types/events.ts +17 -0
  302. package/src/types/framework.ts +21 -5
  303. package/src/types/inference-log.ts +1 -1
  304. package/src/types/module.ts +24 -4
  305. package/src/types/trace.ts +101 -6
  306. package/src/usage/usage-tracker.ts +32 -8
  307. package/dist/test/activation-request-sanitize.test.d.ts +0 -2
  308. package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
  309. package/dist/test/activation-request-sanitize.test.js +0 -89
  310. package/dist/test/activation-request-sanitize.test.js.map +0 -1
  311. package/dist/test/agent-cache-ttl.test.d.ts +0 -2
  312. package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
  313. package/dist/test/agent-cache-ttl.test.js +0 -41
  314. package/dist/test/agent-cache-ttl.test.js.map +0 -1
  315. package/dist/test/agent-runtime-settings.test.d.ts +0 -2
  316. package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
  317. package/dist/test/agent-runtime-settings.test.js +0 -1598
  318. package/dist/test/agent-runtime-settings.test.js.map +0 -1
  319. package/dist/test/api-admin-gate.test.d.ts +0 -2
  320. package/dist/test/api-admin-gate.test.d.ts.map +0 -1
  321. package/dist/test/api-admin-gate.test.js +0 -116
  322. package/dist/test/api-admin-gate.test.js.map +0 -1
  323. package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
  324. package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
  325. package/dist/test/assistant-persist-refusal.test.js +0 -63
  326. package/dist/test/assistant-persist-refusal.test.js.map +0 -1
  327. package/dist/test/batched-wake-locus.test.d.ts +0 -2
  328. package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
  329. package/dist/test/batched-wake-locus.test.js +0 -166
  330. package/dist/test/batched-wake-locus.test.js.map +0 -1
  331. package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
  332. package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
  333. package/dist/test/busy-agent-scheduler.test.js +0 -92
  334. package/dist/test/busy-agent-scheduler.test.js.map +0 -1
  335. package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
  336. package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
  337. package/dist/test/channel-incoming-targeting.test.js +0 -81
  338. package/dist/test/channel-incoming-targeting.test.js.map +0 -1
  339. package/dist/test/channel-label-history.test.d.ts +0 -2
  340. package/dist/test/channel-label-history.test.d.ts.map +0 -1
  341. package/dist/test/channel-label-history.test.js +0 -424
  342. package/dist/test/channel-label-history.test.js.map +0 -1
  343. package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
  344. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
  345. package/dist/test/channel-lifecycle-provenance.test.js +0 -47
  346. package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
  347. package/dist/test/channel-registry-routing.test.d.ts +0 -2
  348. package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
  349. package/dist/test/channel-registry-routing.test.js +0 -446
  350. package/dist/test/channel-registry-routing.test.js.map +0 -1
  351. package/dist/test/channel-registry-typing.test.d.ts +0 -2
  352. package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
  353. package/dist/test/channel-registry-typing.test.js +0 -91
  354. package/dist/test/channel-registry-typing.test.js.map +0 -1
  355. package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
  356. package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
  357. package/dist/test/channels-changed-respond-first.test.js +0 -74
  358. package/dist/test/channels-changed-respond-first.test.js.map +0 -1
  359. package/dist/test/checkpoint-attribution.test.d.ts +0 -2
  360. package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
  361. package/dist/test/checkpoint-attribution.test.js +0 -200
  362. package/dist/test/checkpoint-attribution.test.js.map +0 -1
  363. package/dist/test/code-execution.test.d.ts +0 -11
  364. package/dist/test/code-execution.test.d.ts.map +0 -1
  365. package/dist/test/code-execution.test.js +0 -1272
  366. package/dist/test/code-execution.test.js.map +0 -1
  367. package/dist/test/component-defaults.test.d.ts +0 -2
  368. package/dist/test/component-defaults.test.d.ts.map +0 -1
  369. package/dist/test/component-defaults.test.js +0 -54
  370. package/dist/test/component-defaults.test.js.map +0 -1
  371. package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
  372. package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
  373. package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
  374. package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
  375. package/dist/test/conversation-router.test.d.ts +0 -2
  376. package/dist/test/conversation-router.test.d.ts.map +0 -1
  377. package/dist/test/conversation-router.test.js +0 -174
  378. package/dist/test/conversation-router.test.js.map +0 -1
  379. package/dist/test/conversation-routing.test.d.ts +0 -7
  380. package/dist/test/conversation-routing.test.d.ts.map +0 -1
  381. package/dist/test/conversation-routing.test.js +0 -621
  382. package/dist/test/conversation-routing.test.js.map +0 -1
  383. package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
  384. package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
  385. package/dist/test/deferred-wake-integrity.test.js +0 -320
  386. package/dist/test/deferred-wake-integrity.test.js.map +0 -1
  387. package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
  388. package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
  389. package/dist/test/discord-awareness-outbox.test.js +0 -371
  390. package/dist/test/discord-awareness-outbox.test.js.map +0 -1
  391. package/dist/test/discord-history-delete-window.test.d.ts +0 -2
  392. package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
  393. package/dist/test/discord-history-delete-window.test.js +0 -81
  394. package/dist/test/discord-history-delete-window.test.js.map +0 -1
  395. package/dist/test/discord-history-sync.test.d.ts +0 -2
  396. package/dist/test/discord-history-sync.test.d.ts.map +0 -1
  397. package/dist/test/discord-history-sync.test.js +0 -56
  398. package/dist/test/discord-history-sync.test.js.map +0 -1
  399. package/dist/test/discord-typing-keepalive.test.d.ts +0 -2
  400. package/dist/test/discord-typing-keepalive.test.d.ts.map +0 -1
  401. package/dist/test/discord-typing-keepalive.test.js +0 -77
  402. package/dist/test/discord-typing-keepalive.test.js.map +0 -1
  403. package/dist/test/ephemeral-settle.test.d.ts +0 -2
  404. package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
  405. package/dist/test/ephemeral-settle.test.js +0 -354
  406. package/dist/test/ephemeral-settle.test.js.map +0 -1
  407. package/dist/test/event-gate-passthrough.test.d.ts +0 -15
  408. package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
  409. package/dist/test/event-gate-passthrough.test.js +0 -289
  410. package/dist/test/event-gate-passthrough.test.js.map +0 -1
  411. package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
  412. package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
  413. package/dist/test/event-gate-policy-mutation.test.js +0 -137
  414. package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
  415. package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
  416. package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
  417. package/dist/test/event-gate-rate-limit.test.js +0 -627
  418. package/dist/test/event-gate-rate-limit.test.js.map +0 -1
  419. package/dist/test/event-gate-script.test.d.ts +0 -2
  420. package/dist/test/event-gate-script.test.d.ts.map +0 -1
  421. package/dist/test/event-gate-script.test.js +0 -95
  422. package/dist/test/event-gate-script.test.js.map +0 -1
  423. package/dist/test/event-gate-selfwake.test.d.ts +0 -15
  424. package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
  425. package/dist/test/event-gate-selfwake.test.js +0 -125
  426. package/dist/test/event-gate-selfwake.test.js.map +0 -1
  427. package/dist/test/event-gate-tags.test.d.ts +0 -2
  428. package/dist/test/event-gate-tags.test.d.ts.map +0 -1
  429. package/dist/test/event-gate-tags.test.js +0 -76
  430. package/dist/test/event-gate-tags.test.js.map +0 -1
  431. package/dist/test/event-gate.test.d.ts +0 -2
  432. package/dist/test/event-gate.test.d.ts.map +0 -1
  433. package/dist/test/event-gate.test.js +0 -919
  434. package/dist/test/event-gate.test.js.map +0 -1
  435. package/dist/test/explicit-prose-routing.test.d.ts +0 -11
  436. package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
  437. package/dist/test/explicit-prose-routing.test.js +0 -1715
  438. package/dist/test/explicit-prose-routing.test.js.map +0 -1
  439. package/dist/test/framework.test.d.ts +0 -5
  440. package/dist/test/framework.test.d.ts.map +0 -1
  441. package/dist/test/framework.test.js +0 -1048
  442. package/dist/test/framework.test.js.map +0 -1
  443. package/dist/test/gather-context-timeout.test.d.ts +0 -2
  444. package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
  445. package/dist/test/gather-context-timeout.test.js +0 -120
  446. package/dist/test/gather-context-timeout.test.js.map +0 -1
  447. package/dist/test/health-snapshot.test.d.ts +0 -2
  448. package/dist/test/health-snapshot.test.d.ts.map +0 -1
  449. package/dist/test/health-snapshot.test.js +0 -74
  450. package/dist/test/health-snapshot.test.js.map +0 -1
  451. package/dist/test/helpers/coalescing-fixture.d.ts +0 -74
  452. package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
  453. package/dist/test/helpers/coalescing-fixture.js +0 -152
  454. package/dist/test/helpers/coalescing-fixture.js.map +0 -1
  455. package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
  456. package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
  457. package/dist/test/helpers/coalescing-kill-child.js +0 -24
  458. package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
  459. package/dist/test/helpers/mock-membrane.d.ts +0 -53
  460. package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
  461. package/dist/test/helpers/mock-membrane.js +0 -168
  462. package/dist/test/helpers/mock-membrane.js.map +0 -1
  463. package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
  464. package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
  465. package/dist/test/helpers/pytc-stop-rows.js +0 -143
  466. package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
  467. package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
  468. package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
  469. package/dist/test/helpers/quiesce-crash-child.js +0 -156
  470. package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
  471. package/dist/test/hide-then-turn.test.d.ts +0 -2
  472. package/dist/test/hide-then-turn.test.d.ts.map +0 -1
  473. package/dist/test/hide-then-turn.test.js +0 -101
  474. package/dist/test/hide-then-turn.test.js.map +0 -1
  475. package/dist/test/history-module-overview.test.d.ts +0 -2
  476. package/dist/test/history-module-overview.test.d.ts.map +0 -1
  477. package/dist/test/history-module-overview.test.js +0 -711
  478. package/dist/test/history-module-overview.test.js.map +0 -1
  479. package/dist/test/history-module-realstore.test.d.ts +0 -2
  480. package/dist/test/history-module-realstore.test.d.ts.map +0 -1
  481. package/dist/test/history-module-realstore.test.js +0 -363
  482. package/dist/test/history-module-realstore.test.js.map +0 -1
  483. package/dist/test/history-module-semantic.test.d.ts +0 -2
  484. package/dist/test/history-module-semantic.test.d.ts.map +0 -1
  485. package/dist/test/history-module-semantic.test.js +0 -213
  486. package/dist/test/history-module-semantic.test.js.map +0 -1
  487. package/dist/test/history-module-ux.test.d.ts +0 -2
  488. package/dist/test/history-module-ux.test.d.ts.map +0 -1
  489. package/dist/test/history-module-ux.test.js +0 -304
  490. package/dist/test/history-module-ux.test.js.map +0 -1
  491. package/dist/test/history-module.test.d.ts +0 -2
  492. package/dist/test/history-module.test.d.ts.map +0 -1
  493. package/dist/test/history-module.test.js +0 -619
  494. package/dist/test/history-module.test.js.map +0 -1
  495. package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
  496. package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
  497. package/dist/test/history-semantic-review-findings.test.js +0 -338
  498. package/dist/test/history-semantic-review-findings.test.js.map +0 -1
  499. package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
  500. package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
  501. package/dist/test/history-semantic-sync-converges.test.js +0 -109
  502. package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
  503. package/dist/test/host-quiesce.test.d.ts +0 -2
  504. package/dist/test/host-quiesce.test.d.ts.map +0 -1
  505. package/dist/test/host-quiesce.test.js +0 -988
  506. package/dist/test/host-quiesce.test.js.map +0 -1
  507. package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
  508. package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
  509. package/dist/test/inference-exhaustion-rewind.test.js +0 -387
  510. package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
  511. package/dist/test/inference-failure-bounds.test.d.ts +0 -2
  512. package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
  513. package/dist/test/inference-failure-bounds.test.js +0 -1202
  514. package/dist/test/inference-failure-bounds.test.js.map +0 -1
  515. package/dist/test/inference-failure-observability.test.d.ts +0 -2
  516. package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
  517. package/dist/test/inference-failure-observability.test.js +0 -84
  518. package/dist/test/inference-failure-observability.test.js.map +0 -1
  519. package/dist/test/journal-tool.test.d.ts +0 -2
  520. package/dist/test/journal-tool.test.d.ts.map +0 -1
  521. package/dist/test/journal-tool.test.js +0 -33
  522. package/dist/test/journal-tool.test.js.map +0 -1
  523. package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
  524. package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
  525. package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
  526. package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
  527. package/dist/test/kv-unified-wiring.test.d.ts +0 -2
  528. package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
  529. package/dist/test/kv-unified-wiring.test.js +0 -95
  530. package/dist/test/kv-unified-wiring.test.js.map +0 -1
  531. package/dist/test/late-events-after-stop.test.d.ts +0 -2
  532. package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
  533. package/dist/test/late-events-after-stop.test.js +0 -122
  534. package/dist/test/late-events-after-stop.test.js.map +0 -1
  535. package/dist/test/liveness-watchdog.test.d.ts +0 -2
  536. package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
  537. package/dist/test/liveness-watchdog.test.js +0 -94
  538. package/dist/test/liveness-watchdog.test.js.map +0 -1
  539. package/dist/test/machine-close-provenance.test.d.ts +0 -2
  540. package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
  541. package/dist/test/machine-close-provenance.test.js +0 -116
  542. package/dist/test/machine-close-provenance.test.js.map +0 -1
  543. package/dist/test/maintenance-timer.test.d.ts +0 -2
  544. package/dist/test/maintenance-timer.test.d.ts.map +0 -1
  545. package/dist/test/maintenance-timer.test.js +0 -1827
  546. package/dist/test/maintenance-timer.test.js.map +0 -1
  547. package/dist/test/mcp-server-bin.test.d.ts +0 -2
  548. package/dist/test/mcp-server-bin.test.d.ts.map +0 -1
  549. package/dist/test/mcp-server-bin.test.js +0 -142
  550. package/dist/test/mcp-server-bin.test.js.map +0 -1
  551. package/dist/test/mcpl-access-provider.test.d.ts +0 -2
  552. package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
  553. package/dist/test/mcpl-access-provider.test.js +0 -20
  554. package/dist/test/mcpl-access-provider.test.js.map +0 -1
  555. package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
  556. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
  557. package/dist/test/mcpl-awareness-barrier.test.js +0 -769
  558. package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
  559. package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
  560. package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
  561. package/dist/test/mcpl-capability-grant.test.js +0 -111
  562. package/dist/test/mcpl-capability-grant.test.js.map +0 -1
  563. package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
  564. package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
  565. package/dist/test/mcpl-capability-scoping.test.js +0 -266
  566. package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
  567. package/dist/test/mcpl-child-env.test.d.ts +0 -2
  568. package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
  569. package/dist/test/mcpl-child-env.test.js +0 -158
  570. package/dist/test/mcpl-child-env.test.js.map +0 -1
  571. package/dist/test/mcpl-coalesced-content-parity.test.d.ts +0 -2
  572. package/dist/test/mcpl-coalesced-content-parity.test.d.ts.map +0 -1
  573. package/dist/test/mcpl-coalesced-content-parity.test.js +0 -532
  574. package/dist/test/mcpl-coalesced-content-parity.test.js.map +0 -1
  575. package/dist/test/mcpl-coalescing.test.d.ts +0 -2
  576. package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
  577. package/dist/test/mcpl-coalescing.test.js +0 -1125
  578. package/dist/test/mcpl-coalescing.test.js.map +0 -1
  579. package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
  580. package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
  581. package/dist/test/mcpl-config-diagnostics.test.js +0 -452
  582. package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
  583. package/dist/test/mcpl-empty-content.test.d.ts +0 -2
  584. package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
  585. package/dist/test/mcpl-empty-content.test.js +0 -368
  586. package/dist/test/mcpl-empty-content.test.js.map +0 -1
  587. package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
  588. package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
  589. package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
  590. package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
  591. package/dist/test/mcpl-list-status.test.d.ts +0 -2
  592. package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
  593. package/dist/test/mcpl-list-status.test.js +0 -82
  594. package/dist/test/mcpl-list-status.test.js.map +0 -1
  595. package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
  596. package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
  597. package/dist/test/mcpl-manifest-changed.test.js +0 -178
  598. package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
  599. package/dist/test/mcpl-push-convert.test.d.ts +0 -2
  600. package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
  601. package/dist/test/mcpl-push-convert.test.js +0 -42
  602. package/dist/test/mcpl-push-convert.test.js.map +0 -1
  603. package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
  604. package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
  605. package/dist/test/mcpl-reconnect-events.test.js +0 -144
  606. package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
  607. package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
  608. package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
  609. package/dist/test/mcpl-reconnect-reregistration.test.js +0 -238
  610. package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
  611. package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
  612. package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
  613. package/dist/test/mcpl-reference-fetcher.test.js +0 -427
  614. package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
  615. package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
  616. package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
  617. package/dist/test/mcpl-reference-fields.test.js +0 -149
  618. package/dist/test/mcpl-reference-fields.test.js.map +0 -1
  619. package/dist/test/mcpl-rejection-log-lines.test.d.ts +0 -2
  620. package/dist/test/mcpl-rejection-log-lines.test.d.ts.map +0 -1
  621. package/dist/test/mcpl-rejection-log-lines.test.js +0 -349
  622. package/dist/test/mcpl-rejection-log-lines.test.js.map +0 -1
  623. package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
  624. package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
  625. package/dist/test/mcpl-request-timeout.test.js +0 -138
  626. package/dist/test/mcpl-request-timeout.test.js.map +0 -1
  627. package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
  628. package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
  629. package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
  630. package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
  631. package/dist/test/mcpl-stderr-tail.test.d.ts +0 -2
  632. package/dist/test/mcpl-stderr-tail.test.d.ts.map +0 -1
  633. package/dist/test/mcpl-stderr-tail.test.js +0 -210
  634. package/dist/test/mcpl-stderr-tail.test.js.map +0 -1
  635. package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
  636. package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
  637. package/dist/test/mcpl-tool-class-listing.test.js +0 -147
  638. package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
  639. package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
  640. package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
  641. package/dist/test/mcpl-tool-classes.test.js +0 -80
  642. package/dist/test/mcpl-tool-classes.test.js.map +0 -1
  643. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
  644. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
  645. package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
  646. package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
  647. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
  648. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
  649. package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
  650. package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
  651. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
  652. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
  653. package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
  654. package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
  655. package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
  656. package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
  657. package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
  658. package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
  659. package/dist/test/mcpl-transport-close.test.d.ts +0 -2
  660. package/dist/test/mcpl-transport-close.test.d.ts.map +0 -1
  661. package/dist/test/mcpl-transport-close.test.js +0 -373
  662. package/dist/test/mcpl-transport-close.test.js.map +0 -1
  663. package/dist/test/mcpl-transport-spawn.test.d.ts +0 -2
  664. package/dist/test/mcpl-transport-spawn.test.d.ts.map +0 -1
  665. package/dist/test/mcpl-transport-spawn.test.js +0 -58
  666. package/dist/test/mcpl-transport-spawn.test.js.map +0 -1
  667. package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
  668. package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
  669. package/dist/test/mcpl-ws-transport.test.js +0 -259
  670. package/dist/test/mcpl-ws-transport.test.js.map +0 -1
  671. package/dist/test/module-context-integration.test.d.ts +0 -18
  672. package/dist/test/module-context-integration.test.d.ts.map +0 -1
  673. package/dist/test/module-context-integration.test.js +0 -181
  674. package/dist/test/module-context-integration.test.js.map +0 -1
  675. package/dist/test/offline-recovery-branch.test.d.ts +0 -2
  676. package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
  677. package/dist/test/offline-recovery-branch.test.js +0 -570
  678. package/dist/test/offline-recovery-branch.test.js.map +0 -1
  679. package/dist/test/operator-surgery.test.d.ts +0 -2
  680. package/dist/test/operator-surgery.test.d.ts.map +0 -1
  681. package/dist/test/operator-surgery.test.js +0 -595
  682. package/dist/test/operator-surgery.test.js.map +0 -1
  683. package/dist/test/ops-alert.test.d.ts +0 -2
  684. package/dist/test/ops-alert.test.d.ts.map +0 -1
  685. package/dist/test/ops-alert.test.js +0 -153
  686. package/dist/test/ops-alert.test.js.map +0 -1
  687. package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
  688. package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
  689. package/dist/test/overbudget-drain-breaker.test.js +0 -198
  690. package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
  691. package/dist/test/pack-installs-alone.test.d.ts +0 -2
  692. package/dist/test/pack-installs-alone.test.d.ts.map +0 -1
  693. package/dist/test/pack-installs-alone.test.js +0 -284
  694. package/dist/test/pack-installs-alone.test.js.map +0 -1
  695. package/dist/test/per-agent-delivery.test.d.ts +0 -2
  696. package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
  697. package/dist/test/per-agent-delivery.test.js +0 -108
  698. package/dist/test/per-agent-delivery.test.js.map +0 -1
  699. package/dist/test/physical-window-restart.test.d.ts +0 -16
  700. package/dist/test/physical-window-restart.test.d.ts.map +0 -1
  701. package/dist/test/physical-window-restart.test.js +0 -487
  702. package/dist/test/physical-window-restart.test.js.map +0 -1
  703. package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
  704. package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
  705. package/dist/test/placed-reaction-baseline.test.js +0 -312
  706. package/dist/test/placed-reaction-baseline.test.js.map +0 -1
  707. package/dist/test/present-while-acting.test.d.ts +0 -19
  708. package/dist/test/present-while-acting.test.d.ts.map +0 -1
  709. package/dist/test/present-while-acting.test.js +0 -1649
  710. package/dist/test/present-while-acting.test.js.map +0 -1
  711. package/dist/test/prose-segments.test.d.ts +0 -2
  712. package/dist/test/prose-segments.test.d.ts.map +0 -1
  713. package/dist/test/prose-segments.test.js +0 -52
  714. package/dist/test/prose-segments.test.js.map +0 -1
  715. package/dist/test/prose-stream-router.test.d.ts +0 -2
  716. package/dist/test/prose-stream-router.test.d.ts.map +0 -1
  717. package/dist/test/prose-stream-router.test.js +0 -171
  718. package/dist/test/prose-stream-router.test.js.map +0 -1
  719. package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
  720. package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
  721. package/dist/test/provider-acceleration-cooldown.test.js +0 -435
  722. package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
  723. package/dist/test/provider-waits.test.d.ts +0 -2
  724. package/dist/test/provider-waits.test.d.ts.map +0 -1
  725. package/dist/test/provider-waits.test.js +0 -2259
  726. package/dist/test/provider-waits.test.js.map +0 -1
  727. package/dist/test/puppet-tool-call.test.d.ts +0 -2
  728. package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
  729. package/dist/test/puppet-tool-call.test.js +0 -226
  730. package/dist/test/puppet-tool-call.test.js.map +0 -1
  731. package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
  732. package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
  733. package/dist/test/puppet-turn-reservation.test.js +0 -139
  734. package/dist/test/puppet-turn-reservation.test.js.map +0 -1
  735. package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
  736. package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
  737. package/dist/test/reaction-baseline-platform.test.js +0 -124
  738. package/dist/test/reaction-baseline-platform.test.js.map +0 -1
  739. package/dist/test/record-journal.test.d.ts +0 -6
  740. package/dist/test/record-journal.test.d.ts.map +0 -1
  741. package/dist/test/record-journal.test.js +0 -269
  742. package/dist/test/record-journal.test.js.map +0 -1
  743. package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
  744. package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
  745. package/dist/test/refusal-reaction-baseline.test.js +0 -81
  746. package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
  747. package/dist/test/refusal-rewind.test.d.ts +0 -2
  748. package/dist/test/refusal-rewind.test.d.ts.map +0 -1
  749. package/dist/test/refusal-rewind.test.js +0 -117
  750. package/dist/test/refusal-rewind.test.js.map +0 -1
  751. package/dist/test/refusal-single-call.test.d.ts +0 -2
  752. package/dist/test/refusal-single-call.test.d.ts.map +0 -1
  753. package/dist/test/refusal-single-call.test.js +0 -177
  754. package/dist/test/refusal-single-call.test.js.map +0 -1
  755. package/dist/test/release-bump.test.d.ts +0 -2
  756. package/dist/test/release-bump.test.d.ts.map +0 -1
  757. package/dist/test/release-bump.test.js +0 -248
  758. package/dist/test/release-bump.test.js.map +0 -1
  759. package/dist/test/release-changelog.test.d.ts +0 -2
  760. package/dist/test/release-changelog.test.d.ts.map +0 -1
  761. package/dist/test/release-changelog.test.js +0 -159
  762. package/dist/test/release-changelog.test.js.map +0 -1
  763. package/dist/test/release-holds.test.d.ts +0 -2
  764. package/dist/test/release-holds.test.d.ts.map +0 -1
  765. package/dist/test/release-holds.test.js +0 -456
  766. package/dist/test/release-holds.test.js.map +0 -1
  767. package/dist/test/same-round-think-policy.test.d.ts +0 -2
  768. package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
  769. package/dist/test/same-round-think-policy.test.js +0 -853
  770. package/dist/test/same-round-think-policy.test.js.map +0 -1
  771. package/dist/test/save-recent-image.test.d.ts +0 -26
  772. package/dist/test/save-recent-image.test.d.ts.map +0 -1
  773. package/dist/test/save-recent-image.test.js +0 -974
  774. package/dist/test/save-recent-image.test.js.map +0 -1
  775. package/dist/test/shutdown-errors.test.d.ts +0 -2
  776. package/dist/test/shutdown-errors.test.d.ts.map +0 -1
  777. package/dist/test/shutdown-errors.test.js +0 -662
  778. package/dist/test/shutdown-errors.test.js.map +0 -1
  779. package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
  780. package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
  781. package/dist/test/silent-heartbeat-rows.test.js +0 -451
  782. package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
  783. package/dist/test/silent-heartbeat.test.d.ts +0 -2
  784. package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
  785. package/dist/test/silent-heartbeat.test.js +0 -165
  786. package/dist/test/silent-heartbeat.test.js.map +0 -1
  787. package/dist/test/state-scaling-e2e.test.d.ts +0 -22
  788. package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
  789. package/dist/test/state-scaling-e2e.test.js +0 -206
  790. package/dist/test/state-scaling-e2e.test.js.map +0 -1
  791. package/dist/test/state-scaling.test.d.ts +0 -12
  792. package/dist/test/state-scaling.test.d.ts.map +0 -1
  793. package/dist/test/state-scaling.test.js +0 -251
  794. package/dist/test/state-scaling.test.js.map +0 -1
  795. package/dist/test/stop-with-host-operations.test.d.ts +0 -20
  796. package/dist/test/stop-with-host-operations.test.d.ts.map +0 -1
  797. package/dist/test/stop-with-host-operations.test.js +0 -1174
  798. package/dist/test/stop-with-host-operations.test.js.map +0 -1
  799. package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
  800. package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
  801. package/dist/test/stop-with-work-in-flight.test.js +0 -784
  802. package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
  803. package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
  804. package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
  805. package/dist/test/surgery-marks-receipt.test.js +0 -540
  806. package/dist/test/surgery-marks-receipt.test.js.map +0 -1
  807. package/dist/test/thinking-token-stamp.test.d.ts +0 -12
  808. package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
  809. package/dist/test/thinking-token-stamp.test.js +0 -129
  810. package/dist/test/thinking-token-stamp.test.js.map +0 -1
  811. package/dist/test/timezone.test.d.ts +0 -2
  812. package/dist/test/timezone.test.d.ts.map +0 -1
  813. package/dist/test/timezone.test.js +0 -18
  814. package/dist/test/timezone.test.js.map +0 -1
  815. package/dist/test/tool-batch-hook.test.d.ts +0 -8
  816. package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
  817. package/dist/test/tool-batch-hook.test.js +0 -275
  818. package/dist/test/tool-batch-hook.test.js.map +0 -1
  819. package/dist/test/tool-policy.test.d.ts +0 -2
  820. package/dist/test/tool-policy.test.d.ts.map +0 -1
  821. package/dist/test/tool-policy.test.js +0 -51
  822. package/dist/test/tool-policy.test.js.map +0 -1
  823. package/dist/test/tool-presentation.test.d.ts +0 -2
  824. package/dist/test/tool-presentation.test.d.ts.map +0 -1
  825. package/dist/test/tool-presentation.test.js +0 -268
  826. package/dist/test/tool-presentation.test.js.map +0 -1
  827. package/dist/test/tool-result-content.test.d.ts +0 -2
  828. package/dist/test/tool-result-content.test.d.ts.map +0 -1
  829. package/dist/test/tool-result-content.test.js +0 -37
  830. package/dist/test/tool-result-content.test.js.map +0 -1
  831. package/dist/test/tool-result-guard.test.d.ts +0 -2
  832. package/dist/test/tool-result-guard.test.d.ts.map +0 -1
  833. package/dist/test/tool-result-guard.test.js +0 -3729
  834. package/dist/test/tool-result-guard.test.js.map +0 -1
  835. package/dist/test/tool-result-history.test.d.ts +0 -7
  836. package/dist/test/tool-result-history.test.d.ts.map +0 -1
  837. package/dist/test/tool-result-history.test.js +0 -156
  838. package/dist/test/tool-result-history.test.js.map +0 -1
  839. package/dist/test/tool-result-spill.test.d.ts +0 -13
  840. package/dist/test/tool-result-spill.test.d.ts.map +0 -1
  841. package/dist/test/tool-result-spill.test.js +0 -586
  842. package/dist/test/tool-result-spill.test.js.map +0 -1
  843. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
  844. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
  845. package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
  846. package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
  847. package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
  848. package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
  849. package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
  850. package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
  851. package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
  852. package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
  853. package/dist/test/tools-observe-parser-conformance.test.js +0 -129
  854. package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
  855. package/dist/test/trunk-channel-routing.test.d.ts +0 -19
  856. package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
  857. package/dist/test/trunk-channel-routing.test.js +0 -652
  858. package/dist/test/trunk-channel-routing.test.js.map +0 -1
  859. package/dist/test/tune-out-e2e.test.d.ts +0 -2
  860. package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
  861. package/dist/test/tune-out-e2e.test.js +0 -142
  862. package/dist/test/tune-out-e2e.test.js.map +0 -1
  863. package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
  864. package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
  865. package/dist/test/tune-out-gate-composition.test.js +0 -221
  866. package/dist/test/tune-out-gate-composition.test.js.map +0 -1
  867. package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
  868. package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
  869. package/dist/test/tune-out-lifecycle.test.js +0 -121
  870. package/dist/test/tune-out-lifecycle.test.js.map +0 -1
  871. package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
  872. package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
  873. package/dist/test/turn-trigger-provenance.test.js +0 -137
  874. package/dist/test/turn-trigger-provenance.test.js.map +0 -1
  875. package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
  876. package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
  877. package/dist/test/unconvertible-tool-result.test.js +0 -358
  878. package/dist/test/unconvertible-tool-result.test.js.map +0 -1
  879. package/dist/test/unsent-compiles.test.d.ts +0 -2
  880. package/dist/test/unsent-compiles.test.d.ts.map +0 -1
  881. package/dist/test/unsent-compiles.test.js +0 -139
  882. package/dist/test/unsent-compiles.test.js.map +0 -1
  883. package/dist/test/usage-accounting.test.d.ts +0 -2
  884. package/dist/test/usage-accounting.test.d.ts.map +0 -1
  885. package/dist/test/usage-accounting.test.js +0 -13
  886. package/dist/test/usage-accounting.test.js.map +0 -1
  887. package/dist/test/usage-tracker.test.d.ts +0 -2
  888. package/dist/test/usage-tracker.test.d.ts.map +0 -1
  889. package/dist/test/usage-tracker.test.js +0 -129
  890. package/dist/test/usage-tracker.test.js.map +0 -1
  891. package/dist/test/utils-surface.test.d.ts +0 -2
  892. package/dist/test/utils-surface.test.d.ts.map +0 -1
  893. package/dist/test/utils-surface.test.js +0 -145
  894. package/dist/test/utils-surface.test.js.map +0 -1
  895. package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
  896. package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
  897. package/dist/test/workspace-branch-continuation.test.js +0 -183
  898. package/dist/test/workspace-branch-continuation.test.js.map +0 -1
  899. package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
  900. package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
  901. package/dist/test/workspace-materialize-freshness.test.js +0 -252
  902. package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
  903. package/dist/test/workspace-path-containment.test.d.ts +0 -19
  904. package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
  905. package/dist/test/workspace-path-containment.test.js +0 -91
  906. package/dist/test/workspace-path-containment.test.js.map +0 -1
  907. package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
  908. package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
  909. package/dist/test/workspace-read-file-from-disk.test.js +0 -174
  910. package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
  911. package/dist/test/workspace-read-image.test.d.ts +0 -2
  912. package/dist/test/workspace-read-image.test.d.ts.map +0 -1
  913. package/dist/test/workspace-read-image.test.js +0 -597
  914. package/dist/test/workspace-read-image.test.js.map +0 -1
  915. package/dist/test/workspace-read-text.test.d.ts +0 -2
  916. package/dist/test/workspace-read-text.test.d.ts.map +0 -1
  917. package/dist/test/workspace-read-text.test.js +0 -101
  918. package/dist/test/workspace-read-text.test.js.map +0 -1
  919. package/dist/test/workspace-restore-order.test.d.ts +0 -16
  920. package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
  921. package/dist/test/workspace-restore-order.test.js +0 -140
  922. package/dist/test/workspace-restore-order.test.js.map +0 -1
  923. package/dist/test/workspace-three-way.test.d.ts +0 -12
  924. package/dist/test/workspace-three-way.test.d.ts.map +0 -1
  925. package/dist/test/workspace-three-way.test.js +0 -4094
  926. package/dist/test/workspace-three-way.test.js.map +0 -1
  927. package/dist/test/workspace-watcher.test.d.ts +0 -2
  928. package/dist/test/workspace-watcher.test.d.ts.map +0 -1
  929. package/dist/test/workspace-watcher.test.js +0 -281
  930. package/dist/test/workspace-watcher.test.js.map +0 -1
  931. package/dist/test/xml-round-persist.test.d.ts +0 -19
  932. package/dist/test/xml-round-persist.test.d.ts.map +0 -1
  933. package/dist/test/xml-round-persist.test.js +0 -235
  934. package/dist/test/xml-round-persist.test.js.map +0 -1
  935. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,662 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { mkdtempSync, rmSync, renameSync, cpSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { AgentFramework, ShutdownTimeoutError, DEFAULT_SHUTDOWN_TIMEOUT_MS } from '../src/index.js';
7
- import { MockMembrane } from './helpers/mock-membrane.js';
8
- import { McplTransport } from '../src/mcpl/transport.js';
9
- import { McplServerRegistry } from '../src/mcpl/server-registry.js';
10
- import { McplServerConnection } from '../src/mcpl/server-connection.js';
11
- function module(name, stop) {
12
- return { name, async start() { }, stop, async onProcess() { return {}; }, getTools: () => [],
13
- async handleToolCall() { throw new Error('No tool calls expected'); } };
14
- }
15
- async function fixture(t, modules = [], withAgent = false) {
16
- const dir = mkdtempSync(join(tmpdir(), 'framework-stop-'));
17
- const config = { storePath: join(dir, 'store'), membrane: new MockMembrane().asMembrane(),
18
- agents: withAgent ? [{ name: 'assistant', model: 'test', systemPrompt: 'system' }] : [],
19
- modules, syncIntervalMs: 0, maintenanceIntervalMs: 0 };
20
- const framework = await AgentFramework.create(config);
21
- const store = framework.getStore();
22
- const close = store.close.bind(store);
23
- t.after(() => { try {
24
- close();
25
- }
26
- finally {
27
- rmSync(dir, { recursive: true, force: true });
28
- } });
29
- return { framework, store, config };
30
- }
31
- test('successful stop persists Chronicle state for a new framework', async (t) => {
32
- const { framework, store, config } = await fixture(t);
33
- store.registerState({ id: 'shutdown-test', strategy: 'snapshot' });
34
- const expected = { work: 'completed', count: 7 };
35
- store.setStateJson('shutdown-test', expected);
36
- await framework.stop();
37
- const reopened = await AgentFramework.create(config);
38
- try {
39
- assert.deepEqual(reopened.getStore().getStateJson('shutdown-test'), expected);
40
- }
41
- finally {
42
- await reopened.stop();
43
- }
44
- });
45
- // The author's host reproduction allows a finite six-second module stop.
46
- // Chronicle state written before and during teardown must survive reopen.
47
- test('bare stop waits for a slow finite module and persists its final state', async (t) => {
48
- const completed = deferred();
49
- let context;
50
- const slow = module('slow', async () => {
51
- await new Promise(done => setTimeout(done, 6000));
52
- try {
53
- context.setState({ completed: true });
54
- }
55
- finally {
56
- completed.resolve();
57
- }
58
- });
59
- slow.start = async (ctx) => { context = ctx; };
60
- const { framework, store, config } = await fixture(t, [slow]);
61
- store.registerState({ id: 'before-stop', strategy: 'snapshot' });
62
- store.setStateJson('before-stop', { written: true });
63
- try {
64
- await framework.stop();
65
- }
66
- finally {
67
- // A failing baseline must not leave the delayed module writing to a
68
- // store removed by the fixture's cleanup.
69
- await completed.promise;
70
- }
71
- const reopened = await AgentFramework.create({ ...config, modules: [] });
72
- try {
73
- assert.deepEqual(reopened.getStore().getStateJson('before-stop'), { written: true });
74
- assert.deepEqual(reopened.getStore().getStateJson('modules/slow/state'), { completed: true, externalIdMap: {} });
75
- }
76
- finally {
77
- await reopened.stop();
78
- }
79
- });
80
- // Fleet owns its child deadline and permits cleanup beyond five seconds.
81
- // The framework must not impose a shorter deadline on that owner.
82
- test('bare parent stop waits for a nested child shutdown beyond five seconds', async (t) => {
83
- const completed = deferred();
84
- const child = await fixture(t, [module('child-slow', async () => {
85
- await new Promise(done => setTimeout(done, 6000));
86
- completed.resolve();
87
- })]);
88
- let childStopped = false;
89
- const parent = await fixture(t, [module('fleet', async () => {
90
- await child.framework.stop();
91
- await new Promise(done => setTimeout(done, 50));
92
- childStopped = true;
93
- })]);
94
- try {
95
- await parent.framework.stop();
96
- assert.equal(childStopped, true);
97
- assert.equal(parent.store.isClosed(), true);
98
- assert.equal(child.store.isClosed(), true);
99
- }
100
- finally {
101
- await completed.promise;
102
- }
103
- });
104
- test('borrowed-store lifecycle changes invalidate a successful stop memo', async (t) => {
105
- const { store, config } = await fixture(t);
106
- const framework = await AgentFramework.create({ ...config, store });
107
- await framework.stop();
108
- let calls = 0;
109
- await framework.addModule(module('later', async () => { calls++; }));
110
- await framework.stop();
111
- assert.equal(calls, 1);
112
- framework.start();
113
- await framework.stop();
114
- assert.equal(framework.running, false);
115
- });
116
- test('real Chronicle consumed close failure remains terminal with its original error', async (t) => {
117
- const { framework, store, config } = await fixture(t);
118
- const close = store.close.bind(store);
119
- let closeCalls = 0, closeFailure;
120
- store.close = () => {
121
- closeCalls++;
122
- // Fault only close's internal sync, after the framework's final sync.
123
- renameSync(config.storePath, `${config.storePath}.moved`);
124
- try {
125
- close();
126
- }
127
- catch (error) {
128
- closeFailure = error;
129
- throw error;
130
- }
131
- };
132
- const stopped = framework.stop();
133
- await assert.rejects(stopped);
134
- assert.equal(store.isClosed(), true, 'Chronicle consumes its native handle before sync');
135
- await assert.rejects(framework.stop(), error => error === closeFailure);
136
- assert.equal(closeCalls, 1);
137
- assert.throws(() => framework.start(), /owned store is closed/);
138
- await assert.rejects(framework.addModule(module('later', async () => { })), /owned store is closed/);
139
- });
140
- test('final sync failure rejects stop and still closes an owned store', async (t) => {
141
- const { framework, store } = await fixture(t);
142
- const error = new Error('injected final sync failure');
143
- let closeCalls = 0;
144
- const close = store.close.bind(store);
145
- store.sync = () => { throw error; };
146
- store.close = () => { closeCalls++; close(); };
147
- await assert.rejects(framework.stop(), failure => failure === error);
148
- assert.equal(closeCalls, 1);
149
- });
150
- test('module stop failure waits for peers and preserves storage for retry', async (t) => {
151
- const failure = new Error('injected module failure');
152
- let release;
153
- const waiting = new Promise(resolve => { release = resolve; });
154
- const order = [];
155
- const { framework, store } = await fixture(t, [
156
- module('failing', async () => { order.push('failed'); throw failure; }),
157
- module('delayed', async () => { await waiting; order.push('delayed-stopped'); }),
158
- ]);
159
- const sync = store.sync.bind(store), close = store.close.bind(store);
160
- store.sync = () => { order.push('sync'); sync(); };
161
- store.close = () => { order.push('close'); close(); };
162
- let settled = false;
163
- // Observe rejection immediately so the baseline has no unhandled rejection.
164
- const stopped = framework.stop().then(() => ({ error: undefined }), error => ({ error }))
165
- .finally(() => { settled = true; });
166
- try {
167
- await new Promise(resolve => setImmediate(resolve));
168
- assert.equal(settled, false, 'stop must await every module even after a rejection');
169
- assert.deepEqual(order, ['failed']);
170
- }
171
- finally {
172
- release();
173
- }
174
- assert.equal((await stopped).error, failure);
175
- assert.deepEqual(order, ['failed', 'delayed-stopped', 'sync']);
176
- });
177
- test('sync and close failures are both retained', async (t) => {
178
- const { framework, store } = await fixture(t);
179
- const syncError = new Error('injected sync failure'), closeError = new Error('injected close failure');
180
- store.sync = () => { throw syncError; };
181
- store.close = () => { throw closeError; };
182
- await assert.rejects(framework.stop(), error => error instanceof AggregateError &&
183
- error.errors.includes(syncError) && error.errors.includes(closeError));
184
- });
185
- test('module synchronous throw does not prevent stopping other modules', async (t) => {
186
- const failure = new Error('injected synchronous module failure');
187
- let otherStopped = false, syncCalls = 0;
188
- const { framework, store } = await fixture(t, [
189
- module('failing', () => { throw failure; }),
190
- module('other', async () => { otherStopped = true; }),
191
- ]);
192
- const sync = store.sync.bind(store);
193
- store.sync = () => { syncCalls++; sync(); };
194
- await assert.rejects(framework.stop(), error => error === failure);
195
- assert.equal(otherStopped, true);
196
- assert.equal(syncCalls, 1);
197
- });
198
- test('failed final storage repair rejects stop after sync and owned close', async (t) => {
199
- const { framework, store } = await fixture(t, [], true);
200
- const failure = new Error('injected final storage repair failure');
201
- framework.getAgent('assistant').toolResultGuard.flushUnrecorded = () => { throw failure; };
202
- let syncCalls = 0, closeCalls = 0;
203
- const sync = store.sync.bind(store), close = store.close.bind(store);
204
- store.sync = () => { syncCalls++; sync(); };
205
- store.close = () => { closeCalls++; close(); };
206
- await assert.rejects(framework.stop(), error => error === failure);
207
- assert.equal(syncCalls, 1);
208
- assert.equal(closeCalls, 1);
209
- });
210
- test('failed stop synchronizes a borrowed store without closing it', async (t) => {
211
- const { store, config } = await fixture(t);
212
- const borrowed = await AgentFramework.create({ ...config, store });
213
- const failure = new Error('injected borrowed store sync failure');
214
- let closeCalls = 0;
215
- const close = store.close.bind(store), sync = store.sync.bind(store);
216
- store.close = () => { closeCalls++; close(); };
217
- store.sync = () => { throw failure; };
218
- try {
219
- await assert.rejects(borrowed.stop(), error => error === failure);
220
- assert.equal(closeCalls, 0, 'the caller owns the supplied store');
221
- }
222
- finally {
223
- store.sync = sync;
224
- }
225
- store.registerState({ id: 'still-open', strategy: 'snapshot' });
226
- store.setStateJson('still-open', { open: true });
227
- assert.deepEqual(store.getStateJson('still-open'), { open: true });
228
- });
229
- for (const synchronous of [false, true]) {
230
- test(`MCPL close failure waits for other connections (synchronous=${synchronous})`, async (t) => {
231
- const failure = new Error('injected MCPL close failure');
232
- let release;
233
- const waiting = new Promise(resolve => { release = resolve; });
234
- const order = [];
235
- const registry = new McplServerRegistry();
236
- const servers = registry.servers;
237
- servers.set('failing', { close: () => synchronous ? (() => { throw failure; })() : Promise.reject(failure) });
238
- servers.set('delayed', { close: async () => { await waiting; order.push('connection-closed'); } });
239
- const { framework, store } = await fixture(t);
240
- framework.mcplServerRegistry = registry;
241
- const sync = store.sync.bind(store), close = store.close.bind(store);
242
- store.sync = () => { order.push('sync'); sync(); };
243
- store.close = () => { order.push('close'); close(); };
244
- let settled = false;
245
- const stopped = framework.stop().then(() => ({ error: undefined }), error => ({ error }))
246
- .finally(() => { settled = true; });
247
- try {
248
- await new Promise(resolve => setImmediate(resolve));
249
- assert.equal(settled, false, 'stop must await every MCPL connection even after a rejection');
250
- assert.deepEqual(order, []);
251
- }
252
- finally {
253
- release();
254
- }
255
- assert.equal((await stopped).error, failure);
256
- assert.deepEqual(order, ['connection-closed', 'sync']);
257
- assert.equal(registry.getAllServers().length, 1);
258
- assert.equal(registry.getServer('failing') !== null, true);
259
- });
260
- }
261
- function deferred() {
262
- let resolve;
263
- const promise = new Promise(done => { resolve = done; });
264
- return { promise, resolve };
265
- }
266
- // The original workspace/discord stop contract writes through its saved
267
- // ModuleContext before asynchronous resource cleanup. Keep that context usable.
268
- test('timeout retains original contexts and pending cleanup; retry only repeats failures', async (t) => {
269
- const waiting = deferred();
270
- const failure = new Error('original cleanup failure');
271
- let failedCalls = 0, pendingCalls = 0, successfulCalls = 0;
272
- let failedContext, pendingContext;
273
- const failing = module('retryable', async () => {
274
- failedCalls++;
275
- failedContext.setState({ attempts: failedCalls });
276
- if (failedCalls === 1)
277
- throw failure;
278
- });
279
- failing.start = async (ctx) => { failedContext = ctx; ctx.registerSpeechHandler('*'); };
280
- const pending = module('pending', async () => {
281
- pendingCalls++;
282
- await waiting.promise;
283
- pendingContext.setState({ late: true });
284
- });
285
- pending.start = async (ctx) => { pendingContext = ctx; };
286
- const successful = module('successful', async () => { successfulCalls++; });
287
- const { framework, store, config } = await fixture(t, [failing, pending, successful]);
288
- let syncCalls = 0, closeCalls = 0;
289
- const sync = store.sync.bind(store), close = store.close.bind(store);
290
- store.sync = () => { syncCalls++; sync(); };
291
- store.close = () => { closeCalls++; close(); };
292
- const registry = framework.moduleRegistry;
293
- await assert.rejects(framework.stop(20), error => error instanceof ShutdownTimeoutError &&
294
- error.pending.includes('module:pending') && error.errors.includes(failure));
295
- assert.equal(framework.getModule('retryable'), failing);
296
- assert.equal(framework.getModule('pending'), pending);
297
- assert.equal(framework.getModule('successful'), null);
298
- assert.equal(registry.speechHandlers.length, 1);
299
- assert.equal(syncCalls, 1);
300
- assert.equal(closeCalls, 0);
301
- assert.deepEqual(failedContext.getState(), { attempts: 1, externalIdMap: {} });
302
- // Concurrent retries share one real attempt, including the still running peer.
303
- const retry = framework.stop(1000);
304
- assert.equal(framework.stop(1000), retry);
305
- await new Promise(done => setImmediate(done));
306
- assert.equal(failedCalls, 2);
307
- assert.equal(pendingCalls, 1);
308
- assert.equal(successfulCalls, 1);
309
- waiting.resolve();
310
- await retry;
311
- assert.equal(syncCalls, 2);
312
- assert.equal(closeCalls, 1);
313
- assert.equal(registry.speechHandlers.length, 0);
314
- assert.equal(framework.getModule('retryable'), null);
315
- await framework.stop();
316
- assert.equal(closeCalls, 1);
317
- const reopened = await AgentFramework.create({ ...config, modules: [] });
318
- try {
319
- assert.deepEqual(reopened.getStore().getStateJson('modules/pending/state'), { late: true, externalIdMap: {} });
320
- assert.deepEqual(reopened.getStore().getStateJson('modules/retryable/state'), { attempts: 2, externalIdMap: {} });
321
- }
322
- finally {
323
- await reopened.stop();
324
- }
325
- });
326
- test('hang-only cleanup is bounded and later rejection remains observed', async (t) => {
327
- let reject;
328
- let calls = 0;
329
- const hung = new Promise((_, fail) => { reject = fail; });
330
- const { framework, store } = await fixture(t, [module('hung', () => { calls++; return hung; })]);
331
- await assert.rejects(framework.stop(15), error => error instanceof ShutdownTimeoutError &&
332
- error.pending.join(',') === 'module:hung');
333
- store.registerState({ id: 'after-timeout', strategy: 'snapshot' });
334
- store.setStateJson('after-timeout', { open: true });
335
- assert.equal(calls, 1);
336
- reject(new Error('late rejection'));
337
- await new Promise(done => setImmediate(done));
338
- });
339
- test('incomplete teardown attempts final tool-result repair and sync without closing storage', async (t) => {
340
- const failure = new Error('module incomplete');
341
- const { framework, store } = await fixture(t, [module('failed', async () => { throw failure; })], true);
342
- let repairCalls = 0, syncCalls = 0;
343
- framework.getAgent('assistant').toolResultGuard.flushUnrecorded = () => { repairCalls++; };
344
- const sync = store.sync.bind(store);
345
- store.sync = () => { syncCalls++; sync(); };
346
- store.close = () => { assert.fail('no close before teardown'); };
347
- await assert.rejects(framework.stop(), error => error === failure);
348
- assert.equal(repairCalls, 1);
349
- assert.equal(syncCalls, 1);
350
- });
351
- test('explicit timeout syncs available state before host exit and leaves cleanup owned', async (t) => {
352
- const waiting = deferred();
353
- let context, calls = 0;
354
- const pending = module('pending', async () => {
355
- calls++;
356
- context.setState({ beforeTimeout: true });
357
- await waiting.promise;
358
- });
359
- pending.start = async (ctx) => { context = ctx; };
360
- const { framework, store, config } = await fixture(t, [pending]);
361
- try {
362
- await assert.rejects(framework.stop(15), ShutdownTimeoutError);
363
- assert.equal(store.isClosed(), false);
364
- // Chronicle locks the live store. A separate disk copy verifies persisted
365
- // bytes without closing the pending cleanup owner's handle to sync them.
366
- const snapshotPath = `${config.storePath}.snapshot`;
367
- cpSync(config.storePath, snapshotPath, { recursive: true });
368
- const observer = await AgentFramework.create({ ...config, storePath: snapshotPath, modules: [] });
369
- try {
370
- assert.deepEqual(observer.getStore().getStateJson('modules/pending/state'), { beforeTimeout: true, externalIdMap: {} });
371
- }
372
- finally {
373
- await observer.stop();
374
- }
375
- const retry = framework.stop();
376
- waiting.resolve();
377
- await retry;
378
- assert.equal(calls, 1, 'a caller timeout does not restart the registry cleanup');
379
- }
380
- finally {
381
- waiting.resolve();
382
- }
383
- });
384
- test('failed teardown retains repair and sync failures without closing pending storage', async (t) => {
385
- const teardownFailure = new Error('teardown failed');
386
- const repairFailure = new Error('repair failed');
387
- const syncFailure = new Error('sync failed');
388
- const { framework, store } = await fixture(t, [
389
- module('failed', async () => { throw teardownFailure; }),
390
- ], true);
391
- framework.getAgent('assistant').toolResultGuard.flushUnrecorded = () => { throw repairFailure; };
392
- store.sync = () => { throw syncFailure; };
393
- store.close = () => { assert.fail('pending cleanup retains the store'); };
394
- await assert.rejects(framework.stop(), error => error instanceof AggregateError &&
395
- error.errors.includes(teardownFailure) && error.errors.includes(repairFailure) &&
396
- error.errors.includes(syncFailure));
397
- assert.equal(store.isClosed(), false);
398
- });
399
- test('host-facing diagnostics include both registry labels and observed failures', async (t) => {
400
- assert.equal(DEFAULT_SHUTDOWN_TIMEOUT_MS, undefined);
401
- const waiting = deferred();
402
- const failure = new Error('observed module failure');
403
- const { framework } = await fixture(t, [
404
- module('failed', async () => { throw failure; }),
405
- module('pending', async () => { await waiting.promise; }),
406
- ]);
407
- const registry = new McplServerRegistry();
408
- registry.servers.set('pending-server', { close: async () => { await waiting.promise; } });
409
- framework.mcplServerRegistry = registry;
410
- try {
411
- await assert.rejects(framework.stop(15), error => {
412
- assert.ok(error instanceof AggregateError);
413
- const message = String(error);
414
- assert.match(message, /module:pending/);
415
- assert.match(message, /mcpl:pending-server/);
416
- assert.match(message, /observed module failure/);
417
- return true;
418
- });
419
- }
420
- finally {
421
- waiting.resolve();
422
- }
423
- });
424
- test('invalid shutdown budgets fail before effects', async (t) => {
425
- let calls = 0;
426
- const { framework } = await fixture(t, [module('valid', async () => { calls++; })]);
427
- for (const budget of [0, -1, 0.5, NaN, Infinity, 2147483648]) {
428
- await assert.rejects(framework.stop(budget), RangeError);
429
- }
430
- assert.equal(calls, 0);
431
- await framework.stop();
432
- });
433
- test('failed final sync remains rejected after successful owned close', async (t) => {
434
- const { framework, store } = await fixture(t);
435
- const failure = new Error('terminal sync failure');
436
- let calls = 0;
437
- store.sync = () => { calls++; throw failure; };
438
- const stopped = framework.stop();
439
- await assert.rejects(stopped, error => error === failure);
440
- assert.equal(framework.stop(), stopped);
441
- await assert.rejects(framework.stop(), error => error === failure);
442
- assert.equal(calls, 1);
443
- });
444
- class ControlledTransport extends McplTransport {
445
- cleanup;
446
- kind = 'stdio';
447
- calls = 0;
448
- constructor(cleanup) {
449
- super();
450
- this.cleanup = cleanup;
451
- }
452
- writeLine() { }
453
- async close() { this.calls++; await this.cleanup(); }
454
- }
455
- test('actual MCPL connection retries failed transport close and deduplicates pending work', async () => {
456
- const failure = new Error('transport cleanup failed');
457
- const waiting = deferred();
458
- let attempts = 0, events = 0;
459
- const transport = new ControlledTransport(async () => {
460
- if (++attempts === 1)
461
- throw failure;
462
- await waiting.promise;
463
- });
464
- const connection = Reflect.construct(McplServerConnection, ['test', null, transport]);
465
- connection.on('close', () => { events++; });
466
- await assert.rejects(connection.close(), error => error === failure);
467
- assert.equal(connection.isConnected, false);
468
- assert.equal(connection.willReconnect, false);
469
- const first = connection.close(), second = connection.close();
470
- await new Promise(done => setImmediate(done));
471
- assert.equal(transport.calls, 2);
472
- assert.equal(events, 0);
473
- waiting.resolve();
474
- await Promise.all([first, second]);
475
- await connection.close();
476
- assert.equal(transport.calls, 2);
477
- assert.equal(events, 1);
478
- });
479
- test('MCPL registry retains failed and pending servers and bounds concurrent attempts', async () => {
480
- const registry = new McplServerRegistry();
481
- const servers = registry.servers;
482
- const waiting = deferred();
483
- const failure = new Error('server cleanup failed');
484
- let failingCalls = 0, pendingCalls = 0;
485
- const failing = { close: async () => { if (++failingCalls === 1)
486
- throw failure; } };
487
- const pending = { close: async () => { pendingCalls++; await waiting.promise; } };
488
- servers.set('failed', failing);
489
- servers.set('pending', pending);
490
- await assert.rejects(registry.closeAll(15), error => error instanceof ShutdownTimeoutError &&
491
- error.pending.includes('mcpl:pending') && error.errors.includes(failure));
492
- assert.equal(registry.getServer('failed'), failing);
493
- assert.equal(registry.getServer('pending'), pending);
494
- const first = registry.closeAll(1000), second = registry.closeAll(1000);
495
- await new Promise(done => setImmediate(done));
496
- assert.equal(failingCalls, 2);
497
- assert.equal(pendingCalls, 1);
498
- waiting.resolve();
499
- await Promise.all([first, second]);
500
- assert.equal(registry.getAllServers().length, 0);
501
- });
502
- test('public MCPL recovery serializes overlapping reconnects and close waits for late cleanup', async (t) => {
503
- t.mock.timers.enable({ apis: ['setTimeout'] });
504
- t.mock.method(Math, 'random', () => 0.5);
505
- const waiting = deferred();
506
- const transport = new ControlledTransport(async () => { });
507
- let handshakes = 0, reconnectEvents = 0;
508
- t.mock.method(McplServerConnection, 'handshake', async () => {
509
- if (++handshakes === 1)
510
- throw new Error('initial connect failure');
511
- await waiting.promise;
512
- return { transport, capabilities: null, droppedCapabilities: new Set(), mcpToolsAdvertised: false };
513
- });
514
- const connection = await McplServerConnection.connectWithReconnect({ id: 'overlap', command: 'unused', reconnect: true, reconnectIntervalMs: 10 }, { version: '0.5' });
515
- connection.on('reconnect', () => { reconnectEvents++; });
516
- try {
517
- t.mock.timers.tick(10);
518
- await connection.reconnectAfterFailure();
519
- t.mock.timers.tick(10);
520
- await new Promise(done => setImmediate(done));
521
- assert.equal(handshakes, 2, 'initial failure plus one actual in-flight reconnect');
522
- let settled = false;
523
- const stopped = connection.close().finally(() => { settled = true; });
524
- await new Promise(done => setImmediate(done));
525
- assert.equal(settled, false, 'do not report success before an owned handshake settles');
526
- waiting.resolve();
527
- await stopped;
528
- assert.equal(connection.isConnected, false);
529
- assert.equal(connection.willReconnect, false);
530
- assert.equal(reconnectEvents, 0, 'a late handshake must not reopen admission');
531
- assert.equal(transport.calls, 1);
532
- await connection.close();
533
- assert.equal(transport.calls, 1);
534
- }
535
- finally {
536
- waiting.resolve();
537
- await new Promise(done => setImmediate(done));
538
- await connection.close();
539
- }
540
- });
541
- for (const closeFails of [false, true]) {
542
- test(`pending MCPL reconnect remains owned across timeout (closeFails=${closeFails})`, async (t) => {
543
- const waiting = deferred();
544
- const failure = new Error('late transport close failure');
545
- const transport = new ControlledTransport(async () => {
546
- if (closeFails && transport.calls === 1)
547
- throw failure;
548
- });
549
- t.mock.method(McplServerConnection, 'handshake', async () => {
550
- await waiting.promise;
551
- return { transport, capabilities: null, droppedCapabilities: new Set(), mcpToolsAdvertised: false };
552
- });
553
- const connection = Reflect.construct(McplServerConnection, ['late', null, null]);
554
- const internals = connection;
555
- internals.closed = true;
556
- internals.reconnectEnabled = true;
557
- internals.config = { id: 'late', command: 'unused', reconnect: true };
558
- internals.hostCapabilities = { version: '0.5' };
559
- const reconnecting = internals.attemptReconnect();
560
- const registry = new McplServerRegistry();
561
- registry.servers.set('late', connection);
562
- try {
563
- await assert.rejects(registry.closeAll(15), error => error instanceof ShutdownTimeoutError &&
564
- error.pending.includes('mcpl:late'));
565
- assert.equal(registry.getServer('late'), connection);
566
- const observedClose = connection.close().then(() => undefined, error => error);
567
- waiting.resolve();
568
- await reconnecting;
569
- assert.equal(await observedClose, closeFails ? failure : undefined);
570
- await new Promise(done => setImmediate(done));
571
- assert.equal(connection.isConnected, false);
572
- assert.equal(transport.calls, 1);
573
- if (closeFails)
574
- assert.equal(registry.getServer('late'), connection);
575
- await registry.closeAll(1000);
576
- assert.equal(registry.getAllServers().length, 0);
577
- assert.equal(transport.calls, closeFails ? 2 : 1);
578
- }
579
- finally {
580
- waiting.resolve();
581
- await reconnecting;
582
- await connection.close();
583
- }
584
- });
585
- }
586
- test('late overlapping public reconnect cannot defeat a completed close', async (t) => {
587
- t.mock.timers.enable({ apis: ['setTimeout'] });
588
- t.mock.method(Math, 'random', () => 0.5);
589
- const first = deferred(), second = deferred();
590
- const a = new ControlledTransport(async () => { }), b = new ControlledTransport(async () => { });
591
- let handshakes = 0;
592
- t.mock.method(McplServerConnection, 'handshake', async () => {
593
- const ordinal = ++handshakes;
594
- if (ordinal === 1)
595
- throw new Error('initial connect failure');
596
- await (ordinal === 2 ? first.promise : second.promise);
597
- return { transport: ordinal === 2 ? a : b, capabilities: null,
598
- droppedCapabilities: new Set(), mcpToolsAdvertised: false };
599
- });
600
- const connection = await McplServerConnection.connectWithReconnect({ id: 'late-overlap', command: 'unused', reconnect: true, reconnectIntervalMs: 10 }, { version: '0.5' });
601
- try {
602
- t.mock.timers.tick(10);
603
- await connection.reconnectAfterFailure();
604
- t.mock.timers.tick(10);
605
- first.resolve();
606
- await new Promise(done => setImmediate(done));
607
- assert.equal(connection.isConnected, true);
608
- await connection.close();
609
- second.resolve();
610
- await new Promise(done => setImmediate(done));
611
- await connection.close();
612
- assert.equal(connection.isConnected, false, 'successful close cannot become stale after a late handshake');
613
- assert.equal(a.calls, 1);
614
- assert.equal(b.calls, handshakes > 2 ? 1 : 0);
615
- }
616
- finally {
617
- first.resolve();
618
- second.resolve();
619
- await new Promise(done => setImmediate(done));
620
- await connection.close();
621
- }
622
- });
623
- test('queued MCPL recovery after successful reconnect cannot replace an owned live transport', async (t) => {
624
- t.mock.timers.enable({ apis: ['setTimeout'] });
625
- t.mock.method(Math, 'random', () => 0.5);
626
- const first = deferred(), second = deferred();
627
- const a = new ControlledTransport(async () => { }), b = new ControlledTransport(async () => { });
628
- let handshakes = 0;
629
- t.mock.method(McplServerConnection, 'handshake', async () => {
630
- const ordinal = ++handshakes;
631
- if (ordinal === 1)
632
- throw new Error('initial connect failure');
633
- await (ordinal === 2 ? first.promise : second.promise);
634
- return { transport: ordinal === 2 ? a : b, capabilities: null,
635
- droppedCapabilities: new Set(), mcpToolsAdvertised: false };
636
- });
637
- const connection = await McplServerConnection.connectWithReconnect({ id: 'queued', command: 'unused', reconnect: true, reconnectIntervalMs: 10 }, { version: '0.5' });
638
- try {
639
- t.mock.timers.tick(10);
640
- await connection.reconnectAfterFailure();
641
- first.resolve();
642
- await new Promise(done => setImmediate(done));
643
- assert.equal(connection.isConnected, true);
644
- // B's timer fires after A recovered and its in-flight promise cleared.
645
- t.mock.timers.tick(10);
646
- const stopped = connection.close();
647
- second.resolve();
648
- await stopped;
649
- await connection.close();
650
- assert.equal(connection.isConnected, false);
651
- assert.equal(a.calls, 1, 'the already recovered transport must actually be closed');
652
- assert.equal(handshakes, 2, 'discard a queued recovery after the connection recovered');
653
- assert.equal(b.calls, 0, 'the stale timer must not open a second transport');
654
- }
655
- finally {
656
- first.resolve();
657
- second.resolve();
658
- await new Promise(done => setImmediate(done));
659
- await connection.close();
660
- }
661
- });
662
- //# sourceMappingURL=shutdown-errors.test.js.map