@animalabs/agent-framework 0.22.2 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/README.md +108 -4
  2. package/dist/src/agent.d.ts +108 -17
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +207 -67
  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/index.d.ts +1 -1
  22. package/dist/src/code-execution/index.d.ts.map +1 -1
  23. package/dist/src/code-execution/index.js.map +1 -1
  24. package/dist/src/code-execution/py-runner.d.ts +50 -7
  25. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  26. package/dist/src/code-execution/py-runner.js +258 -90
  27. package/dist/src/code-execution/py-runner.js.map +1 -1
  28. package/dist/src/code-execution/runtime-py.d.ts +3 -2
  29. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  30. package/dist/src/code-execution/runtime-py.js +94 -8
  31. package/dist/src/code-execution/runtime-py.js.map +1 -1
  32. package/dist/src/code-execution/tool-definition.d.ts +17 -1
  33. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  34. package/dist/src/code-execution/tool-definition.js +72 -6
  35. package/dist/src/code-execution/tool-definition.js.map +1 -1
  36. package/dist/src/config-checks.d.ts +28 -0
  37. package/dist/src/config-checks.d.ts.map +1 -0
  38. package/dist/src/config-checks.js +56 -0
  39. package/dist/src/config-checks.js.map +1 -0
  40. package/dist/src/deadline-timer.d.ts +21 -0
  41. package/dist/src/deadline-timer.d.ts.map +1 -0
  42. package/dist/src/deadline-timer.js +43 -0
  43. package/dist/src/deadline-timer.js.map +1 -0
  44. package/dist/src/error-message.d.ts +30 -0
  45. package/dist/src/error-message.d.ts.map +1 -0
  46. package/dist/src/error-message.js +50 -0
  47. package/dist/src/error-message.js.map +1 -0
  48. package/dist/src/framework.d.ts +1529 -165
  49. package/dist/src/framework.d.ts.map +1 -1
  50. package/dist/src/framework.js +8264 -1939
  51. package/dist/src/framework.js.map +1 -1
  52. package/dist/src/gate/event-gate.d.ts +8 -0
  53. package/dist/src/gate/event-gate.d.ts.map +1 -1
  54. package/dist/src/gate/event-gate.js +36 -5
  55. package/dist/src/gate/event-gate.js.map +1 -1
  56. package/dist/src/held-writes.d.ts +16 -0
  57. package/dist/src/held-writes.d.ts.map +1 -0
  58. package/dist/src/held-writes.js +56 -0
  59. package/dist/src/held-writes.js.map +1 -0
  60. package/dist/src/index.d.ts +10 -4
  61. package/dist/src/index.d.ts.map +1 -1
  62. package/dist/src/index.js +11 -5
  63. package/dist/src/index.js.map +1 -1
  64. package/dist/src/mcpl/capability-grant.d.ts +4 -0
  65. package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
  66. package/dist/src/mcpl/capability-grant.js +1 -1
  67. package/dist/src/mcpl/capability-grant.js.map +1 -1
  68. package/dist/src/mcpl/channel-registry.d.ts +233 -18
  69. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  70. package/dist/src/mcpl/channel-registry.js +975 -386
  71. package/dist/src/mcpl/channel-registry.js.map +1 -1
  72. package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
  73. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  74. package/dist/src/mcpl/checkpoint-manager.js +91 -30
  75. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  76. package/dist/src/mcpl/conversation-router.d.ts +19 -3
  77. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  78. package/dist/src/mcpl/conversation-router.js +23 -8
  79. package/dist/src/mcpl/conversation-router.js.map +1 -1
  80. package/dist/src/mcpl/convert-block.d.ts +20 -0
  81. package/dist/src/mcpl/convert-block.d.ts.map +1 -0
  82. package/dist/src/mcpl/convert-block.js +88 -0
  83. package/dist/src/mcpl/convert-block.js.map +1 -0
  84. package/dist/src/mcpl/errors.d.ts +13 -0
  85. package/dist/src/mcpl/errors.d.ts.map +1 -1
  86. package/dist/src/mcpl/errors.js +28 -0
  87. package/dist/src/mcpl/errors.js.map +1 -1
  88. package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
  89. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  90. package/dist/src/mcpl/hook-orchestrator.js +83 -72
  91. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  92. package/dist/src/mcpl/inbound-source.d.ts +114 -0
  93. package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
  94. package/dist/src/mcpl/inbound-source.js +83 -0
  95. package/dist/src/mcpl/inbound-source.js.map +1 -0
  96. package/dist/src/mcpl/index.d.ts +7 -1
  97. package/dist/src/mcpl/index.d.ts.map +1 -1
  98. package/dist/src/mcpl/index.js +5 -1
  99. package/dist/src/mcpl/index.js.map +1 -1
  100. package/dist/src/mcpl/inference-router.d.ts +19 -13
  101. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  102. package/dist/src/mcpl/inference-router.js +155 -87
  103. package/dist/src/mcpl/inference-router.js.map +1 -1
  104. package/dist/src/mcpl/log-value.d.ts +7 -0
  105. package/dist/src/mcpl/log-value.d.ts.map +1 -1
  106. package/dist/src/mcpl/log-value.js +9 -0
  107. package/dist/src/mcpl/log-value.js.map +1 -1
  108. package/dist/src/mcpl/modern-connection.d.ts +227 -0
  109. package/dist/src/mcpl/modern-connection.d.ts.map +1 -0
  110. package/dist/src/mcpl/modern-connection.js +1088 -0
  111. package/dist/src/mcpl/modern-connection.js.map +1 -0
  112. package/dist/src/mcpl/prefix-rule.d.ts +18 -0
  113. package/dist/src/mcpl/prefix-rule.d.ts.map +1 -0
  114. package/dist/src/mcpl/prefix-rule.js +25 -0
  115. package/dist/src/mcpl/prefix-rule.js.map +1 -0
  116. package/dist/src/mcpl/protocol-family.d.ts +179 -0
  117. package/dist/src/mcpl/protocol-family.d.ts.map +1 -0
  118. package/dist/src/mcpl/protocol-family.js +697 -0
  119. package/dist/src/mcpl/protocol-family.js.map +1 -0
  120. package/dist/src/mcpl/push-coalescer.d.ts +58 -17
  121. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  122. package/dist/src/mcpl/push-coalescer.js +93 -32
  123. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  124. package/dist/src/mcpl/push-handler.d.ts +16 -9
  125. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  126. package/dist/src/mcpl/push-handler.js +18 -83
  127. package/dist/src/mcpl/push-handler.js.map +1 -1
  128. package/dist/src/mcpl/reference-fetcher.d.ts +76 -13
  129. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  130. package/dist/src/mcpl/reference-fetcher.js +275 -66
  131. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  132. package/dist/src/mcpl/references.d.ts +98 -18
  133. package/dist/src/mcpl/references.d.ts.map +1 -1
  134. package/dist/src/mcpl/references.js +170 -32
  135. package/dist/src/mcpl/references.js.map +1 -1
  136. package/dist/src/mcpl/server-connection.d.ts +406 -31
  137. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  138. package/dist/src/mcpl/server-connection.js +1331 -272
  139. package/dist/src/mcpl/server-connection.js.map +1 -1
  140. package/dist/src/mcpl/server-registry.d.ts +35 -6
  141. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  142. package/dist/src/mcpl/server-registry.js +63 -13
  143. package/dist/src/mcpl/server-registry.js.map +1 -1
  144. package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
  145. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
  146. package/dist/src/mcpl/skip-reply-wake.js +55 -0
  147. package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
  148. package/dist/src/mcpl/tool-result-normalize.d.ts +54 -0
  149. package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -0
  150. package/dist/src/mcpl/tool-result-normalize.js +232 -0
  151. package/dist/src/mcpl/tool-result-normalize.js.map +1 -0
  152. package/dist/src/mcpl/transport.d.ts +104 -12
  153. package/dist/src/mcpl/transport.d.ts.map +1 -1
  154. package/dist/src/mcpl/transport.js +315 -85
  155. package/dist/src/mcpl/transport.js.map +1 -1
  156. package/dist/src/mcpl/types.d.ts +76 -19
  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 +16 -0
  160. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  161. package/dist/src/mcpl/visible-content.js +26 -0
  162. package/dist/src/mcpl/visible-content.js.map +1 -1
  163. package/dist/src/module-registry.d.ts +34 -6
  164. package/dist/src/module-registry.d.ts.map +1 -1
  165. package/dist/src/module-registry.js +119 -31
  166. package/dist/src/module-registry.js.map +1 -1
  167. package/dist/src/modules/api/index.d.ts +1 -1
  168. package/dist/src/modules/api/index.d.ts.map +1 -1
  169. package/dist/src/modules/api/index.js +3 -2
  170. package/dist/src/modules/api/index.js.map +1 -1
  171. package/dist/src/modules/discord/discord-js-client.d.ts +43 -2
  172. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
  173. package/dist/src/modules/discord/discord-js-client.js +286 -67
  174. package/dist/src/modules/discord/discord-js-client.js.map +1 -1
  175. package/dist/src/modules/discord/index.d.ts +53 -5
  176. package/dist/src/modules/discord/index.d.ts.map +1 -1
  177. package/dist/src/modules/discord/index.js +712 -186
  178. package/dist/src/modules/discord/index.js.map +1 -1
  179. package/dist/src/modules/discord/refusal.d.ts +14 -0
  180. package/dist/src/modules/discord/refusal.d.ts.map +1 -0
  181. package/dist/src/modules/discord/refusal.js +14 -0
  182. package/dist/src/modules/discord/refusal.js.map +1 -0
  183. package/dist/src/modules/discord/types.d.ts +27 -4
  184. package/dist/src/modules/discord/types.d.ts.map +1 -1
  185. package/dist/src/modules/health/index.d.ts.map +1 -1
  186. package/dist/src/modules/health/index.js +8 -3
  187. package/dist/src/modules/health/index.js.map +1 -1
  188. package/dist/src/modules/history/index.d.ts +3 -1
  189. package/dist/src/modules/history/index.d.ts.map +1 -1
  190. package/dist/src/modules/history/index.js +359 -127
  191. package/dist/src/modules/history/index.js.map +1 -1
  192. package/dist/src/modules/history/semantic.d.ts +28 -1
  193. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  194. package/dist/src/modules/history/semantic.js +177 -32
  195. package/dist/src/modules/history/semantic.js.map +1 -1
  196. package/dist/src/modules/index.d.ts +1 -1
  197. package/dist/src/modules/index.d.ts.map +1 -1
  198. package/dist/src/modules/index.js +1 -1
  199. package/dist/src/modules/index.js.map +1 -1
  200. package/dist/src/modules/unknown-tool.d.ts +10 -0
  201. package/dist/src/modules/unknown-tool.d.ts.map +1 -0
  202. package/dist/src/modules/unknown-tool.js +17 -0
  203. package/dist/src/modules/unknown-tool.js.map +1 -0
  204. package/dist/src/modules/workspace/disk-agreement.d.ts +57 -4
  205. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  206. package/dist/src/modules/workspace/disk-agreement.js +75 -7
  207. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  208. package/dist/src/modules/workspace/effects.d.ts +66 -7
  209. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  210. package/dist/src/modules/workspace/effects.js +303 -46
  211. package/dist/src/modules/workspace/effects.js.map +1 -1
  212. package/dist/src/modules/workspace/index.d.ts +313 -45
  213. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  214. package/dist/src/modules/workspace/index.js +1404 -304
  215. package/dist/src/modules/workspace/index.js.map +1 -1
  216. package/dist/src/modules/workspace/observe.d.ts +315 -16
  217. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  218. package/dist/src/modules/workspace/observe.js +727 -37
  219. package/dist/src/modules/workspace/observe.js.map +1 -1
  220. package/dist/src/modules/workspace/reconcile.d.ts +58 -7
  221. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  222. package/dist/src/modules/workspace/reconcile.js +521 -56
  223. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  224. package/dist/src/modules/workspace/types.d.ts +28 -5
  225. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  226. package/dist/src/modules/workspace/types.js.map +1 -1
  227. package/dist/src/modules/workspace/watcher.d.ts +49 -2
  228. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  229. package/dist/src/modules/workspace/watcher.js +158 -29
  230. package/dist/src/modules/workspace/watcher.js.map +1 -1
  231. package/dist/src/prose-drafts.d.ts +240 -0
  232. package/dist/src/prose-drafts.d.ts.map +1 -0
  233. package/dist/src/prose-drafts.js +362 -0
  234. package/dist/src/prose-drafts.js.map +1 -0
  235. package/dist/src/prose-segments.d.ts +21 -2
  236. package/dist/src/prose-segments.d.ts.map +1 -1
  237. package/dist/src/prose-segments.js +46 -9
  238. package/dist/src/prose-segments.js.map +1 -1
  239. package/dist/src/recovery/offline-branch.d.ts +1 -0
  240. package/dist/src/recovery/offline-branch.d.ts.map +1 -1
  241. package/dist/src/recovery/offline-branch.js +3 -1
  242. package/dist/src/recovery/offline-branch.js.map +1 -1
  243. package/dist/src/safe-slice.d.ts +5 -1
  244. package/dist/src/safe-slice.d.ts.map +1 -1
  245. package/dist/src/safe-slice.js +9 -1
  246. package/dist/src/safe-slice.js.map +1 -1
  247. package/dist/src/silent-heartbeat.d.ts +112 -39
  248. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  249. package/dist/src/silent-heartbeat.js +100 -29
  250. package/dist/src/silent-heartbeat.js.map +1 -1
  251. package/dist/src/tool-args.d.ts +40 -0
  252. package/dist/src/tool-args.d.ts.map +1 -0
  253. package/dist/src/tool-args.js +207 -0
  254. package/dist/src/tool-args.js.map +1 -0
  255. package/dist/src/tool-image-ledger.d.ts +87 -19
  256. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  257. package/dist/src/tool-image-ledger.js +135 -32
  258. package/dist/src/tool-image-ledger.js.map +1 -1
  259. package/dist/src/tool-presentation.d.ts +9 -0
  260. package/dist/src/tool-presentation.d.ts.map +1 -1
  261. package/dist/src/tool-presentation.js +266 -62
  262. package/dist/src/tool-presentation.js.map +1 -1
  263. package/dist/src/tool-result-guard.d.ts.map +1 -1
  264. package/dist/src/tool-result-guard.js +7 -10
  265. package/dist/src/tool-result-guard.js.map +1 -1
  266. package/dist/src/tool-result-history.d.ts +32 -3
  267. package/dist/src/tool-result-history.d.ts.map +1 -1
  268. package/dist/src/tool-result-history.js +106 -19
  269. package/dist/src/tool-result-history.js.map +1 -1
  270. package/dist/src/tune-out/coordinator.d.ts +25 -1
  271. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  272. package/dist/src/tune-out/coordinator.js +260 -65
  273. package/dist/src/tune-out/coordinator.js.map +1 -1
  274. package/dist/src/types/agent.d.ts +44 -22
  275. package/dist/src/types/agent.d.ts.map +1 -1
  276. package/dist/src/types/events.d.ts +25 -0
  277. package/dist/src/types/events.d.ts.map +1 -1
  278. package/dist/src/types/framework.d.ts +38 -7
  279. package/dist/src/types/framework.d.ts.map +1 -1
  280. package/dist/src/types/inference-log.d.ts +1 -1
  281. package/dist/src/types/inference-log.d.ts.map +1 -1
  282. package/dist/src/types/module.d.ts +77 -14
  283. package/dist/src/types/module.d.ts.map +1 -1
  284. package/dist/src/types/trace.d.ts +97 -8
  285. package/dist/src/types/trace.d.ts.map +1 -1
  286. package/dist/src/usage/usage-tracker.d.ts +5 -0
  287. package/dist/src/usage/usage-tracker.d.ts.map +1 -1
  288. package/dist/src/usage/usage-tracker.js +35 -8
  289. package/dist/src/usage/usage-tracker.js.map +1 -1
  290. package/package.json +5 -4
  291. package/src/agent.ts +257 -72
  292. package/src/api/mcp-server-core.ts +1 -1
  293. package/src/api/server.ts +4 -1
  294. package/src/api/types.ts +1 -1
  295. package/src/branch-names.ts +19 -0
  296. package/src/closest-names.ts +94 -0
  297. package/src/code-execution/index.ts +1 -0
  298. package/src/code-execution/py-runner.ts +304 -93
  299. package/src/code-execution/runtime-py.ts +94 -8
  300. package/src/code-execution/tool-definition.ts +85 -7
  301. package/src/config-checks.ts +50 -0
  302. package/src/deadline-timer.ts +44 -0
  303. package/src/error-message.ts +48 -0
  304. package/src/framework.ts +8625 -1984
  305. package/src/gate/event-gate.ts +38 -5
  306. package/src/held-writes.ts +59 -0
  307. package/src/index.ts +29 -5
  308. package/src/mcpl/capability-grant.ts +1 -1
  309. package/src/mcpl/channel-registry.ts +1095 -411
  310. package/src/mcpl/checkpoint-manager.ts +104 -29
  311. package/src/mcpl/conversation-router.ts +28 -8
  312. package/src/mcpl/convert-block.ts +105 -0
  313. package/src/mcpl/errors.ts +28 -0
  314. package/src/mcpl/hook-orchestrator.ts +84 -77
  315. package/src/mcpl/inbound-source.ts +156 -0
  316. package/src/mcpl/index.ts +23 -1
  317. package/src/mcpl/inference-router.ts +179 -103
  318. package/src/mcpl/log-value.ts +10 -0
  319. package/src/mcpl/modern-connection.ts +1182 -0
  320. package/src/mcpl/prefix-rule.ts +32 -0
  321. package/src/mcpl/protocol-family.ts +691 -0
  322. package/src/mcpl/push-coalescer.ts +110 -36
  323. package/src/mcpl/push-handler.ts +20 -90
  324. package/src/mcpl/reference-fetcher.ts +318 -67
  325. package/src/mcpl/references.ts +183 -34
  326. package/src/mcpl/server-connection.ts +1404 -280
  327. package/src/mcpl/server-registry.ts +63 -14
  328. package/src/mcpl/skip-reply-wake.ts +73 -0
  329. package/src/mcpl/tool-result-normalize.ts +294 -0
  330. package/src/mcpl/transport.ts +320 -76
  331. package/src/mcpl/types.ts +77 -19
  332. package/src/mcpl/visible-content.ts +28 -0
  333. package/src/module-registry.ts +126 -36
  334. package/src/modules/api/index.ts +3 -2
  335. package/src/modules/discord/discord-js-client.ts +306 -74
  336. package/src/modules/discord/index.ts +737 -201
  337. package/src/modules/discord/refusal.ts +13 -0
  338. package/src/modules/discord/types.ts +27 -6
  339. package/src/modules/health/index.ts +8 -3
  340. package/src/modules/history/index.ts +410 -120
  341. package/src/modules/history/semantic.ts +189 -32
  342. package/src/modules/index.ts +1 -1
  343. package/src/modules/unknown-tool.ts +16 -0
  344. package/src/modules/workspace/disk-agreement.ts +97 -8
  345. package/src/modules/workspace/effects.ts +291 -36
  346. package/src/modules/workspace/index.ts +1469 -321
  347. package/src/modules/workspace/observe.ts +784 -41
  348. package/src/modules/workspace/reconcile.ts +619 -64
  349. package/src/modules/workspace/types.ts +28 -5
  350. package/src/modules/workspace/watcher.ts +154 -30
  351. package/src/prose-drafts.ts +481 -0
  352. package/src/prose-segments.ts +51 -8
  353. package/src/recovery/offline-branch.ts +4 -1
  354. package/src/safe-slice.ts +9 -1
  355. package/src/silent-heartbeat.ts +184 -59
  356. package/src/tool-args.ts +213 -0
  357. package/src/tool-image-ledger.ts +153 -34
  358. package/src/tool-presentation.ts +233 -42
  359. package/src/tool-result-guard.ts +7 -8
  360. package/src/tool-result-history.ts +124 -20
  361. package/src/tune-out/coordinator.ts +259 -65
  362. package/src/types/agent.ts +44 -24
  363. package/src/types/events.ts +25 -0
  364. package/src/types/framework.ts +38 -7
  365. package/src/types/inference-log.ts +1 -1
  366. package/src/types/module.ts +79 -14
  367. package/src/types/trace.ts +103 -8
  368. package/src/usage/usage-tracker.ts +32 -8
  369. package/dist/test/activation-request-sanitize.test.d.ts +0 -2
  370. package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
  371. package/dist/test/activation-request-sanitize.test.js +0 -89
  372. package/dist/test/activation-request-sanitize.test.js.map +0 -1
  373. package/dist/test/agent-cache-ttl.test.d.ts +0 -2
  374. package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
  375. package/dist/test/agent-cache-ttl.test.js +0 -41
  376. package/dist/test/agent-cache-ttl.test.js.map +0 -1
  377. package/dist/test/agent-runtime-settings.test.d.ts +0 -2
  378. package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
  379. package/dist/test/agent-runtime-settings.test.js +0 -1598
  380. package/dist/test/agent-runtime-settings.test.js.map +0 -1
  381. package/dist/test/api-admin-gate.test.d.ts +0 -2
  382. package/dist/test/api-admin-gate.test.d.ts.map +0 -1
  383. package/dist/test/api-admin-gate.test.js +0 -116
  384. package/dist/test/api-admin-gate.test.js.map +0 -1
  385. package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
  386. package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
  387. package/dist/test/assistant-persist-refusal.test.js +0 -63
  388. package/dist/test/assistant-persist-refusal.test.js.map +0 -1
  389. package/dist/test/batched-wake-locus.test.d.ts +0 -2
  390. package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
  391. package/dist/test/batched-wake-locus.test.js +0 -166
  392. package/dist/test/batched-wake-locus.test.js.map +0 -1
  393. package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
  394. package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
  395. package/dist/test/busy-agent-scheduler.test.js +0 -92
  396. package/dist/test/busy-agent-scheduler.test.js.map +0 -1
  397. package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
  398. package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
  399. package/dist/test/channel-incoming-targeting.test.js +0 -81
  400. package/dist/test/channel-incoming-targeting.test.js.map +0 -1
  401. package/dist/test/channel-label-history.test.d.ts +0 -2
  402. package/dist/test/channel-label-history.test.d.ts.map +0 -1
  403. package/dist/test/channel-label-history.test.js +0 -424
  404. package/dist/test/channel-label-history.test.js.map +0 -1
  405. package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
  406. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
  407. package/dist/test/channel-lifecycle-provenance.test.js +0 -47
  408. package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
  409. package/dist/test/channel-registry-routing.test.d.ts +0 -2
  410. package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
  411. package/dist/test/channel-registry-routing.test.js +0 -446
  412. package/dist/test/channel-registry-routing.test.js.map +0 -1
  413. package/dist/test/channel-registry-typing.test.d.ts +0 -2
  414. package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
  415. package/dist/test/channel-registry-typing.test.js +0 -91
  416. package/dist/test/channel-registry-typing.test.js.map +0 -1
  417. package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
  418. package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
  419. package/dist/test/channels-changed-respond-first.test.js +0 -74
  420. package/dist/test/channels-changed-respond-first.test.js.map +0 -1
  421. package/dist/test/checkpoint-attribution.test.d.ts +0 -2
  422. package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
  423. package/dist/test/checkpoint-attribution.test.js +0 -200
  424. package/dist/test/checkpoint-attribution.test.js.map +0 -1
  425. package/dist/test/code-execution.test.d.ts +0 -11
  426. package/dist/test/code-execution.test.d.ts.map +0 -1
  427. package/dist/test/code-execution.test.js +0 -1272
  428. package/dist/test/code-execution.test.js.map +0 -1
  429. package/dist/test/component-defaults.test.d.ts +0 -2
  430. package/dist/test/component-defaults.test.d.ts.map +0 -1
  431. package/dist/test/component-defaults.test.js +0 -54
  432. package/dist/test/component-defaults.test.js.map +0 -1
  433. package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
  434. package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
  435. package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
  436. package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
  437. package/dist/test/conversation-router.test.d.ts +0 -2
  438. package/dist/test/conversation-router.test.d.ts.map +0 -1
  439. package/dist/test/conversation-router.test.js +0 -174
  440. package/dist/test/conversation-router.test.js.map +0 -1
  441. package/dist/test/conversation-routing.test.d.ts +0 -7
  442. package/dist/test/conversation-routing.test.d.ts.map +0 -1
  443. package/dist/test/conversation-routing.test.js +0 -621
  444. package/dist/test/conversation-routing.test.js.map +0 -1
  445. package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
  446. package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
  447. package/dist/test/deferred-wake-integrity.test.js +0 -320
  448. package/dist/test/deferred-wake-integrity.test.js.map +0 -1
  449. package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
  450. package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
  451. package/dist/test/discord-awareness-outbox.test.js +0 -371
  452. package/dist/test/discord-awareness-outbox.test.js.map +0 -1
  453. package/dist/test/discord-history-delete-window.test.d.ts +0 -2
  454. package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
  455. package/dist/test/discord-history-delete-window.test.js +0 -81
  456. package/dist/test/discord-history-delete-window.test.js.map +0 -1
  457. package/dist/test/discord-history-sync.test.d.ts +0 -2
  458. package/dist/test/discord-history-sync.test.d.ts.map +0 -1
  459. package/dist/test/discord-history-sync.test.js +0 -56
  460. package/dist/test/discord-history-sync.test.js.map +0 -1
  461. package/dist/test/discord-typing-keepalive.test.d.ts +0 -2
  462. package/dist/test/discord-typing-keepalive.test.d.ts.map +0 -1
  463. package/dist/test/discord-typing-keepalive.test.js +0 -77
  464. package/dist/test/discord-typing-keepalive.test.js.map +0 -1
  465. package/dist/test/ephemeral-settle.test.d.ts +0 -2
  466. package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
  467. package/dist/test/ephemeral-settle.test.js +0 -354
  468. package/dist/test/ephemeral-settle.test.js.map +0 -1
  469. package/dist/test/event-gate-passthrough.test.d.ts +0 -15
  470. package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
  471. package/dist/test/event-gate-passthrough.test.js +0 -289
  472. package/dist/test/event-gate-passthrough.test.js.map +0 -1
  473. package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
  474. package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
  475. package/dist/test/event-gate-policy-mutation.test.js +0 -137
  476. package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
  477. package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
  478. package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
  479. package/dist/test/event-gate-rate-limit.test.js +0 -627
  480. package/dist/test/event-gate-rate-limit.test.js.map +0 -1
  481. package/dist/test/event-gate-script.test.d.ts +0 -2
  482. package/dist/test/event-gate-script.test.d.ts.map +0 -1
  483. package/dist/test/event-gate-script.test.js +0 -95
  484. package/dist/test/event-gate-script.test.js.map +0 -1
  485. package/dist/test/event-gate-selfwake.test.d.ts +0 -15
  486. package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
  487. package/dist/test/event-gate-selfwake.test.js +0 -125
  488. package/dist/test/event-gate-selfwake.test.js.map +0 -1
  489. package/dist/test/event-gate-tags.test.d.ts +0 -2
  490. package/dist/test/event-gate-tags.test.d.ts.map +0 -1
  491. package/dist/test/event-gate-tags.test.js +0 -76
  492. package/dist/test/event-gate-tags.test.js.map +0 -1
  493. package/dist/test/event-gate.test.d.ts +0 -2
  494. package/dist/test/event-gate.test.d.ts.map +0 -1
  495. package/dist/test/event-gate.test.js +0 -919
  496. package/dist/test/event-gate.test.js.map +0 -1
  497. package/dist/test/explicit-prose-routing.test.d.ts +0 -11
  498. package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
  499. package/dist/test/explicit-prose-routing.test.js +0 -1715
  500. package/dist/test/explicit-prose-routing.test.js.map +0 -1
  501. package/dist/test/framework.test.d.ts +0 -5
  502. package/dist/test/framework.test.d.ts.map +0 -1
  503. package/dist/test/framework.test.js +0 -1048
  504. package/dist/test/framework.test.js.map +0 -1
  505. package/dist/test/gather-context-timeout.test.d.ts +0 -2
  506. package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
  507. package/dist/test/gather-context-timeout.test.js +0 -120
  508. package/dist/test/gather-context-timeout.test.js.map +0 -1
  509. package/dist/test/health-snapshot.test.d.ts +0 -2
  510. package/dist/test/health-snapshot.test.d.ts.map +0 -1
  511. package/dist/test/health-snapshot.test.js +0 -74
  512. package/dist/test/health-snapshot.test.js.map +0 -1
  513. package/dist/test/helpers/coalescing-fixture.d.ts +0 -74
  514. package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
  515. package/dist/test/helpers/coalescing-fixture.js +0 -152
  516. package/dist/test/helpers/coalescing-fixture.js.map +0 -1
  517. package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
  518. package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
  519. package/dist/test/helpers/coalescing-kill-child.js +0 -24
  520. package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
  521. package/dist/test/helpers/mock-membrane.d.ts +0 -53
  522. package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
  523. package/dist/test/helpers/mock-membrane.js +0 -168
  524. package/dist/test/helpers/mock-membrane.js.map +0 -1
  525. package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
  526. package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
  527. package/dist/test/helpers/pytc-stop-rows.js +0 -143
  528. package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
  529. package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
  530. package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
  531. package/dist/test/helpers/quiesce-crash-child.js +0 -156
  532. package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
  533. package/dist/test/hide-then-turn.test.d.ts +0 -2
  534. package/dist/test/hide-then-turn.test.d.ts.map +0 -1
  535. package/dist/test/hide-then-turn.test.js +0 -101
  536. package/dist/test/hide-then-turn.test.js.map +0 -1
  537. package/dist/test/history-module-overview.test.d.ts +0 -2
  538. package/dist/test/history-module-overview.test.d.ts.map +0 -1
  539. package/dist/test/history-module-overview.test.js +0 -711
  540. package/dist/test/history-module-overview.test.js.map +0 -1
  541. package/dist/test/history-module-realstore.test.d.ts +0 -2
  542. package/dist/test/history-module-realstore.test.d.ts.map +0 -1
  543. package/dist/test/history-module-realstore.test.js +0 -363
  544. package/dist/test/history-module-realstore.test.js.map +0 -1
  545. package/dist/test/history-module-semantic.test.d.ts +0 -2
  546. package/dist/test/history-module-semantic.test.d.ts.map +0 -1
  547. package/dist/test/history-module-semantic.test.js +0 -213
  548. package/dist/test/history-module-semantic.test.js.map +0 -1
  549. package/dist/test/history-module-ux.test.d.ts +0 -2
  550. package/dist/test/history-module-ux.test.d.ts.map +0 -1
  551. package/dist/test/history-module-ux.test.js +0 -304
  552. package/dist/test/history-module-ux.test.js.map +0 -1
  553. package/dist/test/history-module.test.d.ts +0 -2
  554. package/dist/test/history-module.test.d.ts.map +0 -1
  555. package/dist/test/history-module.test.js +0 -619
  556. package/dist/test/history-module.test.js.map +0 -1
  557. package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
  558. package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
  559. package/dist/test/history-semantic-review-findings.test.js +0 -338
  560. package/dist/test/history-semantic-review-findings.test.js.map +0 -1
  561. package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
  562. package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
  563. package/dist/test/history-semantic-sync-converges.test.js +0 -109
  564. package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
  565. package/dist/test/host-quiesce.test.d.ts +0 -2
  566. package/dist/test/host-quiesce.test.d.ts.map +0 -1
  567. package/dist/test/host-quiesce.test.js +0 -988
  568. package/dist/test/host-quiesce.test.js.map +0 -1
  569. package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
  570. package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
  571. package/dist/test/inference-exhaustion-rewind.test.js +0 -387
  572. package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
  573. package/dist/test/inference-failure-bounds.test.d.ts +0 -2
  574. package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
  575. package/dist/test/inference-failure-bounds.test.js +0 -1202
  576. package/dist/test/inference-failure-bounds.test.js.map +0 -1
  577. package/dist/test/inference-failure-observability.test.d.ts +0 -2
  578. package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
  579. package/dist/test/inference-failure-observability.test.js +0 -84
  580. package/dist/test/inference-failure-observability.test.js.map +0 -1
  581. package/dist/test/journal-tool.test.d.ts +0 -2
  582. package/dist/test/journal-tool.test.d.ts.map +0 -1
  583. package/dist/test/journal-tool.test.js +0 -33
  584. package/dist/test/journal-tool.test.js.map +0 -1
  585. package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
  586. package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
  587. package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
  588. package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
  589. package/dist/test/kv-unified-wiring.test.d.ts +0 -2
  590. package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
  591. package/dist/test/kv-unified-wiring.test.js +0 -95
  592. package/dist/test/kv-unified-wiring.test.js.map +0 -1
  593. package/dist/test/late-events-after-stop.test.d.ts +0 -2
  594. package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
  595. package/dist/test/late-events-after-stop.test.js +0 -122
  596. package/dist/test/late-events-after-stop.test.js.map +0 -1
  597. package/dist/test/liveness-watchdog.test.d.ts +0 -2
  598. package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
  599. package/dist/test/liveness-watchdog.test.js +0 -94
  600. package/dist/test/liveness-watchdog.test.js.map +0 -1
  601. package/dist/test/machine-close-provenance.test.d.ts +0 -2
  602. package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
  603. package/dist/test/machine-close-provenance.test.js +0 -116
  604. package/dist/test/machine-close-provenance.test.js.map +0 -1
  605. package/dist/test/maintenance-timer.test.d.ts +0 -2
  606. package/dist/test/maintenance-timer.test.d.ts.map +0 -1
  607. package/dist/test/maintenance-timer.test.js +0 -1827
  608. package/dist/test/maintenance-timer.test.js.map +0 -1
  609. package/dist/test/mcp-server-bin.test.d.ts +0 -2
  610. package/dist/test/mcp-server-bin.test.d.ts.map +0 -1
  611. package/dist/test/mcp-server-bin.test.js +0 -142
  612. package/dist/test/mcp-server-bin.test.js.map +0 -1
  613. package/dist/test/mcpl-access-provider.test.d.ts +0 -2
  614. package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
  615. package/dist/test/mcpl-access-provider.test.js +0 -20
  616. package/dist/test/mcpl-access-provider.test.js.map +0 -1
  617. package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
  618. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
  619. package/dist/test/mcpl-awareness-barrier.test.js +0 -769
  620. package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
  621. package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
  622. package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
  623. package/dist/test/mcpl-capability-grant.test.js +0 -111
  624. package/dist/test/mcpl-capability-grant.test.js.map +0 -1
  625. package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
  626. package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
  627. package/dist/test/mcpl-capability-scoping.test.js +0 -266
  628. package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
  629. package/dist/test/mcpl-child-env.test.d.ts +0 -2
  630. package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
  631. package/dist/test/mcpl-child-env.test.js +0 -158
  632. package/dist/test/mcpl-child-env.test.js.map +0 -1
  633. package/dist/test/mcpl-coalesced-content-parity.test.d.ts +0 -2
  634. package/dist/test/mcpl-coalesced-content-parity.test.d.ts.map +0 -1
  635. package/dist/test/mcpl-coalesced-content-parity.test.js +0 -532
  636. package/dist/test/mcpl-coalesced-content-parity.test.js.map +0 -1
  637. package/dist/test/mcpl-coalescing.test.d.ts +0 -2
  638. package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
  639. package/dist/test/mcpl-coalescing.test.js +0 -1125
  640. package/dist/test/mcpl-coalescing.test.js.map +0 -1
  641. package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
  642. package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
  643. package/dist/test/mcpl-config-diagnostics.test.js +0 -452
  644. package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
  645. package/dist/test/mcpl-empty-content.test.d.ts +0 -2
  646. package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
  647. package/dist/test/mcpl-empty-content.test.js +0 -368
  648. package/dist/test/mcpl-empty-content.test.js.map +0 -1
  649. package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
  650. package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
  651. package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
  652. package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
  653. package/dist/test/mcpl-list-status.test.d.ts +0 -2
  654. package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
  655. package/dist/test/mcpl-list-status.test.js +0 -82
  656. package/dist/test/mcpl-list-status.test.js.map +0 -1
  657. package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
  658. package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
  659. package/dist/test/mcpl-manifest-changed.test.js +0 -178
  660. package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
  661. package/dist/test/mcpl-push-convert.test.d.ts +0 -2
  662. package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
  663. package/dist/test/mcpl-push-convert.test.js +0 -42
  664. package/dist/test/mcpl-push-convert.test.js.map +0 -1
  665. package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
  666. package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
  667. package/dist/test/mcpl-reconnect-events.test.js +0 -144
  668. package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
  669. package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
  670. package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
  671. package/dist/test/mcpl-reconnect-reregistration.test.js +0 -238
  672. package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
  673. package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
  674. package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
  675. package/dist/test/mcpl-reference-fetcher.test.js +0 -427
  676. package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
  677. package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
  678. package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
  679. package/dist/test/mcpl-reference-fields.test.js +0 -149
  680. package/dist/test/mcpl-reference-fields.test.js.map +0 -1
  681. package/dist/test/mcpl-rejection-log-lines.test.d.ts +0 -2
  682. package/dist/test/mcpl-rejection-log-lines.test.d.ts.map +0 -1
  683. package/dist/test/mcpl-rejection-log-lines.test.js +0 -349
  684. package/dist/test/mcpl-rejection-log-lines.test.js.map +0 -1
  685. package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
  686. package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
  687. package/dist/test/mcpl-request-timeout.test.js +0 -138
  688. package/dist/test/mcpl-request-timeout.test.js.map +0 -1
  689. package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
  690. package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
  691. package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
  692. package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
  693. package/dist/test/mcpl-stderr-tail.test.d.ts +0 -2
  694. package/dist/test/mcpl-stderr-tail.test.d.ts.map +0 -1
  695. package/dist/test/mcpl-stderr-tail.test.js +0 -210
  696. package/dist/test/mcpl-stderr-tail.test.js.map +0 -1
  697. package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
  698. package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
  699. package/dist/test/mcpl-tool-class-listing.test.js +0 -147
  700. package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
  701. package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
  702. package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
  703. package/dist/test/mcpl-tool-classes.test.js +0 -80
  704. package/dist/test/mcpl-tool-classes.test.js.map +0 -1
  705. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
  706. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
  707. package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
  708. package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
  709. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
  710. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
  711. package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
  712. package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
  713. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
  714. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
  715. package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
  716. package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
  717. package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
  718. package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
  719. package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
  720. package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
  721. package/dist/test/mcpl-transport-close.test.d.ts +0 -2
  722. package/dist/test/mcpl-transport-close.test.d.ts.map +0 -1
  723. package/dist/test/mcpl-transport-close.test.js +0 -373
  724. package/dist/test/mcpl-transport-close.test.js.map +0 -1
  725. package/dist/test/mcpl-transport-spawn.test.d.ts +0 -2
  726. package/dist/test/mcpl-transport-spawn.test.d.ts.map +0 -1
  727. package/dist/test/mcpl-transport-spawn.test.js +0 -58
  728. package/dist/test/mcpl-transport-spawn.test.js.map +0 -1
  729. package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
  730. package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
  731. package/dist/test/mcpl-ws-transport.test.js +0 -259
  732. package/dist/test/mcpl-ws-transport.test.js.map +0 -1
  733. package/dist/test/module-context-integration.test.d.ts +0 -18
  734. package/dist/test/module-context-integration.test.d.ts.map +0 -1
  735. package/dist/test/module-context-integration.test.js +0 -181
  736. package/dist/test/module-context-integration.test.js.map +0 -1
  737. package/dist/test/offline-recovery-branch.test.d.ts +0 -2
  738. package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
  739. package/dist/test/offline-recovery-branch.test.js +0 -570
  740. package/dist/test/offline-recovery-branch.test.js.map +0 -1
  741. package/dist/test/operator-surgery.test.d.ts +0 -2
  742. package/dist/test/operator-surgery.test.d.ts.map +0 -1
  743. package/dist/test/operator-surgery.test.js +0 -595
  744. package/dist/test/operator-surgery.test.js.map +0 -1
  745. package/dist/test/ops-alert.test.d.ts +0 -2
  746. package/dist/test/ops-alert.test.d.ts.map +0 -1
  747. package/dist/test/ops-alert.test.js +0 -153
  748. package/dist/test/ops-alert.test.js.map +0 -1
  749. package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
  750. package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
  751. package/dist/test/overbudget-drain-breaker.test.js +0 -198
  752. package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
  753. package/dist/test/pack-installs-alone.test.d.ts +0 -2
  754. package/dist/test/pack-installs-alone.test.d.ts.map +0 -1
  755. package/dist/test/pack-installs-alone.test.js +0 -284
  756. package/dist/test/pack-installs-alone.test.js.map +0 -1
  757. package/dist/test/per-agent-delivery.test.d.ts +0 -2
  758. package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
  759. package/dist/test/per-agent-delivery.test.js +0 -108
  760. package/dist/test/per-agent-delivery.test.js.map +0 -1
  761. package/dist/test/physical-window-restart.test.d.ts +0 -16
  762. package/dist/test/physical-window-restart.test.d.ts.map +0 -1
  763. package/dist/test/physical-window-restart.test.js +0 -487
  764. package/dist/test/physical-window-restart.test.js.map +0 -1
  765. package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
  766. package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
  767. package/dist/test/placed-reaction-baseline.test.js +0 -312
  768. package/dist/test/placed-reaction-baseline.test.js.map +0 -1
  769. package/dist/test/present-while-acting.test.d.ts +0 -19
  770. package/dist/test/present-while-acting.test.d.ts.map +0 -1
  771. package/dist/test/present-while-acting.test.js +0 -1649
  772. package/dist/test/present-while-acting.test.js.map +0 -1
  773. package/dist/test/prose-segments.test.d.ts +0 -2
  774. package/dist/test/prose-segments.test.d.ts.map +0 -1
  775. package/dist/test/prose-segments.test.js +0 -52
  776. package/dist/test/prose-segments.test.js.map +0 -1
  777. package/dist/test/prose-stream-router.test.d.ts +0 -2
  778. package/dist/test/prose-stream-router.test.d.ts.map +0 -1
  779. package/dist/test/prose-stream-router.test.js +0 -171
  780. package/dist/test/prose-stream-router.test.js.map +0 -1
  781. package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
  782. package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
  783. package/dist/test/provider-acceleration-cooldown.test.js +0 -435
  784. package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
  785. package/dist/test/provider-waits.test.d.ts +0 -2
  786. package/dist/test/provider-waits.test.d.ts.map +0 -1
  787. package/dist/test/provider-waits.test.js +0 -2259
  788. package/dist/test/provider-waits.test.js.map +0 -1
  789. package/dist/test/puppet-tool-call.test.d.ts +0 -2
  790. package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
  791. package/dist/test/puppet-tool-call.test.js +0 -226
  792. package/dist/test/puppet-tool-call.test.js.map +0 -1
  793. package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
  794. package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
  795. package/dist/test/puppet-turn-reservation.test.js +0 -139
  796. package/dist/test/puppet-turn-reservation.test.js.map +0 -1
  797. package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
  798. package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
  799. package/dist/test/reaction-baseline-platform.test.js +0 -124
  800. package/dist/test/reaction-baseline-platform.test.js.map +0 -1
  801. package/dist/test/record-journal.test.d.ts +0 -6
  802. package/dist/test/record-journal.test.d.ts.map +0 -1
  803. package/dist/test/record-journal.test.js +0 -269
  804. package/dist/test/record-journal.test.js.map +0 -1
  805. package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
  806. package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
  807. package/dist/test/refusal-reaction-baseline.test.js +0 -81
  808. package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
  809. package/dist/test/refusal-rewind.test.d.ts +0 -2
  810. package/dist/test/refusal-rewind.test.d.ts.map +0 -1
  811. package/dist/test/refusal-rewind.test.js +0 -117
  812. package/dist/test/refusal-rewind.test.js.map +0 -1
  813. package/dist/test/refusal-single-call.test.d.ts +0 -2
  814. package/dist/test/refusal-single-call.test.d.ts.map +0 -1
  815. package/dist/test/refusal-single-call.test.js +0 -177
  816. package/dist/test/refusal-single-call.test.js.map +0 -1
  817. package/dist/test/release-bump.test.d.ts +0 -2
  818. package/dist/test/release-bump.test.d.ts.map +0 -1
  819. package/dist/test/release-bump.test.js +0 -248
  820. package/dist/test/release-bump.test.js.map +0 -1
  821. package/dist/test/release-changelog.test.d.ts +0 -2
  822. package/dist/test/release-changelog.test.d.ts.map +0 -1
  823. package/dist/test/release-changelog.test.js +0 -159
  824. package/dist/test/release-changelog.test.js.map +0 -1
  825. package/dist/test/release-holds.test.d.ts +0 -2
  826. package/dist/test/release-holds.test.d.ts.map +0 -1
  827. package/dist/test/release-holds.test.js +0 -456
  828. package/dist/test/release-holds.test.js.map +0 -1
  829. package/dist/test/same-round-think-policy.test.d.ts +0 -2
  830. package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
  831. package/dist/test/same-round-think-policy.test.js +0 -853
  832. package/dist/test/same-round-think-policy.test.js.map +0 -1
  833. package/dist/test/save-recent-image.test.d.ts +0 -26
  834. package/dist/test/save-recent-image.test.d.ts.map +0 -1
  835. package/dist/test/save-recent-image.test.js +0 -974
  836. package/dist/test/save-recent-image.test.js.map +0 -1
  837. package/dist/test/shutdown-errors.test.d.ts +0 -2
  838. package/dist/test/shutdown-errors.test.d.ts.map +0 -1
  839. package/dist/test/shutdown-errors.test.js +0 -662
  840. package/dist/test/shutdown-errors.test.js.map +0 -1
  841. package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
  842. package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
  843. package/dist/test/silent-heartbeat-rows.test.js +0 -451
  844. package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
  845. package/dist/test/silent-heartbeat.test.d.ts +0 -2
  846. package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
  847. package/dist/test/silent-heartbeat.test.js +0 -165
  848. package/dist/test/silent-heartbeat.test.js.map +0 -1
  849. package/dist/test/state-scaling-e2e.test.d.ts +0 -22
  850. package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
  851. package/dist/test/state-scaling-e2e.test.js +0 -206
  852. package/dist/test/state-scaling-e2e.test.js.map +0 -1
  853. package/dist/test/state-scaling.test.d.ts +0 -12
  854. package/dist/test/state-scaling.test.d.ts.map +0 -1
  855. package/dist/test/state-scaling.test.js +0 -251
  856. package/dist/test/state-scaling.test.js.map +0 -1
  857. package/dist/test/stop-with-host-operations.test.d.ts +0 -20
  858. package/dist/test/stop-with-host-operations.test.d.ts.map +0 -1
  859. package/dist/test/stop-with-host-operations.test.js +0 -1174
  860. package/dist/test/stop-with-host-operations.test.js.map +0 -1
  861. package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
  862. package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
  863. package/dist/test/stop-with-work-in-flight.test.js +0 -784
  864. package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
  865. package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
  866. package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
  867. package/dist/test/surgery-marks-receipt.test.js +0 -540
  868. package/dist/test/surgery-marks-receipt.test.js.map +0 -1
  869. package/dist/test/thinking-token-stamp.test.d.ts +0 -12
  870. package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
  871. package/dist/test/thinking-token-stamp.test.js +0 -129
  872. package/dist/test/thinking-token-stamp.test.js.map +0 -1
  873. package/dist/test/timezone.test.d.ts +0 -2
  874. package/dist/test/timezone.test.d.ts.map +0 -1
  875. package/dist/test/timezone.test.js +0 -18
  876. package/dist/test/timezone.test.js.map +0 -1
  877. package/dist/test/tool-batch-hook.test.d.ts +0 -8
  878. package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
  879. package/dist/test/tool-batch-hook.test.js +0 -275
  880. package/dist/test/tool-batch-hook.test.js.map +0 -1
  881. package/dist/test/tool-policy.test.d.ts +0 -2
  882. package/dist/test/tool-policy.test.d.ts.map +0 -1
  883. package/dist/test/tool-policy.test.js +0 -51
  884. package/dist/test/tool-policy.test.js.map +0 -1
  885. package/dist/test/tool-presentation.test.d.ts +0 -2
  886. package/dist/test/tool-presentation.test.d.ts.map +0 -1
  887. package/dist/test/tool-presentation.test.js +0 -268
  888. package/dist/test/tool-presentation.test.js.map +0 -1
  889. package/dist/test/tool-result-content.test.d.ts +0 -2
  890. package/dist/test/tool-result-content.test.d.ts.map +0 -1
  891. package/dist/test/tool-result-content.test.js +0 -37
  892. package/dist/test/tool-result-content.test.js.map +0 -1
  893. package/dist/test/tool-result-guard.test.d.ts +0 -2
  894. package/dist/test/tool-result-guard.test.d.ts.map +0 -1
  895. package/dist/test/tool-result-guard.test.js +0 -3729
  896. package/dist/test/tool-result-guard.test.js.map +0 -1
  897. package/dist/test/tool-result-history.test.d.ts +0 -7
  898. package/dist/test/tool-result-history.test.d.ts.map +0 -1
  899. package/dist/test/tool-result-history.test.js +0 -156
  900. package/dist/test/tool-result-history.test.js.map +0 -1
  901. package/dist/test/tool-result-spill.test.d.ts +0 -13
  902. package/dist/test/tool-result-spill.test.d.ts.map +0 -1
  903. package/dist/test/tool-result-spill.test.js +0 -586
  904. package/dist/test/tool-result-spill.test.js.map +0 -1
  905. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
  906. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
  907. package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
  908. package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
  909. package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
  910. package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
  911. package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
  912. package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
  913. package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
  914. package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
  915. package/dist/test/tools-observe-parser-conformance.test.js +0 -129
  916. package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
  917. package/dist/test/trunk-channel-routing.test.d.ts +0 -19
  918. package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
  919. package/dist/test/trunk-channel-routing.test.js +0 -652
  920. package/dist/test/trunk-channel-routing.test.js.map +0 -1
  921. package/dist/test/tune-out-e2e.test.d.ts +0 -2
  922. package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
  923. package/dist/test/tune-out-e2e.test.js +0 -142
  924. package/dist/test/tune-out-e2e.test.js.map +0 -1
  925. package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
  926. package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
  927. package/dist/test/tune-out-gate-composition.test.js +0 -221
  928. package/dist/test/tune-out-gate-composition.test.js.map +0 -1
  929. package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
  930. package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
  931. package/dist/test/tune-out-lifecycle.test.js +0 -121
  932. package/dist/test/tune-out-lifecycle.test.js.map +0 -1
  933. package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
  934. package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
  935. package/dist/test/turn-trigger-provenance.test.js +0 -137
  936. package/dist/test/turn-trigger-provenance.test.js.map +0 -1
  937. package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
  938. package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
  939. package/dist/test/unconvertible-tool-result.test.js +0 -358
  940. package/dist/test/unconvertible-tool-result.test.js.map +0 -1
  941. package/dist/test/unsent-compiles.test.d.ts +0 -2
  942. package/dist/test/unsent-compiles.test.d.ts.map +0 -1
  943. package/dist/test/unsent-compiles.test.js +0 -139
  944. package/dist/test/unsent-compiles.test.js.map +0 -1
  945. package/dist/test/usage-accounting.test.d.ts +0 -2
  946. package/dist/test/usage-accounting.test.d.ts.map +0 -1
  947. package/dist/test/usage-accounting.test.js +0 -13
  948. package/dist/test/usage-accounting.test.js.map +0 -1
  949. package/dist/test/usage-tracker.test.d.ts +0 -2
  950. package/dist/test/usage-tracker.test.d.ts.map +0 -1
  951. package/dist/test/usage-tracker.test.js +0 -129
  952. package/dist/test/usage-tracker.test.js.map +0 -1
  953. package/dist/test/utils-surface.test.d.ts +0 -2
  954. package/dist/test/utils-surface.test.d.ts.map +0 -1
  955. package/dist/test/utils-surface.test.js +0 -145
  956. package/dist/test/utils-surface.test.js.map +0 -1
  957. package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
  958. package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
  959. package/dist/test/workspace-branch-continuation.test.js +0 -183
  960. package/dist/test/workspace-branch-continuation.test.js.map +0 -1
  961. package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
  962. package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
  963. package/dist/test/workspace-materialize-freshness.test.js +0 -252
  964. package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
  965. package/dist/test/workspace-path-containment.test.d.ts +0 -19
  966. package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
  967. package/dist/test/workspace-path-containment.test.js +0 -91
  968. package/dist/test/workspace-path-containment.test.js.map +0 -1
  969. package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
  970. package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
  971. package/dist/test/workspace-read-file-from-disk.test.js +0 -174
  972. package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
  973. package/dist/test/workspace-read-image.test.d.ts +0 -2
  974. package/dist/test/workspace-read-image.test.d.ts.map +0 -1
  975. package/dist/test/workspace-read-image.test.js +0 -597
  976. package/dist/test/workspace-read-image.test.js.map +0 -1
  977. package/dist/test/workspace-read-text.test.d.ts +0 -2
  978. package/dist/test/workspace-read-text.test.d.ts.map +0 -1
  979. package/dist/test/workspace-read-text.test.js +0 -101
  980. package/dist/test/workspace-read-text.test.js.map +0 -1
  981. package/dist/test/workspace-restore-order.test.d.ts +0 -16
  982. package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
  983. package/dist/test/workspace-restore-order.test.js +0 -140
  984. package/dist/test/workspace-restore-order.test.js.map +0 -1
  985. package/dist/test/workspace-three-way.test.d.ts +0 -12
  986. package/dist/test/workspace-three-way.test.d.ts.map +0 -1
  987. package/dist/test/workspace-three-way.test.js +0 -4094
  988. package/dist/test/workspace-three-way.test.js.map +0 -1
  989. package/dist/test/workspace-watcher.test.d.ts +0 -2
  990. package/dist/test/workspace-watcher.test.d.ts.map +0 -1
  991. package/dist/test/workspace-watcher.test.js +0 -281
  992. package/dist/test/workspace-watcher.test.js.map +0 -1
  993. package/dist/test/xml-round-persist.test.d.ts +0 -19
  994. package/dist/test/xml-round-persist.test.d.ts.map +0 -1
  995. package/dist/test/xml-round-persist.test.js +0 -235
  996. package/dist/test/xml-round-persist.test.js.map +0 -1
  997. 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 };
