@namzu/sdk 48.3.1 → 50.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (838) hide show
  1. package/CHANGELOG.md +542 -0
  2. package/README.md +137 -125
  3. package/dist/agents/QueryAgent.d.ts.map +1 -1
  4. package/dist/agents/QueryAgent.js +1 -0
  5. package/dist/agents/QueryAgent.js.map +1 -1
  6. package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -1
  7. package/dist/agents/examples/SupervisorAgent.js +1 -0
  8. package/dist/agents/examples/SupervisorAgent.js.map +1 -1
  9. package/dist/agents/runAgent.d.ts +2 -0
  10. package/dist/agents/runAgent.d.ts.map +1 -1
  11. package/dist/agents/runAgent.js +1 -0
  12. package/dist/agents/runAgent.js.map +1 -1
  13. package/dist/authorization/shell-lexer.d.ts.map +1 -1
  14. package/dist/authorization/shell-lexer.js +16 -1
  15. package/dist/authorization/shell-lexer.js.map +1 -1
  16. package/dist/bridge/acp/permission.d.ts +8 -2
  17. package/dist/bridge/acp/permission.d.ts.map +1 -1
  18. package/dist/bridge/acp/permission.js +1 -0
  19. package/dist/bridge/acp/permission.js.map +1 -1
  20. package/dist/bridge/acp/server.d.ts +25 -1
  21. package/dist/bridge/acp/server.d.ts.map +1 -1
  22. package/dist/bridge/acp/server.js +205 -21
  23. package/dist/bridge/acp/server.js.map +1 -1
  24. package/dist/bridge/acp/tasks.d.ts +5 -0
  25. package/dist/bridge/acp/tasks.d.ts.map +1 -0
  26. package/dist/bridge/acp/tasks.js +19 -0
  27. package/dist/bridge/acp/tasks.js.map +1 -0
  28. package/dist/bridge/acp/update.d.ts.map +1 -1
  29. package/dist/bridge/acp/update.js +148 -13
  30. package/dist/bridge/acp/update.js.map +1 -1
  31. package/dist/config/registry.d.ts +2 -0
  32. package/dist/config/registry.d.ts.map +1 -1
  33. package/dist/config/registry.js +23 -3
  34. package/dist/config/registry.js.map +1 -1
  35. package/dist/config/runtime.d.ts +31 -31
  36. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  37. package/dist/connector/mcp/adapter.js +11 -4
  38. package/dist/connector/mcp/adapter.js.map +1 -1
  39. package/dist/connector/mcp/client.d.ts.map +1 -1
  40. package/dist/connector/mcp/client.js +6 -3
  41. package/dist/connector/mcp/client.js.map +1 -1
  42. package/dist/connector/mcp/discovery.d.ts +9 -5
  43. package/dist/connector/mcp/discovery.d.ts.map +1 -1
  44. package/dist/connector/mcp/discovery.js +16 -8
  45. package/dist/connector/mcp/discovery.js.map +1 -1
  46. package/dist/connector/mcp/mcp-toolset.d.ts +3 -0
  47. package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -1
  48. package/dist/connector/mcp/mcp-toolset.js +20 -2
  49. package/dist/connector/mcp/mcp-toolset.js.map +1 -1
  50. package/dist/connector/mcp/reconnect.d.ts +2 -0
  51. package/dist/connector/mcp/reconnect.d.ts.map +1 -1
  52. package/dist/connector/mcp/reconnect.js +36 -5
  53. package/dist/connector/mcp/reconnect.js.map +1 -1
  54. package/dist/constants/acp/index.d.ts +3 -0
  55. package/dist/constants/acp/index.d.ts.map +1 -1
  56. package/dist/constants/acp/index.js +3 -0
  57. package/dist/constants/acp/index.js.map +1 -1
  58. package/dist/contracts/a2a.d.ts +80 -80
  59. package/dist/contracts/schemas.d.ts +2 -2
  60. package/dist/contracts/session/schemas.d.ts +10 -10
  61. package/dist/manager/agent/lifecycle.d.ts +11 -0
  62. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  63. package/dist/manager/agent/lifecycle.js +178 -3
  64. package/dist/manager/agent/lifecycle.js.map +1 -1
  65. package/dist/manager/plan/lifecycle.d.ts +7 -8
  66. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  67. package/dist/manager/plan/lifecycle.js +7 -8
  68. package/dist/manager/plan/lifecycle.js.map +1 -1
  69. package/dist/manager/resident/consumption.d.ts +8 -8
  70. package/dist/manager/resident/learning-cycle.d.ts +2 -2
  71. package/dist/manager/resident/learning-observation.d.ts +12 -12
  72. package/dist/manager/resident/learning.d.ts +82 -82
  73. package/dist/manager/resident/outbox.d.ts +8 -8
  74. package/dist/manager/resident/proposal.d.ts +2 -2
  75. package/dist/manager/resident/store.d.ts +10 -10
  76. package/dist/manager/session/attribution.d.ts +1 -0
  77. package/dist/manager/session/attribution.d.ts.map +1 -1
  78. package/dist/manager/session/attribution.js +9 -1
  79. package/dist/manager/session/attribution.js.map +1 -1
  80. package/dist/manager/session/streamed-message-identity.d.ts +6 -0
  81. package/dist/manager/session/streamed-message-identity.d.ts.map +1 -0
  82. package/dist/manager/session/streamed-message-identity.js +14 -0
  83. package/dist/manager/session/streamed-message-identity.js.map +1 -0
  84. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  85. package/dist/manager/session/turn-recorder.js +4 -3
  86. package/dist/manager/session/turn-recorder.js.map +1 -1
  87. package/dist/pals/activity/causality.d.ts +23 -0
  88. package/dist/pals/activity/causality.d.ts.map +1 -0
  89. package/dist/pals/activity/causality.js +205 -0
  90. package/dist/pals/activity/causality.js.map +1 -0
  91. package/dist/pals/activity/projection.d.ts +5 -0
  92. package/dist/pals/activity/projection.d.ts.map +1 -0
  93. package/dist/pals/activity/projection.js +79 -0
  94. package/dist/pals/activity/projection.js.map +1 -0
  95. package/dist/pals/activity/source.d.ts +16 -0
  96. package/dist/pals/activity/source.d.ts.map +1 -0
  97. package/dist/pals/activity/source.js +235 -0
  98. package/dist/pals/activity/source.js.map +1 -0
  99. package/dist/pals/activity/subscription-policy.d.ts +38 -0
  100. package/dist/pals/activity/subscription-policy.d.ts.map +1 -0
  101. package/dist/pals/activity/subscription-policy.js +183 -0
  102. package/dist/pals/activity/subscription-policy.js.map +1 -0
  103. package/dist/pals/activity/subscription-schema.d.ts +353 -0
  104. package/dist/pals/activity/subscription-schema.d.ts.map +1 -0
  105. package/dist/pals/activity/subscription-schema.js +24 -0
  106. package/dist/pals/activity/subscription-schema.js.map +1 -0
  107. package/dist/pals/activity/subscription-store.d.ts +25 -0
  108. package/dist/pals/activity/subscription-store.d.ts.map +1 -0
  109. package/dist/pals/activity/subscription-store.js +152 -0
  110. package/dist/pals/activity/subscription-store.js.map +1 -0
  111. package/dist/pals/activity/subscription-types.d.ts +42 -0
  112. package/dist/pals/activity/subscription-types.d.ts.map +1 -0
  113. package/dist/pals/activity/subscription-types.js +2 -0
  114. package/dist/pals/activity/subscription-types.js.map +1 -0
  115. package/dist/pals/activity/subscriptions.d.ts +32 -0
  116. package/dist/pals/activity/subscriptions.d.ts.map +1 -0
  117. package/dist/pals/activity/subscriptions.js +151 -0
  118. package/dist/pals/activity/subscriptions.js.map +1 -0
  119. package/dist/pals/activity/types.d.ts +77 -0
  120. package/dist/pals/activity/types.d.ts.map +1 -0
  121. package/dist/pals/activity/types.js +2 -0
  122. package/dist/pals/activity/types.js.map +1 -0
  123. package/dist/pals/channels/ingress.d.ts +9 -0
  124. package/dist/pals/channels/ingress.d.ts.map +1 -0
  125. package/dist/pals/channels/ingress.js +131 -0
  126. package/dist/pals/channels/ingress.js.map +1 -0
  127. package/dist/pals/channels/routes.d.ts +20 -0
  128. package/dist/pals/channels/routes.d.ts.map +1 -0
  129. package/dist/pals/channels/routes.js +111 -0
  130. package/dist/pals/channels/routes.js.map +1 -0
  131. package/dist/pals/channels/routing.d.ts +37 -0
  132. package/dist/pals/channels/routing.d.ts.map +1 -0
  133. package/dist/pals/channels/routing.js +150 -0
  134. package/dist/pals/channels/routing.js.map +1 -0
  135. package/dist/pals/channels/schema.d.ts +234 -0
  136. package/dist/pals/channels/schema.d.ts.map +1 -0
  137. package/dist/pals/channels/schema.js +94 -0
  138. package/dist/pals/channels/schema.js.map +1 -0
  139. package/dist/pals/channels/types.d.ts +115 -0
  140. package/dist/pals/channels/types.d.ts.map +1 -0
  141. package/dist/pals/channels/types.js +2 -0
  142. package/dist/pals/channels/types.js.map +1 -0
  143. package/dist/pals/communication/broker.d.ts +8 -0
  144. package/dist/pals/communication/broker.d.ts.map +1 -0
  145. package/dist/pals/communication/broker.js +121 -0
  146. package/dist/pals/communication/broker.js.map +1 -0
  147. package/dist/pals/communication/dispatch.d.ts +4 -0
  148. package/dist/pals/communication/dispatch.d.ts.map +1 -0
  149. package/dist/pals/communication/dispatch.js +57 -0
  150. package/dist/pals/communication/dispatch.js.map +1 -0
  151. package/dist/pals/communication/inbound.d.ts +9 -0
  152. package/dist/pals/communication/inbound.d.ts.map +1 -0
  153. package/dist/pals/communication/inbound.js +155 -0
  154. package/dist/pals/communication/inbound.js.map +1 -0
  155. package/dist/pals/communication/ingress-dispatch.d.ts +5 -0
  156. package/dist/pals/communication/ingress-dispatch.d.ts.map +1 -0
  157. package/dist/pals/communication/ingress-dispatch.js +51 -0
  158. package/dist/pals/communication/ingress-dispatch.js.map +1 -0
  159. package/dist/pals/communication/ingress-inbound.d.ts +9 -0
  160. package/dist/pals/communication/ingress-inbound.d.ts.map +1 -0
  161. package/dist/pals/communication/ingress-inbound.js +222 -0
  162. package/dist/pals/communication/ingress-inbound.js.map +1 -0
  163. package/dist/pals/communication/ingress-schema.d.ts +7829 -0
  164. package/dist/pals/communication/ingress-schema.d.ts.map +1 -0
  165. package/dist/pals/communication/ingress-schema.js +479 -0
  166. package/dist/pals/communication/ingress-schema.js.map +1 -0
  167. package/dist/pals/communication/ingress-types.d.ts +187 -0
  168. package/dist/pals/communication/ingress-types.d.ts.map +1 -0
  169. package/dist/pals/communication/ingress-types.js +73 -0
  170. package/dist/pals/communication/ingress-types.js.map +1 -0
  171. package/dist/pals/communication/operator.d.ts +75 -0
  172. package/dist/pals/communication/operator.d.ts.map +1 -0
  173. package/dist/pals/communication/operator.js +217 -0
  174. package/dist/pals/communication/operator.js.map +1 -0
  175. package/dist/pals/communication/policy.d.ts +41 -0
  176. package/dist/pals/communication/policy.d.ts.map +1 -0
  177. package/dist/pals/communication/policy.js +138 -0
  178. package/dist/pals/communication/policy.js.map +1 -0
  179. package/dist/pals/communication/schema.d.ts +2000 -0
  180. package/dist/pals/communication/schema.d.ts.map +1 -0
  181. package/dist/pals/communication/schema.js +170 -0
  182. package/dist/pals/communication/schema.js.map +1 -0
  183. package/dist/pals/communication/store.d.ts +61 -0
  184. package/dist/pals/communication/store.d.ts.map +1 -0
  185. package/dist/pals/communication/store.js +450 -0
  186. package/dist/pals/communication/store.js.map +1 -0
  187. package/dist/pals/communication/tools.d.ts +23 -0
  188. package/dist/pals/communication/tools.d.ts.map +1 -0
  189. package/dist/pals/communication/tools.js +107 -0
  190. package/dist/pals/communication/tools.js.map +1 -0
  191. package/dist/pals/communication/types.d.ts +168 -0
  192. package/dist/pals/communication/types.d.ts.map +1 -0
  193. package/dist/pals/communication/types.js +24 -0
  194. package/dist/pals/communication/types.js.map +1 -0
  195. package/dist/pals/communication/verify.d.ts +22 -0
  196. package/dist/pals/communication/verify.d.ts.map +1 -0
  197. package/dist/pals/communication/verify.js +142 -0
  198. package/dist/pals/communication/verify.js.map +1 -0
  199. package/dist/pals/lifecycle.d.ts +37 -0
  200. package/dist/pals/lifecycle.d.ts.map +1 -0
  201. package/dist/pals/lifecycle.js +22 -0
  202. package/dist/pals/lifecycle.js.map +1 -0
  203. package/dist/pals/prompt.d.ts +30 -0
  204. package/dist/pals/prompt.d.ts.map +1 -0
  205. package/dist/pals/prompt.js +65 -0
  206. package/dist/pals/prompt.js.map +1 -0
  207. package/dist/pals/reference-images.d.ts +44 -0
  208. package/dist/pals/reference-images.d.ts.map +1 -0
  209. package/dist/pals/reference-images.js +248 -0
  210. package/dist/pals/reference-images.js.map +1 -0
  211. package/dist/pals/runtime.d.ts +46 -0
  212. package/dist/pals/runtime.d.ts.map +1 -0
  213. package/dist/pals/runtime.js +624 -0
  214. package/dist/pals/runtime.js.map +1 -0
  215. package/dist/pals/store.d.ts +26 -0
  216. package/dist/pals/store.d.ts.map +1 -0
  217. package/dist/pals/store.js +334 -0
  218. package/dist/pals/store.js.map +1 -0
  219. package/dist/pals/types.d.ts +145 -0
  220. package/dist/pals/types.d.ts.map +1 -0
  221. package/dist/pals/types.js +2 -0
  222. package/dist/pals/types.js.map +1 -0
  223. package/dist/peers/envelope.js +1 -1
  224. package/dist/peers/envelope.js.map +1 -1
  225. package/dist/peers/protocol.d.ts +83 -83
  226. package/dist/peers/record.d.ts +10 -10
  227. package/dist/plugin/lifecycle.d.ts +14 -10
  228. package/dist/plugin/lifecycle.d.ts.map +1 -1
  229. package/dist/plugin/lifecycle.js +178 -41
  230. package/dist/plugin/lifecycle.js.map +1 -1
  231. package/dist/plugin/shell-hook.d.ts.map +1 -1
  232. package/dist/plugin/shell-hook.js +7 -2
  233. package/dist/plugin/shell-hook.js.map +1 -1
  234. package/dist/process/kill-tree.d.ts.map +1 -1
  235. package/dist/process/kill-tree.js +9 -1
  236. package/dist/process/kill-tree.js.map +1 -1
  237. package/dist/prompt/resident-learning.js +2 -2
  238. package/dist/prompt/resident-learning.js.map +1 -1
  239. package/dist/prompt/resident-step.d.ts +2 -2
  240. package/dist/prompt/resident-step.js +4 -4
  241. package/dist/prompt/resident-step.js.map +1 -1
  242. package/dist/provider/errors.d.ts +19 -0
  243. package/dist/provider/errors.d.ts.map +1 -1
  244. package/dist/provider/errors.js +123 -2
  245. package/dist/provider/errors.js.map +1 -1
  246. package/dist/public-runtime.d.ts +43 -15
  247. package/dist/public-runtime.d.ts.map +1 -1
  248. package/dist/public-runtime.js +37 -9
  249. package/dist/public-runtime.js.map +1 -1
  250. package/dist/public-tools.d.ts +8 -3
  251. package/dist/public-tools.d.ts.map +1 -1
  252. package/dist/public-tools.js +8 -3
  253. package/dist/public-tools.js.map +1 -1
  254. package/dist/public-types.d.ts +27 -7
  255. package/dist/public-types.d.ts.map +1 -1
  256. package/dist/registry/tool/presentation.d.ts +1 -0
  257. package/dist/registry/tool/presentation.d.ts.map +1 -1
  258. package/dist/registry/tool/presentation.js +9 -7
  259. package/dist/registry/tool/presentation.js.map +1 -1
  260. package/dist/registry/tool/screen.d.ts.map +1 -1
  261. package/dist/registry/tool/screen.js +33 -2
  262. package/dist/registry/tool/screen.js.map +1 -1
  263. package/dist/runtime/harness-session/index.d.ts +5 -0
  264. package/dist/runtime/harness-session/index.d.ts.map +1 -0
  265. package/dist/runtime/harness-session/index.js +928 -0
  266. package/dist/runtime/harness-session/index.js.map +1 -0
  267. package/dist/runtime/harness-session/journal.d.ts +37 -0
  268. package/dist/runtime/harness-session/journal.d.ts.map +1 -0
  269. package/dist/runtime/harness-session/journal.js +177 -0
  270. package/dist/runtime/harness-session/journal.js.map +1 -0
  271. package/dist/runtime/harness-session/saved-view.d.ts +8 -0
  272. package/dist/runtime/harness-session/saved-view.d.ts.map +1 -0
  273. package/dist/runtime/harness-session/saved-view.js +112 -0
  274. package/dist/runtime/harness-session/saved-view.js.map +1 -0
  275. package/dist/runtime/jobs/awaited-jobs.d.ts +2 -1
  276. package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -1
  277. package/dist/runtime/jobs/awaited-jobs.js +2 -1
  278. package/dist/runtime/jobs/awaited-jobs.js.map +1 -1
  279. package/dist/runtime/jobs/registry.d.ts +56 -1
  280. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  281. package/dist/runtime/jobs/registry.js +377 -39
  282. package/dist/runtime/jobs/registry.js.map +1 -1
  283. package/dist/runtime/query/abandon-turn.d.ts +12 -1
  284. package/dist/runtime/query/abandon-turn.d.ts.map +1 -1
  285. package/dist/runtime/query/abandon-turn.js +3 -1
  286. package/dist/runtime/query/abandon-turn.js.map +1 -1
  287. package/dist/runtime/query/checkpoint.d.ts +4 -0
  288. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  289. package/dist/runtime/query/checkpoint.js +10 -0
  290. package/dist/runtime/query/checkpoint.js.map +1 -1
  291. package/dist/runtime/query/durable-inbound.d.ts +5 -0
  292. package/dist/runtime/query/durable-inbound.d.ts.map +1 -0
  293. package/dist/runtime/query/durable-inbound.js +89 -0
  294. package/dist/runtime/query/durable-inbound.js.map +1 -0
  295. package/dist/runtime/query/events.d.ts +4 -0
  296. package/dist/runtime/query/events.d.ts.map +1 -1
  297. package/dist/runtime/query/events.js +22 -5
  298. package/dist/runtime/query/events.js.map +1 -1
  299. package/dist/runtime/query/executor/tool-call-admission.d.ts +5 -1
  300. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  301. package/dist/runtime/query/executor/tool-call-admission.js +85 -13
  302. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  303. package/dist/runtime/query/executor.d.ts +41 -18
  304. package/dist/runtime/query/executor.d.ts.map +1 -1
  305. package/dist/runtime/query/executor.js +227 -114
  306. package/dist/runtime/query/executor.js.map +1 -1
  307. package/dist/runtime/query/index.d.ts +9 -0
  308. package/dist/runtime/query/index.d.ts.map +1 -1
  309. package/dist/runtime/query/index.js +41 -5
  310. package/dist/runtime/query/index.js.map +1 -1
  311. package/dist/runtime/query/iteration/index.d.ts +18 -6
  312. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  313. package/dist/runtime/query/iteration/index.js +176 -75
  314. package/dist/runtime/query/iteration/index.js.map +1 -1
  315. package/dist/runtime/query/iteration/outstanding-work.d.ts +9 -5
  316. package/dist/runtime/query/iteration/outstanding-work.d.ts.map +1 -1
  317. package/dist/runtime/query/iteration/outstanding-work.js +63 -6
  318. package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
  319. package/dist/runtime/query/iteration/phases/context.d.ts +8 -0
  320. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  321. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  322. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  323. package/dist/runtime/query/iteration/phases/tool-review.js +106 -17
  324. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  325. package/dist/runtime/query/iteration/step-shaping.d.ts +2 -0
  326. package/dist/runtime/query/iteration/step-shaping.d.ts.map +1 -1
  327. package/dist/runtime/query/iteration/step-shaping.js +5 -1
  328. package/dist/runtime/query/iteration/step-shaping.js.map +1 -1
  329. package/dist/runtime/query/observation-context.d.ts +2 -2
  330. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  331. package/dist/runtime/query/observation-context.js +20 -13
  332. package/dist/runtime/query/observation-context.js.map +1 -1
  333. package/dist/runtime/query/prepare-turn.js +2 -2
  334. package/dist/runtime/query/prepare-turn.js.map +1 -1
  335. package/dist/runtime/query/prompt-cache.d.ts +1 -0
  336. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  337. package/dist/runtime/query/prompt-cache.js +2 -0
  338. package/dist/runtime/query/prompt-cache.js.map +1 -1
  339. package/dist/runtime/query/prompt.d.ts +2 -0
  340. package/dist/runtime/query/prompt.d.ts.map +1 -1
  341. package/dist/runtime/query/prompt.js +23 -1
  342. package/dist/runtime/query/prompt.js.map +1 -1
  343. package/dist/runtime/query/repeat-call.d.ts +12 -3
  344. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  345. package/dist/runtime/query/repeat-call.js +33 -10
  346. package/dist/runtime/query/repeat-call.js.map +1 -1
  347. package/dist/runtime/query/resume-pending.d.ts +5 -6
  348. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  349. package/dist/runtime/query/resume-pending.js +30 -3
  350. package/dist/runtime/query/resume-pending.js.map +1 -1
  351. package/dist/runtime/query/resume-session.js +1 -1
  352. package/dist/runtime/query/resume-session.js.map +1 -1
  353. package/dist/runtime/query/review-policy.d.ts +8 -1
  354. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  355. package/dist/runtime/query/review-policy.js +6 -0
  356. package/dist/runtime/query/review-policy.js.map +1 -1
  357. package/dist/runtime/query/saved-presentation.d.ts +13 -0
  358. package/dist/runtime/query/saved-presentation.d.ts.map +1 -0
  359. package/dist/runtime/query/saved-presentation.js +63 -0
  360. package/dist/runtime/query/saved-presentation.js.map +1 -0
  361. package/dist/runtime/query/steering.d.ts +6 -9
  362. package/dist/runtime/query/steering.d.ts.map +1 -1
  363. package/dist/runtime/query/steering.js.map +1 -1
  364. package/dist/runtime/query/tool-executions.d.ts +7 -3
  365. package/dist/runtime/query/tool-executions.d.ts.map +1 -1
  366. package/dist/runtime/query/tool-executions.js +89 -9
  367. package/dist/runtime/query/tool-executions.js.map +1 -1
  368. package/dist/runtime/query/tooling.d.ts +3 -1
  369. package/dist/runtime/query/tooling.d.ts.map +1 -1
  370. package/dist/runtime/query/tooling.js +3 -0
  371. package/dist/runtime/query/tooling.js.map +1 -1
  372. package/dist/scheduler/completion-inbox.d.ts +25 -1
  373. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  374. package/dist/scheduler/completion-inbox.js +102 -8
  375. package/dist/scheduler/completion-inbox.js.map +1 -1
  376. package/dist/scheduler/delegating.d.ts.map +1 -1
  377. package/dist/scheduler/delegating.js +5 -0
  378. package/dist/scheduler/delegating.js.map +1 -1
  379. package/dist/scheduler/local.d.ts.map +1 -1
  380. package/dist/scheduler/local.js +2 -0
  381. package/dist/scheduler/local.js.map +1 -1
  382. package/dist/session/summary/materialize.d.ts +10 -6
  383. package/dist/session/summary/materialize.d.ts.map +1 -1
  384. package/dist/session/summary/materialize.js +41 -8
  385. package/dist/session/summary/materialize.js.map +1 -1
  386. package/dist/store/budget/ledger.d.ts +9 -0
  387. package/dist/store/budget/ledger.d.ts.map +1 -1
  388. package/dist/store/budget/ledger.js +58 -6
  389. package/dist/store/budget/ledger.js.map +1 -1
  390. package/dist/store/evidence/index-page.d.ts +12 -12
  391. package/dist/store/evidence/source-text.d.ts +4 -4
  392. package/dist/store/index.d.ts +1 -0
  393. package/dist/store/index.d.ts.map +1 -1
  394. package/dist/store/index.js +1 -0
  395. package/dist/store/index.js.map +1 -1
  396. package/dist/store/memory/disk.d.ts +7 -2
  397. package/dist/store/memory/disk.d.ts.map +1 -1
  398. package/dist/store/memory/disk.js +58 -5
  399. package/dist/store/memory/disk.js.map +1 -1
  400. package/dist/store/memory/index.d.ts +9 -0
  401. package/dist/store/memory/index.d.ts.map +1 -1
  402. package/dist/store/memory/index.js +43 -5
  403. package/dist/store/memory/index.js.map +1 -1
  404. package/dist/store/memory/markdown.d.ts +7 -2
  405. package/dist/store/memory/markdown.d.ts.map +1 -1
  406. package/dist/store/memory/markdown.js +33 -0
  407. package/dist/store/memory/markdown.js.map +1 -1
  408. package/dist/store/memory/memory.d.ts +7 -2
  409. package/dist/store/memory/memory.d.ts.map +1 -1
  410. package/dist/store/memory/memory.js +34 -0
  411. package/dist/store/memory/memory.js.map +1 -1
  412. package/dist/store/memory/revision.d.ts +16 -0
  413. package/dist/store/memory/revision.d.ts.map +1 -0
  414. package/dist/store/memory/revision.js +144 -0
  415. package/dist/store/memory/revision.js.map +1 -0
  416. package/dist/store/session/disk.d.ts +9 -4
  417. package/dist/store/session/disk.d.ts.map +1 -1
  418. package/dist/store/session/disk.js +57 -11
  419. package/dist/store/session/disk.js.map +1 -1
  420. package/dist/store/session/memory.d.ts +5 -3
  421. package/dist/store/session/memory.d.ts.map +1 -1
  422. package/dist/store/session/memory.js +24 -7
  423. package/dist/store/session/memory.js.map +1 -1
  424. package/dist/store/session-log/core.d.ts +26 -6
  425. package/dist/store/session-log/core.d.ts.map +1 -1
  426. package/dist/store/session-log/core.js +61 -8
  427. package/dist/store/session-log/core.js.map +1 -1
  428. package/dist/store/session-log/disk.d.ts +2 -2
  429. package/dist/store/session-log/disk.d.ts.map +1 -1
  430. package/dist/store/session-log/disk.js +1 -0
  431. package/dist/store/session-log/disk.js.map +1 -1
  432. package/dist/store/session-log/fold.d.ts +7 -0
  433. package/dist/store/session-log/fold.d.ts.map +1 -1
  434. package/dist/store/session-log/fold.js +21 -0
  435. package/dist/store/session-log/fold.js.map +1 -1
  436. package/dist/store/session-log/index.d.ts +5 -3
  437. package/dist/store/session-log/index.d.ts.map +1 -1
  438. package/dist/store/session-log/index.js +3 -1
  439. package/dist/store/session-log/index.js.map +1 -1
  440. package/dist/store/session-log/memory.d.ts +1 -1
  441. package/dist/store/session-log/memory.d.ts.map +1 -1
  442. package/dist/store/session-log/memory.js +1 -0
  443. package/dist/store/session-log/memory.js.map +1 -1
  444. package/dist/store/session-log/spill.d.ts +10 -3
  445. package/dist/store/session-log/spill.d.ts.map +1 -1
  446. package/dist/store/session-log/spill.js +70 -5
  447. package/dist/store/session-log/spill.js.map +1 -1
  448. package/dist/store/session-log/structured-result.d.ts +21 -0
  449. package/dist/store/session-log/structured-result.d.ts.map +1 -0
  450. package/dist/store/session-log/structured-result.js +67 -0
  451. package/dist/store/session-log/structured-result.js.map +1 -0
  452. package/dist/store/task/disk.d.ts +11 -0
  453. package/dist/store/task/disk.d.ts.map +1 -1
  454. package/dist/store/task/disk.js +41 -2
  455. package/dist/store/task/disk.js.map +1 -1
  456. package/dist/store/task/memory.d.ts.map +1 -1
  457. package/dist/store/task/memory.js +15 -3
  458. package/dist/store/task/memory.js.map +1 -1
  459. package/dist/tools/admit-facts.d.ts +13 -0
  460. package/dist/tools/admit-facts.d.ts.map +1 -0
  461. package/dist/tools/admit-facts.js +142 -0
  462. package/dist/tools/admit-facts.js.map +1 -0
  463. package/dist/tools/builtins/bash.d.ts +4 -1
  464. package/dist/tools/builtins/bash.d.ts.map +1 -1
  465. package/dist/tools/builtins/bash.js +108 -22
  466. package/dist/tools/builtins/bash.js.map +1 -1
  467. package/dist/tools/builtins/browser.d.ts +10 -10
  468. package/dist/tools/builtins/computer-use.d.ts +90 -90
  469. package/dist/tools/builtins/edit.d.ts +17 -0
  470. package/dist/tools/builtins/edit.d.ts.map +1 -1
  471. package/dist/tools/builtins/edit.js +34 -0
  472. package/dist/tools/builtins/edit.js.map +1 -1
  473. package/dist/tools/builtins/file-write-result.d.ts.map +1 -1
  474. package/dist/tools/builtins/file-write-result.js +13 -0
  475. package/dist/tools/builtins/file-write-result.js.map +1 -1
  476. package/dist/tools/builtins/glob.d.ts.map +1 -1
  477. package/dist/tools/builtins/glob.js +12 -0
  478. package/dist/tools/builtins/glob.js.map +1 -1
  479. package/dist/tools/builtins/grep.d.ts.map +1 -1
  480. package/dist/tools/builtins/grep.js +14 -0
  481. package/dist/tools/builtins/grep.js.map +1 -1
  482. package/dist/tools/builtins/index.d.ts +2 -0
  483. package/dist/tools/builtins/index.d.ts.map +1 -1
  484. package/dist/tools/builtins/index.js +1 -0
  485. package/dist/tools/builtins/index.js.map +1 -1
  486. package/dist/tools/builtins/job.d.ts.map +1 -1
  487. package/dist/tools/builtins/job.js +4 -1
  488. package/dist/tools/builtins/job.js.map +1 -1
  489. package/dist/tools/builtins/lsp.d.ts +2 -2
  490. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  491. package/dist/tools/builtins/read-file.js +49 -0
  492. package/dist/tools/builtins/read-file.js.map +1 -1
  493. package/dist/tools/builtins/view-image.d.ts +24 -0
  494. package/dist/tools/builtins/view-image.d.ts.map +1 -0
  495. package/dist/tools/builtins/view-image.js +385 -0
  496. package/dist/tools/builtins/view-image.js.map +1 -0
  497. package/dist/tools/builtins/wait-for-job-bounds.d.ts +8 -4
  498. package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
  499. package/dist/tools/builtins/wait-for-job-bounds.js +43 -8
  500. package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
  501. package/dist/tools/builtins/wait-for-job.d.ts +3 -0
  502. package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
  503. package/dist/tools/builtins/wait-for-job.js +127 -15
  504. package/dist/tools/builtins/wait-for-job.js.map +1 -1
  505. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  506. package/dist/tools/builtins/write-file.js +1 -0
  507. package/dist/tools/builtins/write-file.js.map +1 -1
  508. package/dist/tools/command-shell.d.ts +37 -2
  509. package/dist/tools/command-shell.d.ts.map +1 -1
  510. package/dist/tools/command-shell.js +100 -3
  511. package/dist/tools/command-shell.js.map +1 -1
  512. package/dist/tools/coordinator/agent.d.ts +9 -19
  513. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  514. package/dist/tools/coordinator/agent.js.map +1 -1
  515. package/dist/tools/coordinator/index.d.ts.map +1 -1
  516. package/dist/tools/coordinator/index.js +127 -67
  517. package/dist/tools/coordinator/index.js.map +1 -1
  518. package/dist/tools/coordinator/wait-with-idle-bound.d.ts +2 -0
  519. package/dist/tools/coordinator/wait-with-idle-bound.d.ts.map +1 -1
  520. package/dist/tools/coordinator/wait-with-idle-bound.js +1 -1
  521. package/dist/tools/coordinator/wait-with-idle-bound.js.map +1 -1
  522. package/dist/tools/defineTool.d.ts.map +1 -1
  523. package/dist/tools/defineTool.js +4 -0
  524. package/dist/tools/defineTool.js.map +1 -1
  525. package/dist/tools/failure-facts.d.ts +8 -0
  526. package/dist/tools/failure-facts.d.ts.map +1 -0
  527. package/dist/tools/failure-facts.js +24 -0
  528. package/dist/tools/failure-facts.js.map +1 -0
  529. package/dist/tools/host-output.d.ts +24 -0
  530. package/dist/tools/host-output.d.ts.map +1 -0
  531. package/dist/tools/host-output.js +117 -0
  532. package/dist/tools/host-output.js.map +1 -0
  533. package/dist/tools/memory/delete.d.ts.map +1 -1
  534. package/dist/tools/memory/delete.js +38 -3
  535. package/dist/tools/memory/delete.js.map +1 -1
  536. package/dist/tools/memory/read.d.ts.map +1 -1
  537. package/dist/tools/memory/read.js +38 -2
  538. package/dist/tools/memory/read.js.map +1 -1
  539. package/dist/tools/memory/search.d.ts.map +1 -1
  540. package/dist/tools/memory/search.js +38 -7
  541. package/dist/tools/memory/search.js.map +1 -1
  542. package/dist/tools/memory/update.d.ts.map +1 -1
  543. package/dist/tools/memory/update.js +30 -3
  544. package/dist/tools/memory/update.js.map +1 -1
  545. package/dist/tools/oem-code-pages.d.ts +8 -0
  546. package/dist/tools/oem-code-pages.d.ts.map +1 -0
  547. package/dist/tools/oem-code-pages.js +23 -0
  548. package/dist/tools/oem-code-pages.js.map +1 -0
  549. package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
  550. package/dist/tools/schedules/schedule-tool.js +35 -6
  551. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  552. package/dist/tools/schedules/types.d.ts +23 -3
  553. package/dist/tools/schedules/types.d.ts.map +1 -1
  554. package/dist/tools/task/list.d.ts.map +1 -1
  555. package/dist/tools/task/list.js +14 -6
  556. package/dist/tools/task/list.js.map +1 -1
  557. package/dist/tools/task/present.d.ts.map +1 -1
  558. package/dist/tools/task/present.js +26 -6
  559. package/dist/tools/task/present.js.map +1 -1
  560. package/dist/tools/task/update.d.ts.map +1 -1
  561. package/dist/tools/task/update.js +12 -5
  562. package/dist/tools/task/update.js.map +1 -1
  563. package/dist/tools/text-window.d.ts +19 -0
  564. package/dist/tools/text-window.d.ts.map +1 -0
  565. package/dist/tools/text-window.js +83 -0
  566. package/dist/tools/text-window.js.map +1 -0
  567. package/dist/toolsets/manager.d.ts +24 -0
  568. package/dist/toolsets/manager.d.ts.map +1 -1
  569. package/dist/toolsets/manager.js +105 -2
  570. package/dist/toolsets/manager.js.map +1 -1
  571. package/dist/turn/memory-recall.d.ts +2 -0
  572. package/dist/turn/memory-recall.d.ts.map +1 -1
  573. package/dist/turn/memory-recall.js +3 -1
  574. package/dist/turn/memory-recall.js.map +1 -1
  575. package/dist/types/acp/index.d.ts +137 -1
  576. package/dist/types/acp/index.d.ts.map +1 -1
  577. package/dist/types/agent/base.d.ts +3 -0
  578. package/dist/types/agent/base.d.ts.map +1 -1
  579. package/dist/types/agent/manager.d.ts +8 -23
  580. package/dist/types/agent/manager.d.ts.map +1 -1
  581. package/dist/types/agent/scheduler.d.ts +10 -1
  582. package/dist/types/agent/scheduler.d.ts.map +1 -1
  583. package/dist/types/agent/task.d.ts +4 -0
  584. package/dist/types/agent/task.d.ts.map +1 -1
  585. package/dist/types/authorization/index.d.ts +30 -30
  586. package/dist/types/connector/mcp.d.ts +7 -0
  587. package/dist/types/connector/mcp.d.ts.map +1 -1
  588. package/dist/types/errors/catalog.d.ts.map +1 -1
  589. package/dist/types/errors/catalog.js +4 -2
  590. package/dist/types/errors/catalog.js.map +1 -1
  591. package/dist/types/harness/schema.d.ts +354 -0
  592. package/dist/types/harness/schema.d.ts.map +1 -0
  593. package/dist/types/harness/schema.js +203 -0
  594. package/dist/types/harness/schema.js.map +1 -0
  595. package/dist/types/harness/session.d.ts +278 -0
  596. package/dist/types/harness/session.d.ts.map +1 -0
  597. package/dist/types/harness/session.js +2 -0
  598. package/dist/types/harness/session.js.map +1 -0
  599. package/dist/types/hitl/index.d.ts +12 -0
  600. package/dist/types/hitl/index.d.ts.map +1 -1
  601. package/dist/types/hitl/index.js.map +1 -1
  602. package/dist/types/job/index.d.ts +47 -0
  603. package/dist/types/job/index.d.ts.map +1 -0
  604. package/dist/types/job/index.js +2 -0
  605. package/dist/types/job/index.js.map +1 -0
  606. package/dist/types/memory/index.d.ts +29 -0
  607. package/dist/types/memory/index.d.ts.map +1 -1
  608. package/dist/types/memory/index.js +6 -0
  609. package/dist/types/memory/index.js.map +1 -1
  610. package/dist/types/message/inbound-delivery.d.ts +44 -0
  611. package/dist/types/message/inbound-delivery.d.ts.map +1 -0
  612. package/dist/types/message/inbound-delivery.js +14 -0
  613. package/dist/types/message/inbound-delivery.js.map +1 -0
  614. package/dist/types/message/index.d.ts +4 -1
  615. package/dist/types/message/index.d.ts.map +1 -1
  616. package/dist/types/message/index.js +5 -1
  617. package/dist/types/message/index.js.map +1 -1
  618. package/dist/types/plugin/index.d.ts +18 -8
  619. package/dist/types/plugin/index.d.ts.map +1 -1
  620. package/dist/types/plugin/index.js +5 -2
  621. package/dist/types/plugin/index.js.map +1 -1
  622. package/dist/types/sandbox/index.d.ts +39 -2
  623. package/dist/types/sandbox/index.d.ts.map +1 -1
  624. package/dist/types/sandbox/index.js.map +1 -1
  625. package/dist/types/session/checkpoint.d.ts +24 -17
  626. package/dist/types/session/checkpoint.d.ts.map +1 -1
  627. package/dist/types/session/checkpoint.js +1 -0
  628. package/dist/types/session/checkpoint.js.map +1 -1
  629. package/dist/types/session/events.d.ts +23 -1
  630. package/dist/types/session/events.d.ts.map +1 -1
  631. package/dist/types/session/events.js.map +1 -1
  632. package/dist/types/session/records.d.ts +1514 -565
  633. package/dist/types/session/records.d.ts.map +1 -1
  634. package/dist/types/session/records.js +89 -1
  635. package/dist/types/session/records.js.map +1 -1
  636. package/dist/types/session/step.d.ts +2 -0
  637. package/dist/types/session/step.d.ts.map +1 -1
  638. package/dist/types/session/step.js.map +1 -1
  639. package/dist/types/session/store.d.ts +19 -10
  640. package/dist/types/session/store.d.ts.map +1 -1
  641. package/dist/types/session/tool-execution.d.ts +6 -0
  642. package/dist/types/session/tool-execution.d.ts.map +1 -1
  643. package/dist/types/structured-output/index.d.ts +12 -2
  644. package/dist/types/structured-output/index.d.ts.map +1 -1
  645. package/dist/types/summary/ref.d.ts +3 -1
  646. package/dist/types/summary/ref.d.ts.map +1 -1
  647. package/dist/types/tool/index.d.ts +32 -4
  648. package/dist/types/tool/index.d.ts.map +1 -1
  649. package/dist/types/tool/index.js.map +1 -1
  650. package/dist/types/tool/presentation.d.ts +106 -0
  651. package/dist/types/tool/presentation.d.ts.map +1 -1
  652. package/dist/utils/json-snapshot.d.ts +6 -2
  653. package/dist/utils/json-snapshot.d.ts.map +1 -1
  654. package/dist/utils/json-snapshot.js +19 -9
  655. package/dist/utils/json-snapshot.js.map +1 -1
  656. package/dist/utils/structured-result-json.d.ts +5 -0
  657. package/dist/utils/structured-result-json.d.ts.map +1 -0
  658. package/dist/utils/structured-result-json.js +10 -0
  659. package/dist/utils/structured-result-json.js.map +1 -0
  660. package/package.json +1 -1
  661. package/src/agents/QueryAgent.ts +1 -0
  662. package/src/agents/examples/SupervisorAgent.ts +1 -0
  663. package/src/agents/runAgent.ts +3 -0
  664. package/src/authorization/shell-lexer.ts +16 -1
  665. package/src/bridge/acp/permission.ts +17 -3
  666. package/src/bridge/acp/server.ts +271 -25
  667. package/src/bridge/acp/tasks.ts +23 -0
  668. package/src/bridge/acp/update.ts +167 -13
  669. package/src/config/registry.ts +24 -3
  670. package/src/connector/mcp/adapter.ts +16 -4
  671. package/src/connector/mcp/client.ts +6 -2
  672. package/src/connector/mcp/discovery.ts +29 -8
  673. package/src/connector/mcp/mcp-toolset.ts +25 -4
  674. package/src/connector/mcp/reconnect.ts +34 -4
  675. package/src/constants/acp/index.ts +4 -0
  676. package/src/manager/agent/lifecycle.ts +230 -3
  677. package/src/manager/plan/lifecycle.ts +11 -9
  678. package/src/manager/session/attribution.ts +12 -2
  679. package/src/manager/session/streamed-message-identity.ts +21 -0
  680. package/src/manager/session/turn-recorder.ts +4 -3
  681. package/src/pals/activity/causality.ts +261 -0
  682. package/src/pals/activity/projection.ts +89 -0
  683. package/src/pals/activity/source.ts +240 -0
  684. package/src/pals/activity/subscription-policy.ts +230 -0
  685. package/src/pals/activity/subscription-schema.ts +27 -0
  686. package/src/pals/activity/subscription-store.ts +172 -0
  687. package/src/pals/activity/subscription-types.ts +48 -0
  688. package/src/pals/activity/subscriptions.ts +209 -0
  689. package/src/pals/activity/types.ts +108 -0
  690. package/src/pals/channels/ingress.ts +153 -0
  691. package/src/pals/channels/routes.ts +118 -0
  692. package/src/pals/channels/routing.ts +197 -0
  693. package/src/pals/channels/schema.ts +108 -0
  694. package/src/pals/channels/types.ts +156 -0
  695. package/src/pals/communication/broker.ts +131 -0
  696. package/src/pals/communication/dispatch.ts +66 -0
  697. package/src/pals/communication/inbound.ts +193 -0
  698. package/src/pals/communication/ingress-dispatch.ts +63 -0
  699. package/src/pals/communication/ingress-inbound.ts +269 -0
  700. package/src/pals/communication/ingress-schema.ts +526 -0
  701. package/src/pals/communication/ingress-types.ts +336 -0
  702. package/src/pals/communication/operator.ts +315 -0
  703. package/src/pals/communication/policy.ts +174 -0
  704. package/src/pals/communication/schema.ts +173 -0
  705. package/src/pals/communication/store.ts +577 -0
  706. package/src/pals/communication/tools.ts +139 -0
  707. package/src/pals/communication/types.ts +227 -0
  708. package/src/pals/communication/verify.ts +220 -0
  709. package/src/pals/lifecycle.ts +54 -0
  710. package/src/pals/prompt.ts +101 -0
  711. package/src/pals/reference-images.ts +322 -0
  712. package/src/pals/runtime.ts +670 -0
  713. package/src/pals/store.ts +369 -0
  714. package/src/pals/types.ts +157 -0
  715. package/src/peers/envelope.ts +1 -1
  716. package/src/plugin/lifecycle.ts +217 -46
  717. package/src/plugin/shell-hook.ts +8 -2
  718. package/src/process/kill-tree.ts +10 -1
  719. package/src/prompt/resident-learning.ts +2 -2
  720. package/src/prompt/resident-step.ts +4 -4
  721. package/src/provider/errors.ts +135 -2
  722. package/src/public-runtime.ts +119 -12
  723. package/src/public-tools.ts +13 -1
  724. package/src/public-types.ts +69 -7
  725. package/src/registry/tool/presentation.ts +9 -4
  726. package/src/registry/tool/screen.ts +34 -2
  727. package/src/runtime/harness-session/index.ts +1125 -0
  728. package/src/runtime/harness-session/journal.ts +209 -0
  729. package/src/runtime/harness-session/saved-view.ts +122 -0
  730. package/src/runtime/jobs/awaited-jobs.ts +2 -1
  731. package/src/runtime/jobs/registry.ts +423 -50
  732. package/src/runtime/query/abandon-turn.ts +18 -2
  733. package/src/runtime/query/checkpoint.ts +11 -0
  734. package/src/runtime/query/durable-inbound.ts +101 -0
  735. package/src/runtime/query/events.ts +22 -5
  736. package/src/runtime/query/executor/tool-call-admission.ts +125 -32
  737. package/src/runtime/query/executor.ts +316 -130
  738. package/src/runtime/query/index.ts +48 -5
  739. package/src/runtime/query/iteration/index.ts +253 -114
  740. package/src/runtime/query/iteration/outstanding-work.ts +57 -7
  741. package/src/runtime/query/iteration/phases/context.ts +8 -0
  742. package/src/runtime/query/iteration/phases/tool-review.ts +124 -22
  743. package/src/runtime/query/iteration/step-shaping.ts +9 -1
  744. package/src/runtime/query/observation-context.ts +22 -16
  745. package/src/runtime/query/prepare-turn.ts +2 -2
  746. package/src/runtime/query/prompt-cache.ts +3 -0
  747. package/src/runtime/query/prompt.ts +32 -1
  748. package/src/runtime/query/repeat-call.ts +40 -10
  749. package/src/runtime/query/resume-pending.ts +60 -7
  750. package/src/runtime/query/resume-session.ts +1 -1
  751. package/src/runtime/query/review-policy.ts +23 -2
  752. package/src/runtime/query/saved-presentation.ts +70 -0
  753. package/src/runtime/query/steering.ts +6 -9
  754. package/src/runtime/query/tool-executions.ts +108 -9
  755. package/src/runtime/query/tooling.ts +6 -1
  756. package/src/scheduler/completion-inbox.ts +108 -7
  757. package/src/scheduler/delegating.ts +5 -0
  758. package/src/scheduler/local.ts +2 -0
  759. package/src/session/summary/materialize.ts +51 -9
  760. package/src/store/budget/ledger.ts +60 -5
  761. package/src/store/index.ts +1 -0
  762. package/src/store/memory/disk.ts +82 -7
  763. package/src/store/memory/index.ts +66 -7
  764. package/src/store/memory/markdown.ts +54 -2
  765. package/src/store/memory/memory.ts +52 -2
  766. package/src/store/memory/revision.ts +158 -0
  767. package/src/store/session/disk.ts +77 -10
  768. package/src/store/session/memory.ts +32 -7
  769. package/src/store/session-log/core.ts +118 -11
  770. package/src/store/session-log/disk.ts +9 -2
  771. package/src/store/session-log/fold.ts +22 -0
  772. package/src/store/session-log/index.ts +5 -0
  773. package/src/store/session-log/memory.ts +2 -1
  774. package/src/store/session-log/spill.ts +89 -6
  775. package/src/store/session-log/structured-result.ts +96 -0
  776. package/src/store/task/disk.ts +46 -2
  777. package/src/store/task/memory.ts +13 -3
  778. package/src/tools/admit-facts.ts +145 -0
  779. package/src/tools/builtins/bash.ts +132 -24
  780. package/src/tools/builtins/edit.ts +42 -0
  781. package/src/tools/builtins/file-write-result.ts +14 -0
  782. package/src/tools/builtins/glob.ts +12 -0
  783. package/src/tools/builtins/grep.ts +14 -0
  784. package/src/tools/builtins/index.ts +2 -0
  785. package/src/tools/builtins/job.ts +4 -1
  786. package/src/tools/builtins/read-file.ts +57 -0
  787. package/src/tools/builtins/view-image.ts +409 -0
  788. package/src/tools/builtins/wait-for-job-bounds.ts +45 -7
  789. package/src/tools/builtins/wait-for-job.ts +159 -36
  790. package/src/tools/builtins/write-file.ts +4 -2
  791. package/src/tools/command-shell.ts +132 -5
  792. package/src/tools/coordinator/agent.ts +9 -19
  793. package/src/tools/coordinator/index.ts +150 -75
  794. package/src/tools/coordinator/wait-with-idle-bound.ts +3 -1
  795. package/src/tools/defineTool.ts +4 -0
  796. package/src/tools/failure-facts.ts +24 -0
  797. package/src/tools/host-output.ts +136 -0
  798. package/src/tools/memory/delete.ts +33 -3
  799. package/src/tools/memory/read.ts +35 -2
  800. package/src/tools/memory/search.ts +38 -7
  801. package/src/tools/memory/update.ts +28 -3
  802. package/src/tools/oem-code-pages.ts +22 -0
  803. package/src/tools/schedules/schedule-tool.ts +38 -5
  804. package/src/tools/schedules/types.ts +23 -3
  805. package/src/tools/task/list.ts +15 -7
  806. package/src/tools/task/present.ts +37 -7
  807. package/src/tools/task/update.ts +12 -5
  808. package/src/tools/text-window.ts +87 -0
  809. package/src/toolsets/manager.ts +132 -2
  810. package/src/turn/memory-recall.ts +5 -1
  811. package/src/types/acp/index.ts +150 -4
  812. package/src/types/agent/base.ts +3 -0
  813. package/src/types/agent/manager.ts +8 -23
  814. package/src/types/agent/scheduler.ts +10 -1
  815. package/src/types/agent/task.ts +4 -0
  816. package/src/types/connector/mcp.ts +7 -0
  817. package/src/types/errors/catalog.ts +4 -2
  818. package/src/types/harness/schema.ts +203 -0
  819. package/src/types/harness/session.ts +306 -0
  820. package/src/types/hitl/index.ts +17 -1
  821. package/src/types/job/index.ts +42 -0
  822. package/src/types/memory/index.ts +43 -0
  823. package/src/types/message/inbound-delivery.ts +63 -0
  824. package/src/types/message/index.ts +8 -1
  825. package/src/types/plugin/index.ts +11 -6
  826. package/src/types/sandbox/index.ts +46 -0
  827. package/src/types/session/checkpoint.ts +4 -1
  828. package/src/types/session/events.ts +23 -1
  829. package/src/types/session/records.ts +114 -2
  830. package/src/types/session/step.ts +2 -0
  831. package/src/types/session/store.ts +23 -9
  832. package/src/types/session/tool-execution.ts +6 -0
  833. package/src/types/structured-output/index.ts +13 -2
  834. package/src/types/summary/ref.ts +3 -1
  835. package/src/types/tool/index.ts +39 -5
  836. package/src/types/tool/presentation.ts +121 -0
  837. package/src/utils/json-snapshot.ts +26 -9
  838. package/src/utils/structured-result-json.ts +10 -0
