@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
@@ -1,7 +1,10 @@
1
1
  import { SpanStatusCode } from '@opentelemetry/api';
2
2
  import { extractFromAssistantMessage, extractFromUserMessage, } from '../../../compaction/extractor.js';
3
+ import { estimateMessageTokens } from '../../../compaction/token-estimate.js';
3
4
  import { AUTO_CONTINUATION_USER_MESSAGE } from '../../../constants/continuation.js';
5
+ import { CHARS_PER_TOKEN } from '../../../constants/limits.js';
4
6
  import { DEFAULT_STRUCTURED_OUTPUT_RETRIES, STRUCTURED_OUTPUT_REPROMPT, } from '../../../constants/tools/index.js';
7
+ import { withStreamedMessageIdentity } from '../../../manager/session/streamed-message-identity.js';
5
8
  import { renderSkillsSection } from '../../../persona/assembler.js';
6
9
  import { resolveProviderCapabilities } from '../../../provider/capabilities.js';
7
10
  import { collectChatCompletion } from '../../../provider/collect-chat-completion.js';
@@ -16,14 +19,16 @@ import { classifyProviderError } from '../../../types/provider/errors.js';
16
19
  import { toErrorMessage } from '../../../utils/error.js';
17
20
  import { stableDigest } from '../../../utils/hash.js';
18
21
  import { generateMessageId } from '../../../utils/id.js';
22
+ import { parseStructuredResultJson } from '../../../utils/structured-result-json.js';
19
23
  import { createCallbackInference } from '../callback-inference.js';
24
+ import { deliverDurableInbound } from '../durable-inbound.js';
20
25
  import { projectObservationContext } from '../observation-context.js';
21
26
  import { applyLifecycleHookResults } from '../plugin-hooks.js';
22
27
  import { diffRequestContext, snapshotRequestContext, } from '../request-context.js';
23
28
  import { DEFAULT_MAX_REQUEST_RICH_CONTENT_BYTES, markProviderRejectedImage, projectRequestRichContent, } from '../request-rich-content.js';
24
29
  import { formatSteeringNote, isOperatorUserMessage } from '../steering.js';
25
30
  import { parseNativeCandidate } from './native-output.js';
26
- import { holdForOutstandingWork, settleOutstandingWork } from './outstanding-work.js';
31
+ import { drainArrivedTaskCompletions, holdForOutstandingWork, settleOutstandingWork, } from './outstanding-work.js';
27
32
  import { runAdvisoryPhase } from './phases/advisory.js';
28
33
  import { runIterationCheckpoint } from './phases/checkpoint.js';
29
34
  import { activeContextWindow, measureContext, relieveOverflow, runCompactionCheck, } from './phases/compaction.js';
