@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,6 +1,7 @@
1
1
  import { NAMZU } from '../../../constants/telemetry/index.js'
2
2
  import { formatCompletionNotification } from '../../../scheduler/completion-inbox.js'
3
3
  import { DELEGATION_TIMEOUT_MS } from '../../../tools/coordinator/index.js'
4
+ import type { TaskHandle } from '../../../types/agent/scheduler.js'
4
5
  import { createRuntimeContextMessage } from '../../../types/message/index.js'
5
6
  import type { SessionEvent } from '../../../types/session/index.js'
6
7
  import { readPositiveIntEnv } from '../../../utils/env.js'
@@ -160,7 +161,7 @@ export async function* holdForOutstandingWork(
160
161
  ctx: IterationContext,
161
162
  iterationNum: number,
162
163
  hasToolCalls: boolean,
163
- deliverInbound: () => number,
164
+ deliverInbound: () => number | Promise<number>,
164
165
  ): AsyncGenerator<SessionEvent, boolean> {
165
166
  const inbox = ctx.completionInbox?.hasPendingWork ? ctx.completionInbox : undefined
166
167
  const jobs = ctx.awaitedJobs?.hasPendingWork ? ctx.awaitedJobs : undefined
@@ -197,6 +198,7 @@ export async function* holdForOutstandingWork(
197
198
  ...(inbox ? [inbox.waitForArrival(graceMs, waiting.signal)] : []),
198
199
  ...(jobs ? [jobs.waitForArrival(graceMs, waiting.signal)] : []),
199
200
  ...(ctx.waitForInbound ? [ctx.waitForInbound(waiting.signal)] : []),
201
+ ...(ctx.durableInbound?.wait ? [ctx.durableInbound.wait(waiting.signal)] : []),
200
202
  ])