@@ -3,11 +3,14 @@ import {
3
3
  extractFromAssistantMessage,
4
4
  extractFromUserMessage,
5
5
  } from '../../../compaction/extractor.js'
6
+ import { estimateMessageTokens } from '../../../compaction/token-estimate.js'
6
7
  import { AUTO_CONTINUATION_USER_MESSAGE } from '../../../constants/continuation.js'
8
+ import { CHARS_PER_TOKEN } from '../../../constants/limits.js'
7
9
  import {
8
10
  DEFAULT_STRUCTURED_OUTPUT_RETRIES,
9
11
  STRUCTURED_OUTPUT_REPROMPT,
10
12
  } from '../../../constants/tools/index.js'
13
+ import { withStreamedMessageIdentity } from '../../../manager/session/streamed-message-identity.js'
11
14
  import { renderSkillsSection } from '../../../persona/assembler.js'
12
15
  import { resolveProviderCapabilities } from '../../../provider/capabilities.js'
13
16
  import { collectChatCompletion } from '../../../provider/collect-chat-completion.js'
@@ -46,7 +49,9 @@ import type { LLMToolSchema } from '../../../types/tool/index.js'
46
49
  import { toErrorMessage } from '../../../utils/error.js'
47
50
  import { stableDigest } from '../../../utils/hash.js'