@@ -88,7 +93,7 @@ export class IterationOrchestrator {
88
93
  projectObservations(messages) {
89
94
  const config = this.ctx.compactionConfig;
90
95
  return config && config.strategy !== 'disabled' && config.deduplicateObservations !== false
91
- ? projectObservationContext(messages, this.ctx.tools, config.preserveToolResultsFrom)
96
+ ? projectObservationContext(messages, this.ctx.tools, config.preserveToolResultsFrom, (call, message) => this.ctx.toolExecutor.recordedObservationKey(call, message))
92
97
  : messages;
93
98
  }
94
99
  /** Rich tool blocks already reported; durable history is scanned every turn. */
@@ -110,6 +115,9 @@ export class IterationOrchestrator {
110
115
  stopDeferredForOutstandingWork = false;
111
116
  /** One current input, independent of the compactable history array. */
112
117
  latestUserMessage;
118
+ initialDurableDelivered = false;
119
+ resumedToolResults = [];
120
+ toolStructuredCounterHydrated = false;
113
121
  constructor(ctx) {
114
122
  this.ctx = {
115
123
  ...ctx,
@@ -121,6 +129,9 @@ export class IterationOrchestrator {
121
129
  ctx.checkpointMgr.setAnswerReviewAttemptsSource?.(() => this.answerReviewAttempts);
122
130
  ctx.checkpointMgr.setStructuredReviewAttemptsSource?.(() => this.structuredReviewAttempts);
123
131
  ctx.checkpointMgr.setNativeStructuredAttemptsSource?.(() => this.nativeStructuredAttempts);
132
+ ctx.checkpointMgr.setToolStructuredAttemptsSource?.(() => this.toolStructuredCounterHydrated
133
+ ? this.toolStructuredAttempts
134
+ : (ctx.checkpointMgr.restoredToolStructuredAttempts ?? 0));
124
135
  if (ctx.structuredOutput?.mode === 'native') {
125
136
  const limit = ctx.structuredOutput.maxRetries;
126
137
  if (limit !== undefined && (!Number.isSafeInteger(limit) || limit < 0))
@@ -130,6 +141,11 @@ export class IterationOrchestrator {
130
141
  !['tool', 'native'].includes(ctx.structuredOutput.mode))
131
142
  throw new RangeError('Unknown structuredOutput.mode');
132
143
  const maxReviews = ctx.structuredOutput?.maxReviews;
144
+ const retention = ctx.structuredOutput?.toolResultRetention;
145
+ if (retention !== undefined && !['receipt', 'durable'].includes(retention))
146
+ throw new RangeError('Unknown structuredOutput.toolResultRetention');
147
+ if (retention === 'durable' && ctx.structuredOutput?.mode === 'native')
148
+ throw new RangeError('structuredOutput.toolResultRetention: durable requires tool mode');
133
149
  if (maxReviews !== undefined && (!Number.isSafeInteger(maxReviews) || maxReviews < 0))
134
150
  throw new RangeError('structuredOutput.maxReviews must be a nonnegative safe integer');
135
151
  if (ctx.maxAnswerReviews !== undefined &&
@@ -206,15 +222,30 @@ export class IterationOrchestrator {
206
222
  setRootSpan(span) {
207
223
  this.ctx = { ...this.ctx, rootSpan: span };
208
224
  }
225
+ /** Fresh input is recorded before guards; restored tool batches must finish first. */
226
+ async deliverInitialDurable() {
227
+ if (this.initialDurableDelivered)
228
+ return;
229
+ await deliverDurableInbound(this.ctx.recorder, this.ctx.durableInbound, this.ctx.abortController.signal);
230
+ this.initialDurableDelivered = true;
231
+ }
232
+ /** A restored pending batch must answer every owned call before consuming its correction. */
233
+ setResumedToolResults(results) {
234
+ this.resumedToolResults = results;
235
+ }
209
236
  async *runLoop() {
210
237
  const { turnConfig, recorder } = this.ctx;
211
238
  const { model } = turnConfig;
212
239
  const tracer = getTracer();
240
+ // Initial durable input arrives before checkpoints, plan gates or inference.
241
+ await this.deliverInitialDurable();
213
242
  // Resume hydration happens after construction, before the loop starts.
214
243
  this.latestUserMessage = this.ctx.checkpointMgr.restoredLatestUserMessage;
215
244
  this.answerReviewAttempts = this.ctx.checkpointMgr.restoredAnswerReviewAttempts ?? 0;
216
245
  this.structuredReviewAttempts = this.ctx.checkpointMgr.restoredStructuredReviewAttempts ?? 0;
217
246
  this.nativeStructuredAttempts = this.ctx.checkpointMgr.restoredNativeStructuredAttempts ?? 0;
247
+ this.toolStructuredAttempts = this.ctx.checkpointMgr.restoredToolStructuredAttempts ?? 0;
248
+ this.toolStructuredCounterHydrated = true;
218
249
  if (!this.latestUserMessage) {
219
250
  for (const message of recorder.messages)
220
251
  this.rememberUserMessage(message, false);
@@ -224,6 +255,9 @@ export class IterationOrchestrator {
224
255
  // retained user turn encountered while scanning restored history.
225
256
  for (const message of this.ctx.resumedInput ?? [])
226
257
  this.rememberUserMessage(message);
258
+ const resumedToolResults = this.resumedToolResults;
259
+ this.resumedToolResults = [];
260
+ await this.recordToolStructuredFailure(resumedToolResults, recorder.currentIteration);
227
261
  // What a recoverable failure pauses on when it lands before this
228
262
  // loop wrote a checkpoint of its own: without it a 429 on the first
229
263
  // request failed the turn, while the same 429 one request later
@@ -240,9 +274,6 @@ export class IterationOrchestrator {
240
274
  // obvious moves left. It is cleared by a turn that actually
241
275
  // succeeded, which is the evidence that the turn is no longer stuck.
242
276
  let overflowRelieved = false;
243
- const planSignal = yield* runPlanGate(this.ctx);
244
- if (planSignal === 'stop')
245
- return;
246
277
  // A `finally` rather than a line at each exit, for the reason written
247
278
  // beside `iterSpan.end()` below: this loop leaves by eight `break`s,
248
279
  // two `return`s and a `throw`, and a rule every future edit has to
@@ -253,17 +284,20 @@ export class IterationOrchestrator {
253
284
  // A `finally` also covers a generator abandoned by its consumer, which
254
285
  // no post-loop block reaches.
255
286
  try {
287
+ // Restored exhaustion precedes plan gates and any auxiliary inference.
288
+ if (this.stopForStructuredRetryExhaustion())
289
+ return;
290
+ const planSignal = yield* runPlanGate(this.ctx);
291
+ if (planSignal === 'stop')
292
+ return;
256
293
  while (true) {
257
294
  if (this.ctx.abortController.signal.aborted) {
258
295
  recorder.setStopReason('cancelled');
259
296
  recorder.markCancelled();
260
297
  break;
261
298
  }
262
- if (this.ctx.structuredOutput?.mode === 'native' &&
263
- this.nativeStructuredAttempts > this.structuredOutputRetryLimit()) {
264
- recorder.setStopReason('structured_output_failed');
299
+ if (this.stopForStructuredRetryExhaustion())
265
300
  break;
266
- }
267
301
  if (this.ctx.reviewAnswer &&
268
302
  this.answerReviewAttempts > (this.ctx.maxAnswerReviews ?? DEFAULT_ANSWER_REVIEW_LIMIT)) {
269
303
  recorder.setStopReason('answer_rejected');
@@ -430,13 +464,33 @@ export class IterationOrchestrator {
430
464
  // Shape this step before calling the model. `stopWhen` decides
431
465
  // whether to keep going; this decides HOW. No-op when the host
432
466
  // supplied no hook.
467
+ // Render request-only contributions once before preparation. Their
468
+ // estimated cost reduces every stage's headroom, and the same text
469
+ // reaches the provider even if a stage changes external state.
470
+ const contextSections = this.ctx.promptContributions?.render('context', { iteration: iterationNum }) ?? [];
471
+ const deferredMcpHints = this.ctx.showDeferredToolContext !== false
472
+ ? this.ctx.tools.snapshotUntrustedDeferredContext()
473
+ : undefined;
474
+ const pricedContextText = [
475
+ ...contextSections,
476
+ ...(deferredMcpHints?.all ? [deferredMcpHints.all] : []),
477
+ ].join('\n\n');
478
+ const shaping = {
479
+ ...this.stepShaping(),
480
+ requestContextTokens: pricedContextText
481
+ ? estimateMessageTokens(stepContextMessage(pricedContextText)) +
482
+ Math.ceil(((deferredMcpHints?.maxRenderedChars ?? 0) -
483
+ (deferredMcpHints?.all.length ?? 0)) /
484
+ CHARS_PER_TOKEN)
485
+ : 0,
486
+ };
433
487
  const contextModelBeforePreparation = this.ctx.contextModel ?? model;
434
- const step = await prepareStep(this.stepShaping(), iterationNum);
488
+ const step = await prepareStep(shaping, iterationNum);
435
489
  // Preparation inference belongs to the turn, not the main-model step.
436
490
  usageBefore = { ...recorder.tokenUsage };
437
491
  costBefore = { ...recorder.costInfo };
438
492
  stepModel = step.model ?? model;
439
- await selectContextModel(this.stepShaping(), stepModel);
493
+ await selectContextModel(shaping, stepModel);
440
494
  // Preserve post-compaction preparation/recall semantics. A changed
441
495
  // model needs a second check against its own window; never replay
442
496
  // host preparation effects merely to rebuild its request guidance.
@@ -445,6 +499,11 @@ export class IterationOrchestrator {
445
499
  // Publish context edits before entering a possibly slow provider.
446
500
  yield* this.ctx.drainPending();
447
501
  const stepAllowedTools = step.allowedTools ?? this.ctx.allowedTools;
502
+ const deferredMcpContext = deferredMcpHints?.forNames(stepAllowedTools) ?? '';
503
+ const contextText = [
504
+ ...contextSections,
505
+ ...(deferredMcpContext ? [deferredMcpContext] : []),
506
+ ].join('\n\n');
448
507
  const llmTools = this.ctx.tools
449
508
  .toLLMTools(stepAllowedTools)
450
509
  .filter((tool) => this.ctx.structuredOutput?.mode !== 'native' ||
@@ -515,9 +574,6 @@ export class IterationOrchestrator {
515
574
  // (compaction preserves it there) and leaves the request's
516
575
  // system run here.
517
576
  const workingMemory = splitWorkingMemoryForRequest(baseMessages);
518
- const contextSections = this.ctx.promptContributions?.render('context', {
519
- iteration: iterationNum,
520
- }) ?? [];
521
577
  const stepPreamble = [step.system, stepSkills, policyNotice, ...turnSections]
522
578
  .filter(Boolean)
523
579
  .join('\n\n');
@@ -526,13 +582,13 @@ export class IterationOrchestrator {
526
582
  : [...workingMemory.history];
527
583
  if (workingMemory.context)
528
584
  requestHistory.push(workingMemory.context);
529
- if (contextSections.length > 0)
530
- requestHistory.push(stepContextMessage(contextSections.join('\n\n')));
585
+ if (contextText)
586
+ requestHistory.push(stepContextMessage(contextText));
531
587
  if (step.context)
532
588
  requestHistory.push(stepContextMessage(step.context));
533
589
  const messages = projectRequestRichContent(this.projectObservations(requestHistory), this.ctx.turnConfig.maxRequestRichContentBytes ??
534
590
  DEFAULT_MAX_REQUEST_RICH_CONTENT_BYTES);
535
- appendWorkContext(this.stepShaping(), messages, iterationNum, step);
591
+ appendWorkContext(shaping, messages, iterationNum, step);
536
592
  if (closingDirective)
537
593
  messages.push(closingDirective);
538
594
  await this.reportUnsupportedToolResults(messages);
@@ -790,7 +846,7 @@ export class IterationOrchestrator {
790
846
  // with the turn they belong to. Trimming therefore removes both;
791
847
  // retaining them gives the target adapter enough evidence to
792
848
  // validate native replay against the exact serving route.
793
- const assistantMsg = createAssistantMessage(response.message.content, forceFinalize ? undefined : response.message.toolCalls, response.message.reasoning,
849
+ const assistantMsg = withStreamedMessageIdentity(createAssistantMessage(response.message.content, forceFinalize ? undefined : response.message.toolCalls, response.message.reasoning,
794
850
  // Rides with the turn it belongs to, like reasoning does, so
795
851
  // trimming or compacting the turn takes its evidence with it
796
852
  // rather than leaving citations pointing at prose that is gone.
@@ -800,7 +856,7 @@ export class IterationOrchestrator {
800
856
  ...(response.message.replayState !== undefined
801
857
  ? { replayState: response.message.replayState }
802
858
  : {}),
803
- }, response.message.textParts);
859
+ }, response.message.textParts), messageId);
804
860
  recorder.pushMessage(assistantMsg);
805
861
  if (this.ctx.advisoryCtx && requestMessages) {
806
862
  this.advisoryTurn = { iteration: iterationNum, requestMessages, response: assistantMsg };
@@ -941,7 +997,7 @@ export class IterationOrchestrator {
941
997
  if (outcome === 'accepted') {
942
998
  if (!forceFinalize) {
943
999
  const changed = yield* holdForOutstandingWork(this.ctx, iterationNum, false, () => this.deliverInbound());
944
- const inbound = this.deliverInbound();
1000
+ const inbound = await this.deliverInbound();
945
1001
  if (changed || inbound > 0)
946
1002
  continue;
947
1003
  }
@@ -960,6 +1016,21 @@ export class IterationOrchestrator {
960
1016
  }
961
1017
  continue;
962
1018
  }
1019
+ // Missing output and rejected model arguments share one durable
1020
+ // correction allowance, including prose cut off by the output cap.
1021
+ if (!forceFinalize && this.needsStructuredOutput()) {
1022
+ await this.recordToolStructuredCorrection(iterationNum);
1023
+ await this.ctx.emitEvent({
1024
+ type: 'iteration_completed',
1025
+ turnId: recorder.turnId,
1026
+ iteration: iterationNum,
1027
+ hasToolCalls: false,
1028
+ });
1029
+ yield* this.ctx.drainPending();
1030
+ if (this.stopForStructuredRetryExhaustion())
1031
+ break;
1032
+ continue;
1033
+ }
963
1034
  const hasContent = response.message.content !== null && response.message.content.length > 0;
964
1035
  // Auto-continuation on `stop_reason: max_tokens`. The
965
1036
  // model hit its per-call output cap mid-text (NOT
@@ -1003,37 +1074,6 @@ export class IterationOrchestrator {
1003
1074
  yield* this.ctx.drainPending();
1004
1075
  continue;
1005
1076
  }
1006
- // The model tried to finish in prose while a structured
1007
- // output was demanded. Send it back with the schema error
1008
- // rather than returning an unusable result — this is the
1009
- // re-prompt half, and it is bounded so a model that cannot
1010
- // satisfy the schema fails loudly instead of looping.
1011
- if (!forceFinalize && this.needsStructuredOutput()) {
1012
- const attempt = ++this.structuredOutputAttempts;
1013
- const limit = this.structuredOutputRetryLimit();
1014
- if (attempt > limit) {
1015
- this.ctx.log.warn('Structured output not produced within its retries', {
1016
- [NAMZU.TURN_ID]: recorder.turnId,
1017
- 'namzu.runtime.attempts': attempt - 1,
1018
- });
1019
- recorder.setStopReason('structured_output_failed');
1020
- break;
1021
- }
1022
- this.ctx.log.info('Re-prompting for structured output', {
1023
- [NAMZU.TURN_ID]: recorder.turnId,
1024
- 'namzu.retry.attempt': attempt,
1025
- 'namzu.runtime.limit': limit,
1026
- });
1027
- recorder.pushMessage(createRuntimeContextMessage(STRUCTURED_OUTPUT_REPROMPT, 'structured-output'));
1028
- await this.ctx.emitEvent({
1029
- type: 'iteration_completed',
1030
- turnId: recorder.turnId,
1031
- iteration: iterationNum,
1032
- hasToolCalls: false,
1033
- });
1034
- yield* this.ctx.drainPending();
1035
- continue;
1036
- }
1037
1077
  // Let the host judge the ANSWER and hand back work.
1038
1078
  //
1039
1079
  // The stop predicate is only consulted after tools ran, so
@@ -1115,7 +1155,7 @@ export class IterationOrchestrator {
1115
1155
  // After the outstanding-work hold above, so a delivery
1116
1156
  // does not race a worker still finishing, and before the
1117
1157
  // settle below, which is the last moment it can matter.
1118
- if (!forceFinalize && this.deliverInbound() > 0) {
1158
+ if (!forceFinalize && (await this.deliverInbound()) > 0) {
1119
1159
  await this.ctx.emitEvent({
1120
1160
  type: 'iteration_completed',
1121
1161
  turnId: recorder.turnId,
@@ -1193,6 +1233,7 @@ export class IterationOrchestrator {
1193
1233
  if (reviewOutcome.decision === 'stop') {
1194
1234
  return;
1195
1235
  }
1236
+ const needsCorrection = await this.recordToolStructuredFailure(reviewOutcome.results, iterationNum);
1196
1237
  // A tool asked for a person. The whole batch is committed; the
1197
1238
  // turn parks here rather than asking the model what to do about
1198
1239
  // something only the operator can do.
@@ -1202,6 +1243,18 @@ export class IterationOrchestrator {
1202
1243
  if (reviewOutcome.decision === 'rejected') {
1203
1244
  continue;
1204
1245
  }
1246
+ if (needsCorrection) {
1247
+ await this.ctx.emitEvent({
1248
+ type: 'iteration_completed',
1249
+ turnId: recorder.turnId,
1250
+ iteration: iterationNum,
1251
+ hasToolCalls: true,
1252
+ });
1253
+ yield* this.ctx.drainPending();
1254
+ if (this.stopForStructuredRetryExhaustion())
1255
+ break;
1256
+ continue;
1257
+ }
1205
1258
  // A successful `structured_output` call IS the answer, so the
1206
1259
  // run ends here rather than paying for another turn whose only
1207
1260
  // job would be to restate it — unless it shared its turn with
@@ -1243,7 +1296,7 @@ export class IterationOrchestrator {
1243
1296
  break;
1244
1297
  }
1245
1298
  if (!forceFinalize) {
1246
- const inbound = this.deliverInbound();
1299
+ const inbound = await this.deliverInbound();
1247
1300
  // Tool-result steering may already have been delivered by
1248
1301
  // runToolReview. Its candidate still answers the older input.
1249
1302
  if (inbound > 0 || this.latestUserMessage !== operatorInputAtDispatch)
@@ -1361,7 +1414,7 @@ export class IterationOrchestrator {
1361
1414
  // Placed beside the advisory phase deliberately: that is the
1362
1415
  // established seam for putting a user message in after tool
1363
1416
  // results and before the next turn.
1364
- const unheard = this.ctx.completionInbox?.drain() ?? [];
1417
+ const unheard = await drainArrivedTaskCompletions(this.ctx);
1365
1418
  if (unheard.length > 0) {
1366
1419
  this.ctx.log.info('Delivering unawaited task completions', {
1367
1420
  [NAMZU.TURN_ID]: recorder.turnId,
@@ -1374,7 +1427,7 @@ export class IterationOrchestrator {
1374
1427
  // and never deliver it. Placed here rather than at the top of
1375
1428
  // the next iteration so a message queued during THIS turn is
1376
1429
  // in the history the next request is built from.
1377
- this.deliverInbound();
1430
+ await this.deliverInbound();
1378
1431
  await runAdvisoryPhase(this.ctx, iterationNum, response, this.getAdvisoryTurnContext());
1379
1432
  if (this.ctx.pluginManager) {
1380
1433
  const hookResults = await this.ctx.pluginManager.executeHooks('iteration_end', {
@@ -1586,7 +1639,7 @@ export class IterationOrchestrator {
1586
1639
  extractFromUserMessage(manager, message.content, !manager.getState().task);
1587
1640
  }
1588
1641
  }
1589
- deliverInbound() {
1642
+ async deliverInbound() {
1590
1643
  const queued = this.ctx.inboundMessages?.() ?? [];
1591
1644
  for (const message of queued) {
1592
1645
  this.ctx.recorder.pushMessage(message);
@@ -1601,7 +1654,8 @@ export class IterationOrchestrator {
1601
1654
  this.ctx.recorder.pushMessage(message);
1602
1655
  this.rememberUserMessage(createRuntimeContextMessage(stranded, 'steering'));
1603
1656
  }
1604
- return queued.length + (stranded ? 1 : 0);
1657
+ const durable = await deliverDurableInbound(this.ctx.recorder, this.ctx.durableInbound, this.ctx.abortController.signal);
1658
+ return queued.length + (stranded ? 1 : 0) + durable;
1605
1659
  }
1606
1660
  recordStep(input) {
1607
1661
  const { recorder } = this.ctx;
@@ -1634,6 +1688,7 @@ export class IterationOrchestrator {
1634
1688
  toolName: tc.function.name,
1635
1689
  output: outcome?.output ?? '',
1636
1690
  isError: outcome?.isError ?? false,
1691
+ ...(outcome?.skipped ? { skipped: true } : {}),
1637
1692
  durationMs: 0,
1638
1693
  },
1639
1694
  ];
@@ -1675,8 +1730,8 @@ export class IterationOrchestrator {
1675
1730
  });
1676
1731
  }
1677
1732
  }
1678
- /** Turns spent asking the model again for a valid structured output. */
1679
- structuredOutputAttempts = 0;
1733
+ /** Model responses needing a tool-mode schema correction, separate from host reviews. */
1734
+ toolStructuredAttempts = 0;
1680
1735
  nativeStructuredAttempts = 0;
1681
1736
  structuredOutputDone = false;
1682
1737
  pendingStructuredOutput;
@@ -1684,6 +1739,47 @@ export class IterationOrchestrator {
1684
1739
  structuredOutputRetryLimit() {
1685
1740
  return this.ctx.structuredOutput?.maxRetries ?? DEFAULT_STRUCTURED_OUTPUT_RETRIES;
1686
1741
  }
1742
+ stopForStructuredRetryExhaustion() {
1743
+ const { recorder, abortController } = this.ctx;
1744
+ if (abortController.signal.aborted) {
1745
+ recorder.setStopReason('cancelled');
1746
+ recorder.markCancelled();
1747
+ return true;
1748
+ }
1749
+ if (!this.needsStructuredOutput())
1750
+ return false;
1751
+ const attempts = this.ctx.structuredOutput?.mode === 'native'
1752
+ ? this.nativeStructuredAttempts
1753
+ : this.toolStructuredAttempts;
1754
+ if (attempts === 0 || !(attempts > this.structuredOutputRetryLimit()))
1755
+ return false;
1756
+ recorder.setStopReason('structured_output_failed');
1757
+ return true;
1758
+ }
1759
+ async recordToolStructuredFailure(results, iteration) {
1760
+ if (!this.needsStructuredOutput() ||
1761
+ this.ctx.structuredOutput?.mode === 'native' ||
1762
+ this.ctx.abortController.signal.aborted ||
1763
+ !results.some((result) => result.toolName === STRUCTURED_OUTPUT_TOOL_NAME && result.inputFailure))
1764
+ return false;
1765
+ // One model response consumes one correction, even with several invalid calls.
1766
+ await this.recordToolStructuredCorrection(iteration);
1767
+ return true;
1768
+ }
1769
+ async recordToolStructuredCorrection(iteration) {
1770
+ this.toolStructuredAttempts++;
1771
+ const { recorder } = this.ctx;
1772
+ recorder.pushMessage(createRuntimeContextMessage(STRUCTURED_OUTPUT_REPROMPT, 'structured-output'));
1773
+ // Commit the full answered batch, feedback and allowance before another request
1774
+ // or handoff. A failed checkpoint must not buy another correction opportunity.
1775
+ const checkpoint = await this.ctx.checkpointMgr.create(recorder, iteration);
1776
+ await this.ctx.emitEvent({
1777
+ type: 'checkpoint_created',
1778
+ turnId: recorder.turnId,
1779
+ checkpointId: checkpoint.id,
1780
+ iteration,
1781
+ });
1782
+ }
1687
1783
  /** True while a structured output was demanded and has not arrived. */
1688
1784
  needsStructuredOutput() {
1689
1785
  return this.ctx.structuredOutput !== undefined && !this.structuredOutputDone;
@@ -1694,9 +1790,9 @@ export class IterationOrchestrator {
1694
1790
  * Deliberately narrow. A terminal call decides the turn only when it is
1695
1791
  * the ONLY call the model made in that turn: a model that asked for
1696
1792
  * other work meant to see those results, and settling here would throw
1697
- * away answers it requested. Same for a failed terminal call — an
1698
- * error is not an answer, and the model is the one that should read
1699
- * it. Both cases fall through to the ordinary path, and both say so in
1793
+ * away answers it requested. A failed or skipped terminal call also
1794
+ * needs another model turn: its receipt is not an executed answer.
1795
+ * These cases fall through to the ordinary path, and each says so in
1700
1796
  * the log rather than quietly costing the relay the flag was set to
1701
1797
  * avoid.
1702
1798
  */
@@ -1716,8 +1812,10 @@ export class IterationOrchestrator {
1716
1812
  return undefined;
1717
1813
  }
1718
1814
  const hit = terminal[0];
1719
- if (!hit || hit.isError) {
1720
- this.ctx.log.info('Terminal tool failed — returning the error to the model', {
1815
+ if (!hit || hit.isError || hit.skipped) {
1816
+ this.ctx.log.info(hit?.skipped
1817
+ ? 'Terminal tool was skipped — returning its receipt to the model'
1818
+ : 'Terminal tool failed — returning the error to the model', {
1721
1819
  [NAMZU.TURN_ID]: this.ctx.recorder.turnId,
1722
1820
  [GENAI.TOOL_NAME]: hit?.toolName,
1723
1821
  });
@@ -1731,7 +1829,8 @@ export class IterationOrchestrator {
1731
1829
  * The tool validates against the Zod schema before its `execute` runs,
1732
1830
  * so reaching here successfully means the value is already valid — a
1733
1831
  * failed parse comes back as an error result and simply does not
1734
- * satisfy the demand, which sends the loop round again.
1832
+ * satisfy the demand, which sends the loop round again. A hook-skipped
1833
+ * receipt did not execute the tool and is not a candidate either.
1735
1834
  *
1736
1835
  * Narrow in the same way {@link terminalToolOutput} is, for its stated
1737
1836
  * reason and one that is sharper here. The neighbour refuses a shared
@@ -1772,7 +1871,7 @@ export class IterationOrchestrator {
1772
1871
  async captureStructuredOutput(results, response, reviewRequest, model) {
1773
1872
  if (!this.needsStructuredOutput() || this.ctx.structuredOutput?.mode === 'native')
1774
1873
  return 'absent';
1775
- const hit = results.find((r) => r.toolName === STRUCTURED_OUTPUT_TOOL_NAME && !r.isError);
1874
+ const hit = results.find((r) => r.toolName === STRUCTURED_OUTPUT_TOOL_NAME && !r.isError && !r.skipped);
1776
1875
  if (!hit)
1777
1876
  return 'absent';
1778
1877
  const callCount = response.message.toolCalls?.length ?? 0;
@@ -1785,14 +1884,16 @@ export class IterationOrchestrator {
1785
1884
  }
1786
1885
  let parsed;
1787
1886
  try {
1788
- parsed = JSON.parse(hit.output);
1887
+ parsed =
1888
+ this.ctx.structuredOutput?.toolResultRetention === 'durable'
1889
+ ? parseStructuredResultJson(hit.structuredResultJson === undefined ? hit.output : hit.structuredResultJson)
1890
+ : JSON.parse(hit.output);
1789
1891
  }
1790
1892
  catch {
1791
- // The tool serializes its own validated input, so this is
1792
- // unreachable in practice; keep the raw text rather than losing it.
1793
- if (this.ctx.structuredOutput?.review)
1794
- throw new Error('Structured review requires an intact JSON tool result; check tool-output limits and result transformations');
1795
- parsed = hit.output;
1893
+ // Screening, hooks or output budgeting can change the validated
1894
+ // tool's receipt. A raw-text fallback is not a structured result;
1895
+ // do not recover input/data that bypasses those boundaries either.
1896
+ throw new Error('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');
1796
1897
  }
1797
1898
  return this.reviewStructuredOutput(parsed, reviewRequest, model);
1798
1899
  }
@@ -2041,15 +2142,15 @@ export class IterationOrchestrator {
2041
2142
  providerId: servedBy.providerId,
2042
2143
  model: servedBy.model,
2043
2144
  });
2044
- const assistantMsg = createAssistantMessage(response.message.content, undefined, response.message.reasoning, response.message.citations, {
2145
+ const finalMessageId = generateMessageId();
2146
+ const assistantMsg = withStreamedMessageIdentity(createAssistantMessage(response.message.content, undefined, response.message.reasoning, response.message.citations, {
2045
2147
  type: 'model',
2046
2148
  ...servedBy,
2047
2149
  ...(response.message.replayState !== undefined
2048
2150
  ? { replayState: response.message.replayState }
2049
2151
  : {}),
2050
- }, response.message.textParts);
2152
+ }, response.message.textParts), finalMessageId);
2051
2153
  this.ctx.recorder.pushMessage(assistantMsg);
2052
- const finalMessageId = generateMessageId();
2053
2154
  await this.ctx.emitEvent({
2054
2155
  type: 'message_started',
2055
2156
  turnId: this.ctx.recorder.turnId,