@animalabs/agent-framework 0.22.2 → 0.22.4

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 (940) hide show
  1. package/README.md +3 -1
  2. package/dist/src/agent.d.ts +77 -12
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +143 -41
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server-core.js +1 -1
  7. package/dist/src/api/mcp-server-core.js.map +1 -1
  8. package/dist/src/api/server.d.ts.map +1 -1
  9. package/dist/src/api/server.js +5 -1
  10. package/dist/src/api/server.js.map +1 -1
  11. package/dist/src/api/types.d.ts +1 -1
  12. package/dist/src/api/types.d.ts.map +1 -1
  13. package/dist/src/branch-names.d.ts +14 -0
  14. package/dist/src/branch-names.d.ts.map +1 -0
  15. package/dist/src/branch-names.js +22 -0
  16. package/dist/src/branch-names.js.map +1 -0
  17. package/dist/src/closest-names.d.ts +28 -0
  18. package/dist/src/closest-names.d.ts.map +1 -0
  19. package/dist/src/closest-names.js +98 -0
  20. package/dist/src/closest-names.js.map +1 -0
  21. package/dist/src/code-execution/py-runner.d.ts +16 -5
  22. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  23. package/dist/src/code-execution/py-runner.js +186 -74
  24. package/dist/src/code-execution/py-runner.js.map +1 -1
  25. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  26. package/dist/src/code-execution/runtime-py.js +49 -3
  27. package/dist/src/code-execution/runtime-py.js.map +1 -1
  28. package/dist/src/code-execution/tool-definition.d.ts +12 -1
  29. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  30. package/dist/src/code-execution/tool-definition.js +21 -3
  31. package/dist/src/code-execution/tool-definition.js.map +1 -1
  32. package/dist/src/config-checks.d.ts +28 -0
  33. package/dist/src/config-checks.d.ts.map +1 -0
  34. package/dist/src/config-checks.js +52 -0
  35. package/dist/src/config-checks.js.map +1 -0
  36. package/dist/src/deadline-timer.d.ts +21 -0
  37. package/dist/src/deadline-timer.d.ts.map +1 -0
  38. package/dist/src/deadline-timer.js +43 -0
  39. package/dist/src/deadline-timer.js.map +1 -0
  40. package/dist/src/error-message.d.ts +30 -0
  41. package/dist/src/error-message.d.ts.map +1 -0
  42. package/dist/src/error-message.js +50 -0
  43. package/dist/src/error-message.js.map +1 -0
  44. package/dist/src/framework.d.ts +828 -88
  45. package/dist/src/framework.d.ts.map +1 -1
  46. package/dist/src/framework.js +5011 -1326
  47. package/dist/src/framework.js.map +1 -1
  48. package/dist/src/gate/event-gate.d.ts +8 -0
  49. package/dist/src/gate/event-gate.d.ts.map +1 -1
  50. package/dist/src/gate/event-gate.js +27 -3
  51. package/dist/src/gate/event-gate.js.map +1 -1
  52. package/dist/src/index.d.ts +4 -2
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +4 -2
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/mcpl/channel-registry.d.ts +144 -6
  57. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  58. package/dist/src/mcpl/channel-registry.js +424 -263
  59. package/dist/src/mcpl/channel-registry.js.map +1 -1
  60. package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
  61. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  62. package/dist/src/mcpl/checkpoint-manager.js +91 -30
  63. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  64. package/dist/src/mcpl/conversation-router.d.ts +19 -3
  65. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  66. package/dist/src/mcpl/conversation-router.js +23 -8
  67. package/dist/src/mcpl/conversation-router.js.map +1 -1
  68. package/dist/src/mcpl/convert-block.d.ts +20 -0
  69. package/dist/src/mcpl/convert-block.d.ts.map +1 -0
  70. package/dist/src/mcpl/convert-block.js +89 -0
  71. package/dist/src/mcpl/convert-block.js.map +1 -0
  72. package/dist/src/mcpl/errors.d.ts +13 -0
  73. package/dist/src/mcpl/errors.d.ts.map +1 -1
  74. package/dist/src/mcpl/errors.js +28 -0
  75. package/dist/src/mcpl/errors.js.map +1 -1
  76. package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
  77. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  78. package/dist/src/mcpl/hook-orchestrator.js +83 -72
  79. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  80. package/dist/src/mcpl/inbound-source.d.ts +114 -0
  81. package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
  82. package/dist/src/mcpl/inbound-source.js +83 -0
  83. package/dist/src/mcpl/inbound-source.js.map +1 -0
  84. package/dist/src/mcpl/index.d.ts +3 -1
  85. package/dist/src/mcpl/index.d.ts.map +1 -1
  86. package/dist/src/mcpl/index.js +3 -1
  87. package/dist/src/mcpl/index.js.map +1 -1
  88. package/dist/src/mcpl/inference-router.d.ts +15 -11
  89. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  90. package/dist/src/mcpl/inference-router.js +153 -84
  91. package/dist/src/mcpl/inference-router.js.map +1 -1
  92. package/dist/src/mcpl/push-coalescer.d.ts +33 -11
  93. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  94. package/dist/src/mcpl/push-coalescer.js +52 -20
  95. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  96. package/dist/src/mcpl/push-handler.d.ts +16 -9
  97. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  98. package/dist/src/mcpl/push-handler.js +18 -83
  99. package/dist/src/mcpl/push-handler.js.map +1 -1
  100. package/dist/src/mcpl/reference-fetcher.d.ts +14 -2
  101. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  102. package/dist/src/mcpl/reference-fetcher.js +72 -30
  103. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  104. package/dist/src/mcpl/references.d.ts +47 -12
  105. package/dist/src/mcpl/references.d.ts.map +1 -1
  106. package/dist/src/mcpl/references.js +74 -21
  107. package/dist/src/mcpl/references.js.map +1 -1
  108. package/dist/src/mcpl/server-connection.d.ts +89 -10
  109. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  110. package/dist/src/mcpl/server-connection.js +405 -129
  111. package/dist/src/mcpl/server-connection.js.map +1 -1
  112. package/dist/src/mcpl/server-registry.d.ts +10 -1
  113. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  114. package/dist/src/mcpl/server-registry.js +14 -3
  115. package/dist/src/mcpl/server-registry.js.map +1 -1
  116. package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
  117. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
  118. package/dist/src/mcpl/skip-reply-wake.js +55 -0
  119. package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
  120. package/dist/src/mcpl/transport.d.ts +51 -2
  121. package/dist/src/mcpl/transport.d.ts.map +1 -1
  122. package/dist/src/mcpl/transport.js +114 -20
  123. package/dist/src/mcpl/transport.js.map +1 -1
  124. package/dist/src/mcpl/types.d.ts +14 -3
  125. package/dist/src/mcpl/types.d.ts.map +1 -1
  126. package/dist/src/mcpl/types.js.map +1 -1
  127. package/dist/src/mcpl/visible-content.d.ts +15 -0
  128. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  129. package/dist/src/mcpl/visible-content.js +25 -0
  130. package/dist/src/mcpl/visible-content.js.map +1 -1
  131. package/dist/src/module-registry.d.ts +19 -1
  132. package/dist/src/module-registry.d.ts.map +1 -1
  133. package/dist/src/module-registry.js +54 -25
  134. package/dist/src/module-registry.js.map +1 -1
  135. package/dist/src/modules/api/index.js +1 -1
  136. package/dist/src/modules/api/index.js.map +1 -1
  137. package/dist/src/modules/discord/discord-js-client.d.ts +1 -0
  138. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
  139. package/dist/src/modules/discord/discord-js-client.js +25 -9
  140. package/dist/src/modules/discord/discord-js-client.js.map +1 -1
  141. package/dist/src/modules/discord/index.d.ts +29 -3
  142. package/dist/src/modules/discord/index.d.ts.map +1 -1
  143. package/dist/src/modules/discord/index.js +379 -143
  144. package/dist/src/modules/discord/index.js.map +1 -1
  145. package/dist/src/modules/discord/types.d.ts +14 -1
  146. package/dist/src/modules/discord/types.d.ts.map +1 -1
  147. package/dist/src/modules/health/index.d.ts.map +1 -1
  148. package/dist/src/modules/health/index.js +2 -1
  149. package/dist/src/modules/health/index.js.map +1 -1
  150. package/dist/src/modules/history/index.d.ts +3 -1
  151. package/dist/src/modules/history/index.d.ts.map +1 -1
  152. package/dist/src/modules/history/index.js +359 -127
  153. package/dist/src/modules/history/index.js.map +1 -1
  154. package/dist/src/modules/history/semantic.d.ts +28 -1
  155. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  156. package/dist/src/modules/history/semantic.js +177 -32
  157. package/dist/src/modules/history/semantic.js.map +1 -1
  158. package/dist/src/modules/unknown-tool.d.ts +10 -0
  159. package/dist/src/modules/unknown-tool.d.ts.map +1 -0
  160. package/dist/src/modules/unknown-tool.js +17 -0
  161. package/dist/src/modules/unknown-tool.js.map +1 -0
  162. package/dist/src/modules/workspace/disk-agreement.d.ts +32 -2
  163. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  164. package/dist/src/modules/workspace/disk-agreement.js +30 -2
  165. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  166. package/dist/src/modules/workspace/effects.d.ts +64 -6
  167. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  168. package/dist/src/modules/workspace/effects.js +291 -44
  169. package/dist/src/modules/workspace/effects.js.map +1 -1
  170. package/dist/src/modules/workspace/index.d.ts +119 -23
  171. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  172. package/dist/src/modules/workspace/index.js +793 -247
  173. package/dist/src/modules/workspace/index.js.map +1 -1
  174. package/dist/src/modules/workspace/observe.d.ts +75 -8
  175. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  176. package/dist/src/modules/workspace/observe.js +174 -14
  177. package/dist/src/modules/workspace/observe.js.map +1 -1
  178. package/dist/src/modules/workspace/reconcile.d.ts +58 -7
  179. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  180. package/dist/src/modules/workspace/reconcile.js +521 -56
  181. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  182. package/dist/src/modules/workspace/types.d.ts +18 -4
  183. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  184. package/dist/src/modules/workspace/types.js.map +1 -1
  185. package/dist/src/modules/workspace/watcher.d.ts +7 -2
  186. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  187. package/dist/src/modules/workspace/watcher.js +28 -4
  188. package/dist/src/modules/workspace/watcher.js.map +1 -1
  189. package/dist/src/prose-drafts.d.ts +240 -0
  190. package/dist/src/prose-drafts.d.ts.map +1 -0
  191. package/dist/src/prose-drafts.js +362 -0
  192. package/dist/src/prose-drafts.js.map +1 -0
  193. package/dist/src/prose-segments.d.ts +21 -2
  194. package/dist/src/prose-segments.d.ts.map +1 -1
  195. package/dist/src/prose-segments.js +46 -9
  196. package/dist/src/prose-segments.js.map +1 -1
  197. package/dist/src/recovery/offline-branch.d.ts +1 -0
  198. package/dist/src/recovery/offline-branch.d.ts.map +1 -1
  199. package/dist/src/recovery/offline-branch.js +3 -1
  200. package/dist/src/recovery/offline-branch.js.map +1 -1
  201. package/dist/src/safe-slice.d.ts +5 -1
  202. package/dist/src/safe-slice.d.ts.map +1 -1
  203. package/dist/src/safe-slice.js +9 -1
  204. package/dist/src/safe-slice.js.map +1 -1
  205. package/dist/src/thinking-token-stamp.d.ts +12 -0
  206. package/dist/src/thinking-token-stamp.d.ts.map +1 -1
  207. package/dist/src/thinking-token-stamp.js +34 -3
  208. package/dist/src/thinking-token-stamp.js.map +1 -1
  209. package/dist/src/tool-image-ledger.d.ts +87 -19
  210. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  211. package/dist/src/tool-image-ledger.js +135 -32
  212. package/dist/src/tool-image-ledger.js.map +1 -1
  213. package/dist/src/tool-presentation.d.ts +9 -0
  214. package/dist/src/tool-presentation.d.ts.map +1 -1
  215. package/dist/src/tool-presentation.js +257 -60
  216. package/dist/src/tool-presentation.js.map +1 -1
  217. package/dist/src/tool-result-guard.d.ts.map +1 -1
  218. package/dist/src/tool-result-guard.js +7 -10
  219. package/dist/src/tool-result-guard.js.map +1 -1
  220. package/dist/src/tool-result-history.d.ts +32 -3
  221. package/dist/src/tool-result-history.d.ts.map +1 -1
  222. package/dist/src/tool-result-history.js +106 -19
  223. package/dist/src/tool-result-history.js.map +1 -1
  224. package/dist/src/tune-out/coordinator.d.ts +25 -1
  225. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  226. package/dist/src/tune-out/coordinator.js +260 -65
  227. package/dist/src/tune-out/coordinator.js.map +1 -1
  228. package/dist/src/types/agent.d.ts +17 -5
  229. package/dist/src/types/agent.d.ts.map +1 -1
  230. package/dist/src/types/events.d.ts +17 -0
  231. package/dist/src/types/events.d.ts.map +1 -1
  232. package/dist/src/types/framework.d.ts +21 -5
  233. package/dist/src/types/framework.d.ts.map +1 -1
  234. package/dist/src/types/inference-log.d.ts +1 -1
  235. package/dist/src/types/inference-log.d.ts.map +1 -1
  236. package/dist/src/types/module.d.ts +23 -4
  237. package/dist/src/types/module.d.ts.map +1 -1
  238. package/dist/src/types/trace.d.ts +95 -6
  239. package/dist/src/types/trace.d.ts.map +1 -1
  240. package/dist/src/usage/usage-tracker.d.ts +5 -0
  241. package/dist/src/usage/usage-tracker.d.ts.map +1 -1
  242. package/dist/src/usage/usage-tracker.js +35 -8
  243. package/dist/src/usage/usage-tracker.js.map +1 -1
  244. package/package.json +6 -4
  245. package/src/agent.ts +169 -41
  246. package/src/api/mcp-server-core.ts +1 -1
  247. package/src/api/server.ts +4 -1
  248. package/src/api/types.ts +1 -1
  249. package/src/branch-names.ts +19 -0
  250. package/src/closest-names.ts +94 -0
  251. package/src/code-execution/py-runner.ts +200 -76
  252. package/src/code-execution/runtime-py.ts +49 -3
  253. package/src/code-execution/tool-definition.ts +28 -4
  254. package/src/config-checks.ts +48 -0
  255. package/src/deadline-timer.ts +44 -0
  256. package/src/error-message.ts +48 -0
  257. package/src/framework.ts +5352 -1388
  258. package/src/gate/event-gate.ts +28 -3
  259. package/src/index.ts +11 -2
  260. package/src/mcpl/channel-registry.ts +517 -286
  261. package/src/mcpl/checkpoint-manager.ts +104 -29
  262. package/src/mcpl/conversation-router.ts +28 -8
  263. package/src/mcpl/convert-block.ts +97 -0
  264. package/src/mcpl/errors.ts +28 -0
  265. package/src/mcpl/hook-orchestrator.ts +84 -77
  266. package/src/mcpl/inbound-source.ts +156 -0
  267. package/src/mcpl/index.ts +10 -1
  268. package/src/mcpl/inference-router.ts +174 -99
  269. package/src/mcpl/push-coalescer.ts +60 -24
  270. package/src/mcpl/push-handler.ts +20 -90
  271. package/src/mcpl/reference-fetcher.ts +71 -26
  272. package/src/mcpl/references.ts +81 -22
  273. package/src/mcpl/server-connection.ts +427 -132
  274. package/src/mcpl/server-registry.ts +15 -4
  275. package/src/mcpl/skip-reply-wake.ts +73 -0
  276. package/src/mcpl/transport.ts +120 -18
  277. package/src/mcpl/types.ts +14 -3
  278. package/src/mcpl/visible-content.ts +27 -0
  279. package/src/module-registry.ts +58 -23
  280. package/src/modules/api/index.ts +1 -1
  281. package/src/modules/discord/discord-js-client.ts +26 -10
  282. package/src/modules/discord/index.ts +391 -158
  283. package/src/modules/discord/types.ts +15 -2
  284. package/src/modules/health/index.ts +2 -1
  285. package/src/modules/history/index.ts +410 -120
  286. package/src/modules/history/semantic.ts +189 -32
  287. package/src/modules/unknown-tool.ts +16 -0
  288. package/src/modules/workspace/disk-agreement.ts +51 -3
  289. package/src/modules/workspace/effects.ts +279 -35
  290. package/src/modules/workspace/index.ts +810 -260
  291. package/src/modules/workspace/observe.ts +194 -20
  292. package/src/modules/workspace/reconcile.ts +619 -64
  293. package/src/modules/workspace/types.ts +18 -4
  294. package/src/modules/workspace/watcher.ts +27 -4
  295. package/src/prose-drafts.ts +481 -0
  296. package/src/prose-segments.ts +51 -8
  297. package/src/recovery/offline-branch.ts +4 -1
  298. package/src/safe-slice.ts +9 -1
  299. package/src/thinking-token-stamp.ts +34 -3
  300. package/src/tool-image-ledger.ts +153 -34
  301. package/src/tool-presentation.ts +224 -40
  302. package/src/tool-result-guard.ts +7 -8
  303. package/src/tool-result-history.ts +124 -20
  304. package/src/tune-out/coordinator.ts +259 -65
  305. package/src/types/agent.ts +17 -7
  306. package/src/types/events.ts +17 -0
  307. package/src/types/framework.ts +21 -5
  308. package/src/types/inference-log.ts +1 -1
  309. package/src/types/module.ts +24 -4
  310. package/src/types/trace.ts +101 -6
  311. package/src/usage/usage-tracker.ts +32 -8
  312. package/dist/test/activation-request-sanitize.test.d.ts +0 -2
  313. package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
  314. package/dist/test/activation-request-sanitize.test.js +0 -89
  315. package/dist/test/activation-request-sanitize.test.js.map +0 -1
  316. package/dist/test/agent-cache-ttl.test.d.ts +0 -2
  317. package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
  318. package/dist/test/agent-cache-ttl.test.js +0 -41
  319. package/dist/test/agent-cache-ttl.test.js.map +0 -1
  320. package/dist/test/agent-runtime-settings.test.d.ts +0 -2
  321. package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
  322. package/dist/test/agent-runtime-settings.test.js +0 -1598
  323. package/dist/test/agent-runtime-settings.test.js.map +0 -1
  324. package/dist/test/api-admin-gate.test.d.ts +0 -2
  325. package/dist/test/api-admin-gate.test.d.ts.map +0 -1
  326. package/dist/test/api-admin-gate.test.js +0 -116
  327. package/dist/test/api-admin-gate.test.js.map +0 -1
  328. package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
  329. package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
  330. package/dist/test/assistant-persist-refusal.test.js +0 -63
  331. package/dist/test/assistant-persist-refusal.test.js.map +0 -1
  332. package/dist/test/batched-wake-locus.test.d.ts +0 -2
  333. package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
  334. package/dist/test/batched-wake-locus.test.js +0 -166
  335. package/dist/test/batched-wake-locus.test.js.map +0 -1
  336. package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
  337. package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
  338. package/dist/test/busy-agent-scheduler.test.js +0 -92
  339. package/dist/test/busy-agent-scheduler.test.js.map +0 -1
  340. package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
  341. package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
  342. package/dist/test/channel-incoming-targeting.test.js +0 -81
  343. package/dist/test/channel-incoming-targeting.test.js.map +0 -1
  344. package/dist/test/channel-label-history.test.d.ts +0 -2
  345. package/dist/test/channel-label-history.test.d.ts.map +0 -1
  346. package/dist/test/channel-label-history.test.js +0 -424
  347. package/dist/test/channel-label-history.test.js.map +0 -1
  348. package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
  349. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
  350. package/dist/test/channel-lifecycle-provenance.test.js +0 -47
  351. package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
  352. package/dist/test/channel-registry-routing.test.d.ts +0 -2
  353. package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
  354. package/dist/test/channel-registry-routing.test.js +0 -446
  355. package/dist/test/channel-registry-routing.test.js.map +0 -1
  356. package/dist/test/channel-registry-typing.test.d.ts +0 -2
  357. package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
  358. package/dist/test/channel-registry-typing.test.js +0 -91
  359. package/dist/test/channel-registry-typing.test.js.map +0 -1
  360. package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
  361. package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
  362. package/dist/test/channels-changed-respond-first.test.js +0 -74
  363. package/dist/test/channels-changed-respond-first.test.js.map +0 -1
  364. package/dist/test/checkpoint-attribution.test.d.ts +0 -2
  365. package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
  366. package/dist/test/checkpoint-attribution.test.js +0 -200
  367. package/dist/test/checkpoint-attribution.test.js.map +0 -1
  368. package/dist/test/code-execution.test.d.ts +0 -11
  369. package/dist/test/code-execution.test.d.ts.map +0 -1
  370. package/dist/test/code-execution.test.js +0 -1272
  371. package/dist/test/code-execution.test.js.map +0 -1
  372. package/dist/test/component-defaults.test.d.ts +0 -2
  373. package/dist/test/component-defaults.test.d.ts.map +0 -1
  374. package/dist/test/component-defaults.test.js +0 -54
  375. package/dist/test/component-defaults.test.js.map +0 -1
  376. package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
  377. package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
  378. package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
  379. package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
  380. package/dist/test/conversation-router.test.d.ts +0 -2
  381. package/dist/test/conversation-router.test.d.ts.map +0 -1
  382. package/dist/test/conversation-router.test.js +0 -174
  383. package/dist/test/conversation-router.test.js.map +0 -1
  384. package/dist/test/conversation-routing.test.d.ts +0 -7
  385. package/dist/test/conversation-routing.test.d.ts.map +0 -1
  386. package/dist/test/conversation-routing.test.js +0 -621
  387. package/dist/test/conversation-routing.test.js.map +0 -1
  388. package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
  389. package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
  390. package/dist/test/deferred-wake-integrity.test.js +0 -320
  391. package/dist/test/deferred-wake-integrity.test.js.map +0 -1
  392. package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
  393. package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
  394. package/dist/test/discord-awareness-outbox.test.js +0 -371
  395. package/dist/test/discord-awareness-outbox.test.js.map +0 -1
  396. package/dist/test/discord-history-delete-window.test.d.ts +0 -2
  397. package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
  398. package/dist/test/discord-history-delete-window.test.js +0 -81
  399. package/dist/test/discord-history-delete-window.test.js.map +0 -1
  400. package/dist/test/discord-history-sync.test.d.ts +0 -2
  401. package/dist/test/discord-history-sync.test.d.ts.map +0 -1
  402. package/dist/test/discord-history-sync.test.js +0 -56
  403. package/dist/test/discord-history-sync.test.js.map +0 -1
  404. package/dist/test/discord-typing-keepalive.test.d.ts +0 -2
  405. package/dist/test/discord-typing-keepalive.test.d.ts.map +0 -1
  406. package/dist/test/discord-typing-keepalive.test.js +0 -77
  407. package/dist/test/discord-typing-keepalive.test.js.map +0 -1
  408. package/dist/test/ephemeral-settle.test.d.ts +0 -2
  409. package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
  410. package/dist/test/ephemeral-settle.test.js +0 -354
  411. package/dist/test/ephemeral-settle.test.js.map +0 -1
  412. package/dist/test/event-gate-passthrough.test.d.ts +0 -15
  413. package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
  414. package/dist/test/event-gate-passthrough.test.js +0 -289
  415. package/dist/test/event-gate-passthrough.test.js.map +0 -1
  416. package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
  417. package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
  418. package/dist/test/event-gate-policy-mutation.test.js +0 -137
  419. package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
  420. package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
  421. package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
  422. package/dist/test/event-gate-rate-limit.test.js +0 -627
  423. package/dist/test/event-gate-rate-limit.test.js.map +0 -1
  424. package/dist/test/event-gate-script.test.d.ts +0 -2
  425. package/dist/test/event-gate-script.test.d.ts.map +0 -1
  426. package/dist/test/event-gate-script.test.js +0 -95
  427. package/dist/test/event-gate-script.test.js.map +0 -1
  428. package/dist/test/event-gate-selfwake.test.d.ts +0 -15
  429. package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
  430. package/dist/test/event-gate-selfwake.test.js +0 -125
  431. package/dist/test/event-gate-selfwake.test.js.map +0 -1
  432. package/dist/test/event-gate-tags.test.d.ts +0 -2
  433. package/dist/test/event-gate-tags.test.d.ts.map +0 -1
  434. package/dist/test/event-gate-tags.test.js +0 -76
  435. package/dist/test/event-gate-tags.test.js.map +0 -1
  436. package/dist/test/event-gate.test.d.ts +0 -2
  437. package/dist/test/event-gate.test.d.ts.map +0 -1
  438. package/dist/test/event-gate.test.js +0 -919
  439. package/dist/test/event-gate.test.js.map +0 -1
  440. package/dist/test/explicit-prose-routing.test.d.ts +0 -11
  441. package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
  442. package/dist/test/explicit-prose-routing.test.js +0 -1715
  443. package/dist/test/explicit-prose-routing.test.js.map +0 -1
  444. package/dist/test/framework.test.d.ts +0 -5
  445. package/dist/test/framework.test.d.ts.map +0 -1
  446. package/dist/test/framework.test.js +0 -1048
  447. package/dist/test/framework.test.js.map +0 -1
  448. package/dist/test/gather-context-timeout.test.d.ts +0 -2
  449. package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
  450. package/dist/test/gather-context-timeout.test.js +0 -120
  451. package/dist/test/gather-context-timeout.test.js.map +0 -1
  452. package/dist/test/health-snapshot.test.d.ts +0 -2
  453. package/dist/test/health-snapshot.test.d.ts.map +0 -1
  454. package/dist/test/health-snapshot.test.js +0 -74
  455. package/dist/test/health-snapshot.test.js.map +0 -1
  456. package/dist/test/helpers/coalescing-fixture.d.ts +0 -74
  457. package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
  458. package/dist/test/helpers/coalescing-fixture.js +0 -152
  459. package/dist/test/helpers/coalescing-fixture.js.map +0 -1
  460. package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
  461. package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
  462. package/dist/test/helpers/coalescing-kill-child.js +0 -24
  463. package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
  464. package/dist/test/helpers/mock-membrane.d.ts +0 -53
  465. package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
  466. package/dist/test/helpers/mock-membrane.js +0 -168
  467. package/dist/test/helpers/mock-membrane.js.map +0 -1
  468. package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
  469. package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
  470. package/dist/test/helpers/pytc-stop-rows.js +0 -143
  471. package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
  472. package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
  473. package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
  474. package/dist/test/helpers/quiesce-crash-child.js +0 -156
  475. package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
  476. package/dist/test/hide-then-turn.test.d.ts +0 -2
  477. package/dist/test/hide-then-turn.test.d.ts.map +0 -1
  478. package/dist/test/hide-then-turn.test.js +0 -101
  479. package/dist/test/hide-then-turn.test.js.map +0 -1
  480. package/dist/test/history-module-overview.test.d.ts +0 -2
  481. package/dist/test/history-module-overview.test.d.ts.map +0 -1
  482. package/dist/test/history-module-overview.test.js +0 -711
  483. package/dist/test/history-module-overview.test.js.map +0 -1
  484. package/dist/test/history-module-realstore.test.d.ts +0 -2
  485. package/dist/test/history-module-realstore.test.d.ts.map +0 -1
  486. package/dist/test/history-module-realstore.test.js +0 -363
  487. package/dist/test/history-module-realstore.test.js.map +0 -1
  488. package/dist/test/history-module-semantic.test.d.ts +0 -2
  489. package/dist/test/history-module-semantic.test.d.ts.map +0 -1
  490. package/dist/test/history-module-semantic.test.js +0 -213
  491. package/dist/test/history-module-semantic.test.js.map +0 -1
  492. package/dist/test/history-module-ux.test.d.ts +0 -2
  493. package/dist/test/history-module-ux.test.d.ts.map +0 -1
  494. package/dist/test/history-module-ux.test.js +0 -304
  495. package/dist/test/history-module-ux.test.js.map +0 -1
  496. package/dist/test/history-module.test.d.ts +0 -2
  497. package/dist/test/history-module.test.d.ts.map +0 -1
  498. package/dist/test/history-module.test.js +0 -619
  499. package/dist/test/history-module.test.js.map +0 -1
  500. package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
  501. package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
  502. package/dist/test/history-semantic-review-findings.test.js +0 -338
  503. package/dist/test/history-semantic-review-findings.test.js.map +0 -1
  504. package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
  505. package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
  506. package/dist/test/history-semantic-sync-converges.test.js +0 -109
  507. package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
  508. package/dist/test/host-quiesce.test.d.ts +0 -2
  509. package/dist/test/host-quiesce.test.d.ts.map +0 -1
  510. package/dist/test/host-quiesce.test.js +0 -988
  511. package/dist/test/host-quiesce.test.js.map +0 -1
  512. package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
  513. package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
  514. package/dist/test/inference-exhaustion-rewind.test.js +0 -387
  515. package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
  516. package/dist/test/inference-failure-bounds.test.d.ts +0 -2
  517. package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
  518. package/dist/test/inference-failure-bounds.test.js +0 -1202
  519. package/dist/test/inference-failure-bounds.test.js.map +0 -1
  520. package/dist/test/inference-failure-observability.test.d.ts +0 -2
  521. package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
  522. package/dist/test/inference-failure-observability.test.js +0 -84
  523. package/dist/test/inference-failure-observability.test.js.map +0 -1
  524. package/dist/test/journal-tool.test.d.ts +0 -2
  525. package/dist/test/journal-tool.test.d.ts.map +0 -1
  526. package/dist/test/journal-tool.test.js +0 -33
  527. package/dist/test/journal-tool.test.js.map +0 -1
  528. package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
  529. package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
  530. package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
  531. package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
  532. package/dist/test/kv-unified-wiring.test.d.ts +0 -2
  533. package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
  534. package/dist/test/kv-unified-wiring.test.js +0 -95
  535. package/dist/test/kv-unified-wiring.test.js.map +0 -1
  536. package/dist/test/late-events-after-stop.test.d.ts +0 -2
  537. package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
  538. package/dist/test/late-events-after-stop.test.js +0 -122
  539. package/dist/test/late-events-after-stop.test.js.map +0 -1
  540. package/dist/test/liveness-watchdog.test.d.ts +0 -2
  541. package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
  542. package/dist/test/liveness-watchdog.test.js +0 -94
  543. package/dist/test/liveness-watchdog.test.js.map +0 -1
  544. package/dist/test/machine-close-provenance.test.d.ts +0 -2
  545. package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
  546. package/dist/test/machine-close-provenance.test.js +0 -116
  547. package/dist/test/machine-close-provenance.test.js.map +0 -1
  548. package/dist/test/maintenance-timer.test.d.ts +0 -2
  549. package/dist/test/maintenance-timer.test.d.ts.map +0 -1
  550. package/dist/test/maintenance-timer.test.js +0 -1827
  551. package/dist/test/maintenance-timer.test.js.map +0 -1
  552. package/dist/test/mcp-server-bin.test.d.ts +0 -2
  553. package/dist/test/mcp-server-bin.test.d.ts.map +0 -1
  554. package/dist/test/mcp-server-bin.test.js +0 -142
  555. package/dist/test/mcp-server-bin.test.js.map +0 -1
  556. package/dist/test/mcpl-access-provider.test.d.ts +0 -2
  557. package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
  558. package/dist/test/mcpl-access-provider.test.js +0 -20
  559. package/dist/test/mcpl-access-provider.test.js.map +0 -1
  560. package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
  561. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
  562. package/dist/test/mcpl-awareness-barrier.test.js +0 -769
  563. package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
  564. package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
  565. package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
  566. package/dist/test/mcpl-capability-grant.test.js +0 -111
  567. package/dist/test/mcpl-capability-grant.test.js.map +0 -1
  568. package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
  569. package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
  570. package/dist/test/mcpl-capability-scoping.test.js +0 -266
  571. package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
  572. package/dist/test/mcpl-child-env.test.d.ts +0 -2
  573. package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
  574. package/dist/test/mcpl-child-env.test.js +0 -158
  575. package/dist/test/mcpl-child-env.test.js.map +0 -1
  576. package/dist/test/mcpl-coalesced-content-parity.test.d.ts +0 -2
  577. package/dist/test/mcpl-coalesced-content-parity.test.d.ts.map +0 -1
  578. package/dist/test/mcpl-coalesced-content-parity.test.js +0 -532
  579. package/dist/test/mcpl-coalesced-content-parity.test.js.map +0 -1
  580. package/dist/test/mcpl-coalescing.test.d.ts +0 -2
  581. package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
  582. package/dist/test/mcpl-coalescing.test.js +0 -1125
  583. package/dist/test/mcpl-coalescing.test.js.map +0 -1
  584. package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
  585. package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
  586. package/dist/test/mcpl-config-diagnostics.test.js +0 -452
  587. package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
  588. package/dist/test/mcpl-empty-content.test.d.ts +0 -2
  589. package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
  590. package/dist/test/mcpl-empty-content.test.js +0 -368
  591. package/dist/test/mcpl-empty-content.test.js.map +0 -1
  592. package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
  593. package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
  594. package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
  595. package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
  596. package/dist/test/mcpl-list-status.test.d.ts +0 -2
  597. package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
  598. package/dist/test/mcpl-list-status.test.js +0 -82
  599. package/dist/test/mcpl-list-status.test.js.map +0 -1
  600. package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
  601. package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
  602. package/dist/test/mcpl-manifest-changed.test.js +0 -178
  603. package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
  604. package/dist/test/mcpl-push-convert.test.d.ts +0 -2
  605. package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
  606. package/dist/test/mcpl-push-convert.test.js +0 -42
  607. package/dist/test/mcpl-push-convert.test.js.map +0 -1
  608. package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
  609. package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
  610. package/dist/test/mcpl-reconnect-events.test.js +0 -144
  611. package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
  612. package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
  613. package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
  614. package/dist/test/mcpl-reconnect-reregistration.test.js +0 -238
  615. package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
  616. package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
  617. package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
  618. package/dist/test/mcpl-reference-fetcher.test.js +0 -427
  619. package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
  620. package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
  621. package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
  622. package/dist/test/mcpl-reference-fields.test.js +0 -149
  623. package/dist/test/mcpl-reference-fields.test.js.map +0 -1
  624. package/dist/test/mcpl-rejection-log-lines.test.d.ts +0 -2
  625. package/dist/test/mcpl-rejection-log-lines.test.d.ts.map +0 -1
  626. package/dist/test/mcpl-rejection-log-lines.test.js +0 -349
  627. package/dist/test/mcpl-rejection-log-lines.test.js.map +0 -1
  628. package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
  629. package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
  630. package/dist/test/mcpl-request-timeout.test.js +0 -138
  631. package/dist/test/mcpl-request-timeout.test.js.map +0 -1
  632. package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
  633. package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
  634. package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
  635. package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
  636. package/dist/test/mcpl-stderr-tail.test.d.ts +0 -2
  637. package/dist/test/mcpl-stderr-tail.test.d.ts.map +0 -1
  638. package/dist/test/mcpl-stderr-tail.test.js +0 -210
  639. package/dist/test/mcpl-stderr-tail.test.js.map +0 -1
  640. package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
  641. package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
  642. package/dist/test/mcpl-tool-class-listing.test.js +0 -147
  643. package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
  644. package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
  645. package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
  646. package/dist/test/mcpl-tool-classes.test.js +0 -80
  647. package/dist/test/mcpl-tool-classes.test.js.map +0 -1
  648. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
  649. package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
  650. package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
  651. package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
  652. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
  653. package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
  654. package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
  655. package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
  656. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
  657. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
  658. package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
  659. package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
  660. package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
  661. package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
  662. package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
  663. package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
  664. package/dist/test/mcpl-transport-close.test.d.ts +0 -2
  665. package/dist/test/mcpl-transport-close.test.d.ts.map +0 -1
  666. package/dist/test/mcpl-transport-close.test.js +0 -373
  667. package/dist/test/mcpl-transport-close.test.js.map +0 -1
  668. package/dist/test/mcpl-transport-spawn.test.d.ts +0 -2
  669. package/dist/test/mcpl-transport-spawn.test.d.ts.map +0 -1
  670. package/dist/test/mcpl-transport-spawn.test.js +0 -58
  671. package/dist/test/mcpl-transport-spawn.test.js.map +0 -1
  672. package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
  673. package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
  674. package/dist/test/mcpl-ws-transport.test.js +0 -259
  675. package/dist/test/mcpl-ws-transport.test.js.map +0 -1
  676. package/dist/test/module-context-integration.test.d.ts +0 -18
  677. package/dist/test/module-context-integration.test.d.ts.map +0 -1
  678. package/dist/test/module-context-integration.test.js +0 -181
  679. package/dist/test/module-context-integration.test.js.map +0 -1
  680. package/dist/test/offline-recovery-branch.test.d.ts +0 -2
  681. package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
  682. package/dist/test/offline-recovery-branch.test.js +0 -570
  683. package/dist/test/offline-recovery-branch.test.js.map +0 -1
  684. package/dist/test/operator-surgery.test.d.ts +0 -2
  685. package/dist/test/operator-surgery.test.d.ts.map +0 -1
  686. package/dist/test/operator-surgery.test.js +0 -595
  687. package/dist/test/operator-surgery.test.js.map +0 -1
  688. package/dist/test/ops-alert.test.d.ts +0 -2
  689. package/dist/test/ops-alert.test.d.ts.map +0 -1
  690. package/dist/test/ops-alert.test.js +0 -153
  691. package/dist/test/ops-alert.test.js.map +0 -1
  692. package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
  693. package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
  694. package/dist/test/overbudget-drain-breaker.test.js +0 -198
  695. package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
  696. package/dist/test/pack-installs-alone.test.d.ts +0 -2
  697. package/dist/test/pack-installs-alone.test.d.ts.map +0 -1
  698. package/dist/test/pack-installs-alone.test.js +0 -284
  699. package/dist/test/pack-installs-alone.test.js.map +0 -1
  700. package/dist/test/per-agent-delivery.test.d.ts +0 -2
  701. package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
  702. package/dist/test/per-agent-delivery.test.js +0 -108
  703. package/dist/test/per-agent-delivery.test.js.map +0 -1
  704. package/dist/test/physical-window-restart.test.d.ts +0 -16
  705. package/dist/test/physical-window-restart.test.d.ts.map +0 -1
  706. package/dist/test/physical-window-restart.test.js +0 -487
  707. package/dist/test/physical-window-restart.test.js.map +0 -1
  708. package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
  709. package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
  710. package/dist/test/placed-reaction-baseline.test.js +0 -312
  711. package/dist/test/placed-reaction-baseline.test.js.map +0 -1
  712. package/dist/test/present-while-acting.test.d.ts +0 -19
  713. package/dist/test/present-while-acting.test.d.ts.map +0 -1
  714. package/dist/test/present-while-acting.test.js +0 -1649
  715. package/dist/test/present-while-acting.test.js.map +0 -1
  716. package/dist/test/prose-segments.test.d.ts +0 -2
  717. package/dist/test/prose-segments.test.d.ts.map +0 -1
  718. package/dist/test/prose-segments.test.js +0 -52
  719. package/dist/test/prose-segments.test.js.map +0 -1
  720. package/dist/test/prose-stream-router.test.d.ts +0 -2
  721. package/dist/test/prose-stream-router.test.d.ts.map +0 -1
  722. package/dist/test/prose-stream-router.test.js +0 -171
  723. package/dist/test/prose-stream-router.test.js.map +0 -1
  724. package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
  725. package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
  726. package/dist/test/provider-acceleration-cooldown.test.js +0 -435
  727. package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
  728. package/dist/test/provider-waits.test.d.ts +0 -2
  729. package/dist/test/provider-waits.test.d.ts.map +0 -1
  730. package/dist/test/provider-waits.test.js +0 -2259
  731. package/dist/test/provider-waits.test.js.map +0 -1
  732. package/dist/test/puppet-tool-call.test.d.ts +0 -2
  733. package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
  734. package/dist/test/puppet-tool-call.test.js +0 -226
  735. package/dist/test/puppet-tool-call.test.js.map +0 -1
  736. package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
  737. package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
  738. package/dist/test/puppet-turn-reservation.test.js +0 -139
  739. package/dist/test/puppet-turn-reservation.test.js.map +0 -1
  740. package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
  741. package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
  742. package/dist/test/reaction-baseline-platform.test.js +0 -124
  743. package/dist/test/reaction-baseline-platform.test.js.map +0 -1
  744. package/dist/test/record-journal.test.d.ts +0 -6
  745. package/dist/test/record-journal.test.d.ts.map +0 -1
  746. package/dist/test/record-journal.test.js +0 -269
  747. package/dist/test/record-journal.test.js.map +0 -1
  748. package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
  749. package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
  750. package/dist/test/refusal-reaction-baseline.test.js +0 -81
  751. package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
  752. package/dist/test/refusal-rewind.test.d.ts +0 -2
  753. package/dist/test/refusal-rewind.test.d.ts.map +0 -1
  754. package/dist/test/refusal-rewind.test.js +0 -117
  755. package/dist/test/refusal-rewind.test.js.map +0 -1
  756. package/dist/test/refusal-single-call.test.d.ts +0 -2
  757. package/dist/test/refusal-single-call.test.d.ts.map +0 -1
  758. package/dist/test/refusal-single-call.test.js +0 -177
  759. package/dist/test/refusal-single-call.test.js.map +0 -1
  760. package/dist/test/release-bump.test.d.ts +0 -2
  761. package/dist/test/release-bump.test.d.ts.map +0 -1
  762. package/dist/test/release-bump.test.js +0 -248
  763. package/dist/test/release-bump.test.js.map +0 -1
  764. package/dist/test/release-changelog.test.d.ts +0 -2
  765. package/dist/test/release-changelog.test.d.ts.map +0 -1
  766. package/dist/test/release-changelog.test.js +0 -159
  767. package/dist/test/release-changelog.test.js.map +0 -1
  768. package/dist/test/release-holds.test.d.ts +0 -2
  769. package/dist/test/release-holds.test.d.ts.map +0 -1
  770. package/dist/test/release-holds.test.js +0 -456
  771. package/dist/test/release-holds.test.js.map +0 -1
  772. package/dist/test/same-round-think-policy.test.d.ts +0 -2
  773. package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
  774. package/dist/test/same-round-think-policy.test.js +0 -853
  775. package/dist/test/same-round-think-policy.test.js.map +0 -1
  776. package/dist/test/save-recent-image.test.d.ts +0 -26
  777. package/dist/test/save-recent-image.test.d.ts.map +0 -1
  778. package/dist/test/save-recent-image.test.js +0 -974
  779. package/dist/test/save-recent-image.test.js.map +0 -1
  780. package/dist/test/shutdown-errors.test.d.ts +0 -2
  781. package/dist/test/shutdown-errors.test.d.ts.map +0 -1
  782. package/dist/test/shutdown-errors.test.js +0 -662
  783. package/dist/test/shutdown-errors.test.js.map +0 -1
  784. package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
  785. package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
  786. package/dist/test/silent-heartbeat-rows.test.js +0 -451
  787. package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
  788. package/dist/test/silent-heartbeat.test.d.ts +0 -2
  789. package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
  790. package/dist/test/silent-heartbeat.test.js +0 -165
  791. package/dist/test/silent-heartbeat.test.js.map +0 -1
  792. package/dist/test/state-scaling-e2e.test.d.ts +0 -22
  793. package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
  794. package/dist/test/state-scaling-e2e.test.js +0 -206
  795. package/dist/test/state-scaling-e2e.test.js.map +0 -1
  796. package/dist/test/state-scaling.test.d.ts +0 -12
  797. package/dist/test/state-scaling.test.d.ts.map +0 -1
  798. package/dist/test/state-scaling.test.js +0 -251
  799. package/dist/test/state-scaling.test.js.map +0 -1
  800. package/dist/test/stop-with-host-operations.test.d.ts +0 -20
  801. package/dist/test/stop-with-host-operations.test.d.ts.map +0 -1
  802. package/dist/test/stop-with-host-operations.test.js +0 -1174
  803. package/dist/test/stop-with-host-operations.test.js.map +0 -1
  804. package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
  805. package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
  806. package/dist/test/stop-with-work-in-flight.test.js +0 -784
  807. package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
  808. package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
  809. package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
  810. package/dist/test/surgery-marks-receipt.test.js +0 -540
  811. package/dist/test/surgery-marks-receipt.test.js.map +0 -1
  812. package/dist/test/thinking-token-stamp.test.d.ts +0 -12
  813. package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
  814. package/dist/test/thinking-token-stamp.test.js +0 -129
  815. package/dist/test/thinking-token-stamp.test.js.map +0 -1
  816. package/dist/test/timezone.test.d.ts +0 -2
  817. package/dist/test/timezone.test.d.ts.map +0 -1
  818. package/dist/test/timezone.test.js +0 -18
  819. package/dist/test/timezone.test.js.map +0 -1
  820. package/dist/test/tool-batch-hook.test.d.ts +0 -8
  821. package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
  822. package/dist/test/tool-batch-hook.test.js +0 -275
  823. package/dist/test/tool-batch-hook.test.js.map +0 -1
  824. package/dist/test/tool-policy.test.d.ts +0 -2
  825. package/dist/test/tool-policy.test.d.ts.map +0 -1
  826. package/dist/test/tool-policy.test.js +0 -51
  827. package/dist/test/tool-policy.test.js.map +0 -1
  828. package/dist/test/tool-presentation.test.d.ts +0 -2
  829. package/dist/test/tool-presentation.test.d.ts.map +0 -1
  830. package/dist/test/tool-presentation.test.js +0 -268
  831. package/dist/test/tool-presentation.test.js.map +0 -1
  832. package/dist/test/tool-result-content.test.d.ts +0 -2
  833. package/dist/test/tool-result-content.test.d.ts.map +0 -1
  834. package/dist/test/tool-result-content.test.js +0 -37
  835. package/dist/test/tool-result-content.test.js.map +0 -1
  836. package/dist/test/tool-result-guard.test.d.ts +0 -2
  837. package/dist/test/tool-result-guard.test.d.ts.map +0 -1
  838. package/dist/test/tool-result-guard.test.js +0 -3729
  839. package/dist/test/tool-result-guard.test.js.map +0 -1
  840. package/dist/test/tool-result-history.test.d.ts +0 -7
  841. package/dist/test/tool-result-history.test.d.ts.map +0 -1
  842. package/dist/test/tool-result-history.test.js +0 -156
  843. package/dist/test/tool-result-history.test.js.map +0 -1
  844. package/dist/test/tool-result-spill.test.d.ts +0 -13
  845. package/dist/test/tool-result-spill.test.d.ts.map +0 -1
  846. package/dist/test/tool-result-spill.test.js +0 -586
  847. package/dist/test/tool-result-spill.test.js.map +0 -1
  848. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
  849. package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
  850. package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
  851. package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
  852. package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
  853. package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
  854. package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
  855. package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
  856. package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
  857. package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
  858. package/dist/test/tools-observe-parser-conformance.test.js +0 -129
  859. package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
  860. package/dist/test/trunk-channel-routing.test.d.ts +0 -19
  861. package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
  862. package/dist/test/trunk-channel-routing.test.js +0 -652
  863. package/dist/test/trunk-channel-routing.test.js.map +0 -1
  864. package/dist/test/tune-out-e2e.test.d.ts +0 -2
  865. package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
  866. package/dist/test/tune-out-e2e.test.js +0 -142
  867. package/dist/test/tune-out-e2e.test.js.map +0 -1
  868. package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
  869. package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
  870. package/dist/test/tune-out-gate-composition.test.js +0 -221
  871. package/dist/test/tune-out-gate-composition.test.js.map +0 -1
  872. package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
  873. package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
  874. package/dist/test/tune-out-lifecycle.test.js +0 -121
  875. package/dist/test/tune-out-lifecycle.test.js.map +0 -1
  876. package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
  877. package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
  878. package/dist/test/turn-trigger-provenance.test.js +0 -137
  879. package/dist/test/turn-trigger-provenance.test.js.map +0 -1
  880. package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
  881. package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
  882. package/dist/test/unconvertible-tool-result.test.js +0 -358
  883. package/dist/test/unconvertible-tool-result.test.js.map +0 -1
  884. package/dist/test/unsent-compiles.test.d.ts +0 -2
  885. package/dist/test/unsent-compiles.test.d.ts.map +0 -1
  886. package/dist/test/unsent-compiles.test.js +0 -139
  887. package/dist/test/unsent-compiles.test.js.map +0 -1
  888. package/dist/test/usage-accounting.test.d.ts +0 -2
  889. package/dist/test/usage-accounting.test.d.ts.map +0 -1
  890. package/dist/test/usage-accounting.test.js +0 -13
  891. package/dist/test/usage-accounting.test.js.map +0 -1
  892. package/dist/test/usage-tracker.test.d.ts +0 -2
  893. package/dist/test/usage-tracker.test.d.ts.map +0 -1
  894. package/dist/test/usage-tracker.test.js +0 -129
  895. package/dist/test/usage-tracker.test.js.map +0 -1
  896. package/dist/test/utils-surface.test.d.ts +0 -2
  897. package/dist/test/utils-surface.test.d.ts.map +0 -1
  898. package/dist/test/utils-surface.test.js +0 -145
  899. package/dist/test/utils-surface.test.js.map +0 -1
  900. package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
  901. package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
  902. package/dist/test/workspace-branch-continuation.test.js +0 -183
  903. package/dist/test/workspace-branch-continuation.test.js.map +0 -1
  904. package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
  905. package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
  906. package/dist/test/workspace-materialize-freshness.test.js +0 -252
  907. package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
  908. package/dist/test/workspace-path-containment.test.d.ts +0 -19
  909. package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
  910. package/dist/test/workspace-path-containment.test.js +0 -91
  911. package/dist/test/workspace-path-containment.test.js.map +0 -1
  912. package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
  913. package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
  914. package/dist/test/workspace-read-file-from-disk.test.js +0 -174
  915. package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
  916. package/dist/test/workspace-read-image.test.d.ts +0 -2
  917. package/dist/test/workspace-read-image.test.d.ts.map +0 -1
  918. package/dist/test/workspace-read-image.test.js +0 -597
  919. package/dist/test/workspace-read-image.test.js.map +0 -1
  920. package/dist/test/workspace-read-text.test.d.ts +0 -2
  921. package/dist/test/workspace-read-text.test.d.ts.map +0 -1
  922. package/dist/test/workspace-read-text.test.js +0 -101
  923. package/dist/test/workspace-read-text.test.js.map +0 -1
  924. package/dist/test/workspace-restore-order.test.d.ts +0 -16
  925. package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
  926. package/dist/test/workspace-restore-order.test.js +0 -140
  927. package/dist/test/workspace-restore-order.test.js.map +0 -1
  928. package/dist/test/workspace-three-way.test.d.ts +0 -12
  929. package/dist/test/workspace-three-way.test.d.ts.map +0 -1
  930. package/dist/test/workspace-three-way.test.js +0 -4094
  931. package/dist/test/workspace-three-way.test.js.map +0 -1
  932. package/dist/test/workspace-watcher.test.d.ts +0 -2
  933. package/dist/test/workspace-watcher.test.d.ts.map +0 -1
  934. package/dist/test/workspace-watcher.test.js +0 -281
  935. package/dist/test/workspace-watcher.test.js.map +0 -1
  936. package/dist/test/xml-round-persist.test.d.ts +0 -19
  937. package/dist/test/xml-round-persist.test.d.ts.map +0 -1
  938. package/dist/test/xml-round-persist.test.js +0 -235
  939. package/dist/test/xml-round-persist.test.js.map +0 -1
  940. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,853 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { mkdtempSync, rmSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { AgentFramework } from '../src/index.js';
7
- import { MockMembrane, MockYieldingStream, createMockResponse } from './helpers/mock-membrane.js';
8
- const TILDE_PREFACE_80 = 'P'.repeat(80);
9
- const TILDE_THINK_4416 = 'T'.repeat(4416);
10
- class TestToolsModule {
11
- name = 'tools';
12
- async start(_ctx) { }
13
- async stop() { }
14
- getTools() {
15
- return [
16
- {
17
- name: 'read',
18
- description: 'Read from the workspace.',
19
- inputSchema: { type: 'object', properties: { path: { type: 'string' } }, required: ['path'] },
20
- },
21
- {
22
- name: 'ping',
23
- description: 'A non-silencing tool.',
24
- inputSchema: { type: 'object', properties: {} },
25
- },
26
- {
27
- name: 'think',
28
- description: 'A namespaced tool that happens to be called think.',
29
- inputSchema: { type: 'object', properties: { content: { type: 'string' } } },
30
- },
31
- {
32
- name: 'send_message',
33
- description: 'Explicitly send a message.',
34
- inputSchema: { type: 'object', properties: { text: { type: 'string' } }, required: ['text'] },
35
- },
36
- ];
37
- }
38
- async handleToolCall(call) {
39
- return { success: true, data: { ok: true, tool: call.name, input: call.input } };
40
- }
41
- async onProcess(event, _state) {
42
- if (event.type !== 'external-message')
43
- return {};
44
- const text = String(event.content ?? '');
45
- return {
46
- addMessages: [{ participant: 'Antra', content: [{ type: 'text', text }] }],
47
- requestInference: text === 'go',
48
- };
49
- }
50
- }
51
- function makeToolRound(preface) {
52
- return [
53
- { type: 'text', text: preface },
54
- { type: 'tool_use', id: 'think-1', name: 'think', input: { content: TILDE_THINK_4416 } },
55
- { type: 'tool_use', id: 'read-1', name: 'tools--read', input: { path: 'project/secret.txt' } },
56
- ];
57
- }
58
- function makeChannelRegistry(framework) {
59
- const routed = [];
60
- const explicit = {
61
- getChannelTools: () => [
62
- {
63
- name: 'think',
64
- description: 'private reasoning',
65
- inputSchema: {
66
- type: 'object',
67
- properties: { content: { type: 'string' } },
68
- required: [],
69
- },
70
- },
71
- {
72
- name: 'skip_reply',
73
- description: 'stay silent',
74
- inputSchema: {
75
- type: 'object',
76
- properties: { reason: { type: 'string' } },
77
- required: [],
78
- },
79
- },
80
- ],
81
- handleChannelToolCall: async (toolName) => {
82
- if (toolName === 'think') {
83
- return {
84
- success: true,
85
- data: {
86
- noted: true,
87
- note: 'Thought recorded (private — not sent anywhere). Same-round text routing depends on your current same_round_think_text_policy; use agent_settings get to inspect it, or call skip_reply to end the turn without replying.',
88
- },
89
- };
90
- }
91
- if (toolName === 'skip_reply') {
92
- return {
93
- success: true,
94
- endTurn: true,
95
- data: { skipped: true, note: 'Turn ended; nothing sent.' },
96
- };
97
- }
98
- return { success: false, error: `Unknown channel tool: ${toolName}`, isError: true };
99
- },
100
- resolveLocus: () => 'chan-test',
101
- routeSpeech: async (_agent, text) => {
102
- routed.push(text);
103
- },
104
- getDefaultPublishChannel: () => null,
105
- isChannelOpen: () => true,
106
- getDescriptor: () => undefined,
107
- };
108
- framework.channelRegistry = new Proxy(explicit, {
109
- get: (target, prop) => (prop in target ? target[prop] : () => undefined),
110
- });
111
- return routed;
112
- }
113
- async function createFramework(opts) {
114
- const dir = mkdtempSync(join(tmpdir(), 'same-round-think-'));
115
- const membrane = opts?.membrane ?? new MockMembrane();
116
- const agents = opts?.agents ?? [{
117
- name: 'agent',
118
- ...(opts?.policy !== undefined ? { sameRoundThinkTextPolicy: opts.policy } : {}),
119
- }];
120
- const framework = await AgentFramework.create({
121
- storePath: join(dir, 'store'),
122
- membrane: (membrane.asMembrane?.() ?? membrane),
123
- agents: agents.map((agent) => ({
124
- name: agent.name,
125
- model: 'test-model',
126
- systemPrompt: 'test',
127
- ...(agent.sameRoundThinkTextPolicy !== undefined
128
- ? { sameRoundThinkTextPolicy: agent.sameRoundThinkTextPolicy }
129
- : {}),
130
- })),
131
- modules: [new TestToolsModule()],
132
- });
133
- const routed = makeChannelRegistry(framework);
134
- return { dir, framework, membrane, routed };
135
- }
136
- function trigger(framework) {
137
- framework.pushEvent({
138
- type: 'external-message',
139
- source: 'test',
140
- content: 'go',
141
- metadata: {},
142
- });
143
- }
144
- async function waitFor(predicate, timeoutMs = 1000) {
145
- const deadline = Date.now() + timeoutMs;
146
- while (!predicate()) {
147
- if (Date.now() >= deadline)
148
- throw new Error('timed out waiting for condition');
149
- await new Promise(resolve => setTimeout(resolve, 5));
150
- }
151
- }
152
- class LegacyNoRoundContentStream {
153
- pendingResolve = null;
154
- deliveredComplete = false;
155
- provideToolResults(_results) {
156
- const resolve = this.pendingResolve;
157
- this.pendingResolve = null;
158
- resolve?.();
159
- }
160
- cancel() {
161
- this.deliveredComplete = true;
162
- const resolve = this.pendingResolve;
163
- this.pendingResolve = null;
164
- resolve?.();
165
- }
166
- async *[Symbol.asyncIterator]() {
167
- yield {
168
- type: 'tool-calls',
169
- calls: [
170
- { id: 'think-legacy', name: 'think', input: { content: TILDE_THINK_4416 } },
171
- { id: 'read-legacy', name: 'tools--read', input: { path: 'project/secret.txt' } },
172
- ],
173
- context: {
174
- rawText: '',
175
- preamble: TILDE_PREFACE_80,
176
- depth: 0,
177
- previousResults: [],
178
- accumulated: '',
179
- },
180
- };
181
- await new Promise((resolve) => { this.pendingResolve = resolve; });
182
- if (this.deliveredComplete)
183
- return;
184
- yield {
185
- type: 'complete',
186
- response: createMockResponse(makeToolRound(TILDE_PREFACE_80)),
187
- };
188
- }
189
- }
190
- class LegacyNoRoundContentMembrane {
191
- calls = [];
192
- streamYielding(request) {
193
- this.calls.push(request);
194
- return new LegacyNoRoundContentStream();
195
- }
196
- }
197
- class PausedAfterFirstToolRoundStream {
198
- responses;
199
- events = [];
200
- done = false;
201
- _isWaitingForTools = false;
202
- _pendingToolCallIds = [];
203
- _toolDepth = 0;
204
- pendingResolve = null;
205
- paused = false;
206
- receivedToolResults = [];
207
- receivedToolResultOptions = [];
208
- constructor(responses) {
209
- this.responses = responses;
210
- this.processResponse(0);
211
- }
212
- processResponse(index) {
213
- const response = this.responses[index];
214
- if (!response) {
215
- this.done = true;
216
- return;
217
- }
218
- if (response.rawAssistantText) {
219
- this.events.push({
220
- type: 'block',
221
- event: { event: 'block_start', index: 0, block: { type: 'text' } },
222
- });
223
- this.events.push({
224
- type: 'tokens',
225
- content: response.rawAssistantText,
226
- meta: { type: 'text', visible: true, blockIndex: 0 },
227
- });
228
- this.events.push({
229
- type: 'block',
230
- event: { event: 'block_complete', index: 0, block: { type: 'text', content: response.rawAssistantText } },
231
- });
232
- }
233
- if (response.usage) {
234
- this.events.push({ type: 'usage', usage: response.usage });
235
- }
236
- if (response.toolCalls.length > 0) {
237
- this._isWaitingForTools = true;
238
- this._pendingToolCallIds = response.toolCalls.map((tc) => tc.id);
239
- this.events.push({
240
- type: 'tool-calls',
241
- calls: response.toolCalls.map((tc) => ({
242
- id: tc.id,
243
- name: tc.name,
244
- input: tc.input,
245
- })),
246
- context: {
247
- rawText: '',
248
- preamble: '',
249
- depth: this._toolDepth,
250
- previousResults: [],
251
- accumulated: '',
252
- roundContent: response.content,
253
- },
254
- });
255
- return;
256
- }
257
- this.events.push({ type: 'complete', response });
258
- this.done = true;
259
- }
260
- provideToolResults(results, options) {
261
- if (!this._isWaitingForTools)
262
- throw new Error('Not waiting for tools');
263
- this.receivedToolResults.push(results);
264
- this.receivedToolResultOptions.push(options);
265
- this._isWaitingForTools = false;
266
- this._pendingToolCallIds = [];
267
- this._toolDepth++;
268
- if (this._toolDepth === 1) {
269
- this.paused = true;
270
- return;
271
- }
272
- this.processResponse(this._toolDepth);
273
- this.pendingResolve?.();
274
- this.pendingResolve = null;
275
- }
276
- release() {
277
- if (!this.paused)
278
- return;
279
- this.paused = false;
280
- this.processResponse(this._toolDepth);
281
- this.pendingResolve?.();
282
- this.pendingResolve = null;
283
- }
284
- cancel() {
285
- this.done = true;
286
- this._pendingToolCallIds = [];
287
- this.pendingResolve?.();
288
- this.pendingResolve = null;
289
- }
290
- get isWaitingForTools() {
291
- return this._isWaitingForTools;
292
- }
293
- get pendingToolCallIds() {
294
- return [...this._pendingToolCallIds];
295
- }
296
- get toolDepth() {
297
- return this._toolDepth;
298
- }
299
- async *[Symbol.asyncIterator]() {
300
- while (true) {
301
- while (this.events.length > 0) {
302
- const event = this.events.shift();
303
- yield event;
304
- if (event.type === 'complete' || event.type === 'error' || event.type === 'aborted') {
305
- return;
306
- }
307
- }
308
- if (this.done)
309
- return;
310
- await new Promise((resolve) => { this.pendingResolve = resolve; });
311
- }
312
- }
313
- }
314
- class ScenarioMembrane {
315
- calls = [];
316
- lastStream = null;
317
- scenarios = [];
318
- queueScenario(responses, opts) {
319
- this.scenarios.push({ responses, pauseAfterFirstToolRound: opts?.pauseAfterFirstToolRound });
320
- }
321
- streamYielding(request) {
322
- this.calls.push(request);
323
- const next = this.scenarios.shift();
324
- if (!next)
325
- throw new Error('No queued stream scenario');
326
- const stream = next.pauseAfterFirstToolRound
327
- ? new PausedAfterFirstToolRoundStream(next.responses)
328
- : new MockYieldingStream(next.responses);
329
- this.lastStream = stream;
330
- return stream;
331
- }
332
- asMembrane() {
333
- return this;
334
- }
335
- }
336
- function thinkDescription(request) {
337
- const thinkTool = (request.tools ?? []).find((tool) => tool.name === 'think');
338
- assert.ok(thinkTool, 'think tool should be present');
339
- return thinkTool.description;
340
- }
341
- async function expectInFlightResetRestoresNextInferencePolicy(opts) {
342
- const membrane = new ScenarioMembrane();
343
- membrane.queueScenario([
344
- createMockResponse([
345
- { type: 'text', text: 'private request before reset' },
346
- { type: 'tool_use', id: 'think-1', name: 'think', input: { content: TILDE_THINK_4416 } },
347
- {
348
- type: 'tool_use',
349
- id: 'settings-1',
350
- name: 'agent_settings',
351
- input: opts.resetInput,
352
- },
353
- { type: 'tool_use', id: 'read-1', name: 'tools--read', input: { path: 'project/secret.txt' } },
354
- ], 'tool_use'),
355
- createMockResponse([
356
- { type: 'text', text: 'still private in the continuation' },
357
- { type: 'tool_use', id: 'think-2', name: 'think', input: { content: TILDE_THINK_4416 } },
358
- { type: 'tool_use', id: 'ping-1', name: 'tools--ping', input: {} },
359
- ], 'tool_use'),
360
- createMockResponse([]),
361
- ], { pauseAfterFirstToolRound: true });
362
- membrane.queueScenario([
363
- createMockResponse(makeToolRound('public on the next inference'), 'tool_use'),
364
- createMockResponse([]),
365
- ]);
366
- const { dir, framework, routed } = await createFramework({
367
- ...(opts.basePolicy !== undefined ? { policy: opts.basePolicy } : {}),
368
- membrane,
369
- });
370
- try {
371
- framework.updateAgentRuntimeSettings('agent', { sameRoundThinkTextPolicy: 'private' });
372
- assert.equal(framework.getAgentRuntimeSettings('agent').sameRoundThinkTextPolicy, 'private');
373
- framework.start();
374
- trigger(framework);
375
- await waitFor(() => membrane.calls.length === 1);
376
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
377
- const firstRoundResults = membrane.lastStream.receivedToolResults[0];
378
- const settingsResult = firstRoundResults.find((result) => result.toolUseId === 'settings-1');
379
- assert.ok(settingsResult, 'agent_settings reset result should be present');
380
- assert.match(settingsResult.content, /sameRoundThinkTextPolicyUpdateNote/);
381
- assert.match(settingsResult.content, /next inference/);
382
- assert.match(thinkDescription(membrane.calls[0]), /withheld from channel routing/);
383
- assert.deepEqual(routed, []);
384
- assert.equal(framework.getAgentRuntimeSettings('agent').sameRoundThinkTextPolicy, 'public');
385
- assert.match(thinkDescription(await framework.previewActivation('agent')), /may still be routed publicly as your speech/);
386
- membrane.lastStream.release();
387
- await waitFor(() => framework.activeStreams.size === 0);
388
- assert.deepEqual(routed, []);
389
- trigger(framework);
390
- await waitFor(() => membrane.calls.length === 2);
391
- await waitFor(() => routed.length === 1);
392
- assert.match(thinkDescription(membrane.calls[1]), /may still be routed publicly as your speech/);
393
- assert.deepEqual(routed, ['public on the next inference']);
394
- }
395
- finally {
396
- await framework.stop();
397
- rmSync(dir, { recursive: true, force: true });
398
- }
399
- }
400
- describe('same-round think text policy', () => {
401
- it('compatibility default/public routes the exact Tilde-shaped same-round preface', async () => {
402
- const membrane = new MockMembrane();
403
- membrane.pushResponse(createMockResponse(makeToolRound(TILDE_PREFACE_80), 'tool_use'));
404
- membrane.pushResponse(createMockResponse([]));
405
- const { dir, framework, routed } = await createFramework({ membrane });
406
- try {
407
- trigger(framework);
408
- await framework.runUntilIdle();
409
- assert.deepEqual(routed, [TILDE_PREFACE_80]);
410
- }
411
- finally {
412
- await framework.stop();
413
- rmSync(dir, { recursive: true, force: true });
414
- }
415
- });
416
- it('recipe private routes zero same-round prose for the exact Tilde shape', async () => {
417
- const membrane = new MockMembrane();
418
- membrane.pushResponse(createMockResponse(makeToolRound(TILDE_PREFACE_80), 'tool_use'));
419
- membrane.pushResponse(createMockResponse([]));
420
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
421
- try {
422
- trigger(framework);
423
- await framework.runUntilIdle();
424
- assert.deepEqual(routed, []);
425
- }
426
- finally {
427
- await framework.stop();
428
- rmSync(dir, { recursive: true, force: true });
429
- }
430
- });
431
- it('private is non-sticky: later non-think rounds and trailing prose route normally', async () => {
432
- const membrane = new MockMembrane();
433
- membrane.pushResponse(createMockResponse(makeToolRound(TILDE_PREFACE_80), 'tool_use'));
434
- membrane.pushResponse(createMockResponse([
435
- { type: 'text', text: 'visible same turn after a non-think tool round' },
436
- { type: 'tool_use', id: 'ping-1', name: 'tools--ping', input: {} },
437
- ], 'tool_use'));
438
- membrane.pushResponse(createMockResponse([
439
- { type: 'text', text: 'visible trailing prose after tool results' },
440
- ]));
441
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
442
- try {
443
- trigger(framework);
444
- await framework.runUntilIdle();
445
- assert.deepEqual(routed, [
446
- 'visible same turn after a non-think tool round',
447
- 'visible trailing prose after tool results',
448
- ]);
449
- }
450
- finally {
451
- await framework.stop();
452
- rmSync(dir, { recursive: true, force: true });
453
- }
454
- });
455
- it('public remains non-silencing across later rounds and trailing prose', async () => {
456
- const membrane = new MockMembrane();
457
- membrane.pushResponse(createMockResponse(makeToolRound(TILDE_PREFACE_80), 'tool_use'));
458
- membrane.pushResponse(createMockResponse([
459
- { type: 'text', text: 'still public in the next tool round' },
460
- { type: 'tool_use', id: 'ping-2', name: 'tools--ping', input: {} },
461
- ], 'tool_use'));
462
- membrane.pushResponse(createMockResponse([
463
- { type: 'text', text: 'still public in trailing prose' },
464
- ]));
465
- const { dir, framework, routed } = await createFramework({ policy: 'public', membrane });
466
- try {
467
- trigger(framework);
468
- await framework.runUntilIdle();
469
- assert.deepEqual(routed, [
470
- TILDE_PREFACE_80,
471
- 'still public in the next tool round',
472
- 'still public in trailing prose',
473
- ]);
474
- }
475
- finally {
476
- await framework.stop();
477
- rmSync(dir, { recursive: true, force: true });
478
- }
479
- });
480
- it('think plus skip_reply remains silent under both policies', async () => {
481
- for (const policy of ['public', 'private']) {
482
- const membrane = new MockMembrane();
483
- membrane.pushResponse(createMockResponse([
484
- { type: 'text', text: TILDE_PREFACE_80 },
485
- { type: 'tool_use', id: `think-${policy}`, name: 'think', input: { content: TILDE_THINK_4416 } },
486
- { type: 'tool_use', id: `skip-${policy}`, name: 'skip_reply', input: { reason: 'no reply' } },
487
- ], 'tool_use'));
488
- membrane.pushResponse(createMockResponse([]));
489
- const { dir, framework, routed } = await createFramework({ policy, membrane });
490
- try {
491
- trigger(framework);
492
- await framework.runUntilIdle();
493
- assert.deepEqual(routed, [], `${policy} should stay silent`);
494
- }
495
- finally {
496
- await framework.stop();
497
- rmSync(dir, { recursive: true, force: true });
498
- }
499
- }
500
- });
501
- it('explicit-send behavior is unchanged', async () => {
502
- const membrane = new MockMembrane();
503
- membrane.pushResponse(createMockResponse([
504
- { type: 'text', text: 'sending directly' },
505
- { type: 'tool_use', id: 'send-1', name: 'tools--send_message', input: { text: 'hi' } },
506
- ], 'tool_use'));
507
- membrane.pushResponse(createMockResponse([
508
- { type: 'text', text: 'this later tool round should still stay silent' },
509
- { type: 'tool_use', id: 'ping-3', name: 'tools--ping', input: {} },
510
- ], 'tool_use'));
511
- membrane.pushResponse(createMockResponse([
512
- { type: 'text', text: 'and trailing prose should stay silent too' },
513
- ]));
514
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
515
- try {
516
- trigger(framework);
517
- await framework.runUntilIdle();
518
- assert.deepEqual(routed, []);
519
- }
520
- finally {
521
- await framework.stop();
522
- rmSync(dir, { recursive: true, force: true });
523
- }
524
- });
525
- it('private keeps the preface in Chronicle while withholding it from channel routing', async () => {
526
- const membrane = new MockMembrane();
527
- membrane.pushResponse(createMockResponse(makeToolRound(TILDE_PREFACE_80), 'tool_use'));
528
- membrane.pushResponse(createMockResponse([]));
529
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
530
- try {
531
- trigger(framework);
532
- await framework.runUntilIdle();
533
- assert.deepEqual(routed, []);
534
- const compiled = await framework.getAgent('agent').getContextManager().compile();
535
- assert.ok(compiled.messages.some((message) => JSON.stringify(message.content).includes(TILDE_PREFACE_80)), 'the same-round preface should remain in Chronicle/context');
536
- }
537
- finally {
538
- await framework.stop();
539
- rmSync(dir, { recursive: true, force: true });
540
- }
541
- });
542
- it('builds different provider-bound think descriptions per agent, and preview matches activation', async () => {
543
- const { dir, framework } = await createFramework({
544
- agents: [
545
- { name: 'public-agent', sameRoundThinkTextPolicy: 'public' },
546
- { name: 'private-agent', sameRoundThinkTextPolicy: 'private' },
547
- ],
548
- });
549
- try {
550
- const previewPublic = await framework.previewActivation('public-agent');
551
- const previewPrivate = await framework.previewActivation('private-agent');
552
- const publicThink = previewPublic.tools?.find((tool) => tool.name === 'think');
553
- const privateThink = previewPrivate.tools?.find((tool) => tool.name === 'think');
554
- const staticThinkBefore = framework.getAllTools().find((tool) => tool.name === 'think');
555
- assert.ok(publicThink);
556
- assert.ok(privateThink);
557
- assert.ok(staticThinkBefore);
558
- assert.match(publicThink.description, /may still be routed publicly as your speech/);
559
- assert.match(privateThink.description, /withheld from channel routing/);
560
- assert.equal(staticThinkBefore.description, 'private reasoning');
561
- const publicActivationTools = framework.getToolsForAgent('public-agent');
562
- const privateActivationTools = framework.getToolsForAgent('private-agent');
563
- assert.equal(publicActivationTools.find((tool) => tool.name === 'think')?.description, publicThink?.description);
564
- assert.equal(privateActivationTools.find((tool) => tool.name === 'think')?.description, privateThink?.description);
565
- assert.equal(framework.getAllTools().find((tool) => tool.name === 'think')?.description, 'private reasoning');
566
- }
567
- finally {
568
- await framework.stop();
569
- rmSync(dir, { recursive: true, force: true });
570
- }
571
- });
572
- it('a host update from public to private does not retroactively change an in-flight request snapshot', async () => {
573
- const membrane = new ScenarioMembrane();
574
- membrane.queueScenario([
575
- createMockResponse([
576
- { type: 'text', text: 'public snapshot round one' },
577
- { type: 'tool_use', id: 'think-1', name: 'think', input: { content: TILDE_THINK_4416 } },
578
- { type: 'tool_use', id: 'read-1', name: 'tools--read', input: { path: 'project/secret.txt' } },
579
- ], 'tool_use'),
580
- createMockResponse([
581
- { type: 'text', text: 'public snapshot round two' },
582
- { type: 'tool_use', id: 'think-2', name: 'think', input: { content: TILDE_THINK_4416 } },
583
- { type: 'tool_use', id: 'ping-1', name: 'tools--ping', input: {} },
584
- ], 'tool_use'),
585
- createMockResponse([]),
586
- ], { pauseAfterFirstToolRound: true });
587
- membrane.queueScenario([
588
- createMockResponse(makeToolRound('next inference should now be private'), 'tool_use'),
589
- createMockResponse([]),
590
- ]);
591
- const { dir, framework, routed } = await createFramework({ policy: 'public', membrane });
592
- try {
593
- framework.start();
594
- trigger(framework);
595
- await waitFor(() => membrane.calls.length === 1);
596
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
597
- assert.match(thinkDescription(membrane.calls[0]), /may still be routed publicly as your speech/);
598
- assert.deepEqual(routed, ['public snapshot round one']);
599
- framework.updateAgentRuntimeSettings('agent', { sameRoundThinkTextPolicy: 'private' });
600
- const preview = await framework.previewActivation('agent');
601
- assert.match(thinkDescription(preview), /withheld from channel routing/);
602
- membrane.lastStream.release();
603
- await waitFor(() => routed.length === 2);
604
- assert.deepEqual(routed, [
605
- 'public snapshot round one',
606
- 'public snapshot round two',
607
- ]);
608
- trigger(framework);
609
- await waitFor(() => membrane.calls.length === 2);
610
- await waitFor(() => framework.activeStreams.size === 0);
611
- assert.match(thinkDescription(membrane.calls[1]), /withheld from channel routing/);
612
- assert.deepEqual(routed, [
613
- 'public snapshot round one',
614
- 'public snapshot round two',
615
- ]);
616
- }
617
- finally {
618
- await framework.stop();
619
- rmSync(dir, { recursive: true, force: true });
620
- }
621
- });
622
- it('a host update from private to public does not retroactively change an in-flight request snapshot', async () => {
623
- const membrane = new ScenarioMembrane();
624
- membrane.queueScenario([
625
- createMockResponse(makeToolRound('private snapshot round one'), 'tool_use'),
626
- createMockResponse([
627
- { type: 'text', text: 'private snapshot round two' },
628
- { type: 'tool_use', id: 'think-2', name: 'think', input: { content: TILDE_THINK_4416 } },
629
- { type: 'tool_use', id: 'ping-1', name: 'tools--ping', input: {} },
630
- ], 'tool_use'),
631
- createMockResponse([]),
632
- ], { pauseAfterFirstToolRound: true });
633
- membrane.queueScenario([
634
- createMockResponse(makeToolRound('next inference should now be public'), 'tool_use'),
635
- createMockResponse([]),
636
- ]);
637
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
638
- try {
639
- framework.start();
640
- trigger(framework);
641
- await waitFor(() => membrane.calls.length === 1);
642
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
643
- assert.match(thinkDescription(membrane.calls[0]), /withheld from channel routing/);
644
- assert.deepEqual(routed, []);
645
- framework.updateAgentRuntimeSettings('agent', { sameRoundThinkTextPolicy: 'public' });
646
- membrane.lastStream.release();
647
- await waitFor(() => framework.activeStreams.size === 0);
648
- assert.deepEqual(routed, []);
649
- trigger(framework);
650
- await waitFor(() => membrane.calls.length === 2);
651
- await waitFor(() => routed.length === 1);
652
- assert.match(thinkDescription(membrane.calls[1]), /may still be routed publicly as your speech/);
653
- assert.deepEqual(routed, ['next inference should now be public']);
654
- }
655
- finally {
656
- await framework.stop();
657
- rmSync(dir, { recursive: true, force: true });
658
- }
659
- });
660
- it('same-round agent_settings updates apply immediately to preview and next request, but not to the current request snapshot', async () => {
661
- const membrane = new ScenarioMembrane();
662
- membrane.queueScenario([
663
- createMockResponse([
664
- { type: 'text', text: 'public request before update' },
665
- { type: 'tool_use', id: 'think-1', name: 'think', input: { content: TILDE_THINK_4416 } },
666
- {
667
- type: 'tool_use',
668
- id: 'settings-1',
669
- name: 'agent_settings',
670
- input: { action: 'update', same_round_think_text_policy: 'private' },
671
- },
672
- { type: 'tool_use', id: 'read-1', name: 'tools--read', input: { path: 'project/secret.txt' } },
673
- ], 'tool_use'),
674
- createMockResponse([
675
- { type: 'text', text: 'still public in the continuation' },
676
- { type: 'tool_use', id: 'think-2', name: 'think', input: { content: TILDE_THINK_4416 } },
677
- { type: 'tool_use', id: 'ping-1', name: 'tools--ping', input: {} },
678
- ], 'tool_use'),
679
- createMockResponse([]),
680
- ], { pauseAfterFirstToolRound: true });
681
- membrane.queueScenario([
682
- createMockResponse(makeToolRound('private on the next inference'), 'tool_use'),
683
- createMockResponse([]),
684
- ]);
685
- const { dir, framework, routed } = await createFramework({ policy: 'public', membrane });
686
- try {
687
- framework.start();
688
- trigger(framework);
689
- await waitFor(() => membrane.calls.length === 1);
690
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
691
- const firstRoundResults = membrane.lastStream.receivedToolResults[0];
692
- assert.ok(firstRoundResults.some((result) => result.toolUseId === 'settings-1' &&
693
- result.content.includes('sameRoundThinkTextPolicyUpdateNote')));
694
- assert.deepEqual(routed, ['public request before update']);
695
- assert.equal(framework.getAgentRuntimeSettings('agent').sameRoundThinkTextPolicy, 'private');
696
- assert.match(thinkDescription(await framework.previewActivation('agent')), /withheld from channel routing/);
697
- membrane.lastStream.release();
698
- await waitFor(() => routed.length === 2);
699
- assert.deepEqual(routed, [
700
- 'public request before update',
701
- 'still public in the continuation',
702
- ]);
703
- trigger(framework);
704
- await waitFor(() => membrane.calls.length === 2);
705
- await waitFor(() => framework.activeStreams.size === 0);
706
- assert.match(thinkDescription(membrane.calls[1]), /withheld from channel routing/);
707
- assert.deepEqual(routed, [
708
- 'public request before update',
709
- 'still public in the continuation',
710
- ]);
711
- }
712
- finally {
713
- await framework.stop();
714
- rmSync(dir, { recursive: true, force: true });
715
- }
716
- });
717
- it('same-round agent_settings explicit reset restores the compatibility policy only on the next inference', async () => {
718
- await expectInFlightResetRestoresNextInferencePolicy({
719
- resetInput: { action: 'reset', settings: ['same_round_think_text_policy'] },
720
- });
721
- });
722
- it('same-round agent_settings reset-all restores the recipe policy only on the next inference', async () => {
723
- await expectInFlightResetRestoresNextInferencePolicy({
724
- basePolicy: 'public',
725
- resetInput: { action: 'reset' },
726
- });
727
- });
728
- it('agent_settings reset without same_round_think_text_policy omits the next-inference note', async () => {
729
- const membrane = new ScenarioMembrane();
730
- membrane.queueScenario([
731
- createMockResponse([
732
- { type: 'tool_use', id: 'settings-1', name: 'agent_settings', input: { action: 'reset', settings: ['tail_tokens'] } },
733
- ], 'tool_use'),
734
- createMockResponse([]),
735
- ], { pauseAfterFirstToolRound: true });
736
- const { dir, framework } = await createFramework({ membrane });
737
- try {
738
- framework.start();
739
- trigger(framework);
740
- await waitFor(() => membrane.calls.length === 1);
741
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
742
- const firstRoundResults = membrane.lastStream.receivedToolResults[0];
743
- const settingsResult = firstRoundResults.find((result) => result.toolUseId === 'settings-1');
744
- assert.ok(settingsResult, 'agent_settings reset result should be present');
745
- assert.doesNotMatch(settingsResult.content, /sameRoundThinkTextPolicyUpdateNote/);
746
- }
747
- finally {
748
- await framework.stop();
749
- rmSync(dir, { recursive: true, force: true });
750
- }
751
- });
752
- it('preview reflects a hot policy update while an already-started activation keeps its original description snapshot', async () => {
753
- const membrane = new ScenarioMembrane();
754
- membrane.queueScenario([
755
- createMockResponse(makeToolRound('request snapshot stays public'), 'tool_use'),
756
- createMockResponse([]),
757
- ], { pauseAfterFirstToolRound: true });
758
- const { dir, framework } = await createFramework({ policy: 'public', membrane });
759
- try {
760
- framework.start();
761
- trigger(framework);
762
- await waitFor(() => membrane.calls.length === 1);
763
- await waitFor(() => membrane.lastStream?.receivedToolResults.length === 1);
764
- assert.match(thinkDescription(membrane.calls[0]), /may still be routed publicly as your speech/);
765
- framework.updateAgentRuntimeSettings('agent', { sameRoundThinkTextPolicy: 'private' });
766
- assert.match(thinkDescription(await framework.previewActivation('agent')), /withheld from channel routing/);
767
- assert.match(thinkDescription(membrane.calls[0]), /may still be routed publicly as your speech/);
768
- }
769
- finally {
770
- await framework.stop();
771
- rmSync(dir, { recursive: true, force: true });
772
- }
773
- });
774
- it('private policy suppresses only the synthesized think tool, not namespaced tools named think', async () => {
775
- const membrane = new MockMembrane();
776
- membrane.pushResponse(createMockResponse([
777
- { type: 'text', text: 'namespaced think should still route' },
778
- { type: 'tool_use', id: 'module-think-1', name: 'tools--think', input: { content: 'module thought' } },
779
- ], 'tool_use'));
780
- membrane.pushResponse(createMockResponse([]));
781
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
782
- try {
783
- trigger(framework);
784
- await framework.runUntilIdle();
785
- assert.deepEqual(routed, ['namespaced think should still route']);
786
- }
787
- finally {
788
- await framework.stop();
789
- rmSync(dir, { recursive: true, force: true });
790
- }
791
- });
792
- it('suppression logs do not include the withheld prose text', async () => {
793
- const membrane = new MockMembrane();
794
- const withheld = 'withheld private prose should not appear in logs';
795
- membrane.pushResponse(createMockResponse(makeToolRound(withheld), 'tool_use'));
796
- membrane.pushResponse(createMockResponse([]));
797
- const { dir, framework } = await createFramework({ policy: 'private', membrane });
798
- const originalError = console.error;
799
- const errors = [];
800
- console.error = (...args) => { errors.push(args.join(' ')); };
801
- try {
802
- trigger(framework);
803
- await framework.runUntilIdle();
804
- assert.ok(errors.some((line) => line.includes('same_round_think_text_policy=private')));
805
- assert.ok(errors.every((line) => !line.includes(withheld)));
806
- }
807
- finally {
808
- console.error = originalError;
809
- await framework.stop();
810
- rmSync(dir, { recursive: true, force: true });
811
- }
812
- });
813
- it('an ephemeral request gets its own effective think description snapshot', async () => {
814
- const membrane = new ScenarioMembrane();
815
- membrane.queueScenario([
816
- createMockResponse([{ type: 'text', text: 'ephemeral done' }]),
817
- ]);
818
- const { dir, framework } = await createFramework({ membrane });
819
- try {
820
- const created = await framework.createEphemeralAgent({
821
- name: 'ephemeral-worker',
822
- model: 'test-model',
823
- systemPrompt: 'test',
824
- allowedTools: 'all',
825
- sameRoundThinkTextPolicy: 'private',
826
- });
827
- created.contextManager.addMessage('user', [{ type: 'text', text: 'go' }]);
828
- const run = framework.runEphemeralToCompletion(created.agent, created.contextManager);
829
- framework.start();
830
- const result = await run;
831
- assert.equal(result.speech, 'ephemeral done');
832
- assert.match(thinkDescription(membrane.calls[0]), /withheld from channel routing/);
833
- }
834
- finally {
835
- await framework.stop();
836
- rmSync(dir, { recursive: true, force: true });
837
- }
838
- });
839
- it('legacy/no-roundContent behavior remains unchanged', async () => {
840
- const membrane = new LegacyNoRoundContentMembrane();
841
- const { dir, framework, routed } = await createFramework({ policy: 'private', membrane });
842
- try {
843
- trigger(framework);
844
- await framework.runUntilIdle();
845
- assert.deepEqual(routed, [TILDE_PREFACE_80]);
846
- }
847
- finally {
848
- await framework.stop();
849
- rmSync(dir, { recursive: true, force: true });
850
- }
851
- });
852
- });
853
- //# sourceMappingURL=same-round-think-policy.test.js.map