48
51
  import { generateMessageId } from '../../../utils/id.js'
52
+ import { parseStructuredResultJson } from '../../../utils/structured-result-json.js'
49
53
  import { createCallbackInference } from '../callback-inference.js'
54
+ import { deliverDurableInbound } from '../durable-inbound.js'
50
55
  import type { ToolCallOutcome } from '../executor.js'
51
56
  import { projectObservationContext } from '../observation-context.js'
52
57
  import { applyLifecycleHookResults } from '../plugin-hooks.js'
@@ -63,7 +68,11 @@ import {
63
68
  } from '../request-rich-content.js'
64
69
  import { formatSteeringNote, isOperatorUserMessage } from '../steering.js'
65
70
  import { parseNativeCandidate } from './native-output.js'
66
- import { holdForOutstandingWork, settleOutstandingWork } from './outstanding-work.js'
71
+ import {
72
+ drainArrivedTaskCompletions,
73
+ holdForOutstandingWork,
74
+ settleOutstandingWork,
75
+ } from './outstanding-work.js'
67
76
  import { runAdvisoryPhase } from './phases/advisory.js'
68
77
  import { runIterationCheckpoint } from './phases/checkpoint.js'
69
78
  import {
@@ -160,7 +169,12 @@ export class IterationOrchestrator {
160
169
  private projectObservations(messages: Message[]): Message[] {
161
170
  const config = this.ctx.compactionConfig
162
171
  return config && config.strategy !== 'disabled' && config.deduplicateObservations !== false
163
- ? projectObservationContext(messages, this.ctx.tools, config.preserveToolResultsFrom)
172
+ ? projectObservationContext(
173
+ messages,
174
+ this.ctx.tools,
175
+ config.preserveToolResultsFrom,
176
+ (call, message) => this.ctx.toolExecutor.recordedObservationKey(call, message),
177
+ )
164
178
  : messages
165
179
  }
166
180
  /** Rich tool blocks already reported; durable history is scanned every turn. */
@@ -182,6 +196,9 @@ export class IterationOrchestrator {
182
196
  private stopDeferredForOutstandingWork = false
183
197
  /** One current input, independent of the compactable history array. */
184
198
  private latestUserMessage: UserMessage | undefined
199
+ private initialDurableDelivered = false
200
+ private resumedToolResults: readonly ToolCallOutcome[] = []
201
+ private toolStructuredCounterHydrated = false
185
202
 
186
203
  constructor(ctx: IterationContext) {
187
204
  this.ctx = {
@@ -194,6 +211,11 @@ export class IterationOrchestrator {
194
211
  ctx.checkpointMgr.setAnswerReviewAttemptsSource?.(() => this.answerReviewAttempts)
195
212
  ctx.checkpointMgr.setStructuredReviewAttemptsSource?.(() => this.structuredReviewAttempts)
196
213
  ctx.checkpointMgr.setNativeStructuredAttemptsSource?.(() => this.nativeStructuredAttempts)
214
+ ctx.checkpointMgr.setToolStructuredAttemptsSource?.(() =>
215
+ this.toolStructuredCounterHydrated
216
+ ? this.toolStructuredAttempts
217
+ : (ctx.checkpointMgr.restoredToolStructuredAttempts ?? 0),
218
+ )
197
219
  if (ctx.structuredOutput?.mode === 'native') {
198
220
  const limit = ctx.structuredOutput.maxRetries
199
221
  if (limit !== undefined && (!Number.isSafeInteger(limit) || limit < 0))
@@ -207,6 +229,11 @@ export class IterationOrchestrator {
207
229
  )
208
230
  throw new RangeError('Unknown structuredOutput.mode')
209
231
  const maxReviews = ctx.structuredOutput?.maxReviews
232
+ const retention = ctx.structuredOutput?.toolResultRetention
233
+ if (retention !== undefined && !['receipt', 'durable'].includes(retention))
234
+ throw new RangeError('Unknown structuredOutput.toolResultRetention')
235
+ if (retention === 'durable' && ctx.structuredOutput?.mode === 'native')
236
+ throw new RangeError('structuredOutput.toolResultRetention: durable requires tool mode')
210
237
  if (maxReviews !== undefined && (!Number.isSafeInteger(maxReviews) || maxReviews < 0))
211
238
  throw new RangeError('structuredOutput.maxReviews must be a nonnegative safe integer')
212
239
  if (
@@ -291,15 +318,35 @@ export class IterationOrchestrator {
291
318
  this.ctx = { ...this.ctx, rootSpan: span }
292
319
  }
293
320
 
321
+ /** Fresh input is recorded before guards; restored tool batches must finish first. */
322
+ async deliverInitialDurable(): Promise<void> {
323
+ if (this.initialDurableDelivered) return
324
+ await deliverDurableInbound(
325
+ this.ctx.recorder,
326
+ this.ctx.durableInbound,
327
+ this.ctx.abortController.signal,
328
+ )
329
+ this.initialDurableDelivered = true
330
+ }
331
+
332
+ /** A restored pending batch must answer every owned call before consuming its correction. */
333
+ setResumedToolResults(results: readonly ToolCallOutcome[]): void {
334
+ this.resumedToolResults = results
335
+ }
336
+
294
337
  async *runLoop(): AsyncGenerator<SessionEvent> {
295
338
  const { turnConfig, recorder } = this.ctx
296
339
  const { model } = turnConfig
297
340
  const tracer = getTracer()
341
+ // Initial durable input arrives before checkpoints, plan gates or inference.
342
+ await this.deliverInitialDurable()
298
343
  // Resume hydration happens after construction, before the loop starts.
299
344
  this.latestUserMessage = this.ctx.checkpointMgr.restoredLatestUserMessage
300
345
  this.answerReviewAttempts = this.ctx.checkpointMgr.restoredAnswerReviewAttempts ?? 0
301
346
  this.structuredReviewAttempts = this.ctx.checkpointMgr.restoredStructuredReviewAttempts ?? 0
302
347
  this.nativeStructuredAttempts = this.ctx.checkpointMgr.restoredNativeStructuredAttempts ?? 0
348
+ this.toolStructuredAttempts = this.ctx.checkpointMgr.restoredToolStructuredAttempts ?? 0
349
+ this.toolStructuredCounterHydrated = true
303
350
  if (!this.latestUserMessage) {
304
351
  for (const message of recorder.messages) this.rememberUserMessage(message, false)
305
352
  }
@@ -307,6 +354,9 @@ export class IterationOrchestrator {
307
354
  // Only known post-checkpoint arrivals may supersede it, never an old
308
355
  // retained user turn encountered while scanning restored history.
309
356
  for (const message of this.ctx.resumedInput ?? []) this.rememberUserMessage(message)
357
+ const resumedToolResults = this.resumedToolResults
358
+ this.resumedToolResults = []
359
+ await this.recordToolStructuredFailure(resumedToolResults, recorder.currentIteration)
310
360
 
311
361
  // What a recoverable failure pauses on when it lands before this
312
362
  // loop wrote a checkpoint of its own: without it a 429 on the first
@@ -326,9 +376,6 @@ export class IterationOrchestrator {
326
376
  // succeeded, which is the evidence that the turn is no longer stuck.
327
377
  let overflowRelieved = false
328
378
 
329
- const planSignal = yield* runPlanGate(this.ctx)
330
- if (planSignal === 'stop') return
331
-
332
379
  // A `finally` rather than a line at each exit, for the reason written
333
380
  // beside `iterSpan.end()` below: this loop leaves by eight `break`s,
334
381
  // two `return`s and a `throw`, and a rule every future edit has to
@@ -339,19 +386,17 @@ export class IterationOrchestrator {
339
386
  // A `finally` also covers a generator abandoned by its consumer, which
340
387
  // no post-loop block reaches.
341
388
  try {
389
+ // Restored exhaustion precedes plan gates and any auxiliary inference.
390
+ if (this.stopForStructuredRetryExhaustion()) return
391
+ const planSignal = yield* runPlanGate(this.ctx)
392
+ if (planSignal === 'stop') return
342
393
  while (true) {
343
394
  if (this.ctx.abortController.signal.aborted) {
344
395
  recorder.setStopReason('cancelled')
345
396
  recorder.markCancelled()
346
397
  break
347
398
  }
348
- if (
349
- this.ctx.structuredOutput?.mode === 'native' &&
350
- this.nativeStructuredAttempts > this.structuredOutputRetryLimit()
351
- ) {
352
- recorder.setStopReason('structured_output_failed')
353
- break
354
- }
399
+ if (this.stopForStructuredRetryExhaustion()) break
355
400
  if (
356
401
  this.ctx.reviewAnswer &&
357
402
  this.answerReviewAttempts > (this.ctx.maxAnswerReviews ?? DEFAULT_ANSWER_REVIEW_LIMIT)
@@ -548,13 +593,37 @@ export class IterationOrchestrator {
548
593
  // Shape this step before calling the model. `stopWhen` decides
549
594
  // whether to keep going; this decides HOW. No-op when the host
550
595
  // supplied no hook.
596
+ // Render request-only contributions once before preparation. Their
597
+ // estimated cost reduces every stage's headroom, and the same text
598
+ // reaches the provider even if a stage changes external state.
599
+ const contextSections =
600
+ this.ctx.promptContributions?.render('context', { iteration: iterationNum }) ?? []
601
+ const deferredMcpHints =
602
+ this.ctx.showDeferredToolContext !== false
603
+ ? this.ctx.tools.snapshotUntrustedDeferredContext()
604
+ : undefined
605
+ const pricedContextText = [
606
+ ...contextSections,
607
+ ...(deferredMcpHints?.all ? [deferredMcpHints.all] : []),
608
+ ].join('\n\n')
609
+ const shaping: StepShaping = {
610
+ ...this.stepShaping(),
611
+ requestContextTokens: pricedContextText
612
+ ? estimateMessageTokens(stepContextMessage(pricedContextText)) +
613
+ Math.ceil(
614
+ ((deferredMcpHints?.maxRenderedChars ?? 0) -
615
+ (deferredMcpHints?.all.length ?? 0)) /
616
+ CHARS_PER_TOKEN,
617
+ )
618
+ : 0,
619
+ }
551
620
  const contextModelBeforePreparation = this.ctx.contextModel ?? model
552
- const step = await prepareStep(this.stepShaping(), iterationNum)
621
+ const step = await prepareStep(shaping, iterationNum)
553
622
  // Preparation inference belongs to the turn, not the main-model step.
554
623
  usageBefore = { ...recorder.tokenUsage }
555
624
  costBefore = { ...recorder.costInfo }
556
625
  stepModel = step.model ?? model
557
- await selectContextModel(this.stepShaping(), stepModel)
626
+ await selectContextModel(shaping, stepModel)
558
627
  // Preserve post-compaction preparation/recall semantics. A changed
559
628
  // model needs a second check against its own window; never replay
560
629
  // host preparation effects merely to rebuild its request guidance.
@@ -563,6 +632,11 @@ export class IterationOrchestrator {
563
632
  yield* this.ctx.drainPending()
564
633
 
565
634
  const stepAllowedTools = step.allowedTools ?? this.ctx.allowedTools
635
+ const deferredMcpContext = deferredMcpHints?.forNames(stepAllowedTools) ?? ''
636
+ const contextText = [
637
+ ...contextSections,
638
+ ...(deferredMcpContext ? [deferredMcpContext] : []),
639
+ ].join('\n\n')
566
640
  const llmTools = this.ctx.tools
567
641
  .toLLMTools(stepAllowedTools)
568
642
  .filter(
@@ -643,11 +717,6 @@ export class IterationOrchestrator {
643
717
  // (compaction preserves it there) and leaves the request's
644
718
  // system run here.
645
719
  const workingMemory = splitWorkingMemoryForRequest(baseMessages)
646
- const contextSections =
647
- this.ctx.promptContributions?.render('context', {
648
- iteration: iterationNum,
649
- }) ?? []
650
-
651
720
  const stepPreamble = [step.system, stepSkills, policyNotice, ...turnSections]
652
721
  .filter(Boolean)
653
722
  .join('\n\n')
@@ -655,15 +724,14 @@ export class IterationOrchestrator {
655
724
  ? [...workingMemory.history, createSystemMessage(stepPreamble)]
656
725
  : [...workingMemory.history]
657
726
  if (workingMemory.context) requestHistory.push(workingMemory.context)
658
- if (contextSections.length > 0)
659
- requestHistory.push(stepContextMessage(contextSections.join('\n\n')))
727
+ if (contextText) requestHistory.push(stepContextMessage(contextText))
660
728
  if (step.context) requestHistory.push(stepContextMessage(step.context))
661
729
  const messages = projectRequestRichContent(
662
730
  this.projectObservations(requestHistory),
663
731
  this.ctx.turnConfig.maxRequestRichContentBytes ??
664
732
  DEFAULT_MAX_REQUEST_RICH_CONTENT_BYTES,
665
733
  )
666
- appendWorkContext(this.stepShaping(), messages, iterationNum, step)
734
+ appendWorkContext(shaping, messages, iterationNum, step)
667
735
  if (closingDirective) messages.push(closingDirective)
668
736
  await this.reportUnsupportedToolResults(messages)
669
737
  yield* this.ctx.drainPending()
@@ -962,22 +1030,25 @@ export class IterationOrchestrator {
962
1030
  // with the turn they belong to. Trimming therefore removes both;
963
1031
  // retaining them gives the target adapter enough evidence to
964
1032
  // validate native replay against the exact serving route.
965
- const assistantMsg = createAssistantMessage(
966
- response.message.content,
967
- forceFinalize ? undefined : response.message.toolCalls,
968
- response.message.reasoning,
969
- // Rides with the turn it belongs to, like reasoning does, so
970
- // trimming or compacting the turn takes its evidence with it
971
- // rather than leaving citations pointing at prose that is gone.
972
- response.message.citations,
973
- {
974
- type: 'model',
975
- ...servedBy,
976
- ...(response.message.replayState !== undefined
977
- ? { replayState: response.message.replayState }
978
- : {}),
979
- },
980
- response.message.textParts,
1033
+ const assistantMsg = withStreamedMessageIdentity(
1034
+ createAssistantMessage(
1035
+ response.message.content,
1036
+ forceFinalize ? undefined : response.message.toolCalls,
1037
+ response.message.reasoning,
1038
+ // Rides with the turn it belongs to, like reasoning does, so
1039
+ // trimming or compacting the turn takes its evidence with it
1040
+ // rather than leaving citations pointing at prose that is gone.
1041
+ response.message.citations,
1042
+ {
1043
+ type: 'model',
1044
+ ...servedBy,
1045
+ ...(response.message.replayState !== undefined
1046
+ ? { replayState: response.message.replayState }
1047
+ : {}),
1048
+ },
1049
+ response.message.textParts,
1050
+ ),
1051
+ messageId,
981
1052
  )
982
1053
  recorder.pushMessage(assistantMsg)
983
1054
  if (this.ctx.advisoryCtx && requestMessages) {
@@ -1150,7 +1221,7 @@ export class IterationOrchestrator {
1150
1221
  const changed = yield* holdForOutstandingWork(this.ctx, iterationNum, false, () =>
1151
1222
  this.deliverInbound(),
1152
1223
  )
1153
- const inbound = this.deliverInbound()
1224
+ const inbound = await this.deliverInbound()
1154
1225
  if (changed || inbound > 0) continue
1155
1226
  }
1156
1227
  if (this.ctx.abortController.signal.aborted) {
@@ -1171,6 +1242,21 @@ export class IterationOrchestrator {
1171
1242
  continue
1172
1243
  }
1173
1244
 
1245
+ // Missing output and rejected model arguments share one durable
1246
+ // correction allowance, including prose cut off by the output cap.
1247
+ if (!forceFinalize && this.needsStructuredOutput()) {
1248
+ await this.recordToolStructuredCorrection(iterationNum)
1249
+ await this.ctx.emitEvent({
1250
+ type: 'iteration_completed',
1251
+ turnId: recorder.turnId,
1252
+ iteration: iterationNum,
1253
+ hasToolCalls: false,
1254
+ })
1255
+ yield* this.ctx.drainPending()
1256
+ if (this.stopForStructuredRetryExhaustion()) break
1257
+ continue
1258
+ }
1259
+
1174
1260
  const hasContent =
1175
1261
  response.message.content !== null && response.message.content.length > 0
1176
1262
 
@@ -1221,40 +1307,6 @@ export class IterationOrchestrator {
1221
1307
  continue
1222
1308
  }
1223
1309
 
1224
- // The model tried to finish in prose while a structured
1225
- // output was demanded. Send it back with the schema error
1226
- // rather than returning an unusable result — this is the
1227
- // re-prompt half, and it is bounded so a model that cannot
1228
- // satisfy the schema fails loudly instead of looping.
1229
- if (!forceFinalize && this.needsStructuredOutput()) {
1230
- const attempt = ++this.structuredOutputAttempts
1231
- const limit = this.structuredOutputRetryLimit()
1232
- if (attempt > limit) {
1233
- this.ctx.log.warn('Structured output not produced within its retries', {
1234
- [NAMZU.TURN_ID]: recorder.turnId,
1235
- 'namzu.runtime.attempts': attempt - 1,
1236
- })
1237
- recorder.setStopReason('structured_output_failed')
1238
- break
1239
- }
1240
- this.ctx.log.info('Re-prompting for structured output', {
1241
- [NAMZU.TURN_ID]: recorder.turnId,
1242
- 'namzu.retry.attempt': attempt,
1243
- 'namzu.runtime.limit': limit,
1244
- })
1245
- recorder.pushMessage(
1246
- createRuntimeContextMessage(STRUCTURED_OUTPUT_REPROMPT, 'structured-output'),
1247
- )
1248
- await this.ctx.emitEvent({
1249
- type: 'iteration_completed',
1250
- turnId: recorder.turnId,
1251
- iteration: iterationNum,
1252
- hasToolCalls: false,
1253
- })
1254
- yield* this.ctx.drainPending()
1255
- continue
1256
- }
1257
-
1258
1310
  // Let the host judge the ANSWER and hand back work.
1259
1311
  //
1260
1312
  // The stop predicate is only consulted after tools ran, so
@@ -1346,7 +1398,7 @@ export class IterationOrchestrator {
1346
1398
  // After the outstanding-work hold above, so a delivery
1347
1399
  // does not race a worker still finishing, and before the
1348
1400
  // settle below, which is the last moment it can matter.
1349
- if (!forceFinalize && this.deliverInbound() > 0) {
1401
+ if (!forceFinalize && (await this.deliverInbound()) > 0) {
1350
1402
  await this.ctx.emitEvent({
1351
1403
  type: 'iteration_completed',
1352
1404
  turnId: recorder.turnId,
@@ -1431,6 +1483,10 @@ export class IterationOrchestrator {
1431
1483
  if (reviewOutcome.decision === 'stop') {
1432
1484
  return
1433
1485
  }
1486
+ const needsCorrection = await this.recordToolStructuredFailure(
1487
+ reviewOutcome.results,
1488
+ iterationNum,
1489
+ )
1434
1490
 
1435
1491
  // A tool asked for a person. The whole batch is committed; the
1436
1492
  // turn parks here rather than asking the model what to do about
@@ -1442,6 +1498,17 @@ export class IterationOrchestrator {
1442
1498
  if (reviewOutcome.decision === 'rejected') {
1443
1499
  continue
1444
1500
  }
1501
+ if (needsCorrection) {
1502
+ await this.ctx.emitEvent({
1503
+ type: 'iteration_completed',
1504
+ turnId: recorder.turnId,
1505
+ iteration: iterationNum,
1506
+ hasToolCalls: true,
1507
+ })
1508
+ yield* this.ctx.drainPending()
1509
+ if (this.stopForStructuredRetryExhaustion()) break
1510
+ continue
1511
+ }
1445
1512
 
1446
1513
  // A successful `structured_output` call IS the answer, so the
1447
1514
  // run ends here rather than paying for another turn whose only
@@ -1491,7 +1558,7 @@ export class IterationOrchestrator {
1491
1558
  break
1492
1559
  }
1493
1560
  if (!forceFinalize) {
1494
- const inbound = this.deliverInbound()
1561
+ const inbound = await this.deliverInbound()
1495
1562
  // Tool-result steering may already have been delivered by
1496
1563
  // runToolReview. Its candidate still answers the older input.
1497
1564
  if (inbound > 0 || this.latestUserMessage !== operatorInputAtDispatch) continue
@@ -1617,7 +1684,7 @@ export class IterationOrchestrator {
1617
1684
  // Placed beside the advisory phase deliberately: that is the
1618
1685
  // established seam for putting a user message in after tool
1619
1686
  // results and before the next turn.
1620
- const unheard = this.ctx.completionInbox?.drain() ?? []
1687
+ const unheard = await drainArrivedTaskCompletions(this.ctx)
1621
1688
  if (unheard.length > 0) {
1622
1689
  this.ctx.log.info('Delivering unawaited task completions', {
1623
1690
  [NAMZU.TURN_ID]: recorder.turnId,
@@ -1633,7 +1700,7 @@ export class IterationOrchestrator {
1633
1700
  // and never deliver it. Placed here rather than at the top of
1634
1701
  // the next iteration so a message queued during THIS turn is
1635
1702
  // in the history the next request is built from.
1636
- this.deliverInbound()
1703
+ await this.deliverInbound()
1637
1704
 
1638
1705
  await runAdvisoryPhase(this.ctx, iterationNum, response, this.getAdvisoryTurnContext())
1639
1706
 
@@ -1858,7 +1925,7 @@ export class IterationOrchestrator {
1858
1925
  }
1859
1926
  }
1860
1927
 
1861
- private deliverInbound(): number {
1928
+ private async deliverInbound(): Promise<number> {
1862
1929
  const queued = this.ctx.inboundMessages?.() ?? []
1863
1930
  for (const message of queued) {
1864
1931
  this.ctx.recorder.pushMessage(message)
@@ -1875,7 +1942,12 @@ export class IterationOrchestrator {
1875
1942
  this.rememberUserMessage(createRuntimeContextMessage(stranded, 'steering'))
1876
1943
  }
1877
1944
 
1878
- return queued.length + (stranded ? 1 : 0)
1945
+ const durable = await deliverDurableInbound(
1946
+ this.ctx.recorder,
1947
+ this.ctx.durableInbound,
1948
+ this.ctx.abortController.signal,
1949
+ )
1950
+ return queued.length + (stranded ? 1 : 0) + durable
1879
1951
  }
1880
1952
 
1881
1953
  private recordStep(input: {
@@ -1933,6 +2005,7 @@ export class IterationOrchestrator {
1933
2005
  toolName: tc.function.name,
1934
2006
  output: outcome?.output ?? '',
1935
2007
  isError: outcome?.isError ?? false,
2008
+ ...(outcome?.skipped ? { skipped: true as const } : {}),
1936
2009
  durationMs: 0,
1937
2010
  },
1938
2011
  ]
@@ -1977,8 +2050,8 @@ export class IterationOrchestrator {
1977
2050
  }
1978
2051
  }
1979
2052
 
1980
- /** Turns spent asking the model again for a valid structured output. */
1981
- private structuredOutputAttempts = 0
2053
+ /** Model responses needing a tool-mode schema correction, separate from host reviews. */
2054
+ private toolStructuredAttempts = 0
1982
2055
  private nativeStructuredAttempts = 0
1983
2056
  private structuredOutputDone = false
1984
2057
  private pendingStructuredOutput: unknown
@@ -1988,6 +2061,58 @@ export class IterationOrchestrator {
1988
2061
  return this.ctx.structuredOutput?.maxRetries ?? DEFAULT_STRUCTURED_OUTPUT_RETRIES
1989
2062
  }
1990
2063
 
2064
+ private stopForStructuredRetryExhaustion(): boolean {
2065
+ const { recorder, abortController } = this.ctx
2066
+ if (abortController.signal.aborted) {
2067
+ recorder.setStopReason('cancelled')
2068
+ recorder.markCancelled()
2069
+ return true
2070
+ }
2071
+ if (!this.needsStructuredOutput()) return false
2072
+ const attempts =
2073
+ this.ctx.structuredOutput?.mode === 'native'
2074
+ ? this.nativeStructuredAttempts
2075
+ : this.toolStructuredAttempts
2076
+ if (attempts === 0 || !(attempts > this.structuredOutputRetryLimit())) return false
2077
+ recorder.setStopReason('structured_output_failed')
2078
+ return true
2079
+ }
2080
+
2081
+ private async recordToolStructuredFailure(
2082
+ results: readonly ToolCallOutcome[],
2083
+ iteration: number,
2084
+ ): Promise<boolean> {
2085
+ if (
2086
+ !this.needsStructuredOutput() ||
2087
+ this.ctx.structuredOutput?.mode === 'native' ||
2088
+ this.ctx.abortController.signal.aborted ||
2089
+ !results.some(
2090
+ (result) => result.toolName === STRUCTURED_OUTPUT_TOOL_NAME && result.inputFailure,
2091
+ )
2092
+ )
2093
+ return false
2094
+ // One model response consumes one correction, even with several invalid calls.
2095
+ await this.recordToolStructuredCorrection(iteration)
2096
+ return true
2097
+ }
2098
+
2099
+ private async recordToolStructuredCorrection(iteration: number): Promise<void> {
2100
+ this.toolStructuredAttempts++
2101
+ const { recorder } = this.ctx
2102
+ recorder.pushMessage(
2103
+ createRuntimeContextMessage(STRUCTURED_OUTPUT_REPROMPT, 'structured-output'),
2104
+ )
2105
+ // Commit the full answered batch, feedback and allowance before another request
2106
+ // or handoff. A failed checkpoint must not buy another correction opportunity.
2107
+ const checkpoint = await this.ctx.checkpointMgr.create(recorder, iteration)
2108
+ await this.ctx.emitEvent({
2109
+ type: 'checkpoint_created',
2110
+ turnId: recorder.turnId,
2111
+ checkpointId: checkpoint.id,
2112
+ iteration,
2113
+ })
2114
+ }
2115
+
1991
2116
  /** True while a structured output was demanded and has not arrived. */
1992
2117
  private needsStructuredOutput(): boolean {
1993
2118
  return this.ctx.structuredOutput !== undefined && !this.structuredOutputDone
@@ -1999,9 +2124,9 @@ export class IterationOrchestrator {
1999
2124
  * Deliberately narrow. A terminal call decides the turn only when it is
2000
2125
  * the ONLY call the model made in that turn: a model that asked for
2001
2126
  * other work meant to see those results, and settling here would throw
2002
- * away answers it requested. Same for a failed terminal call — an
2003
- * error is not an answer, and the model is the one that should read
2004
- * it. Both cases fall through to the ordinary path, and both say so in
2127
+ * away answers it requested. A failed or skipped terminal call also
2128
+ * needs another model turn: its receipt is not an executed answer.
2129
+ * These cases fall through to the ordinary path, and each says so in
2005
2130
  * the log rather than quietly costing the relay the flag was set to
2006
2131
  * avoid.
2007
2132
  */
@@ -2024,11 +2149,16 @@ export class IterationOrchestrator {
2024
2149
  }
2025
2150
 
2026
2151
  const hit = terminal[0]
2027
- if (!hit || hit.isError) {
2028
- this.ctx.log.info('Terminal tool failed — returning the error to the model', {
2029
- [NAMZU.TURN_ID]: this.ctx.recorder.turnId,
2030
- [GENAI.TOOL_NAME]: hit?.toolName,
2031
- })
2152
+ if (!hit || hit.isError || hit.skipped) {
2153
+ this.ctx.log.info(
2154
+ hit?.skipped
2155
+ ? 'Terminal tool was skipped — returning its receipt to the model'
2156
+ : 'Terminal tool failed — returning the error to the model',
2157
+ {
2158
+ [NAMZU.TURN_ID]: this.ctx.recorder.turnId,
2159
+ [GENAI.TOOL_NAME]: hit?.toolName,
2160
+ },
2161
+ )
2032
2162
  return undefined
2033
2163
  }
2034
2164
  return hit
@@ -2040,7 +2170,8 @@ export class IterationOrchestrator {
2040
2170
  * The tool validates against the Zod schema before its `execute` runs,
2041
2171
  * so reaching here successfully means the value is already valid — a
2042
2172
  * failed parse comes back as an error result and simply does not
2043
- * satisfy the demand, which sends the loop round again.
2173
+ * satisfy the demand, which sends the loop round again. A hook-skipped
2174
+ * receipt did not execute the tool and is not a candidate either.
2044
2175
  *
2045
2176
  * Narrow in the same way {@link terminalToolOutput} is, for its stated
2046
2177
  * reason and one that is sharper here. The neighbour refuses a shared
@@ -2086,7 +2217,9 @@ export class IterationOrchestrator {
2086
2217
  ): Promise<'absent' | 'accepted' | 'retry' | 'exhausted' | 'cancelled'> {
2087
2218
  if (!this.needsStructuredOutput() || this.ctx.structuredOutput?.mode === 'native')
2088
2219
  return 'absent'
2089
- const hit = results.find((r) => r.toolName === STRUCTURED_OUTPUT_TOOL_NAME && !r.isError)
2220
+ const hit = results.find(
2221
+ (r) => r.toolName === STRUCTURED_OUTPUT_TOOL_NAME && !r.isError && !r.skipped,
2222
+ )
2090
2223
  if (!hit) return 'absent'
2091
2224
 
2092
2225
  const callCount = response.message.toolCalls?.length ?? 0
@@ -2100,15 +2233,19 @@ export class IterationOrchestrator {
2100
2233
 
2101
2234
  let parsed: unknown
2102
2235
  try {
2103
- parsed = JSON.parse(hit.output)
2236
+ parsed =
2237
+ this.ctx.structuredOutput?.toolResultRetention === 'durable'
2238
+ ? parseStructuredResultJson(
2239
+ hit.structuredResultJson === undefined ? hit.output : hit.structuredResultJson,
2240
+ )
2241
+ : JSON.parse(hit.output)
2104
2242
  } catch {
2105
- // The tool serializes its own validated input, so this is
2106
- // unreachable in practice; keep the raw text rather than losing it.
2107
- if (this.ctx.structuredOutput?.review)
2108
- throw new Error(
2109
- 'Structured review requires an intact JSON tool result; check tool-output limits and result transformations',
2110
- )
2111
- parsed = hit.output
2243
+ // Screening, hooks or output budgeting can change the validated
2244
+ // tool's receipt. A raw-text fallback is not a structured result;
2245
+ // do not recover input/data that bypasses those boundaries either.
2246
+ throw new Error(
2247
+ 'Structured output requires an intact JSON tool result; check result transformations, increase maxToolOutputChars to fit the result, or use native mode with a capable provider',
2248
+ )
2112
2249
  }
2113
2250
  return this.reviewStructuredOutput(parsed, reviewRequest, model)
2114
2251
  }
@@ -2386,23 +2523,25 @@ export class IterationOrchestrator {
2386
2523
  model: servedBy.model,
2387
2524
  })
2388
2525
 
2389
- const assistantMsg = createAssistantMessage(
2390
- response.message.content,
2391
- undefined,
2392
- response.message.reasoning,
2393
- response.message.citations,
2394
- {
2395
- type: 'model',
2396
- ...servedBy,
2397
- ...(response.message.replayState !== undefined
2398
- ? { replayState: response.message.replayState }
2399
- : {}),
2400
- },
2401
- response.message.textParts,
2526
+ const finalMessageId = generateMessageId()
2527
+ const assistantMsg = withStreamedMessageIdentity(
2528
+ createAssistantMessage(
2529
+ response.message.content,
2530
+ undefined,
2531
+ response.message.reasoning,
2532
+ response.message.citations,
2533
+ {
2534
+ type: 'model',
2535
+ ...servedBy,
2536
+ ...(response.message.replayState !== undefined
2537
+ ? { replayState: response.message.replayState }
2538
+ : {}),
2539
+ },
2540
+ response.message.textParts,
2541
+ ),
2542
+ finalMessageId,
2402
2543
  )
2403
2544
  this.ctx.recorder.pushMessage(assistantMsg)
2404
-
2405
- const finalMessageId = generateMessageId()
2406
2545
  await this.ctx.emitEvent({
2407
2546
  type: 'message_started',
2408
2547
  turnId: this.ctx.recorder.turnId,