@@ -14,7 +14,12 @@ export type SameRoundThinkTextPolicySource =
14
14
  */
15
15
  export interface AgentConfig {
16
16
  toolPresentation?: import("../tool-presentation.js").ToolPresentationConfig;
17
- /** Unique name for this agent */
17
+ /**
18
+ * Unique name for this agent: create() refuses two configured agents of one
19
+ * name. Names compare exactly, so `Dup` beside `dup` is two agents, though
20
+ * the history tool's author filter matches their own turns without letter
21
+ * case and can't tell them apart there.
22
+ */
18
23
  name: string;
19
24
 
20
25
  /** Model to use (e.g., 'claude-sonnet-4-20250514') */
@@ -27,9 +32,19 @@ export interface AgentConfig {
27
32
  strategy?: ContextStrategy;
28
33
 
29
34
  /**
30
- * Which tools this agent can use.
35
+ * Enforced at dispatch for registered agent callers; omitted means 'all'.
31
36
  * - 'all': all available tools
32
- * - string[]: specific tool names (with module prefix)
37
+ * - string[]: exact tool names, including module--utility names for utilities.
38
+ * Utilities aren't tools of their own: an agent's model and its scripts are
39
+ * offered them only through 'utils', whose run checks the utility's own
40
+ * name. An agent that should use a utility lists both 'utils' and
41
+ * 'module--utility'. The name alone passes the dispatch check for any call
42
+ * by that name, whether the host makes it with executeToolCall on the
43
+ * agent's behalf or the model or a script makes it without being offered
44
+ * it. The slot is hidden when no utility is permitted.
45
+ * Trusted module calls are exempt. Genuinely unidentified public callers,
46
+ * including unknown legacy names, remain unrestricted. Framework-created
47
+ * identities have tool authority only while registered.
33
48
  */
34
49
  allowedTools?: 'all' | string[];
35
50
 
@@ -93,11 +108,16 @@ export interface AgentConfig {
93
108
  promptCaching?: boolean;
94
109
 
95
110
  /**
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.
111
+ * A synthetic user message for a request whose formatted conversation
112
+ * would otherwise begin with the assistant (e.g. chapterx's
113
+ * `<cmd>cat untitled.txt</cmd>` CLI-sim scaffold). A non-empty value is
114
+ * forwarded verbatim to membrane, on framework turns and the direct API
115
+ * alike. Membrane's anthropic-xml formatter makes it the first message,
116
+ * ahead of the assistant turn that carries the conversation. Its native
117
+ * formatter uses it as the text of a leading user turn that its tool-pair
118
+ * normalizer adds, in place of `[continuing]`. Part of reproducing a
119
+ * prefill-era bot's exact prompting structure when migrating it into a
120
+ * resident.
101
121
  */
102
122
  prefillUserMessage?: string;
103
123
 
@@ -167,12 +187,6 @@ export interface AgentConfig {
167
187
  autoRewind?: boolean;
168
188
  /** Max consecutive rewinds before giving up a turn. Default 3. */
169
189
  maxRewinds?: number;
170
- /**
171
- * When the rewound turn is a *human* message (not a machine tool result),
172
- * announce the withholding on the conversational surface (Discord) rather
173
- * than dropping it silently. Default true.
174
- */
175
- announceHumanTurns?: boolean;
176
190
  };
177
191
 
178
192
  /** Opt-in tool-output admission and one guarded retry after a provider
@@ -192,7 +206,8 @@ export interface AgentConfig {
192
206
  * that publication envelope through the same authorized resolver.
193
207
  * See docs/hybrid-prose-routing.md.
194
208
  * - 'disabled': generated prose is never published. Only explicit tools may
195
- * send externally; prose remains in Chronicle with a private suppression receipt.
209
+ * send externally; prose remains in Chronicle, and a turn that wrote plain
210
+ * speech ends with a private `[delivered] plain speech → no channel` receipt.
196
211
  */
197
212
  proseRouting?: 'locus' | 'explicit' | 'hybrid' | 'disabled';
198
213
 
@@ -307,13 +322,18 @@ export interface InferenceOptions {
307
322
 
308
323
  /**
309
324
  * Internal state of an agent.
325
+ *
326
+ * `supportsInjectedMessages` is what the stream declared with the round's
327
+ * tool calls (membrane's `ToolContext.supportsInjectedMessages`): whether it
328
+ * can carry messages injected with that round's results. It's absent when
329
+ * the stream doesn't say, as on membrane 0.5.87 and earlier.
310
330
  */
311
331
  export type AgentState =
312
332
  | { status: 'idle' }
313
333
  | { status: 'inferring'; promise: Promise<InferenceResult>; abortController: AbortController }
314
334
  | { status: 'streaming'; stream: YieldingStream }
315
- | { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream }
316
- | { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream };
335
+ | { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean }
336
+ | { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean };
317
337
 
318
338
  /**
319
339
  * A tool call that's in progress.
@@ -362,7 +382,8 @@ export interface InferenceRequest {
362
382
  * replies in the channel it is answering — not the process-global most-recent-
363
383
  * inbound locus, which a concurrent message elsewhere can hijack (item-3
364
384
  * redux). Undefined for non-channel wakes (heartbeat, timers, module events),
365
- * which correctly fall back to the global default channel.
385
+ * which correctly fall back to the global default channel, except an
386
+ * ephemeral run's (a subagent's), which takes no global fallback.
366
387
  */
367
388
  channelId?: string;
368
389
  /**
@@ -396,11 +417,10 @@ export interface InferenceRequest {
396
417
  /** Suppress every automatic plain-prose delivery for this logical turn.
397
418
  * Explicit tool calls remain available. Used by authenticated silent wakes. */
398
419
  suppressProse?: boolean;
399
- /** Ephemeral system-position prompt for this turn only. Never written to
400
- * Chronicle; callers must supply bounded non-secret control text. */
401
- ephemeralSystemPrompt?: string;
402
- /** The authenticated silent heartbeat tick this turn answers. Every row the
403
- * turn stores is stamped `metadata.silentHeartbeat` with it, and request
404
- * builds render a request-only separator before the tick's first row. */
420
+ /** The authenticated silent heartbeat tick this turn answers. The rows the
421
+ * turn's reply stores (its assistant responses and tool results) are
422
+ * stamped `metadata.silentHeartbeat` with it, and request builds render a
423
+ * request-only separator carrying the tick's instruction before the tick's
424
+ * first surviving row (`SILENT_HEARTBEAT_SEPARATOR`). */
405
425
  silentHeartbeat?: SilentHeartbeatTick;
406
426
  }
@@ -192,6 +192,14 @@ export interface ToolResult {
192
192
  error?: string;
193
193
  /** Whether this was an error (for LLM) */
194
194
  isError?: boolean;
195
+ /**
196
+ * An MCP tool's `structuredContent`: its machine-readable result, beside
197
+ * `data`, which is the content view. Present exactly when the server sent
198
+ * one, so `false`, `0` and `null` are values here, not absence. Programs
199
+ * read it (scripts get it in their result object); the model sees content,
200
+ * and sees this rendered as JSON only when the content carries no text.
201
+ */
202
+ structured?: unknown;
195
203
  /**
196
204
  * When true, the framework saves tool_use + tool_result messages to context,
197
205
  * cancels the active stream, and resets the agent to idle.
@@ -225,6 +233,19 @@ export interface ToolCall {
225
233
  input: unknown;
226
234
  /** The agent that made this tool call. Set by the framework dispatch layer. */
227
235
  callerAgentName?: string;
236
+ /**
237
+ * The turn the call was made in, the same id as that turn's
238
+ * `SpeechContext.turnId`. Set by the framework dispatch layer, beside
239
+ * `callerAgentName`: a model's call carries the turn whose stream made it, a
240
+ * foreground script's inner call the turn of the code_execution call whose
241
+ * script is running when the call arrives, and a utility run its `utils`
242
+ * call's. A background script runs apart from any turn, so its calls carry
243
+ * none. Ids increase, so a later turn's is larger, and they're unique only
244
+ * within one run of the process. A call made with `executeToolCall` or a
245
+ * module's `callTool` skips that layer and carries whatever turn its caller
246
+ * put on the call, usually none.
247
+ */
248
+ callerTurnId?: number;
228
249
  }
229
250
 
230
251
  // ============================================================================
@@ -247,6 +268,8 @@ export interface McplPushEvent {
247
268
  inferenceId: string;
248
269
  triggerInference?: boolean;
249
270
  targetAgents?: string[];
271
+ /** Host acceptance time (epoch ms), stamped where the push is admitted. */
272
+ acceptedAt?: number;
250
273
  }
251
274
 
252
275
  /**
@@ -265,4 +288,6 @@ export interface McplChannelIncomingEvent {
265
288
  metadata?: Record<string, unknown>;
266
289
  triggerInference?: boolean;
267
290
  targetAgents?: string[];
291
+ /** Host acceptance time (epoch ms), stamped where the message is admitted. */
292
+ acceptedAt?: number;
268
293
  }