@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
@@ -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 };
@@ -93,11 +93,16 @@ export interface AgentConfig {
93
93
  promptCaching?: boolean;
94
94
 
95
95
  /**
96
- * Prefill-formatter support: a synthetic user message appended after the
97
- * conversation (e.g. chapterx's `<cmd>cat untitled.txt</cmd>` CLI-sim
98
- * scaffold). Forwarded verbatim to membrane's prefill formatters; ignored
99
- * by native formatting. Part of reproducing a prefill-era bot's exact
100
- * 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.
101
106
  */
102
107
  prefillUserMessage?: string;
103
108
 
@@ -307,13 +312,18 @@ export interface InferenceOptions {
307
312
 
308
313
  /**
309
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.
310
320
  */
311
321
  export type AgentState =
312
322
  | { status: 'idle' }
313
323
  | { status: 'inferring'; promise: Promise<InferenceResult>; abortController: AbortController }
314
324
  | { status: 'streaming'; stream: YieldingStream }
315
- | { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream }
316
- | { 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 };
317
327
 
318
328
  /**
319
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
  }
@@ -41,7 +41,9 @@ export interface ProcessLoggingConfig {
41
41
  * the agent already has broader host access through its tools).
42
42
  */
43
43
  export interface CodeExecutionConfig {
44
- /** Master switch — the tool is only synthesized when true. */
44
+ /** Master switch — only `true` synthesizes the tool. `create()` refuses a
45
+ * value that isn't a boolean, a quoted "false" included; `null` or leaving
46
+ * it out counts as off. */
45
47
  enabled: boolean;
46
48
  /** Python interpreter to spawn (default: 'python3' from PATH). */
47
49
  pythonPath?: string;
@@ -210,7 +212,9 @@ export interface FrameworkConfig {
210
212
 
211
213
  /**
212
214
  * Client-side programmatic tool calling (`code_execution` tool). Omitted or
213
- * `enabled: false` → tool absent, no python is ever spawned.
215
+ * `enabled: false` → tool absent, no python is ever spawned. At runtime,
216
+ * untyped configs may also use `null` or `false` to omit this setting.
217
+ * Other values that aren't objects are refused at `create()`.
214
218
  */
215
219
  codeExecution?: CodeExecutionConfig;
216
220
 
@@ -411,20 +415,32 @@ export interface InferenceLogEntry {
411
415
  requestId: string;
412
416
  /** Whether inference succeeded */
413
417
  success: boolean;
414
- /** Error message if failed */
418
+ /** Why it didn't succeed: the failure's message, or what stopped it */
415
419
  error?: string;
416
- /** Request data or blob ID if large */
420
+ /** Request data or blob ID if large. A stream the framework ended at a
421
+ * tool boundary (stopReason 'turn_ended', 'context_budget' or
422
+ * 'physical_window') records a note in place of the body. */
417
423
  request: unknown | { blobId: string };
418
424
  /** Response data or blob ID if large (only if successful) */
419
425
  response?: unknown | { blobId: string };
420
426
  durationMs: number;
427
+ /** The stream's usage: its final response's, or, for a stream that ended
428
+ * without one, the provider rounds it finished before it ended. Exactly
429
+ * one entry of a stream carries it, the one its end wrote, a stop's
430
+ * included; a stream whose end writes none (a superseded stream, a
431
+ * disposed agent's stream) gets a failure entry that carries it, when it
432
+ * had finished a round. One that hadn't has nothing to carry and gets no
433
+ * entry. */
421
434
  tokenUsage?: {
422
435
  input: number;
423
436
  output: number;
424
437
  cacheCreation?: number;
425
438
  cacheRead?: number;
426
439
  };
427
- /** Stop reason from the model */
440
+ /** Stop reason from the model, or why the framework ended the stream at a
441
+ * tool boundary: 'turn_ended' (a tool result with endTurn), or
442
+ * 'context_budget' / 'physical_window' (a context-budget or
443
+ * physical-window restart). */
428
444
  stopReason?: string;
429
445
  }
430
446
 
@@ -17,7 +17,7 @@ export interface InferenceLogQuery {
17
17
  offset?: number;
18
18
  /** Search pattern for content (regex) */
19
19
  pattern?: string;
20
- /** Only show failures */
20
+ /** Only show inferences that didn't succeed: failed or stopped */
21
21
  errorsOnly?: boolean;
22
22
  }
23
23