@animalabs/agent-framework 0.22.1 → 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 (946) hide show
  1. package/README.md +4 -2
  2. package/dist/src/agent.d.ts +266 -28
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +539 -104
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server-core.d.ts +41 -0
  7. package/dist/src/api/mcp-server-core.d.ts.map +1 -0
  8. package/dist/src/api/mcp-server-core.js +593 -0
  9. package/dist/src/api/mcp-server-core.js.map +1 -0
  10. package/dist/src/api/mcp-server.d.ts +2 -36
  11. package/dist/src/api/mcp-server.d.ts.map +1 -1
  12. package/dist/src/api/mcp-server.js +15 -595
  13. package/dist/src/api/mcp-server.js.map +1 -1
  14. package/dist/src/api/server.d.ts +9 -1
  15. package/dist/src/api/server.d.ts.map +1 -1
  16. package/dist/src/api/server.js +55 -27
  17. package/dist/src/api/server.js.map +1 -1
  18. package/dist/src/api/types.d.ts +10 -2
  19. package/dist/src/api/types.d.ts.map +1 -1
  20. package/dist/src/branch-names.d.ts +14 -0
  21. package/dist/src/branch-names.d.ts.map +1 -0
  22. package/dist/src/branch-names.js +22 -0
  23. package/dist/src/branch-names.js.map +1 -0
  24. package/dist/src/closest-names.d.ts +28 -0
  25. package/dist/src/closest-names.d.ts.map +1 -0
  26. package/dist/src/closest-names.js +98 -0
  27. package/dist/src/closest-names.js.map +1 -0
  28. package/dist/src/code-execution/py-runner.d.ts +16 -5
  29. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  30. package/dist/src/code-execution/py-runner.js +186 -74
  31. package/dist/src/code-execution/py-runner.js.map +1 -1
  32. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  33. package/dist/src/code-execution/runtime-py.js +49 -3
  34. package/dist/src/code-execution/runtime-py.js.map +1 -1
  35. package/dist/src/code-execution/tool-definition.d.ts +12 -1
  36. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  37. package/dist/src/code-execution/tool-definition.js +21 -3
  38. package/dist/src/code-execution/tool-definition.js.map +1 -1
  39. package/dist/src/config-checks.d.ts +28 -0
  40. package/dist/src/config-checks.d.ts.map +1 -0
  41. package/dist/src/config-checks.js +52 -0
  42. package/dist/src/config-checks.js.map +1 -0
  43. package/dist/src/deadline-timer.d.ts +21 -0
  44. package/dist/src/deadline-timer.d.ts.map +1 -0
  45. package/dist/src/deadline-timer.js +43 -0
  46. package/dist/src/deadline-timer.js.map +1 -0
  47. package/dist/src/error-message.d.ts +30 -0
  48. package/dist/src/error-message.d.ts.map +1 -0
  49. package/dist/src/error-message.js +50 -0
  50. package/dist/src/error-message.js.map +1 -0
  51. package/dist/src/framework.d.ts +1212 -192
  52. package/dist/src/framework.d.ts.map +1 -1
  53. package/dist/src/framework.js +6686 -1835
  54. package/dist/src/framework.js.map +1 -1
  55. package/dist/src/gate/event-gate.d.ts +8 -0
  56. package/dist/src/gate/event-gate.d.ts.map +1 -1
  57. package/dist/src/gate/event-gate.js +27 -3
  58. package/dist/src/gate/event-gate.js.map +1 -1
  59. package/dist/src/gate/gate-script.d.ts.map +1 -1
  60. package/dist/src/gate/gate-script.js.map +1 -1
  61. package/dist/src/index.d.ts +5 -3
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js +5 -3
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
  66. package/dist/src/mcpl/channel-registry.d.ts +170 -13
  67. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  68. package/dist/src/mcpl/channel-registry.js +499 -258
  69. package/dist/src/mcpl/channel-registry.js.map +1 -1
  70. package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
  71. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  72. package/dist/src/mcpl/checkpoint-manager.js +91 -30
  73. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  74. package/dist/src/mcpl/conversation-router.d.ts +19 -3
  75. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  76. package/dist/src/mcpl/conversation-router.js +23 -8
  77. package/dist/src/mcpl/conversation-router.js.map +1 -1
  78. package/dist/src/mcpl/convert-block.d.ts +20 -0
  79. package/dist/src/mcpl/convert-block.d.ts.map +1 -0
  80. package/dist/src/mcpl/convert-block.js +89 -0
  81. package/dist/src/mcpl/convert-block.js.map +1 -0
  82. package/dist/src/mcpl/errors.d.ts +13 -0
  83. package/dist/src/mcpl/errors.d.ts.map +1 -1
  84. package/dist/src/mcpl/errors.js +28 -0
  85. package/dist/src/mcpl/errors.js.map +1 -1
  86. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
  87. package/dist/src/mcpl/feature-set-manager.js +4 -3
  88. package/dist/src/mcpl/feature-set-manager.js.map +1 -1
  89. package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
  90. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  91. package/dist/src/mcpl/hook-orchestrator.js +83 -72
  92. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  93. package/dist/src/mcpl/inbound-source.d.ts +114 -0
  94. package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
  95. package/dist/src/mcpl/inbound-source.js +83 -0
  96. package/dist/src/mcpl/inbound-source.js.map +1 -0
  97. package/dist/src/mcpl/index.d.ts +3 -1
  98. package/dist/src/mcpl/index.d.ts.map +1 -1
  99. package/dist/src/mcpl/index.js +3 -1
  100. package/dist/src/mcpl/index.js.map +1 -1
  101. package/dist/src/mcpl/inference-router.d.ts +15 -11
  102. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  103. package/dist/src/mcpl/inference-router.js +153 -84
  104. package/dist/src/mcpl/inference-router.js.map +1 -1
  105. package/dist/src/mcpl/log-value.d.ts +54 -0
  106. package/dist/src/mcpl/log-value.d.ts.map +1 -0
  107. package/dist/src/mcpl/log-value.js +109 -0
  108. package/dist/src/mcpl/log-value.js.map +1 -0
  109. package/dist/src/mcpl/prose-stream-router.d.ts +6 -6
  110. package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -1
  111. package/dist/src/mcpl/prose-stream-router.js +4 -4
  112. package/dist/src/mcpl/prose-stream-router.js.map +1 -1
  113. package/dist/src/mcpl/push-coalescer.d.ts +64 -7
  114. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  115. package/dist/src/mcpl/push-coalescer.js +121 -24
  116. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  117. package/dist/src/mcpl/push-handler.d.ts +38 -8
  118. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  119. package/dist/src/mcpl/push-handler.js +77 -78
  120. package/dist/src/mcpl/push-handler.js.map +1 -1
  121. package/dist/src/mcpl/reference-fetcher.d.ts +14 -2
  122. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  123. package/dist/src/mcpl/reference-fetcher.js +72 -30
  124. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  125. package/dist/src/mcpl/references.d.ts +49 -14
  126. package/dist/src/mcpl/references.d.ts.map +1 -1
  127. package/dist/src/mcpl/references.js +74 -21
  128. package/dist/src/mcpl/references.js.map +1 -1
  129. package/dist/src/mcpl/refusal-lines.d.ts +37 -0
  130. package/dist/src/mcpl/refusal-lines.d.ts.map +1 -0
  131. package/dist/src/mcpl/refusal-lines.js +61 -0
  132. package/dist/src/mcpl/refusal-lines.js.map +1 -0
  133. package/dist/src/mcpl/scope-manager.d.ts.map +1 -1
  134. package/dist/src/mcpl/server-connection.d.ts +107 -12
  135. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  136. package/dist/src/mcpl/server-connection.js +470 -139
  137. package/dist/src/mcpl/server-connection.js.map +1 -1
  138. package/dist/src/mcpl/server-registry.d.ts +10 -1
  139. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  140. package/dist/src/mcpl/server-registry.js +14 -3
  141. package/dist/src/mcpl/server-registry.js.map +1 -1
  142. package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
  143. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
  144. package/dist/src/mcpl/skip-reply-wake.js +55 -0
  145. package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
  146. package/dist/src/mcpl/tool-classes.d.ts +1 -1
  147. package/dist/src/mcpl/tool-classes.d.ts.map +1 -1
  148. package/dist/src/mcpl/tool-classes.js +3 -2
  149. package/dist/src/mcpl/tool-classes.js.map +1 -1
  150. package/dist/src/mcpl/tool-lifecycle.d.ts.map +1 -1
  151. package/dist/src/mcpl/tool-lifecycle.js.map +1 -1
  152. package/dist/src/mcpl/transport.d.ts +74 -7
  153. package/dist/src/mcpl/transport.d.ts.map +1 -1
  154. package/dist/src/mcpl/transport.js +209 -22
  155. package/dist/src/mcpl/transport.js.map +1 -1
  156. package/dist/src/mcpl/types.d.ts +43 -28
  157. package/dist/src/mcpl/types.d.ts.map +1 -1
  158. package/dist/src/mcpl/types.js.map +1 -1
  159. package/dist/src/mcpl/visible-content.d.ts +15 -0
  160. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  161. package/dist/src/mcpl/visible-content.js +25 -0
  162. package/dist/src/mcpl/visible-content.js.map +1 -1
  163. package/dist/src/module-registry.d.ts +19 -1
  164. package/dist/src/module-registry.d.ts.map +1 -1
  165. package/dist/src/module-registry.js +54 -25
  166. package/dist/src/module-registry.js.map +1 -1
  167. package/dist/src/modules/api/index.d.ts.map +1 -1
  168. package/dist/src/modules/api/index.js +1 -1
  169. package/dist/src/modules/api/index.js.map +1 -1
  170. package/dist/src/modules/discord/discord-js-client.d.ts +1 -0
  171. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
  172. package/dist/src/modules/discord/discord-js-client.js +25 -9
  173. package/dist/src/modules/discord/discord-js-client.js.map +1 -1
  174. package/dist/src/modules/discord/index.d.ts +29 -3
  175. package/dist/src/modules/discord/index.d.ts.map +1 -1
  176. package/dist/src/modules/discord/index.js +383 -145
  177. package/dist/src/modules/discord/index.js.map +1 -1
  178. package/dist/src/modules/discord/types.d.ts +14 -1
  179. package/dist/src/modules/discord/types.d.ts.map +1 -1
  180. package/dist/src/modules/health/index.d.ts.map +1 -1
  181. package/dist/src/modules/health/index.js +2 -1
  182. package/dist/src/modules/health/index.js.map +1 -1
  183. package/dist/src/modules/history/index.d.ts +3 -1
  184. package/dist/src/modules/history/index.d.ts.map +1 -1
  185. package/dist/src/modules/history/index.js +359 -127
  186. package/dist/src/modules/history/index.js.map +1 -1
  187. package/dist/src/modules/history/semantic.d.ts +28 -1
  188. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  189. package/dist/src/modules/history/semantic.js +177 -32
  190. package/dist/src/modules/history/semantic.js.map +1 -1
  191. package/dist/src/modules/unknown-tool.d.ts +10 -0
  192. package/dist/src/modules/unknown-tool.d.ts.map +1 -0
  193. package/dist/src/modules/unknown-tool.js +17 -0
  194. package/dist/src/modules/unknown-tool.js.map +1 -0
  195. package/dist/src/modules/workspace/branch-intent.d.ts.map +1 -1
  196. package/dist/src/modules/workspace/branch-intent.js.map +1 -1
  197. package/dist/src/modules/workspace/disk-agreement.d.ts +54 -6
  198. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  199. package/dist/src/modules/workspace/disk-agreement.js +93 -27
  200. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  201. package/dist/src/modules/workspace/effects.d.ts +64 -6
  202. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  203. package/dist/src/modules/workspace/effects.js +291 -44
  204. package/dist/src/modules/workspace/effects.js.map +1 -1
  205. package/dist/src/modules/workspace/index.d.ts +127 -27
  206. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  207. package/dist/src/modules/workspace/index.js +821 -248
  208. package/dist/src/modules/workspace/index.js.map +1 -1
  209. package/dist/src/modules/workspace/observe.d.ts +117 -15
  210. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  211. package/dist/src/modules/workspace/observe.js +436 -51
  212. package/dist/src/modules/workspace/observe.js.map +1 -1
  213. package/dist/src/modules/workspace/reconcile.d.ts +75 -8
  214. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  215. package/dist/src/modules/workspace/reconcile.js +576 -68
  216. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  217. package/dist/src/modules/workspace/types.d.ts +42 -3
  218. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  219. package/dist/src/modules/workspace/types.js.map +1 -1
  220. package/dist/src/modules/workspace/watcher.d.ts +7 -2
  221. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  222. package/dist/src/modules/workspace/watcher.js +28 -4
  223. package/dist/src/modules/workspace/watcher.js.map +1 -1
  224. package/dist/src/operator-log.d.ts.map +1 -1
  225. package/dist/src/operator-log.js.map +1 -1
  226. package/dist/src/prose-drafts.d.ts +240 -0
  227. package/dist/src/prose-drafts.d.ts.map +1 -0
  228. package/dist/src/prose-drafts.js +362 -0
  229. package/dist/src/prose-drafts.js.map +1 -0
  230. package/dist/src/prose-segments.d.ts +21 -2
  231. package/dist/src/prose-segments.d.ts.map +1 -1
  232. package/dist/src/prose-segments.js +46 -9
  233. package/dist/src/prose-segments.js.map +1 -1
  234. package/dist/src/provider-waits.d.ts.map +1 -1
  235. package/dist/src/provider-waits.js.map +1 -1
  236. package/dist/src/queue.d.ts.map +1 -1
  237. package/dist/src/record-journal.d.ts.map +1 -1
  238. package/dist/src/record-journal.js.map +1 -1
  239. package/dist/src/recovery/discord-awareness-outbox.d.ts.map +1 -1
  240. package/dist/src/recovery/discord-awareness-outbox.js.map +1 -1
  241. package/dist/src/recovery/offline-branch.d.ts +1 -0
  242. package/dist/src/recovery/offline-branch.d.ts.map +1 -1
  243. package/dist/src/recovery/offline-branch.js +32 -25
  244. package/dist/src/recovery/offline-branch.js.map +1 -1
  245. package/dist/src/recovery/recover-cli.js.map +1 -1
  246. package/dist/src/runtime/liveness-watchdog.d.ts.map +1 -1
  247. package/dist/src/runtime/liveness-watchdog.js.map +1 -1
  248. package/dist/src/safe-slice.d.ts +5 -1
  249. package/dist/src/safe-slice.d.ts.map +1 -1
  250. package/dist/src/safe-slice.js +9 -1
  251. package/dist/src/safe-slice.js.map +1 -1
  252. package/dist/src/shutdown.d.ts.map +1 -1
  253. package/dist/src/shutdown.js.map +1 -1
  254. package/dist/src/stored-removal.d.ts +73 -0
  255. package/dist/src/stored-removal.d.ts.map +1 -0
  256. package/dist/src/stored-removal.js +100 -0
  257. package/dist/src/stored-removal.js.map +1 -0
  258. package/dist/src/thinking-token-stamp.js.map +1 -1
  259. package/dist/src/tool-image-ledger.d.ts +87 -19
  260. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  261. package/dist/src/tool-image-ledger.js +135 -32
  262. package/dist/src/tool-image-ledger.js.map +1 -1
  263. package/dist/src/tool-presentation.d.ts +9 -0
  264. package/dist/src/tool-presentation.d.ts.map +1 -1
  265. package/dist/src/tool-presentation.js +257 -60
  266. package/dist/src/tool-presentation.js.map +1 -1
  267. package/dist/src/tool-result-guard.d.ts.map +1 -1
  268. package/dist/src/tool-result-guard.js +7 -10
  269. package/dist/src/tool-result-guard.js.map +1 -1
  270. package/dist/src/tool-result-history.d.ts +32 -3
  271. package/dist/src/tool-result-history.d.ts.map +1 -1
  272. package/dist/src/tool-result-history.js +106 -19
  273. package/dist/src/tool-result-history.js.map +1 -1
  274. package/dist/src/tune-out/coordinator.d.ts +25 -1
  275. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  276. package/dist/src/tune-out/coordinator.js +260 -65
  277. package/dist/src/tune-out/coordinator.js.map +1 -1
  278. package/dist/src/tune-out/tools.d.ts +1 -1
  279. package/dist/src/tune-out/tools.d.ts.map +1 -1
  280. package/dist/src/types/agent.d.ts +59 -11
  281. package/dist/src/types/agent.d.ts.map +1 -1
  282. package/dist/src/types/events.d.ts +17 -0
  283. package/dist/src/types/events.d.ts.map +1 -1
  284. package/dist/src/types/framework.d.ts +31 -5
  285. package/dist/src/types/framework.d.ts.map +1 -1
  286. package/dist/src/types/inference-log.d.ts +1 -1
  287. package/dist/src/types/inference-log.d.ts.map +1 -1
  288. package/dist/src/types/module.d.ts +30 -7
  289. package/dist/src/types/module.d.ts.map +1 -1
  290. package/dist/src/types/trace.d.ts +151 -11
  291. package/dist/src/types/trace.d.ts.map +1 -1
  292. package/dist/src/usage/usage-tracker.d.ts +5 -0
  293. package/dist/src/usage/usage-tracker.d.ts.map +1 -1
  294. package/dist/src/usage/usage-tracker.js +35 -8
  295. package/dist/src/usage/usage-tracker.js.map +1 -1
  296. package/package.json +10 -9
  297. package/src/agent.ts +572 -105
  298. package/src/api/mcp-server-core.ts +681 -0
  299. package/src/api/mcp-server.ts +16 -685
  300. package/src/api/server.ts +55 -30
  301. package/src/api/types.ts +10 -2
  302. package/src/branch-names.ts +19 -0
  303. package/src/closest-names.ts +94 -0
  304. package/src/code-execution/py-runner.ts +200 -76
  305. package/src/code-execution/runtime-py.ts +49 -3
  306. package/src/code-execution/tool-definition.ts +28 -4
  307. package/src/config-checks.ts +48 -0
  308. package/src/deadline-timer.ts +44 -0
  309. package/src/error-message.ts +48 -0
  310. package/src/framework.ts +7158 -1936
  311. package/src/gate/event-gate.ts +28 -3
  312. package/src/index.ts +12 -3
  313. package/src/mcpl/channel-registry.ts +615 -289
  314. package/src/mcpl/checkpoint-manager.ts +104 -29
  315. package/src/mcpl/conversation-router.ts +28 -8
  316. package/src/mcpl/convert-block.ts +97 -0
  317. package/src/mcpl/errors.ts +28 -0
  318. package/src/mcpl/feature-set-manager.ts +4 -3
  319. package/src/mcpl/hook-orchestrator.ts +84 -77
  320. package/src/mcpl/inbound-source.ts +156 -0
  321. package/src/mcpl/index.ts +10 -1
  322. package/src/mcpl/inference-router.ts +174 -99
  323. package/src/mcpl/log-value.ts +116 -0
  324. package/src/mcpl/prose-stream-router.ts +6 -6
  325. package/src/mcpl/push-coalescer.ts +124 -24
  326. package/src/mcpl/push-handler.ts +86 -84
  327. package/src/mcpl/reference-fetcher.ts +71 -26
  328. package/src/mcpl/references.ts +81 -22
  329. package/src/mcpl/refusal-lines.ts +59 -0
  330. package/src/mcpl/server-connection.ts +496 -142
  331. package/src/mcpl/server-registry.ts +15 -4
  332. package/src/mcpl/skip-reply-wake.ts +73 -0
  333. package/src/mcpl/tool-classes.ts +3 -2
  334. package/src/mcpl/transport.ts +219 -26
  335. package/src/mcpl/types.ts +18 -3
  336. package/src/mcpl/visible-content.ts +27 -0
  337. package/src/module-registry.ts +58 -23
  338. package/src/modules/api/index.ts +1 -1
  339. package/src/modules/discord/discord-js-client.ts +26 -10
  340. package/src/modules/discord/index.ts +395 -160
  341. package/src/modules/discord/types.ts +15 -2
  342. package/src/modules/health/index.ts +2 -1
  343. package/src/modules/history/index.ts +410 -120
  344. package/src/modules/history/semantic.ts +189 -32
  345. package/src/modules/unknown-tool.ts +16 -0
  346. package/src/modules/workspace/disk-agreement.ts +125 -21
  347. package/src/modules/workspace/effects.ts +279 -35
  348. package/src/modules/workspace/index.ts +841 -261
  349. package/src/modules/workspace/observe.ts +456 -56
  350. package/src/modules/workspace/reconcile.ts +688 -76
  351. package/src/modules/workspace/types.ts +41 -2
  352. package/src/modules/workspace/watcher.ts +27 -4
  353. package/src/prose-drafts.ts +481 -0
  354. package/src/prose-segments.ts +51 -8
  355. package/src/recovery/offline-branch.ts +36 -29
  356. package/src/safe-slice.ts +9 -1
  357. package/src/stored-removal.ts +126 -0
  358. package/src/tool-image-ledger.ts +153 -34
  359. package/src/tool-presentation.ts +224 -40
  360. package/src/tool-result-guard.ts +7 -8
  361. package/src/tool-result-history.ts +124 -20
  362. package/src/tune-out/coordinator.ts +259 -65
  363. package/src/types/agent.ts +59 -13
  364. package/src/types/events.ts +17 -0
  365. package/src/types/framework.ts +31 -5
  366. package/src/types/inference-log.ts +1 -1
  367. package/src/types/module.ts +31 -7
  368. package/src/types/trace.ts +158 -12
  369. package/src/usage/usage-tracker.ts +32 -8
  370. package/dist/test/activation-request-sanitize.test.d.ts +0 -2
  371. package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
  372. package/dist/test/activation-request-sanitize.test.js +0 -89
  373. package/dist/test/activation-request-sanitize.test.js.map +0 -1
  374. package/dist/test/agent-cache-ttl.test.d.ts +0 -2
  375. package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
  376. package/dist/test/agent-cache-ttl.test.js +0 -41
  377. package/dist/test/agent-cache-ttl.test.js.map +0 -1
  378. package/dist/test/agent-runtime-settings.test.d.ts +0 -2
  379. package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
  380. package/dist/test/agent-runtime-settings.test.js +0 -462
  381. package/dist/test/agent-runtime-settings.test.js.map +0 -1
  382. package/dist/test/api-admin-gate.test.d.ts +0 -2
  383. package/dist/test/api-admin-gate.test.d.ts.map +0 -1
  384. package/dist/test/api-admin-gate.test.js +0 -116
  385. package/dist/test/api-admin-gate.test.js.map +0 -1
  386. package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
  387. package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
  388. package/dist/test/assistant-persist-refusal.test.js +0 -63
  389. package/dist/test/assistant-persist-refusal.test.js.map +0 -1
  390. package/dist/test/batched-wake-locus.test.d.ts +0 -2
  391. package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
  392. package/dist/test/batched-wake-locus.test.js +0 -166
  393. package/dist/test/batched-wake-locus.test.js.map +0 -1
  394. package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
  395. package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
  396. package/dist/test/busy-agent-scheduler.test.js +0 -92
  397. package/dist/test/busy-agent-scheduler.test.js.map +0 -1
  398. package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
  399. package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
  400. package/dist/test/channel-incoming-targeting.test.js +0 -81
  401. package/dist/test/channel-incoming-targeting.test.js.map +0 -1
  402. package/dist/test/channel-label-history.test.d.ts +0 -2
  403. package/dist/test/channel-label-history.test.d.ts.map +0 -1
  404. package/dist/test/channel-label-history.test.js +0 -424
  405. package/dist/test/channel-label-history.test.js.map +0 -1
  406. package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
  407. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
  408. package/dist/test/channel-lifecycle-provenance.test.js +0 -47
  409. package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
  410. package/dist/test/channel-registry-routing.test.d.ts +0 -2
  411. package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
  412. package/dist/test/channel-registry-routing.test.js +0 -446
  413. package/dist/test/channel-registry-routing.test.js.map +0 -1
  414. package/dist/test/channel-registry-typing.test.d.ts +0 -2
  415. package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
  416. package/dist/test/channel-registry-typing.test.js +0 -91
  417. package/dist/test/channel-registry-typing.test.js.map +0 -1
  418. package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
  419. package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
  420. package/dist/test/channels-changed-respond-first.test.js +0 -74
  421. package/dist/test/channels-changed-respond-first.test.js.map +0 -1
  422. package/dist/test/checkpoint-attribution.test.d.ts +0 -2
  423. package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
  424. package/dist/test/checkpoint-attribution.test.js +0 -200
  425. package/dist/test/checkpoint-attribution.test.js.map +0 -1
  426. package/dist/test/code-execution.test.d.ts +0 -11
  427. package/dist/test/code-execution.test.d.ts.map +0 -1
  428. package/dist/test/code-execution.test.js +0 -1272
  429. package/dist/test/code-execution.test.js.map +0 -1
  430. package/dist/test/component-defaults.test.d.ts +0 -2
  431. package/dist/test/component-defaults.test.d.ts.map +0 -1
  432. package/dist/test/component-defaults.test.js +0 -54
  433. package/dist/test/component-defaults.test.js.map +0 -1
  434. package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
  435. package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
  436. package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
  437. package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
  438. package/dist/test/conversation-router.test.d.ts +0 -2
  439. package/dist/test/conversation-router.test.d.ts.map +0 -1
  440. package/dist/test/conversation-router.test.js +0 -174
  441. package/dist/test/conversation-router.test.js.map +0 -1
  442. package/dist/test/conversation-routing.test.d.ts +0 -7
  443. package/dist/test/conversation-routing.test.d.ts.map +0 -1
  444. package/dist/test/conversation-routing.test.js +0 -387
  445. package/dist/test/conversation-routing.test.js.map +0 -1
  446. package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
  447. package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
  448. package/dist/test/deferred-wake-integrity.test.js +0 -320
  449. package/dist/test/deferred-wake-integrity.test.js.map +0 -1
  450. package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
  451. package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
  452. package/dist/test/discord-awareness-outbox.test.js +0 -267
  453. package/dist/test/discord-awareness-outbox.test.js.map +0 -1
  454. package/dist/test/discord-history-delete-window.test.d.ts +0 -2
  455. package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
  456. package/dist/test/discord-history-delete-window.test.js +0 -81
  457. package/dist/test/discord-history-delete-window.test.js.map +0 -1
  458. package/dist/test/discord-history-sync.test.d.ts +0 -2
  459. package/dist/test/discord-history-sync.test.d.ts.map +0 -1
  460. package/dist/test/discord-history-sync.test.js +0 -56
  461. package/dist/test/discord-history-sync.test.js.map +0 -1
  462. package/dist/test/ephemeral-settle.test.d.ts +0 -2
  463. package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
  464. package/dist/test/ephemeral-settle.test.js +0 -354
  465. package/dist/test/ephemeral-settle.test.js.map +0 -1
  466. package/dist/test/event-gate-passthrough.test.d.ts +0 -15
  467. package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
  468. package/dist/test/event-gate-passthrough.test.js +0 -289
  469. package/dist/test/event-gate-passthrough.test.js.map +0 -1
  470. package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
  471. package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
  472. package/dist/test/event-gate-policy-mutation.test.js +0 -137
  473. package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
  474. package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
  475. package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
  476. package/dist/test/event-gate-rate-limit.test.js +0 -627
  477. package/dist/test/event-gate-rate-limit.test.js.map +0 -1
  478. package/dist/test/event-gate-script.test.d.ts +0 -2
  479. package/dist/test/event-gate-script.test.d.ts.map +0 -1
  480. package/dist/test/event-gate-script.test.js +0 -95
  481. package/dist/test/event-gate-script.test.js.map +0 -1
  482. package/dist/test/event-gate-selfwake.test.d.ts +0 -15
  483. package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
  484. package/dist/test/event-gate-selfwake.test.js +0 -125
  485. package/dist/test/event-gate-selfwake.test.js.map +0 -1
  486. package/dist/test/event-gate-tags.test.d.ts +0 -2
  487. package/dist/test/event-gate-tags.test.d.ts.map +0 -1
  488. package/dist/test/event-gate-tags.test.js +0 -76
  489. package/dist/test/event-gate-tags.test.js.map +0 -1
  490. package/dist/test/event-gate.test.d.ts +0 -2
  491. package/dist/test/event-gate.test.d.ts.map +0 -1
  492. package/dist/test/event-gate.test.js +0 -919
  493. package/dist/test/event-gate.test.js.map +0 -1
  494. package/dist/test/explicit-prose-routing.test.d.ts +0 -11
  495. package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
  496. package/dist/test/explicit-prose-routing.test.js +0 -1394
  497. package/dist/test/explicit-prose-routing.test.js.map +0 -1
  498. package/dist/test/framework.test.d.ts +0 -5
  499. package/dist/test/framework.test.d.ts.map +0 -1
  500. package/dist/test/framework.test.js +0 -1048
  501. package/dist/test/framework.test.js.map +0 -1
  502. package/dist/test/gather-context-timeout.test.d.ts +0 -2
  503. package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
  504. package/dist/test/gather-context-timeout.test.js +0 -120
  505. package/dist/test/gather-context-timeout.test.js.map +0 -1
  506. package/dist/test/health-snapshot.test.d.ts +0 -2
  507. package/dist/test/health-snapshot.test.d.ts.map +0 -1
  508. package/dist/test/health-snapshot.test.js +0 -74
  509. package/dist/test/health-snapshot.test.js.map +0 -1
  510. package/dist/test/helpers/coalescing-fixture.d.ts +0 -72
  511. package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
  512. package/dist/test/helpers/coalescing-fixture.js +0 -146
  513. package/dist/test/helpers/coalescing-fixture.js.map +0 -1
  514. package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
  515. package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
  516. package/dist/test/helpers/coalescing-kill-child.js +0 -24
  517. package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
  518. package/dist/test/helpers/mock-membrane.d.ts +0 -53
  519. package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
  520. package/dist/test/helpers/mock-membrane.js +0 -168
  521. package/dist/test/helpers/mock-membrane.js.map +0 -1
  522. package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
  523. package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
  524. package/dist/test/helpers/pytc-stop-rows.js +0 -143
  525. package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
  526. package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
  527. package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
  528. package/dist/test/helpers/quiesce-crash-child.js +0 -156
  529. package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
  530. package/dist/test/history-module-overview.test.d.ts +0 -2
  531. package/dist/test/history-module-overview.test.d.ts.map +0 -1
  532. package/dist/test/history-module-overview.test.js +0 -711
  533. package/dist/test/history-module-overview.test.js.map +0 -1
  534. package/dist/test/history-module-realstore.test.d.ts +0 -2
  535. package/dist/test/history-module-realstore.test.d.ts.map +0 -1
  536. package/dist/test/history-module-realstore.test.js +0 -363
  537. package/dist/test/history-module-realstore.test.js.map +0 -1
  538. package/dist/test/history-module-semantic.test.d.ts +0 -2
  539. package/dist/test/history-module-semantic.test.d.ts.map +0 -1
  540. package/dist/test/history-module-semantic.test.js +0 -213
  541. package/dist/test/history-module-semantic.test.js.map +0 -1
  542. package/dist/test/history-module-ux.test.d.ts +0 -2
  543. package/dist/test/history-module-ux.test.d.ts.map +0 -1
  544. package/dist/test/history-module-ux.test.js +0 -304
  545. package/dist/test/history-module-ux.test.js.map +0 -1
  546. package/dist/test/history-module.test.d.ts +0 -2
  547. package/dist/test/history-module.test.d.ts.map +0 -1
  548. package/dist/test/history-module.test.js +0 -619
  549. package/dist/test/history-module.test.js.map +0 -1
  550. package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
  551. package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
  552. package/dist/test/history-semantic-review-findings.test.js +0 -338
  553. package/dist/test/history-semantic-review-findings.test.js.map +0 -1
  554. package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
  555. package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
  556. package/dist/test/history-semantic-sync-converges.test.js +0 -109
  557. package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
  558. package/dist/test/host-quiesce.test.d.ts +0 -2
  559. package/dist/test/host-quiesce.test.d.ts.map +0 -1
  560. package/dist/test/host-quiesce.test.js +0 -863
  561. package/dist/test/host-quiesce.test.js.map +0 -1
  562. package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
  563. package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
  564. package/dist/test/inference-exhaustion-rewind.test.js +0 -309
  565. package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
  566. package/dist/test/inference-failure-bounds.test.d.ts +0 -2
  567. package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
  568. package/dist/test/inference-failure-bounds.test.js +0 -1201
  569. package/dist/test/inference-failure-bounds.test.js.map +0 -1
  570. package/dist/test/inference-failure-observability.test.d.ts +0 -2
  571. package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
  572. package/dist/test/inference-failure-observability.test.js +0 -84
  573. package/dist/test/inference-failure-observability.test.js.map +0 -1
  574. package/dist/test/journal-tool.test.d.ts +0 -2
  575. package/dist/test/journal-tool.test.d.ts.map +0 -1
  576. package/dist/test/journal-tool.test.js +0 -33
  577. package/dist/test/journal-tool.test.js.map +0 -1
  578. package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
  579. package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
  580. package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
  581. package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
  582. package/dist/test/kv-unified-wiring.test.d.ts +0 -2
  583. package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
  584. package/dist/test/kv-unified-wiring.test.js +0 -95
  585. package/dist/test/kv-unified-wiring.test.js.map +0 -1
  586. package/dist/test/late-events-after-stop.test.d.ts +0 -2
  587. package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
  588. package/dist/test/late-events-after-stop.test.js +0 -122
  589. package/dist/test/late-events-after-stop.test.js.map +0 -1
  590. package/dist/test/liveness-watchdog.test.d.ts +0 -2
  591. package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
  592. package/dist/test/liveness-watchdog.test.js +0 -94
  593. package/dist/test/liveness-watchdog.test.js.map +0 -1
  594. package/dist/test/machine-close-provenance.test.d.ts +0 -2
  595. package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
  596. package/dist/test/machine-close-provenance.test.js +0 -116
  597. package/dist/test/machine-close-provenance.test.js.map +0 -1
  598. package/dist/test/maintenance-timer.test.d.ts +0 -2
  599. package/dist/test/maintenance-timer.test.d.ts.map +0 -1
  600. package/dist/test/maintenance-timer.test.js +0 -265
  601. package/dist/test/maintenance-timer.test.js.map +0 -1
  602. package/dist/test/mcpl-access-provider.test.d.ts +0 -2
  603. package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
  604. package/dist/test/mcpl-access-provider.test.js +0 -20
  605. package/dist/test/mcpl-access-provider.test.js.map +0 -1
  606. package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
  607. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
  608. package/dist/test/mcpl-awareness-barrier.test.js +0 -769
  609. package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
  610. package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
  611. package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
  612. package/dist/test/mcpl-capability-grant.test.js +0 -111
  613. package/dist/test/mcpl-capability-grant.test.js.map +0 -1
  614. package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
  615. package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
  616. package/dist/test/mcpl-capability-scoping.test.js +0 -266
  617. package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
  618. package/dist/test/mcpl-child-env.test.d.ts +0 -2
  619. package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
  620. package/dist/test/mcpl-child-env.test.js +0 -158
  621. package/dist/test/mcpl-child-env.test.js.map +0 -1
  622. package/dist/test/mcpl-coalescing.test.d.ts +0 -2
  623. package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
  624. package/dist/test/mcpl-coalescing.test.js +0 -1125
  625. package/dist/test/mcpl-coalescing.test.js.map +0 -1
  626. package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
  627. package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
  628. package/dist/test/mcpl-config-diagnostics.test.js +0 -452
  629. package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
  630. package/dist/test/mcpl-empty-content.test.d.ts +0 -2
  631. package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
  632. package/dist/test/mcpl-empty-content.test.js +0 -368
  633. package/dist/test/mcpl-empty-content.test.js.map +0 -1
  634. package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
  635. package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
  636. package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
  637. package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
  638. package/dist/test/mcpl-list-status.test.d.ts +0 -2
  639. package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
  640. package/dist/test/mcpl-list-status.test.js +0 -82
  641. package/dist/test/mcpl-list-status.test.js.map +0 -1
  642. package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
  643. package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
  644. package/dist/test/mcpl-manifest-changed.test.js +0 -178
  645. package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
  646. package/dist/test/mcpl-push-convert.test.d.ts +0 -2
  647. package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
  648. package/dist/test/mcpl-push-convert.test.js +0 -42
  649. package/dist/test/mcpl-push-convert.test.js.map +0 -1
  650. package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
  651. package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
  652. package/dist/test/mcpl-reconnect-events.test.js +0 -144
  653. package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
  654. package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
  655. package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
  656. package/dist/test/mcpl-reconnect-reregistration.test.js +0 -236
  657. package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
  658. package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
  659. package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
  660. package/dist/test/mcpl-reference-fetcher.test.js +0 -427
  661. package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
  662. package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
  663. package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
  664. package/dist/test/mcpl-reference-fields.test.js +0 -149
  665. package/dist/test/mcpl-reference-fields.test.js.map +0 -1
  666. package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
  667. package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
  668. package/dist/test/mcpl-request-timeout.test.js +0 -138
  669. package/dist/test/mcpl-request-timeout.test.js.map +0 -1
  670. package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
  671. package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
  672. package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
  673. package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
  674. package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
  675. package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
  676. package/dist/test/mcpl-tool-class-listing.test.js +0 -147
  677. package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
  678. package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
  679. package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
  680. package/dist/test/mcpl-tool-classes.test.js +0 -80
  681. package/dist/test/mcpl-tool-classes.test.js.map +0 -1
  682. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
  683. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
  684. package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
  685. package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
  686. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
  687. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
  688. package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
  689. package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
  690. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
  691. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
  692. package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
  693. package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
  694. package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
  695. package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
  696. package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
  697. package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
  698. package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
  699. package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
  700. package/dist/test/mcpl-ws-transport.test.js +0 -258
  701. package/dist/test/mcpl-ws-transport.test.js.map +0 -1
  702. package/dist/test/module-context-integration.test.d.ts +0 -18
  703. package/dist/test/module-context-integration.test.d.ts.map +0 -1
  704. package/dist/test/module-context-integration.test.js +0 -181
  705. package/dist/test/module-context-integration.test.js.map +0 -1
  706. package/dist/test/offline-recovery-branch.test.d.ts +0 -2
  707. package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
  708. package/dist/test/offline-recovery-branch.test.js +0 -226
  709. package/dist/test/offline-recovery-branch.test.js.map +0 -1
  710. package/dist/test/operator-surgery.test.d.ts +0 -2
  711. package/dist/test/operator-surgery.test.d.ts.map +0 -1
  712. package/dist/test/operator-surgery.test.js +0 -398
  713. package/dist/test/operator-surgery.test.js.map +0 -1
  714. package/dist/test/ops-alert.test.d.ts +0 -2
  715. package/dist/test/ops-alert.test.d.ts.map +0 -1
  716. package/dist/test/ops-alert.test.js +0 -153
  717. package/dist/test/ops-alert.test.js.map +0 -1
  718. package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
  719. package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
  720. package/dist/test/overbudget-drain-breaker.test.js +0 -197
  721. package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
  722. package/dist/test/per-agent-delivery.test.d.ts +0 -2
  723. package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
  724. package/dist/test/per-agent-delivery.test.js +0 -108
  725. package/dist/test/per-agent-delivery.test.js.map +0 -1
  726. package/dist/test/physical-window-restart.test.d.ts +0 -14
  727. package/dist/test/physical-window-restart.test.d.ts.map +0 -1
  728. package/dist/test/physical-window-restart.test.js +0 -222
  729. package/dist/test/physical-window-restart.test.js.map +0 -1
  730. package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
  731. package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
  732. package/dist/test/placed-reaction-baseline.test.js +0 -312
  733. package/dist/test/placed-reaction-baseline.test.js.map +0 -1
  734. package/dist/test/present-while-acting.test.d.ts +0 -19
  735. package/dist/test/present-while-acting.test.d.ts.map +0 -1
  736. package/dist/test/present-while-acting.test.js +0 -706
  737. package/dist/test/present-while-acting.test.js.map +0 -1
  738. package/dist/test/prose-segments.test.d.ts +0 -2
  739. package/dist/test/prose-segments.test.d.ts.map +0 -1
  740. package/dist/test/prose-segments.test.js +0 -52
  741. package/dist/test/prose-segments.test.js.map +0 -1
  742. package/dist/test/prose-stream-router.test.d.ts +0 -2
  743. package/dist/test/prose-stream-router.test.d.ts.map +0 -1
  744. package/dist/test/prose-stream-router.test.js +0 -171
  745. package/dist/test/prose-stream-router.test.js.map +0 -1
  746. package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
  747. package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
  748. package/dist/test/provider-acceleration-cooldown.test.js +0 -435
  749. package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
  750. package/dist/test/provider-waits.test.d.ts +0 -2
  751. package/dist/test/provider-waits.test.d.ts.map +0 -1
  752. package/dist/test/provider-waits.test.js +0 -2196
  753. package/dist/test/provider-waits.test.js.map +0 -1
  754. package/dist/test/puppet-tool-call.test.d.ts +0 -2
  755. package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
  756. package/dist/test/puppet-tool-call.test.js +0 -224
  757. package/dist/test/puppet-tool-call.test.js.map +0 -1
  758. package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
  759. package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
  760. package/dist/test/puppet-turn-reservation.test.js +0 -139
  761. package/dist/test/puppet-turn-reservation.test.js.map +0 -1
  762. package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
  763. package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
  764. package/dist/test/reaction-baseline-platform.test.js +0 -124
  765. package/dist/test/reaction-baseline-platform.test.js.map +0 -1
  766. package/dist/test/record-journal.test.d.ts +0 -6
  767. package/dist/test/record-journal.test.d.ts.map +0 -1
  768. package/dist/test/record-journal.test.js +0 -269
  769. package/dist/test/record-journal.test.js.map +0 -1
  770. package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
  771. package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
  772. package/dist/test/refusal-reaction-baseline.test.js +0 -81
  773. package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
  774. package/dist/test/refusal-rewind.test.d.ts +0 -2
  775. package/dist/test/refusal-rewind.test.d.ts.map +0 -1
  776. package/dist/test/refusal-rewind.test.js +0 -108
  777. package/dist/test/refusal-rewind.test.js.map +0 -1
  778. package/dist/test/refusal-single-call.test.d.ts +0 -2
  779. package/dist/test/refusal-single-call.test.d.ts.map +0 -1
  780. package/dist/test/refusal-single-call.test.js +0 -177
  781. package/dist/test/refusal-single-call.test.js.map +0 -1
  782. package/dist/test/release-changelog.test.d.ts +0 -2
  783. package/dist/test/release-changelog.test.d.ts.map +0 -1
  784. package/dist/test/release-changelog.test.js +0 -159
  785. package/dist/test/release-changelog.test.js.map +0 -1
  786. package/dist/test/same-round-think-policy.test.d.ts +0 -2
  787. package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
  788. package/dist/test/same-round-think-policy.test.js +0 -853
  789. package/dist/test/same-round-think-policy.test.js.map +0 -1
  790. package/dist/test/save-recent-image.test.d.ts +0 -26
  791. package/dist/test/save-recent-image.test.d.ts.map +0 -1
  792. package/dist/test/save-recent-image.test.js +0 -974
  793. package/dist/test/save-recent-image.test.js.map +0 -1
  794. package/dist/test/shutdown-errors.test.d.ts +0 -2
  795. package/dist/test/shutdown-errors.test.d.ts.map +0 -1
  796. package/dist/test/shutdown-errors.test.js +0 -662
  797. package/dist/test/shutdown-errors.test.js.map +0 -1
  798. package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
  799. package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
  800. package/dist/test/silent-heartbeat-rows.test.js +0 -451
  801. package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
  802. package/dist/test/silent-heartbeat.test.d.ts +0 -2
  803. package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
  804. package/dist/test/silent-heartbeat.test.js +0 -165
  805. package/dist/test/silent-heartbeat.test.js.map +0 -1
  806. package/dist/test/state-scaling-e2e.test.d.ts +0 -22
  807. package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
  808. package/dist/test/state-scaling-e2e.test.js +0 -206
  809. package/dist/test/state-scaling-e2e.test.js.map +0 -1
  810. package/dist/test/state-scaling.test.d.ts +0 -12
  811. package/dist/test/state-scaling.test.d.ts.map +0 -1
  812. package/dist/test/state-scaling.test.js +0 -251
  813. package/dist/test/state-scaling.test.js.map +0 -1
  814. package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
  815. package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
  816. package/dist/test/stop-with-work-in-flight.test.js +0 -672
  817. package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
  818. package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
  819. package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
  820. package/dist/test/surgery-marks-receipt.test.js +0 -540
  821. package/dist/test/surgery-marks-receipt.test.js.map +0 -1
  822. package/dist/test/thinking-token-stamp.test.d.ts +0 -12
  823. package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
  824. package/dist/test/thinking-token-stamp.test.js +0 -129
  825. package/dist/test/thinking-token-stamp.test.js.map +0 -1
  826. package/dist/test/timezone.test.d.ts +0 -2
  827. package/dist/test/timezone.test.d.ts.map +0 -1
  828. package/dist/test/timezone.test.js +0 -18
  829. package/dist/test/timezone.test.js.map +0 -1
  830. package/dist/test/tool-batch-hook.test.d.ts +0 -8
  831. package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
  832. package/dist/test/tool-batch-hook.test.js +0 -275
  833. package/dist/test/tool-batch-hook.test.js.map +0 -1
  834. package/dist/test/tool-policy.test.d.ts +0 -2
  835. package/dist/test/tool-policy.test.d.ts.map +0 -1
  836. package/dist/test/tool-policy.test.js +0 -51
  837. package/dist/test/tool-policy.test.js.map +0 -1
  838. package/dist/test/tool-presentation.test.d.ts +0 -2
  839. package/dist/test/tool-presentation.test.d.ts.map +0 -1
  840. package/dist/test/tool-presentation.test.js +0 -268
  841. package/dist/test/tool-presentation.test.js.map +0 -1
  842. package/dist/test/tool-result-content.test.d.ts +0 -2
  843. package/dist/test/tool-result-content.test.d.ts.map +0 -1
  844. package/dist/test/tool-result-content.test.js +0 -37
  845. package/dist/test/tool-result-content.test.js.map +0 -1
  846. package/dist/test/tool-result-guard.test.d.ts +0 -2
  847. package/dist/test/tool-result-guard.test.d.ts.map +0 -1
  848. package/dist/test/tool-result-guard.test.js +0 -3607
  849. package/dist/test/tool-result-guard.test.js.map +0 -1
  850. package/dist/test/tool-result-history.test.d.ts +0 -7
  851. package/dist/test/tool-result-history.test.d.ts.map +0 -1
  852. package/dist/test/tool-result-history.test.js +0 -156
  853. package/dist/test/tool-result-history.test.js.map +0 -1
  854. package/dist/test/tool-result-spill.test.d.ts +0 -13
  855. package/dist/test/tool-result-spill.test.d.ts.map +0 -1
  856. package/dist/test/tool-result-spill.test.js +0 -586
  857. package/dist/test/tool-result-spill.test.js.map +0 -1
  858. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
  859. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
  860. package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
  861. package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
  862. package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
  863. package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
  864. package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
  865. package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
  866. package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
  867. package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
  868. package/dist/test/tools-observe-parser-conformance.test.js +0 -129
  869. package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
  870. package/dist/test/trunk-channel-routing.test.d.ts +0 -19
  871. package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
  872. package/dist/test/trunk-channel-routing.test.js +0 -329
  873. package/dist/test/trunk-channel-routing.test.js.map +0 -1
  874. package/dist/test/tune-out-e2e.test.d.ts +0 -2
  875. package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
  876. package/dist/test/tune-out-e2e.test.js +0 -142
  877. package/dist/test/tune-out-e2e.test.js.map +0 -1
  878. package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
  879. package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
  880. package/dist/test/tune-out-gate-composition.test.js +0 -221
  881. package/dist/test/tune-out-gate-composition.test.js.map +0 -1
  882. package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
  883. package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
  884. package/dist/test/tune-out-lifecycle.test.js +0 -121
  885. package/dist/test/tune-out-lifecycle.test.js.map +0 -1
  886. package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
  887. package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
  888. package/dist/test/turn-trigger-provenance.test.js +0 -137
  889. package/dist/test/turn-trigger-provenance.test.js.map +0 -1
  890. package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
  891. package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
  892. package/dist/test/unconvertible-tool-result.test.js +0 -358
  893. package/dist/test/unconvertible-tool-result.test.js.map +0 -1
  894. package/dist/test/usage-accounting.test.d.ts +0 -2
  895. package/dist/test/usage-accounting.test.d.ts.map +0 -1
  896. package/dist/test/usage-accounting.test.js +0 -13
  897. package/dist/test/usage-accounting.test.js.map +0 -1
  898. package/dist/test/usage-tracker.test.d.ts +0 -2
  899. package/dist/test/usage-tracker.test.d.ts.map +0 -1
  900. package/dist/test/usage-tracker.test.js +0 -129
  901. package/dist/test/usage-tracker.test.js.map +0 -1
  902. package/dist/test/utils-surface.test.d.ts +0 -2
  903. package/dist/test/utils-surface.test.d.ts.map +0 -1
  904. package/dist/test/utils-surface.test.js +0 -145
  905. package/dist/test/utils-surface.test.js.map +0 -1
  906. package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
  907. package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
  908. package/dist/test/workspace-branch-continuation.test.js +0 -183
  909. package/dist/test/workspace-branch-continuation.test.js.map +0 -1
  910. package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
  911. package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
  912. package/dist/test/workspace-materialize-freshness.test.js +0 -252
  913. package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
  914. package/dist/test/workspace-path-containment.test.d.ts +0 -19
  915. package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
  916. package/dist/test/workspace-path-containment.test.js +0 -91
  917. package/dist/test/workspace-path-containment.test.js.map +0 -1
  918. package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
  919. package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
  920. package/dist/test/workspace-read-file-from-disk.test.js +0 -174
  921. package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
  922. package/dist/test/workspace-read-image.test.d.ts +0 -2
  923. package/dist/test/workspace-read-image.test.d.ts.map +0 -1
  924. package/dist/test/workspace-read-image.test.js +0 -597
  925. package/dist/test/workspace-read-image.test.js.map +0 -1
  926. package/dist/test/workspace-read-text.test.d.ts +0 -2
  927. package/dist/test/workspace-read-text.test.d.ts.map +0 -1
  928. package/dist/test/workspace-read-text.test.js +0 -101
  929. package/dist/test/workspace-read-text.test.js.map +0 -1
  930. package/dist/test/workspace-restore-order.test.d.ts +0 -16
  931. package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
  932. package/dist/test/workspace-restore-order.test.js +0 -140
  933. package/dist/test/workspace-restore-order.test.js.map +0 -1
  934. package/dist/test/workspace-three-way.test.d.ts +0 -12
  935. package/dist/test/workspace-three-way.test.d.ts.map +0 -1
  936. package/dist/test/workspace-three-way.test.js +0 -3194
  937. package/dist/test/workspace-three-way.test.js.map +0 -1
  938. package/dist/test/workspace-watcher.test.d.ts +0 -2
  939. package/dist/test/workspace-watcher.test.d.ts.map +0 -1
  940. package/dist/test/workspace-watcher.test.js +0 -281
  941. package/dist/test/workspace-watcher.test.js.map +0 -1
  942. package/dist/test/xml-round-persist.test.d.ts +0 -19
  943. package/dist/test/xml-round-persist.test.d.ts.map +0 -1
  944. package/dist/test/xml-round-persist.test.js +0 -235
  945. package/dist/test/xml-round-persist.test.js.map +0 -1
  946. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -21,6 +21,7 @@ import type { StoredMessage } from '@animalabs/context-manager';