201
203
  } catch (error) {
202
204
  if (!runSignal.aborted) throw error
@@ -206,6 +208,8 @@ export async function* holdForOutstandingWork(
206
208
  }
207
209
  runSignal.throwIfAborted()
208
210
 
211
+ // The arrival/inbound/grace race already decided how long this hold may
212
+ // wait. Pending tracking is not a reason to extend it or delay steering.
209
213
  const arrived = ctx.completionInbox?.drain() ?? []
210
214
  if (arrived.length > 0) {
211
215
  ctx.recorder.pushMessage(
@@ -213,7 +217,7 @@ export async function* holdForOutstandingWork(
213
217
  )
214
218
  }
215
219
  const exited = deliverAwaitedJobExits(ctx)
216
- const inbound = deliverInbound()
220
+ const inbound = await deliverInbound()
217
221
  if (arrived.length === 0 && !exited && inbound === 0) return false
218
222
  await ctx.emitEvent({
219
223
  type: 'iteration_completed',
@@ -260,9 +264,41 @@ export function deliverAwaitedJobExits(ctx: IterationContext): boolean {
260
264
  'namzu.runtime.jobs': delivered.exits.map((job) => job.id),
261
265
  })
262
266
  ctx.recorder.pushMessage(createRuntimeContextMessage(formatJobNote(delivered.text), 'job-exit'))
267
+ ctx.onJobNoticeDelivered?.()
263
268
  return true
264
269
  }
265
270
 
271
+ /** Await arrived tracking writes within the caller's existing turn deadline. */
272
+ export async function drainArrivedTaskCompletions(ctx: IterationContext): Promise<TaskHandle[]> {
273
+ const inbox = ctx.completionInbox
274
+ if (!inbox) return []
275
+ const runSignal = ctx.abortController.signal
276
+ if (runSignal.aborted) return []
277
+ const remainingMs = ctx.guard.remainingUntilTimeoutMs()
278
+ if (remainingMs <= 0) return inbox.drain()
279
+ const waiting = new AbortController()
280
+ const abort = (): void => waiting.abort(runSignal.reason)
281
+ runSignal.addEventListener('abort', abort, { once: true })
282
+ if (runSignal.aborted) abort()
283
+ let timer: ReturnType<typeof setTimeout> | undefined
284
+ const armDeadline = (): void => {
285
+ const remaining = ctx.guard.remainingUntilTimeoutMs()
286
+ if (remaining <= 0) waiting.abort()
287
+ else if (Number.isFinite(remaining)) {
288
+ // Node timers cannot represent more than a signed 32-bit delay.
289
+ // Recheck long deadlines instead of truncating the turn's timeout.
290
+ timer = setTimeout(armDeadline, Math.min(remaining, 2_147_483_647))
291
+ }
292
+ }
293
+ armDeadline()
294
+ try {
295
+ return await inbox.drainAsync(waiting.signal)
296
+ } finally {
297
+ if (timer !== undefined) clearTimeout(timer)
298
+ runSignal.removeEventListener('abort', abort)
299
+ }
300
+ }
301
+
266
302
  /**
267
303
  * Account for outstanding work on the way out: deliver what arrived, and
268
304
  * say what did not.
@@ -274,10 +310,11 @@ export function deliverAwaitedJobExits(ctx: IterationContext): boolean {
274
310
  * - **What has already arrived is delivered.** It makes no false claim,
275
311
  * and dropping it is pure loss — the message rides out on
276
312
  * `Turn.messages`, so a host reads it and the next turn of a continued
277
- * thread starts with it. This does NOT wait: a hold buys the model a
278
- * turn in which to USE a result, and on an exit whose answer is already
279
- * decided there is no such turn, so waiting would delay a settled answer
280
- * to append text this turn will not read. The bounded hold stays where it
313
+ * thread starts with it. A hold buys the model a turn in which to USE a
314
+ * result; an exit whose answer is already decided has no such turn.
315
+ * Pending tracking writes remain queued. The exit delivers only ready
316
+ * completions, so it never delays a settled answer to append text this
317
+ * turn will not read. The bounded hold stays where it
281
318
  * was, on the exits that do have a turn left.
282
319
  * - **What is still running is NAMED, not cancelled.** Giving up on a wait
283
320
  * is a statement about the waiter, not about the work — the rule
@@ -319,7 +356,19 @@ export function recordAbandonedWork(ctx: IterationContext): void {
319
356
  }
320
357
 
321
358
  export function deliverArrivedCompletions(ctx: IterationContext): void {
322
- const unheard = ctx.completionInbox?.drain() ?? []
359
+ let unheard: TaskHandle[]
360
+ try {
361
+ // No finalizer waits for persistence that may ignore cancellation.
362
+ // Pending gates stay queued and their tracking writes keep running.
363
+ unheard = ctx.completionInbox?.drain() ?? []
364
+ } catch (error) {
365
+ if (!ctx.abortController.signal.aborted) throw error
366
+ ctx.log.warn('Task tracking failed while the turn was cancelled; its result remains queued', {
367
+ [NAMZU.TURN_ID]: ctx.recorder.turnId,
368
+ 'exception.message': error instanceof Error ? error.message : String(error),
369
+ })
370
+ return
371
+ }
323
372
  if (unheard.length === 0) return
324
373
 
325
374
  // Fix the turn's answer BEFORE appending anything after it.
@@ -383,4 +432,5 @@ export function deliverArrivedJobExits(ctx: IterationContext): void {
383
432
  'namzu.runtime.jobs': delivered.exits.map((job) => job.id),
384
433
  })
385
434
  ctx.recorder.pushMessage(createRuntimeContextMessage(formatJobNote(delivered.text), 'job-exit'))
435
+ ctx.onJobNoticeDelivered?.()
386
436
  }
@@ -17,6 +17,7 @@ import type { TaskScheduler } from '../../../../types/agent/scheduler.js'
17
17
  import type { WorkingMemoryProvider } from '../../../../types/agent/working-memory.js'
18
18
  import type { HITLResumeDecision, ResumeHandler } from '../../../../types/hitl/index.js'
19
19
  import type { CheckpointId } from '../../../../types/ids/index.js'
20
+ import type { DurableInboundSource } from '../../../../types/message/inbound-delivery.js'
20
21
  import type { LLMProvider } from '../../../../types/provider/index.js'
21
22
  import type { TaskRouterConfig } from '../../../../types/router/index.js'
22
23
  import type { ReviewAnswer } from '../../../../types/session/answer-review.js'
@@ -98,12 +99,16 @@ export interface IterationContext {
98
99
  readonly structuredOutput?: StructuredOutputConfig
99
100
  readonly tools: ToolManager
100
101
  readonly allowedTools?: string[]
102
+ /** The minimal context level omits tool discovery from both system and request context. */
103
+ readonly showDeferredToolContext?: boolean
101
104
  readonly recorder: TurnRecorder
102
105
  readonly toolExecutor: ToolExecutor
103
106
  readonly guard: GuardCoordinator
104
107
  readonly activityStore: ActivityStore
105
108
  readonly emitEvent: EmitEvent
106
109
  readonly drainPending: () => Generator<SessionEvent>
110
+ /** Internal live-event wake; omitted only by legacy phase fixtures. */
111
+ readonly onPendingEvents?: (listener: () => void) => () => void
107
112
  readonly abortController: AbortController
108
113
  readonly log: Logger
109
114
  readonly resumeHandler: ResumeHandler
@@ -141,6 +146,8 @@ export interface IterationContext {
141
146
  readonly onSteeringDelivered?: (text: string) => void
142
147
  /** Exit notices for the turn's background jobs, drained into the next tool result. */
143
148
  readonly jobNotices?: SteeringChannel
149
+ /** Acknowledge exit notices only after their text enters model context. */
150
+ readonly onJobNoticeDelivered?: () => void
144
151
  /**
145
152
  * Background jobs the model said it is waiting on, which is the only kind
146
153
  * the loop holds a finishing run open for.
@@ -222,6 +229,7 @@ export interface IterationContext {
222
229
  readonly resumedInput?: readonly import('../../../../types/message/index.js').Message[]
223
230
  /** Observes pending input without draining it; abort releases the waiter. */
224
231
  readonly waitForInbound?: (signal: AbortSignal) => Promise<void>
232
+ readonly durableInbound?: DurableInboundSource
225
233
 
226
234
  /** Live project policy; separate from human inbound continuation. */
227
235
  readonly projectInstructionContext?: ProjectInstructionContext
@@ -1,11 +1,12 @@
1
1
  import type { AuthorizationGate } from '../../../../authorization/index.js'
2
+ import { isTrustedReadOnly } from '../../../../tools/trusted-read-only.js'
2
3
  import type { ToolSourceRef } from '../../../../toolsets/types.js'
3
- import type { ToolCallSummary } from '../../../../types/hitl/index.js'
4
+ import type { ToolCallDeclined, ToolCallSummary } from '../../../../types/hitl/index.js'
4
5
  import type { ChatCompletionResponse } from '../../../../types/provider/index.js'
5
6
  import type { SessionEvent } from '../../../../types/session/index.js'
6
7
  import type { ShellDialect } from '../../../../types/tool/index.js'
7
8
  import { DECLINED_TOOL_CALL_FEEDBACK } from '../../declined.js'
8
- import type { PreparedToolBatch, ToolCallDenials } from '../../executor.js'
9
+ import type { PreparedToolBatch, ToolCallDeclines, ToolCallDenials } from '../../executor.js'
9
10
  import {
10
11
  awaitProjectInstructionCallback,
11
12
  replaceProjectInstructionSnapshot,
@@ -97,9 +98,13 @@ export async function* runToolReview(
97
98
  return finish('executed')
98
99
  }
99
100
 
100
- const prepareForReview = async (): Promise<PreparedToolBatch | undefined> => {
101
+ const prepareForReview = async (
102
+ hostModifiedCallIds?: ReadonlySet<string>,
103
+ ): Promise<PreparedToolBatch | undefined> => {
101
104
  const prepare = ctx.toolExecutor.prepareBatchForReview
102
- return typeof prepare === 'function' ? prepare.call(ctx.toolExecutor, response) : undefined
105
+ return typeof prepare === 'function'
106
+ ? prepare.call(ctx.toolExecutor, response, hostModifiedCallIds)
107
+ : undefined
103
108
  }
104
109
  let preparedBatch = await prepareForReview()
105
110
  const summariesFor = (prepared: PreparedToolBatch | undefined): ToolCallSummary[] => {
@@ -157,28 +162,51 @@ export async function* runToolReview(
157
162
  return merged ?? denials
158
163
  }
159
164
 
165
+ /** Set only where a person's No is known, so a policy refusal never lands in it. */
166
+ let declines: ToolCallDeclines | undefined
167
+
160
168
  /** Executes the batch, answering every call, and appends the results. */
161
- const settle = async (denials?: ToolCallDenials): Promise<void> => {
169
+ const settleBatch = async (denials?: ToolCallDenials): Promise<void> => {
162
170
  const startedAt = Date.now()
163
171
  const batch = await ctx.toolExecutor.executeBatch(
164
172
  response,
165
173
  withRepeatRefusals(denials),
166
174
  undefined,
167
175
  preparedBatch,
176
+ declines,
168
177
  )
169
178
  toolMs += Date.now() - startedAt
170
179
  executed = batch.results
180
+ // Registry receipts are ordered by actual completion, include nested
181
+ // dispatches, and exclude denials/recovered results. A successful possible
182
+ // mutation permits another experiment; unrelated reads cannot do so.
183
+ for (const observation of batch.observations) {
184
+ const tracker = ctx.repeatCalls
185
+ if (!tracker) break
186
+ if (
187
+ observation.result.success &&
188
+ !isTrustedReadOnly(
189
+ ctx.tools.get(observation.toolName),
190
+ observation.input,
191
+ ctx.toolExecutor.toolSource(observation.toolName),
192
+ )
193
+ )
194
+ tracker.stateMayHaveChanged()
195
+ tracker.recordOutcome(observation.toolName, observation.input, {
196
+ failed: !observation.result.success,
197
+ result: {
198
+ output: observation.result.output,
199
+ error: observation.result.error,
200
+ content: observation.result.content,
201
+ },
202
+ })
203
+ }
171
204
  // Recorded AFTER execution, with the real result: the notice advises
172
205
  // on the call that already ran, and the failure count is what the
173
206
  // refusal above reads on the NEXT identical call.
174
207
  const notices = []
175
208
  for (const summary of toolCallSummaries) {
176
- const outcome = batch.results.find((result) => result.toolCallId === summary.id)
177
- const notice = ctx.repeatCalls?.record(
178
- summary.name,
179
- summary.input,
180
- outcome ? { failed: outcome.isError === true } : undefined,
181
- )
209
+ const notice = ctx.repeatCalls?.record(summary.name, summary.input)
182
210
  if (notice) notices.push(notice)
183
211
  }
184
212
  // Guidance the host queued while this batch was running rides out on
@@ -186,6 +214,7 @@ export async function* runToolReview(
186
214
  // block must be answered by a `tool_result` with the same id, so a
187
215
  // user message wedged between them is rejected by the provider. Same
188
216
  // delivery a denial already uses, without the refusal.
217
+ let jobNoticeDelivered = false
189
218
  for (const msg of attachRepeatNotice(
190
219
  attachNotice(
191
220
  attachSteering(batch.messages, ctx.steering, ctx.onSteeringDelivered),
@@ -194,12 +223,16 @@ export async function* runToolReview(
194
223
  // The exits that text accounts for have now been read, so the
195
224
  // record of them stops being pending work. Left standing, it
196
225
  // buys the model a turn the next time any job queues a notice.
197
- () => ctx.awaitedJobs?.noticesDelivered(),
226
+ () => {
227
+ ctx.awaitedJobs?.noticesDelivered()
228
+ jobNoticeDelivered = true
229
+ },
198
230
  ),
199
231
  notices,
200
232
  )) {
201
233
  ctx.recorder.pushMessage(msg)
202
234
  }
235
+ if (jobNoticeDelivered) ctx.onJobNoticeDelivered?.()
203
236
  // The complete tool-result batch is already in history before host policy
204
237
  // may react, so a replacement cannot split provider-required adjacency.
205
238
  // Commit each accepted observation before entering the next one. A single
@@ -226,8 +259,62 @@ export async function* runToolReview(
226
259
  }
227
260
  }
228
261
 
262
+ /** Stream recorded starts and progress while execution itself remains pending. */
263
+ const settle = async function* (
264
+ denials?: ToolCallDenials,
265
+ ): AsyncGenerator<SessionEvent, void, unknown> {
266
+ if (!ctx.onPendingEvents) {
267
+ await settleBatch(denials)
268
+ return
269
+ }
270
+ const wakeup = () => {
271
+ let notify!: () => void
272
+ const promise = new Promise<void>((resolve) => {
273
+ notify = resolve
274
+ })
275
+ return { promise, notify }
276
+ }
277
+ let wake = wakeup()
278
+ let settled: { ok: true } | { ok: false; error: unknown } | undefined
279
+ const unsubscribe = ctx.onPendingEvents(() => wake.notify())
280
+ // Start the captured batch before yielding. Live observation must not
281
+ // create a new mutation window before execution validates its payload.
282
+ const execution = settleBatch(denials).then(
283
+ () => {
284
+ settled = { ok: true }
285
+ wake.notify()
286
+ },
287
+ (error) => {
288
+ settled = { ok: false, error }
289
+ wake.notify()
290
+ },
291
+ )
292
+ try {
293
+ while (true) {
294
+ yield* ctx.drainPending()
295
+ if (settled) break
296
+ await wake.promise
297
+ wake = wakeup()
298
+ }
299
+ if (!settled.ok) throw settled.error
300
+ } finally {
301
+ unsubscribe()
302
+ if (!settled) {
303
+ ctx.abortController.abort(
304
+ new DOMException(
305
+ 'The query consumer stopped reading during tool execution.',
306
+ 'AbortError',
307
+ ),
308
+ )
309
+ // Tool cancellation and its receipts settle before the query can
310
+ // release the recorder, sandbox or other borrowed turn resources.
311
+ await execution
312
+ }
313
+ }
314
+ }
315
+
229
316
  if (toolCallSummaries.length === 0) {
230
- await settle()
317
+ yield* settle()
231
318
  yield* ctx.drainPending()
232
319
  return finish('executed')
233
320
  }
@@ -259,7 +346,11 @@ export async function* runToolReview(
259
346
  }
260
347
  if (tc.escalation?.unknownProgram !== undefined) {
261
348
  await ctx.recorder.recordAudit({
262
- what: { action: 'unknown_program', tool: tc.name, resource: tc.escalation.unknownProgram },
349
+ what: {
350
+ action: 'unknown_program',
351
+ tool: tc.name,
352
+ resource: tc.escalation.unknownProgram,
353
+ },
263
354
  outcome: 'refused',
264
355
  reason,
265
356
  })
@@ -361,7 +452,7 @@ export async function* runToolReview(
361
452
  ctx.log.debug('Authorization gate: all tool calls pre-approved', {
362
453
  'namzu.tool.names': gateResults.map((gr) => gr.toolCall.name),
363
454
  })
364
- await settle()
455
+ yield* settle()
365
456
  yield* ctx.drainPending()
366
457
  return finish('executed')
367
458
  }
@@ -376,7 +467,7 @@ export async function* runToolReview(
376
467
  const reason = gateDenied.get(tc.id)
377
468
  if (reason !== undefined) await recordRefusedEscalation(tc, reason)
378
469
  }
379
- await settle(gateDenied)
470
+ yield* settle(gateDenied)
380
471
  yield* ctx.drainPending()
381
472
  return finish('rejected')
382
473
  }
@@ -429,7 +520,7 @@ export async function* runToolReview(
429
520
  ctx.log.debug('Every tool call is covered by an approval already granted', {
430
521
  'namzu.tool.names': toolCallSummaries.map((tc) => tc.name),
431
522
  })
432
- await settle()
523
+ yield* settle()
433
524
  yield* ctx.drainPending()
434
525
  return finish('executed')
435
526
  }
@@ -530,8 +621,15 @@ export async function* runToolReview(
530
621
 
531
622
  const feedback = reviewDecision.feedback || DECLINED_TOOL_CALL_FEEDBACK
532
623
  const denials = new Map(denyAll(feedback))
624
+ if (reviewDecision.declined) {
625
+ const declined: ToolCallDeclined = reviewDecision.declined
626
+ // A call the gate already refused was never the person's to decline.
627
+ declines = new Map(
628
+ toolCalls.filter((tc) => !gateDenied.has(tc.id)).map((tc) => [tc.id, declined]),
629
+ )
630
+ }
533
631
  await settleEscalations(denials, undefined)
534
- await settle(denials)
632
+ yield* settle(denials)
535
633
  yield* ctx.drainPending()
536
634
  return finish('rejected')
537
635
  }
@@ -547,6 +645,7 @@ export async function* runToolReview(
547
645
  // Gate denials are the floor; per-call human denials add to them.
548
646
  const denials = new Map(gateDenied)
549
647
  const modifiedCallIds = new Set<string>()
648
+ const humanDenied = new Map<string, ToolCallDeclined>()
550
649
 
551
650
  for (const mod of reviewDecision.modifications) {
552
651
  if (mod.action === 'modify' && mod.modifiedInput !== undefined) {
@@ -559,6 +658,8 @@ export async function* runToolReview(
559
658
  }
560
659
  if (mod.action === 'deny' && !denials.has(mod.toolCallId)) {
561
660
  denials.set(mod.toolCallId, DECLINED_TOOL_CALL_FEEDBACK)
661
+ // A per-call deny is the person's own answer; gate denials above are not.
662
+ humanDenied.set(mod.toolCallId, {})
562
663
  }
563
664
  }
564
665
 
@@ -571,7 +672,7 @@ export async function* runToolReview(
571
672
  preparedBatch =
572
673
  preparedBatch && typeof reprepare === 'function'
573
674
  ? await reprepare.call(ctx.toolExecutor, response, preparedBatch, modifiedCallIds)
574
- : await prepareForReview()
675
+ : await prepareForReview(modifiedCallIds)
575
676
  toolCallSummaries = summariesFor(preparedBatch)
576
677
  }
577
678
  if (ctx.verificationGate && modifiedCallIds.size > 0) {
@@ -601,7 +702,8 @@ export async function* runToolReview(
601
702
 
602
703
  await settleEscalations(denials, reviewDecision.confirmedEscalations)
603
704
  const everythingDenied = denials.size === toolCalls.length
604
- await settle(denials)
705
+ if (humanDenied.size > 0) declines = humanDenied
706
+ yield* settle(denials)
605
707
  yield* ctx.drainPending()
606
708
  return finish(everythingDenied ? 'rejected' : 'executed')
607
709
  }
@@ -675,7 +777,7 @@ export async function* runToolReview(
675
777
  denials,
676
778
  reviewDecision.action === 'approve_tools' ? reviewDecision.confirmedEscalations : undefined,
677
779
  )
678
- await settle(denials)
780
+ yield* settle(denials)
679
781
  yield* ctx.drainPending()
680
782
  return finish(denials.size === toolCalls.length ? 'rejected' : 'executed')
681
783
  }
@@ -691,7 +793,7 @@ export async function* runToolReview(
691
793
  })
692
794
  const denials = new Map(gateDenied)
693
795
  await settleEscalations(denials, undefined)
694
- await settle(denials)
796
+ yield* settle(denials)
695
797
  yield* ctx.drainPending()
696
798
  return finish('executed')
697
799
  }
@@ -38,6 +38,8 @@ export interface StepShaping {
38
38
  readonly ctx: IterationContext
39
39
  readonly latestUserMessage: () => UserMessage | undefined
40
40
  readonly steps: () => readonly StepResult[]
41
+ /** Request-only contributions already rendered for this model step. */
42
+ readonly requestContextTokens?: number
41
43
  }
42
44
 
43
45
  export { stepContextMessage }
@@ -108,7 +110,13 @@ export function stepContext(
108
110
  windowTokens: window.tokens,
109
111
  remainingTokens: Math.max(
110
112
  0,
111
- Math.floor(window.tokens - measureContext(ctx).tokens - preparedTokens - responseReserve),
113
+ Math.floor(
114
+ window.tokens -
115
+ measureContext(ctx).tokens -
116
+ (shaping.requestContextTokens ?? 0) -
117
+ preparedTokens -
118
+ responseReserve,
119
+ ),
112
120
  ),
113
121
  },
114
122
  steps: steps(),
@@ -3,7 +3,7 @@ import { findRetainedIndices } from '../../compaction/retention.js'
3
3
  import { estimateMessageTokens } from '../../compaction/token-estimate.js'
4
4
  import { isClearedToolResult } from '../../compaction/tool-result-editing.js'
5
5
  import type { ToolManager } from '../../toolsets/manager.js'
6
- import type { Message, ToolMessage } from '../../types/message/index.js'
6
+ import type { Message, ToolCall, ToolMessage } from '../../types/message/index.js'
7
7
 
8
8
  /**
9
9
  * Request-only exact observation masking. Every reference targets a full result
@@ -15,14 +15,19 @@ export function projectObservationContext(
15
15
  messages: Message[],
16
16
  tools: Pick<ToolManager, 'get'>,
17
17
  preserveToolResultsFrom: readonly string[] = [],
18
+ observationKey?: (call: ToolCall, message: ToolMessage) => string | undefined,
18
19
  ): Message[] {
19
- const calls = new Map<string, { name: string; arguments: string } | null>()
20
+ // Historical model input is not a new tool invocation. Its schema may contain
21
+ // refinements, transforms or defaults with effects, so only an executor-owned
22
+ // record of an actual observation may authorize request-only masking.
23
+ if (!observationKey) return messages
24
+ const calls = new Map<string, ToolCall | null>()
20
25
  for (const message of messages) {
21
26
  if (message.role !== 'assistant') continue
22
27
  for (const call of message.toolCalls ?? []) {
23
28
  // Ambiguous IDs cannot prove which observation belongs to which call.
24
29
  if (calls.has(call.id)) calls.set(call.id, null)
25
- else calls.set(call.id, call.metadata?.inputTruncated ? null : call.function)
30
+ else calls.set(call.id, call.metadata?.inputTruncated ? null : call)
26
31
  }
27
32
  }
28
33
  const resultCounts = new Map<string, number>()
@@ -47,26 +52,27 @@ export function projectObservationContext(
47
52
  )
48
53
  continue
49
54
  const call = calls.get(message.toolCallId)
50
- if (!call || preserveToolResultsFrom.includes(call.name)) continue
51
- const definition = tools.get(call.name)
52
- if (!definition) continue
55
+ if (!call || preserveToolResultsFrom.includes(call.function.name)) continue
56
+ if (!tools.get(call.function.name)) continue
57
+ let executionKey: string | undefined
53
58
  try {
54
- const input = definition.inputSchema.safeParse(JSON.parse(call.arguments))
55
- if (
56
- !input.success ||
57
- definition.isReadOnly?.(input.data) !== true ||
58
- definition.isDestructive?.(input.data) === true
59
- )
60
- continue
59
+ executionKey = observationKey(call, message)
61
60
  } catch {
62
- // Classification is advisory; invalid input or a broken custom predicate
63
- // must leave evidence intact, not abort the request.
61
+ // Missing or broken trusted classification leaves the full result intact.
64
62
  continue
65
63
  }
64
+ if (executionKey === undefined) continue
66
65
  // Exact arguments intentionally: equivalent JSON with different formatting
67
66
  // is a missed optimization, not permission to merge different file ranges.
68
67
  const key = createHash('sha256')
69
- .update(JSON.stringify([call.name, call.arguments, message.content]))
68
+ .update(
69
+ JSON.stringify([
70
+ call.function.name,
71
+ call.function.arguments,
72
+ message.content,
73
+ executionKey,
74
+ ]),
75
+ )
70
76
  .digest('hex')
71
77
  const representative = representatives.get(key)
72
78
  if (!representative) {
@@ -371,7 +371,7 @@ export async function prepareTurn(params: QueryParams): Promise<PreparedTurn> {
371
371
  // The preflight refuses an already foreign log before opening a budget or
372
372
  // draining queued topic messages. Repeat after claiming the writer lease:
373
373
  // another process may have opened a log that was empty at preflight time.
374
- await assertSessionLogAttribution(storage.log, params)
374
+ await assertSessionLogAttribution(storage.log, params, { execution: 'kernel' })
375
375
  const preludeLease = await PreludeSessionLease.acquire(
376
376
  storage.log,
377
377
  params.sessionId,
@@ -381,7 +381,7 @@ export async function prepareTurn(params: QueryParams): Promise<PreparedTurn> {
381
381
  let releaseOwnedLease = () => preludeLease.release()
382
382
  try {
383
383
  await preludeLease.assertCurrent()
384
- await assertSessionLogAttribution(storage.log, params)
384
+ await assertSessionLogAttribution(storage.log, params, { execution: 'kernel' })
385
385
  const savedBudget = await savedBudgetReference(params, turnId, storage, selectedResumeState)
386
386
  const budget = await resolveQueryBudget(params, turnId, storage.tokenBudget, savedBudget)
387
387
  const log = TurnContextFactory.buildLogger({
@@ -20,6 +20,7 @@ export interface PromptCacheInput {
20
20
  basePrompt?: string
21
21
  tools: ToolManager
22
22
  allowedTools?: string[]
23
+ sandboxed?: boolean
23
24
  runtimeContext?: AgentRuntimeContext
24
25
  contributions?: PromptContributionRegistry
25
26
  }
@@ -46,6 +47,7 @@ export class PromptCache {
46
47
  basePrompt: input.basePrompt,
47
48
  tools: input.tools,
48
49
  allowedTools: input.allowedTools,
50
+ sandboxed: input.sandboxed,
49
51
  runtimeContext: input.runtimeContext,
50
52
  ...(input.contributions ? { contributions: input.contributions } : {}),
51
53
  })
@@ -83,6 +85,7 @@ export class PromptCache {
83
85
  basePrompt: input.basePrompt,
84
86
  tools: input.tools,
85
87
  allowedTools: input.allowedTools,
88
+ sandboxed: input.sandboxed,
86
89
  runtimeContext: input.runtimeContext,
87
90
  ...(input.contributions ? { contributions: input.contributions } : {}),
88
91
  })
@@ -29,6 +29,8 @@ export interface PromptBuilderConfig {
29
29
 
30
30
  tools: ToolManager
31
31
  allowedTools?: string[]
32
+ /** Command-tool dialects describe guest tools when a sandbox is supplied. */
33
+ sandboxed?: boolean
32
34
  runtimeContext?: AgentRuntimeContext
33
35
  /**
34
36
  * What else goes in the prompt, beyond what this builder knows about.
@@ -46,7 +48,7 @@ function buildEnvContext(workingDirectory: string, config: PromptBuilderConfig):
46
48
  const lines = [
47
49
  `<env>
48
50
  Working directory: ${workingDirectory}
49
- Platform: ${process.platform}`,
51
+ ${config.sandboxed ? 'Host platform' : 'Platform'}: ${process.platform}`,
50
52
  ]
51
53
 
52
54
  if (runtimeContext?.label) {
@@ -121,6 +123,29 @@ function hasFilesystemTools(tools: ToolManager, allowedTools?: string[]): boolea
121
123
  })
122
124
  }
123
125
 
126
+ /** The actual execution dialect, independent of the host operating system. */
127
+ function buildShellContext(config: PromptBuilderConfig): string | undefined {
128
+ const lines: string[] = []
129
+ for (const name of config.allowedTools ?? config.tools.listNames()) {
130
+ const tool = config.tools.get(name)
131
+ if (
132
+ !tool?.commandArgument ||
133
+ !tool.commandDialect ||
134
+ config.tools.availability(name) !== 'active'
135
+ )
136
+ continue
137
+ const dialect = tool.commandDialect({ sandboxed: config.sandboxed === true })
138
+ lines.push(
139
+ `Execution shell for ${name}: ${dialect}${config.sandboxed ? ' (sandbox guest)' : ' (host)'}.`,
140
+ )
141
+ if (dialect === 'cmd')
142
+ lines.push(
143
+ 'Use native Windows CMD command syntax. Single quotes do not quote arguments; backslashes do not escape shell operators. PowerShell syntax requires explicitly invoking PowerShell. Command-specific automatic permission grants are unavailable; an exact-call review may be required.',
144
+ )
145
+ }
146
+ return lines.length > 0 ? lines.join('\n') : undefined
147
+ }
148
+
124
149
  export class PromptBuilder {
125
150
  private config: PromptBuilderConfig
126
151
 
@@ -250,6 +275,9 @@ export class PromptBuilder {
250
275
  // `${static}\n\n---\n\n${dynamic}`. The two methods produce the same
251
276
  // prompt for the same input, and a turn that hits the prompt cache
252
277
  // must not be asking a different question from one that misses it.
278
+ const shellContext = buildShellContext(this.config)
279
+ if (shellContext) parts.push(shellContext)
280
+
253
281
  parts.push(...this.renderContributions('static', workingDirectory))
254
282
  parts.push(...this.renderContributions('dynamic', workingDirectory))
255
283
 
@@ -311,6 +339,9 @@ export class PromptBuilder {
311
339
  }
312
340
  }
313
341
 
342
+ const shellContext = buildShellContext(this.config)
343
+ if (shellContext) dynamicParts.push(shellContext)
344
+
314
345
  staticParts.push(...this.renderContributions('static', workingDirectory))
315
346
  dynamicParts.push(...this.renderContributions('dynamic', workingDirectory))
316
347