21
21
  import type { ChannelRegistry, TuneOutParams } from '../mcpl/channel-registry.js';
22
22
  import type { McplServerRegistry } from '../mcpl/server-registry.js';
23
23
  import { CapabilityGrant } from '../mcpl/capability-grant.js';
24
+ import { armAfter, armAt } from '../deadline-timer.js';
24
25
 
25
26
  /** Defaults for tune_out tool params. */
26
27
  export const TUNE_OUT_DEFAULTS = {
@@ -33,6 +34,19 @@ export const TUNE_OUT_DEFAULTS = {
33
34
  * subconscious turn, and max-wakes counts invocations, not messages. */
34
35
  const WAKE_COALESCE_MS = 2_000;
35
36
 
37
+ /** How long after an end time whose cancel threw the cancel is tried again. */
38
+ const EXPIRY_RETRY_MS = 60_000;
39
+
40
+ /** What a thrown value says, without throwing: an Error's message, or the
41
+ * value as text, which String() can't give for an object with no prototype. */
42
+ function thrownReason(error: unknown): string {
43
+ try {
44
+ return error instanceof Error ? error.message : String(error);
45
+ } catch {
46
+ return '(a value that could not be read)';
47
+ }
48
+ }
49
+
36
50
  export interface TuneOutFrameworkHooks {
37
51
  /** Deliver a message into an agent's window (per-agent seam). */
38
52
  addMessage: (
@@ -64,7 +78,11 @@ export interface TuneOutFrameworkHooks {
64
78
 
65
79
  export class TuneOutCoordinator {
66
80
  private cadenceTimers = new Map<string, ReturnType<typeof setTimeout>>();
67
- /** Duration-expiry timers (params.expiresAtMs); cleared on any cancel. */
81
+ /** Each duration's pending timer: a step toward its end time
82
+ * (params.expiresAtMs), or the retry of an end-time cancel that threw.
83
+ * stop clears it, cancel does when it finds the tune-out in the registry,
84
+ * the end time does when its cancel finds the tune-out already ended,
85
+ * and the channel's next accepted enter does in any case. */
68
86
  private expiryTimers = new Map<string, ReturnType<typeof setTimeout>>();
69
87
  /** Channels with a wake invocation pending inside the coalescing window. */
70
88
  private pendingWakes = new Map<string, { count: number; timer: ReturnType<typeof setTimeout> }>();
@@ -108,11 +126,36 @@ export class TuneOutCoordinator {
108
126
  const key = this.key(serverId, channelId);
109
127
  const existing = this.expiryTimers.get(key);
110
128
  if (existing) clearTimeout(existing);
111
- const remaining = Math.max(0, params.expiresAtMs - Date.now());
112
- this.expiryTimers.set(key, setTimeout(() => {
113
- this.expiryTimers.delete(key);
114
- this.cancel(serverId, channelId, 'duration', 'duration elapsed');
115
- }, remaining));
129
+ const hold = (timer: ReturnType<typeof setTimeout>): void => { this.expiryTimers.set(key, timer); };
130
+ const end = (): void => {
131
+ try {
132
+ // The retry is armed before the cancel, as the cadence arms its next
133
+ // period before its turn, so a cancel that throws is tried again. A
134
+ // cancel that ends the tune-out clears it with the channel's other
135
+ // timers, and so does finding the tune-out already ended.
136
+ hold(setTimeout(end, EXPIRY_RETRY_MS));
137
+ if (!this.cancel(serverId, channelId, 'duration', 'duration elapsed').ok) {
138
+ this.clearTimers(serverId, channelId);
139
+ }
140
+ } catch (err) {
141
+ this.timerFailed('expiry', serverId, channelId, err);
142
+ }
143
+ };
144
+ armAt(params.expiresAtMs, hold, end);
145
+ }
146
+
147
+ /** A timer callback's work threw. Report it on stderr and as a trace rather
148
+ * than throw it into the event loop, where an uncaught exception ends the
149
+ * host process. */
150
+ private timerFailed(timer: 'cadence' | 'wake' | 'expiry', serverId: string, channelId: string, err: unknown): void {
151
+ console.error(`[tune-out] the ${timer} timer for ${channelId} on ${serverId} failed:`, err);
152
+ this.hooks.emitTrace({
153
+ type: 'tune-out:timer-failed',
154
+ timer,
155
+ serverId,
156
+ channelId,
157
+ error: thrownReason(err),
158
+ });
116
159
  }
117
160
 
118
161
  private listActive(): Array<{ serverId: string; channelId: string; params: TuneOutParams }> {
@@ -137,24 +180,89 @@ export class TuneOutCoordinator {
137
180
  source: string,
138
181
  ): { ok: true; params: TuneOutParams } | { ok: false; error: string } {
139
182
  if (!this.hooks.subconsciousName()) {
140
- return { ok: false, error: 'tune-out requires the subconscious resident (framework config `subconscious`)' };
183
+ return {
184
+ ok: false,
185
+ error: 'Nothing was tuned out: this host has no subconscious resident to watch a channel, so tune_out '
186
+ + "isn't available here, and calling it again won't change that. If you need channels diverted, ask "
187
+ + 'whoever runs this host.',
188
+ };
141
189
  }
142
190
  if (this.hooks.isForkBound(channelId)) {
143
- return { ok: false, error: `channel ${channelId} is bound to a conversation fork; tune-out and fork routing are mutually exclusive` };
191
+ return {
192
+ ok: false,
193
+ error: `Nothing changed: a conversation is bound to ${JSON.stringify(channelId)}, so its messages go to that `
194
+ + "conversation, and tune_out won't divert a channel while one is. Calling tune_out on it again won't change "
195
+ + 'that until the conversation ends, which happens only once the channel has been quiet for a while. Tune '
196
+ + 'out a different channel, or ask whoever runs this host if this one should be diverted.',
197
+ };
198
+ }
199
+ const current = this.channelRegistry.getTuneOutState(serverId, channelId);
200
+ if (current) {
201
+ const p = current.params;
202
+ // A duration so long its end is past what a Date can hold has no time to show.
203
+ const expires = p.expiresAtMs !== undefined ? new Date(p.expiresAtMs) : undefined;
204
+ const until = expires && Number.isFinite(expires.getTime())
205
+ ? `, until ${expires.toISOString().replace(/\.\d+Z$/, 'Z')}`
206
+ : '';
207
+ return {
208
+ ok: false,
209
+ error: `Nothing changed: ${JSON.stringify(channelId)} is already tuned out, with cadenceSeconds `
210
+ + `${p.cadenceSeconds}, backlogCap ${p.backlogCap} and maxWakes ${p.maxWakes}${until}. To change those, `
211
+ + 'cancel it first with tune_out mode "cancel", which delivers its backlog to you now, then call tune_out '
212
+ + 'again with the new settings.',
213
+ };
144
214
  }
145
- if (this.channelRegistry.getTuneOutState(serverId, channelId)) {
146
- return { ok: false, error: `channel ${channelId} is already tuned out (cancel first to change params)` };
215
+ // A tool's input reaches here as the model wrote it, and the store can't
216
+ // keep a NaN or an Infinity: its append would throw after the registry
217
+ // had marked the channel tuned out. So each option is read as a number
218
+ // before anything changes, a numeric string included, as the sleep tool
219
+ // reads its seconds; null counts as left out. A value that gives no
220
+ // finite number is refused.
221
+ const leftOut = {
222
+ durationSeconds: 'to stay tuned out until you cancel',
223
+ cadenceSeconds: `for the default, ${TUNE_OUT_DEFAULTS.cadenceSeconds}`,
224
+ backlogCap: `for the default, ${TUNE_OUT_DEFAULTS.backlogCap}`,
225
+ maxWakes: `for the default, ${TUNE_OUT_DEFAULTS.maxWakes}`,
226
+ } as const;
227
+ const given: Partial<Record<keyof typeof leftOut, number>> = {};
228
+ for (const name of Object.keys(leftOut) as Array<keyof typeof leftOut>) {
229
+ const value: unknown = opts[name];
230
+ if (value == null) continue;
231
+ const n = Number(value);
232
+ if (!Number.isFinite(n)) {
233
+ const got = typeof value === 'number'
234
+ ? String(value)
235
+ : `${typeof value === 'string' ? 'the string' : 'the value'} ${JSON.stringify(value)}`;
236
+ return {
237
+ ok: false,
238
+ error: `Nothing was tuned out: ${name} must be a finite number${name.endsWith('Seconds') ? ' of seconds' : ''}, `
239
+ + `and it was ${got}. Leave it out ${leftOut[name]}.`,
240
+ };
241
+ }
242
+ given[name] = n;
243
+ }
244
+ const expiresAtMs = given.durationSeconds === undefined
245
+ ? undefined
246
+ : Date.now() + Math.max(60, given.durationSeconds) * 1000;
247
+ if (expiresAtMs !== undefined && !Number.isFinite(expiresAtMs)) {
248
+ return {
249
+ ok: false,
250
+ error: `Nothing was tuned out: durationSeconds ${given.durationSeconds} is longer than an end time can be kept. `
251
+ + `Leave it out ${leftOut.durationSeconds}.`,
252
+ };
147
253
  }
148
254
  const params: TuneOutParams = {
149
255
  epochId: randomUUID(),
150
- cadenceSeconds: Math.max(30, opts.cadenceSeconds ?? TUNE_OUT_DEFAULTS.cadenceSeconds),
151
- backlogCap: Math.max(0, opts.backlogCap ?? TUNE_OUT_DEFAULTS.backlogCap),
152
- maxWakes: Math.max(1, opts.maxWakes ?? TUNE_OUT_DEFAULTS.maxWakes),
256
+ cadenceSeconds: Math.max(30, given.cadenceSeconds ?? TUNE_OUT_DEFAULTS.cadenceSeconds),
257
+ backlogCap: Math.max(0, given.backlogCap ?? TUNE_OUT_DEFAULTS.backlogCap),
258
+ maxWakes: Math.max(1, given.maxWakes ?? TUNE_OUT_DEFAULTS.maxWakes),
153
259
  startedAtSequence: this.hooks.currentSequence(),
154
- ...(opts.durationSeconds !== undefined
155
- ? { expiresAtMs: Date.now() + Math.max(60, opts.durationSeconds) * 1000 }
156
- : {}),
260
+ ...(expiresAtMs !== undefined ? { expiresAtMs } : {}),
157
261
  };
262
+ // A tune-out can end in the registry without cancel (a send into the
263
+ // channel or a close sets its state there), leaving its timers armed:
264
+ // clear them, so none of them acts on this one.
265
+ this.clearTimers(serverId, channelId);
158
266
  this.channelRegistry.enterTuneOut(serverId, channelId, params, source);
159
267
  this.armExpiry(serverId, channelId, params);
160
268
 
@@ -188,19 +296,10 @@ export class TuneOutCoordinator {
188
296
  ): { ok: true } | { ok: false; error: string } {
189
297
  const ended = this.channelRegistry.cancelTuneOut(serverId, channelId, 'open', source);
190
298
  if (!ended) {
191
- return { ok: false, error: `channel ${channelId} is not tuned out` };
192
- }
193
- this.stopCadence(serverId, channelId);
194
- const expiry = this.expiryTimers.get(this.key(serverId, channelId));
195
- if (expiry) {
196
- clearTimeout(expiry);
197
- this.expiryTimers.delete(this.key(serverId, channelId));
198
- }
199
- const pending = this.pendingWakes.get(this.key(serverId, channelId));
200
- if (pending) {
201
- clearTimeout(pending.timer);
202
- this.pendingWakes.delete(this.key(serverId, channelId));
299
+ // Its reader is the resident's tune_out: cancel_tuneout finds the channel first.
300
+ return { ok: false, error: this.notTunedOut(channelId, 'you') };
203
301
  }
302
+ this.clearTimers(serverId, channelId);
204
303
  this.divertedSinceInvocation.delete(this.key(serverId, channelId));
205
304
 
206
305
  // Backlog: every message stamped with this epoch, oldest first.
@@ -326,11 +425,12 @@ export class TuneOutCoordinator {
326
425
  intent: 'suppressed-tuned-out',
327
426
  });
328
427
  } catch (err) {
428
+ console.error(`[tune-out] acknowledging ${messageId} in ${channelId} on ${serverId} failed:`, err);
329
429
  this.hooks.emitTrace({
330
430
  type: 'tune-out:ack-failed',
331
431
  serverId,
332
432
  channelId,
333
- error: (err as Error).message,
433
+ error: thrownReason(err),
334
434
  });
335
435
  }
336
436
  }
@@ -342,17 +442,37 @@ export class TuneOutCoordinator {
342
442
  private startCadence(serverId: string, channelId: string, cadenceSeconds: number): void {
343
443
  this.stopCadence(serverId, channelId);
344
444
  const key = this.key(serverId, channelId);
445
+ const hold = (timer: ReturnType<typeof setTimeout>): void => { this.cadenceTimers.set(key, timer); };
345
446
  const tick = () => {
346
- const state = this.channelRegistry.getTuneOutState(serverId, channelId);
347
- if (!state) return; // cancelled meanwhile
348
- const diverted = this.divertedSinceInvocation.get(key) ?? 0;
349
- // An empty period needs no turn at all — skip silently.
350
- if (diverted > 0) {
351
- this.invokeSubconscious(serverId, channelId, 'cadence', diverted);
447
+ try {
448
+ const state = this.channelRegistry.getTuneOutState(serverId, channelId);
449
+ if (!state) return; // cancelled meanwhile
450
+ // The next period is armed before this one's turn, so a turn that
451
+ // fails can't end the cadence.
452
+ armAfter(cadenceSeconds * 1000, hold, tick);
453
+ const diverted = this.divertedSinceInvocation.get(key) ?? 0;
454
+ // An empty period needs no turn at all — skip silently.
455
+ if (diverted > 0) {
456
+ this.invokeSubconscious(serverId, channelId, 'cadence', diverted);
457
+ }
458
+ } catch (err) {
459
+ this.timerFailed('cadence', serverId, channelId, err);
352
460
  }
353
- this.cadenceTimers.set(key, setTimeout(tick, cadenceSeconds * 1000));
354
461
  };
355
- this.cadenceTimers.set(key, setTimeout(tick, cadenceSeconds * 1000));
462
+ armAfter(cadenceSeconds * 1000, hold, tick);
463
+ }
464
+
465
+ /** Clear a channel's tune-out timers: its cadence, its end time and a wake
466
+ * still coalescing. */
467
+ private clearTimers(serverId: string, channelId: string): void {
468
+ const key = this.key(serverId, channelId);
469
+ this.stopCadence(serverId, channelId);
470
+ const expiry = this.expiryTimers.get(key);
471
+ if (expiry) clearTimeout(expiry);
472
+ this.expiryTimers.delete(key);
473
+ const pending = this.pendingWakes.get(key);
474
+ if (pending) clearTimeout(pending.timer);
475
+ this.pendingWakes.delete(key);
356
476
  }
357
477
 
358
478
  private stopCadence(serverId: string, channelId: string): void {
@@ -370,21 +490,25 @@ export class TuneOutCoordinator {
370
490
  return;
371
491
  }
372
492
  const timer = setTimeout(() => {
373
- const entry = this.pendingWakes.get(key);
374
- this.pendingWakes.delete(key);
375
- // Count ONE durable wake per coalesced invocation.
376
- const counted = this.channelRegistry.recordTuneOutWake(serverId, channelId);
377
- if (!counted) return; // cancelled inside the window
378
- if (counted.wakeCount > counted.params.maxWakes) {
379
- this.cancel(
380
- serverId,
381
- channelId,
382
- 'tune-out-max-wakes',
383
- `wake budget exhausted (${counted.params.maxWakes})`,
384
- );
385
- return;
493
+ try {
494
+ const entry = this.pendingWakes.get(key);
495
+ this.pendingWakes.delete(key);
496
+ // Count ONE durable wake per coalesced invocation.
497
+ const counted = this.channelRegistry.recordTuneOutWake(serverId, channelId);
498
+ if (!counted) return; // cancelled inside the window
499
+ if (counted.wakeCount > counted.params.maxWakes) {
500
+ this.cancel(
501
+ serverId,
502
+ channelId,
503
+ 'tune-out-max-wakes',
504
+ `wake budget exhausted (${counted.params.maxWakes})`,
505
+ );
506
+ return;
507
+ }
508
+ this.invokeSubconscious(serverId, channelId, 'wake', entry?.count ?? 1);
509
+ } catch (err) {
510
+ this.timerFailed('wake', serverId, channelId, err);
386
511
  }
387
- this.invokeSubconscious(serverId, channelId, 'wake', entry?.count ?? 1);
388
512
  }, WAKE_COALESCE_MS);
389
513
  this.pendingWakes.set(key, { count: 1, timer });
390
514
  }
@@ -403,7 +527,6 @@ export class TuneOutCoordinator {
403
527
  const subName = this.hooks.subconsciousName();
404
528
  if (!subName) return;
405
529
  const key = this.key(serverId, channelId);
406
- this.divertedSinceInvocation.set(key, 0);
407
530
 
408
531
  const notice = trigger === 'wake'
409
532
  ? `[Tune-out wake: ${channelId} — ${count} addressed message${count === 1 ? '' : 's'}]`
@@ -415,6 +538,9 @@ export class TuneOutCoordinator {
415
538
  subName,
416
539
  );
417
540
  this.hooks.requestInference(subName, `tune-out ${trigger}: ${channelId}`, 'tune-out');
541
+ // Counted from here only once the turn has been asked for, so a turn that
542
+ // throws leaves its messages for the next period's turn.
543
+ this.divertedSinceInvocation.set(key, 0);
418
544
  }
419
545
 
420
546
  // ==========================================================================
@@ -432,6 +558,8 @@ export class TuneOutCoordinator {
432
558
  * subconscious's compiles (antra: deliver changes, never let them wash
433
559
  * away — it has no long-term memory, so they must not live in window
434
560
  * content). Bytes change only when a disposition changes: KV-friendly.
561
+ * A failed read of the stored map throws, so the compile stops rather than
562
+ * run without them.
435
563
  */
436
564
  getDispositionsInjection(): {
437
565
  namespace: string;
@@ -453,12 +581,17 @@ export class TuneOutCoordinator {
453
581
 
454
582
  private readDispositions(): Record<string, string> {
455
583
  if (this.dispositionsCache) return this.dispositionsCache;
584
+ let raw: unknown;
456
585
  try {
457
- const raw = this.channelRegistry.readCoordinatorState(this.dispositionsStateId);
458
- this.dispositionsCache = (raw && typeof raw === 'object') ? raw as Record<string, string> : {};
459
- } catch {
460
- this.dispositionsCache = {};
586
+ raw = this.channelRegistry.readCoordinatorState(this.dispositionsStateId);
587
+ } catch (error) {
588
+ // A failed read is not an empty map, and nothing is cached, so the next
589
+ // read asks the store again. Taken as empty, it would compile the
590
+ // subconscious without its dispositions until a restart, and the next
591
+ // noteDisposition would write that empty map over the stored one.
592
+ throw new Error(`the stored dispositions (${this.dispositionsStateId}) could not be read: ${thrownReason(error)}`, { cause: error });
461
593
  }
594
+ this.dispositionsCache = (raw && typeof raw === 'object') ? raw as Record<string, string> : {};
462
595
  return this.dispositionsCache;
463
596
  }
464
597
 
@@ -469,8 +602,14 @@ export class TuneOutCoordinator {
469
602
  } else {
470
603
  dispositions[key] = text;
471
604
  }
605
+ // Stored before it's cached: a write that fails leaves the cache and the
606
+ // store as they were, so the note is in effect nowhere.
607
+ try {
608
+ this.channelRegistry.writeCoordinatorState(this.dispositionsStateId, dispositions);
609
+ } catch (error) {
610
+ throw new Error(`the dispositions (${this.dispositionsStateId}) could not be stored: ${thrownReason(error)}`, { cause: error });
611
+ }
472
612
  this.dispositionsCache = dispositions;
473
- this.channelRegistry.writeCoordinatorState(this.dispositionsStateId, dispositions);
474
613
  }
475
614
 
476
615
  // ==========================================================================
@@ -485,7 +624,14 @@ export class TuneOutCoordinator {
485
624
  case 'deliver_summary': {
486
625
  const text = String(input.text ?? '').trim();
487
626
  const channelId = String(input.channelId ?? '');
488
- if (!text) return { success: false, error: 'empty summary', isError: false };
627
+ if (!text) {
628
+ return {
629
+ success: false,
630
+ error: 'Nothing was delivered: deliver_summary needs the summary in "text". If there\'s nothing to '
631
+ + "report, don't call it: staying silent is allowed.",
632
+ isError: true,
633
+ };
634
+ }
489
635
  const subName = this.hooks.subconsciousName();
490
636
  if (!subName) return { success: false, error: 'subconscious not configured', isError: true };
491
637
  // Verbatim, under its own participant name, into the resident's window.
@@ -498,30 +644,58 @@ export class TuneOutCoordinator {
498
644
  case 'cancel_tuneout': {
499
645
  const channelId = String(input.channelId ?? '');
500
646
  const located = this.findByChannel(channelId);
501
- if (!located) return { success: false, error: `channel ${channelId} is not tuned out`, isError: false };
647
+ if (!located) return { success: false, error: this.notTunedOut(channelId, 'the resident'), isError: true };
502
648
  const note = typeof input.text === 'string' && input.text.trim() ? input.text.trim() : undefined;
503
649
  const result = this.cancel(located.serverId, channelId, 'subconscious', 'subconscious judgment', note);
504
650
  return result.ok
505
651
  ? { success: true, data: { cancelled: true } }
506
- : { success: false, error: result.error, isError: false };
652
+ : { success: false, error: result.error, isError: true };
507
653
  }
508
654
  case 'note_disposition': {
509
655
  const key = String(input.key ?? '').trim();
510
- if (!key) return { success: false, error: 'key required', isError: false };
511
- this.noteDisposition(key, String(input.text ?? ''));
656
+ if (!key) {
657
+ return {
658
+ success: false,
659
+ error: 'Nothing was recorded: note_disposition needs a "key", a short stable name for the note, such as '
660
+ + '"busy-channels". To delete a note, call it with that note\'s key and an empty "text".',
661
+ isError: true,
662
+ };
663
+ }
664
+ try {
665
+ this.noteDisposition(key, String(input.text ?? ''));
666
+ } catch (error) {
667
+ // For the subconscious first: what became of its note, and that a
668
+ // later call may land. The store's own reason follows, for an operator.
669
+ // The note may set, change or remove a disposition, so what stays in
670
+ // effect is whatever was there before, if anything.
671
+ return {
672
+ success: false,
673
+ isError: true,
674
+ error: `The change to the disposition ${JSON.stringify(key)} wasn't recorded, so the dispositions stay as they were. ` +
675
+ `Noting it again may work once the store can be read and written. The store's error: ${thrownReason(error)}`,
676
+ };
677
+ }
512
678
  return { success: true, data: { noted: key } };
513
679
  }
514
680
  case 'speak_in_channel': {
515
681
  if (!this.hooks.allowChannelSpeech()) {
682
+ // The setting's name is the host's, for its log; the subconscious
683
+ // reads what it can do instead.
684
+ console.warn('[tune-out] speak_in_channel refused: FrameworkConfig.subconscious.allowChannelSpeech is off');
516
685
  return {
517
686
  success: false,
518
- isError: false,
519
- error: 'channel speech is disabled for the subconscious (recipe: subconscious.allowChannelSpeech)',
687
+ isError: true,
688
+ error: "Nothing was posted: speak_in_channel is turned off for you in the resident's configuration, and "
689
+ + "calling it again won't change that. The resident can speak there: tell it what's needed with "
690
+ + 'deliver_summary, or, if the channel is tuned out and needs the resident now, end the tune-out with '
691
+ + 'cancel_tuneout.',
520
692
  };
521
693
  }
522
694
  const channelId = String(input.channelId ?? '');
523
695
  const text = String(input.text ?? '').trim();
524
- if (!text) return { success: false, error: 'empty message', isError: false };
696
+ if (!text) {
697
+ return { success: false, error: 'Nothing was posted: speak_in_channel needs the message in "text".', isError: true };
698
+ }
525
699
  return this.channelRegistry.publishForAgent(channelId, text, this.hooks.subconsciousName() ?? 'Subconscious');
526
700
  }
527
701
  default:
@@ -529,6 +703,26 @@ export class TuneOutCoordinator {
529
703
  }
530
704
  }
531
705
 
706
+ /**
707
+ * A cancel of a channel that isn't tuned out: which channels are, so the
708
+ * next call can name one, and how a tune-out ends without one. `backlogTo`
709
+ * names the resident as the message's reader knows it: "you" to the
710
+ * resident, "the resident" to the subconscious. It speaks of connected
711
+ * channels because listActive reads the registered ones: removing a server
712
+ * drops its channels and keeps their tune-outs, so a tune-out there is in
713
+ * neither this list nor findByChannel's lookup, and the text claims nothing
714
+ * about it.
715
+ */
716
+ private notTunedOut(channelId: string, backlogTo: 'you' | 'the resident'): string {
717
+ const active = this.listActive().map((e) => JSON.stringify(e.channelId));
718
+ const opening = active.length === 0
719
+ ? 'no connected channel is tuned out now.'
720
+ : `no connected channel ${JSON.stringify(channelId)} is tuned out. Connected channels tuned out now: `
721
+ + `${active.join(', ')}.`;
722
+ return `Nothing was cancelled: ${opening} A tune-out also ends by itself when its duration runs out, or at the `
723
+ + `first wake past its wake budget, and its backlog goes to ${backlogTo} then.`;
724
+ }
725
+
532
726
  private findByChannel(channelId: string): { serverId: string } | null {
533
727
  for (const entry of this.listActive()) {
534
728
  if (entry.channelId === channelId) return { serverId: entry.serverId };
@@ -53,11 +53,14 @@ export interface AgentConfig {
53
53
  /**
54
54
  * The model's PHYSICAL context window (provider hard cap, e.g. 200000).
55
55
  * When set, the framework projects each continuation round's real size
56
- * (cache-inclusive input of the prior round + the blocks about to be
57
- * appended + reserve for response) and restarts the stream through a fresh
58
- * compile instead of dispatching a request the provider will 400
59
- * (issue #92: a legal compile can walk past the physical window mid-turn).
60
- * Unset → no projection; only the maxStreamTokens restart applies.
56
+ * (cache-inclusive input of the latest call that reported its prompt +
57
+ * that call's output + what the stream has grown by since, if later calls
58
+ * reported none + the blocks about to be appended + reserve for response)
59
+ * and restarts the stream through a fresh compile instead of dispatching a
60
+ * request the provider will 400 (issue #92: a legal compile can walk past
61
+ * the physical window mid-turn). The projection runs once a call on the
62
+ * stream has reported its prompt. Unset → no projection; only the
63
+ * maxStreamTokens restart applies.
61
64
  */
62
65
  physicalWindowTokens?: number;
63
66
 
@@ -90,11 +93,16 @@ export interface AgentConfig {
90
93
  promptCaching?: boolean;
91
94
 
92
95
  /**
93
- * Prefill-formatter support: a synthetic user message appended after the
94
- * conversation (e.g. chapterx's `<cmd>cat untitled.txt</cmd>` CLI-sim
95
- * scaffold). Forwarded verbatim to membrane's prefill formatters; ignored
96
- * by native formatting. Part of reproducing a prefill-era bot's exact
97
- * prompting structure when migrating it into a resident.
96
+ * A synthetic user message for a request whose formatted conversation
97
+ * would otherwise begin with the assistant (e.g. chapterx's
98
+ * `<cmd>cat untitled.txt</cmd>` CLI-sim scaffold). A non-empty value is
99
+ * forwarded verbatim to membrane, on framework turns and the direct API
100
+ * alike. Membrane's anthropic-xml formatter makes it the first message,
101
+ * ahead of the assistant turn that carries the conversation. Its native
102
+ * formatter uses it as the text of a leading user turn that its tool-pair
103
+ * normalizer adds, in place of `[continuing]`. Part of reproducing a
104
+ * prefill-era bot's exact prompting structure when migrating it into a
105
+ * resident.
98
106
  */
99
107
  prefillUserMessage?: string;
100
108
 
@@ -223,7 +231,20 @@ export interface AgentRuntimeSettingsPatch {
223
231
  }
224
232
 
225
233
  export interface AgentRuntimeSettingsSnapshot {
234
+ /**
235
+ * The budget the agent is set to: while a lower one converges, its target,
236
+ * and while a persisted one the agent couldn't apply is kept, that one.
237
+ */
226
238
  contextBudgetTokens: number;
239
+ /**
240
+ * The budget compiles plan at now: the live budget, or the default when the
241
+ * recipe sets none (the context manager's own default is the same). It
242
+ * equals `contextBudgetTokens` except while a lower budget converges, when
243
+ * it is still the budget the descent started from (context-manager #162),
244
+ * and while a budget the agent couldn't apply is kept, when it is the
245
+ * budget the agent runs at instead.
246
+ */
247
+ effectiveContextBudgetTokens: number;
227
248
  tailTokens?: number;
228
249
  transitionPaceTokens?: number;
229
250
  sameRoundThinkTextPolicy: SameRoundThinkTextPolicy;
@@ -233,7 +254,27 @@ export interface AgentRuntimeSettingsSnapshot {
233
254
  }
234
255
 
235
256
  /** Persisted values differ from recipe defaults; omitted keys inherit config. */
236
- export type AgentRuntimeSettingsOverrides = AgentRuntimeSettingsPatch;
257
+ export type AgentRuntimeSettingsOverrides = AgentRuntimeSettingsPatch & {
258
+ /**
259
+ * The record's own `contextBudgetTokens`, written when a compile at the
260
+ * agent's live budget fits at it, with nothing about the budget changed
261
+ * while it ran (a paced descent's settle included): the store fit that
262
+ * budget. A compile the context manager refuses at it as over budget
263
+ * withdraws it, unless a compile at it that started later has already
264
+ * ended.
265
+ * When it equals `contextBudgetTokens`, a restore applies that budget at
266
+ * once, rather than pacing a descent again from the recipe's budget
267
+ * (context-manager #162), if a preview at boot says it still fits; if not,
268
+ * a budget below the recipe's restores paced, and if a compile at one that
269
+ * the boot applied at once is refused, the agent restores it paced then.
270
+ * Since the store fit it when the field was written, the planner can fold
271
+ * to it at once even if its carried frontier was lost. Any other value is
272
+ * stale (the budget changed since, or an earlier release carried the field
273
+ * forward), and a budget below the recipe's restores paced, as it does
274
+ * without the field. Never part of a patch.
275
+ */
276
+ contextBudgetReachedTokens?: number;
277
+ };
237
278
 
238
279
  /**
239
280
  * Result of running inference.
@@ -271,13 +312,18 @@ export interface InferenceOptions {
271
312
 
272
313
  /**
273
314
  * Internal state of an agent.
315
+ *
316
+ * `supportsInjectedMessages` is what the stream declared with the round's
317
+ * tool calls (membrane's `ToolContext.supportsInjectedMessages`): whether it
318
+ * can carry messages injected with that round's results. It's absent when
319
+ * the stream doesn't say, as on membrane 0.5.87 and earlier.
274
320
  */
275
321
  export type AgentState =
276
322
  | { status: 'idle' }
277
323
  | { status: 'inferring'; promise: Promise<InferenceResult>; abortController: AbortController }
278
324
  | { status: 'streaming'; stream: YieldingStream }
279
- | { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream }
280
- | { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream };
325
+ | { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean }
326
+ | { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean };
281
327
 
282
328
  /**
283
329
  * A tool call that's in progress.
@@ -225,6 +225,19 @@ export interface ToolCall {
225
225
  input: unknown;
226
226
  /** The agent that made this tool call. Set by the framework dispatch layer. */
227
227
  callerAgentName?: string;
228
+ /**
229
+ * The turn the call was made in, the same id as that turn's
230
+ * `SpeechContext.turnId`. Set by the framework dispatch layer, beside
231
+ * `callerAgentName`: a model's call carries the turn whose stream made it, a
232
+ * foreground script's inner call the turn of the code_execution call whose
233
+ * script is running when the call arrives, and a utility run its `utils`
234
+ * call's. A background script runs apart from any turn, so its calls carry
235
+ * none. Ids increase, so a later turn's is larger, and they're unique only
236
+ * within one run of the process. A call made with `executeToolCall` or a
237
+ * module's `callTool` skips that layer and carries whatever turn its caller
238
+ * put on the call, usually none.
239
+ */
240
+ callerTurnId?: number;
228
241
  }
229
242
 
230
243
  // ============================================================================
@@ -247,6 +260,8 @@ export interface McplPushEvent {
247
260
  inferenceId: string;
248
261
  triggerInference?: boolean;
249
262
  targetAgents?: string[];
263
+ /** Host acceptance time (epoch ms), stamped where the push is admitted. */
264
+ acceptedAt?: number;
250
265
  }
251
266
 
252
267
  /**
@@ -265,4 +280,6 @@ export interface McplChannelIncomingEvent {
265
280
  metadata?: Record<string, unknown>;
266
281
  triggerInference?: boolean;
267
282
  targetAgents?: string[];
283
+ /** Host acceptance time (epoch ms), stamped where the message is admitted. */
284
+ acceptedAt?: number;
268
285
  }