@namzu/sdk 0.6.0 → 1.1.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 (429) hide show
  1. package/CHANGELOG.md +529 -0
  2. package/dist/advisory/executor.d.ts.map +1 -1
  3. package/dist/advisory/executor.js +9 -2
  4. package/dist/advisory/executor.js.map +1 -1
  5. package/dist/advisory/executor.test.d.ts +2 -1
  6. package/dist/advisory/executor.test.d.ts.map +1 -1
  7. package/dist/advisory/executor.test.js +7 -4
  8. package/dist/advisory/executor.test.js.map +1 -1
  9. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  10. package/dist/agents/ReactiveAgent.js +7 -0
  11. package/dist/agents/ReactiveAgent.js.map +1 -1
  12. package/dist/agents/SupervisorAgent.d.ts +22 -1
  13. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  14. package/dist/agents/SupervisorAgent.js +54 -14
  15. package/dist/agents/SupervisorAgent.js.map +1 -1
  16. package/dist/agents/__tests__/supervisor-ledger.test.d.ts +2 -0
  17. package/dist/agents/__tests__/supervisor-ledger.test.d.ts.map +1 -0
  18. package/dist/agents/__tests__/supervisor-ledger.test.js +131 -0
  19. package/dist/agents/__tests__/supervisor-ledger.test.js.map +1 -0
  20. package/dist/bridge/sse/mapper.test.js +2 -2
  21. package/dist/config/runtime.d.ts +24 -0
  22. package/dist/config/runtime.d.ts.map +1 -1
  23. package/dist/config/runtime.js +9 -0
  24. package/dist/config/runtime.js.map +1 -1
  25. package/dist/connector/builtins/webhook.test.js +17 -0
  26. package/dist/connector/builtins/webhook.test.js.map +1 -1
  27. package/dist/connector/index.d.ts +1 -0
  28. package/dist/connector/index.d.ts.map +1 -1
  29. package/dist/connector/index.js +1 -0
  30. package/dist/connector/index.js.map +1 -1
  31. package/dist/connector/mcp/client.d.ts.map +1 -1
  32. package/dist/connector/mcp/client.js +4 -0
  33. package/dist/connector/mcp/client.js.map +1 -1
  34. package/dist/connector/mcp/index.d.ts +1 -0
  35. package/dist/connector/mcp/index.d.ts.map +1 -1
  36. package/dist/connector/mcp/index.js +1 -0
  37. package/dist/connector/mcp/index.js.map +1 -1
  38. package/dist/connector/mcp/streamable-http.d.ts +22 -0
  39. package/dist/connector/mcp/streamable-http.d.ts.map +1 -0
  40. package/dist/connector/mcp/streamable-http.js +128 -0
  41. package/dist/connector/mcp/streamable-http.js.map +1 -0
  42. package/dist/connector/mcp/streamable-http.test.d.ts +2 -0
  43. package/dist/connector/mcp/streamable-http.test.d.ts.map +1 -0
  44. package/dist/connector/mcp/streamable-http.test.js +132 -0
  45. package/dist/connector/mcp/streamable-http.test.js.map +1 -0
  46. package/dist/constants/compaction/index.d.ts.map +1 -1
  47. package/dist/constants/compaction/index.js +8 -3
  48. package/dist/constants/compaction/index.js.map +1 -1
  49. package/dist/constants/sandbox/index.d.ts +21 -0
  50. package/dist/constants/sandbox/index.d.ts.map +1 -1
  51. package/dist/constants/sandbox/index.js +30 -0
  52. package/dist/constants/sandbox/index.js.map +1 -1
  53. package/dist/constants/tools/index.d.ts.map +1 -1
  54. package/dist/constants/tools/index.js +33 -2
  55. package/dist/constants/tools/index.js.map +1 -1
  56. package/dist/manager/run/persistence.d.ts.map +1 -1
  57. package/dist/manager/run/persistence.js +35 -5
  58. package/dist/manager/run/persistence.js.map +1 -1
  59. package/dist/persona/assembler.d.ts +1 -0
  60. package/dist/persona/assembler.d.ts.map +1 -1
  61. package/dist/persona/assembler.js +37 -6
  62. package/dist/persona/assembler.js.map +1 -1
  63. package/dist/provider/collect.d.ts.map +1 -1
  64. package/dist/provider/collect.js +4 -1
  65. package/dist/provider/collect.js.map +1 -1
  66. package/dist/provider/collect.test.js +2 -2
  67. package/dist/public-runtime.d.ts +6 -5
  68. package/dist/public-runtime.d.ts.map +1 -1
  69. package/dist/public-runtime.js +6 -5
  70. package/dist/public-runtime.js.map +1 -1
  71. package/dist/public-tools.d.ts +2 -0
  72. package/dist/public-tools.d.ts.map +1 -1
  73. package/dist/public-tools.js +2 -0
  74. package/dist/public-tools.js.map +1 -1
  75. package/dist/public-types.d.ts +3 -0
  76. package/dist/public-types.d.ts.map +1 -1
  77. package/dist/registry/index.d.ts +2 -0
  78. package/dist/registry/index.d.ts.map +1 -1
  79. package/dist/registry/index.js +1 -0
  80. package/dist/registry/index.js.map +1 -1
  81. package/dist/registry/tool/execute.d.ts +27 -0
  82. package/dist/registry/tool/execute.d.ts.map +1 -1
  83. package/dist/registry/tool/execute.js +192 -7
  84. package/dist/registry/tool/execute.js.map +1 -1
  85. package/dist/registry/tool/execute.test.d.ts +9 -4
  86. package/dist/registry/tool/execute.test.d.ts.map +1 -1
  87. package/dist/registry/tool/execute.test.js +178 -7
  88. package/dist/registry/tool/execute.test.js.map +1 -1
  89. package/dist/registry/toolset/catalog.d.ts +42 -0
  90. package/dist/registry/toolset/catalog.d.ts.map +1 -0
  91. package/dist/registry/toolset/catalog.js +217 -0
  92. package/dist/registry/toolset/catalog.js.map +1 -0
  93. package/dist/registry/toolset/catalog.test.d.ts +2 -0
  94. package/dist/registry/toolset/catalog.test.d.ts.map +1 -0
  95. package/dist/registry/toolset/catalog.test.js +147 -0
  96. package/dist/registry/toolset/catalog.test.js.map +1 -0
  97. package/dist/runtime/query/__tests__/deferred-tools.test.d.ts +2 -0
  98. package/dist/runtime/query/__tests__/deferred-tools.test.d.ts.map +1 -0
  99. package/dist/runtime/query/__tests__/deferred-tools.test.js +185 -0
  100. package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -0
  101. package/dist/runtime/query/__tests__/executor-concurrency.test.d.ts +2 -0
  102. package/dist/runtime/query/__tests__/executor-concurrency.test.d.ts.map +1 -0
  103. package/dist/runtime/query/__tests__/executor-concurrency.test.js +98 -0
  104. package/dist/runtime/query/__tests__/executor-concurrency.test.js.map +1 -0
  105. package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js +38 -3
  106. package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js.map +1 -1
  107. package/dist/runtime/query/__tests__/long-document-flow.test.d.ts +2 -0
  108. package/dist/runtime/query/__tests__/long-document-flow.test.d.ts.map +1 -0
  109. package/dist/runtime/query/__tests__/long-document-flow.test.js +154 -0
  110. package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -0
  111. package/dist/runtime/query/__tests__/prompt.test.js +51 -2
  112. package/dist/runtime/query/__tests__/prompt.test.js.map +1 -1
  113. package/dist/runtime/query/__tests__/stream-recovery.test.d.ts +2 -0
  114. package/dist/runtime/query/__tests__/stream-recovery.test.d.ts.map +1 -0
  115. package/dist/runtime/query/__tests__/stream-recovery.test.js +126 -0
  116. package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -0
  117. package/dist/runtime/query/continuation.d.ts +16 -0
  118. package/dist/runtime/query/continuation.d.ts.map +1 -0
  119. package/dist/runtime/query/continuation.js +16 -0
  120. package/dist/runtime/query/continuation.js.map +1 -0
  121. package/dist/runtime/query/executor.d.ts +3 -0
  122. package/dist/runtime/query/executor.d.ts.map +1 -1
  123. package/dist/runtime/query/executor.js +71 -3
  124. package/dist/runtime/query/executor.js.map +1 -1
  125. package/dist/runtime/query/index.d.ts +9 -0
  126. package/dist/runtime/query/index.d.ts.map +1 -1
  127. package/dist/runtime/query/index.js +42 -5
  128. package/dist/runtime/query/index.js.map +1 -1
  129. package/dist/runtime/query/iteration/index.d.ts +24 -0
  130. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  131. package/dist/runtime/query/iteration/index.js +326 -66
  132. package/dist/runtime/query/iteration/index.js.map +1 -1
  133. package/dist/runtime/query/iteration/phases/checkpoint.d.ts.map +1 -1
  134. package/dist/runtime/query/iteration/phases/checkpoint.js +2 -2
  135. package/dist/runtime/query/iteration/phases/checkpoint.js.map +1 -1
  136. package/dist/runtime/query/iteration/phases/compaction.d.ts +8 -0
  137. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  138. package/dist/runtime/query/iteration/phases/compaction.js +84 -3
  139. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  140. package/dist/runtime/query/iteration/phases/context.d.ts +22 -0
  141. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  142. package/dist/runtime/query/iteration/phases/context.js +53 -0
  143. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  144. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts +2 -0
  145. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts.map +1 -0
  146. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js +73 -0
  147. package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js.map +1 -0
  148. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts +2 -0
  149. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts.map +1 -0
  150. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js +120 -0
  151. package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js.map +1 -0
  152. package/dist/runtime/query/iteration/phases/tool-review.d.ts +1 -1
  153. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  154. package/dist/runtime/query/iteration/phases/tool-review.js +7 -2
  155. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  156. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts +19 -0
  157. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts.map +1 -0
  158. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js +177 -0
  159. package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js.map +1 -0
  160. package/dist/runtime/query/iteration/phases/working-memory.d.ts +31 -0
  161. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -0
  162. package/dist/runtime/query/iteration/phases/working-memory.js +81 -0
  163. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -0
  164. package/dist/runtime/query/prompt.d.ts.map +1 -1
  165. package/dist/runtime/query/prompt.js +21 -1
  166. package/dist/runtime/query/prompt.js.map +1 -1
  167. package/dist/runtime/query/tooling.d.ts +1 -0
  168. package/dist/runtime/query/tooling.d.ts.map +1 -1
  169. package/dist/runtime/query/tooling.js +1 -0
  170. package/dist/runtime/query/tooling.js.map +1 -1
  171. package/dist/sandbox/provider/local.d.ts.map +1 -1
  172. package/dist/sandbox/provider/local.js +32 -1
  173. package/dist/sandbox/provider/local.js.map +1 -1
  174. package/dist/session/workspace/__tests__/shared-run.test.d.ts +2 -0
  175. package/dist/session/workspace/__tests__/shared-run.test.d.ts.map +1 -0
  176. package/dist/session/workspace/__tests__/shared-run.test.js +147 -0
  177. package/dist/session/workspace/__tests__/shared-run.test.js.map +1 -0
  178. package/dist/session/workspace/index.d.ts +2 -0
  179. package/dist/session/workspace/index.d.ts.map +1 -1
  180. package/dist/session/workspace/index.js +1 -0
  181. package/dist/session/workspace/index.js.map +1 -1
  182. package/dist/session/workspace/shared-run.d.ts +81 -0
  183. package/dist/session/workspace/shared-run.d.ts.map +1 -0
  184. package/dist/session/workspace/shared-run.js +252 -0
  185. package/dist/session/workspace/shared-run.js.map +1 -0
  186. package/dist/skills/loader.d.ts.map +1 -1
  187. package/dist/skills/loader.js +36 -6
  188. package/dist/skills/loader.js.map +1 -1
  189. package/dist/skills/loader.test.d.ts +2 -0
  190. package/dist/skills/loader.test.d.ts.map +1 -0
  191. package/dist/skills/loader.test.js +65 -0
  192. package/dist/skills/loader.test.js.map +1 -0
  193. package/dist/streaming/coalesce.test.js +1 -1
  194. package/dist/streaming/coalesce.test.js.map +1 -1
  195. package/dist/tools/builtins/__tests__/edit.test.d.ts +2 -0
  196. package/dist/tools/builtins/__tests__/edit.test.d.ts.map +1 -0
  197. package/dist/tools/builtins/__tests__/edit.test.js +38 -0
  198. package/dist/tools/builtins/__tests__/edit.test.js.map +1 -0
  199. package/dist/tools/builtins/__tests__/payload-budget.test.d.ts +2 -0
  200. package/dist/tools/builtins/__tests__/payload-budget.test.d.ts.map +1 -0
  201. package/dist/tools/builtins/__tests__/payload-budget.test.js +70 -0
  202. package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -0
  203. package/dist/tools/builtins/__tests__/read-file.test.d.ts +2 -0
  204. package/dist/tools/builtins/__tests__/read-file.test.d.ts.map +1 -0
  205. package/dist/tools/builtins/__tests__/read-file.test.js +33 -0
  206. package/dist/tools/builtins/__tests__/read-file.test.js.map +1 -0
  207. package/dist/tools/builtins/__tests__/verify-outputs.test.d.ts +2 -0
  208. package/dist/tools/builtins/__tests__/verify-outputs.test.d.ts.map +1 -0
  209. package/dist/tools/builtins/__tests__/verify-outputs.test.js +52 -0
  210. package/dist/tools/builtins/__tests__/verify-outputs.test.js.map +1 -0
  211. package/dist/tools/builtins/__tests__/write-file.test.d.ts +2 -0
  212. package/dist/tools/builtins/__tests__/write-file.test.d.ts.map +1 -0
  213. package/dist/tools/builtins/__tests__/write-file.test.js +74 -0
  214. package/dist/tools/builtins/__tests__/write-file.test.js.map +1 -0
  215. package/dist/tools/builtins/bash.d.ts.map +1 -1
  216. package/dist/tools/builtins/bash.js +40 -7
  217. package/dist/tools/builtins/bash.js.map +1 -1
  218. package/dist/tools/builtins/edit.d.ts +5 -2
  219. package/dist/tools/builtins/edit.d.ts.map +1 -1
  220. package/dist/tools/builtins/edit.js +114 -18
  221. package/dist/tools/builtins/edit.js.map +1 -1
  222. package/dist/tools/builtins/index.d.ts +1 -0
  223. package/dist/tools/builtins/index.d.ts.map +1 -1
  224. package/dist/tools/builtins/index.js +13 -13
  225. package/dist/tools/builtins/index.js.map +1 -1
  226. package/dist/tools/builtins/read-file.d.ts +1 -0
  227. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  228. package/dist/tools/builtins/read-file.js +73 -10
  229. package/dist/tools/builtins/read-file.js.map +1 -1
  230. package/dist/tools/builtins/search-tools.d.ts.map +1 -1
  231. package/dist/tools/builtins/search-tools.js +35 -7
  232. package/dist/tools/builtins/search-tools.js.map +1 -1
  233. package/dist/tools/builtins/verify-outputs.d.ts +5 -0
  234. package/dist/tools/builtins/verify-outputs.d.ts.map +1 -0
  235. package/dist/tools/builtins/verify-outputs.js +103 -0
  236. package/dist/tools/builtins/verify-outputs.js.map +1 -0
  237. package/dist/tools/builtins/write-file.d.ts +3 -2
  238. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  239. package/dist/tools/builtins/write-file.js +72 -12
  240. package/dist/tools/builtins/write-file.js.map +1 -1
  241. package/dist/tools/coordinator/__tests__/agent.test.d.ts +15 -0
  242. package/dist/tools/coordinator/__tests__/agent.test.d.ts.map +1 -0
  243. package/dist/tools/coordinator/__tests__/agent.test.js +142 -0
  244. package/dist/tools/coordinator/__tests__/agent.test.js.map +1 -0
  245. package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts +2 -0
  246. package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts.map +1 -0
  247. package/dist/tools/coordinator/__tests__/approve-plan.test.js +114 -0
  248. package/dist/tools/coordinator/__tests__/approve-plan.test.js.map +1 -0
  249. package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts +2 -0
  250. package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts.map +1 -0
  251. package/dist/tools/coordinator/__tests__/ask-user-question.test.js +309 -0
  252. package/dist/tools/coordinator/__tests__/ask-user-question.test.js.map +1 -0
  253. package/dist/tools/coordinator/__tests__/task-list.test.d.ts +13 -0
  254. package/dist/tools/coordinator/__tests__/task-list.test.d.ts.map +1 -0
  255. package/dist/tools/coordinator/__tests__/task-list.test.js +162 -0
  256. package/dist/tools/coordinator/__tests__/task-list.test.js.map +1 -0
  257. package/dist/tools/coordinator/agent.d.ts +34 -0
  258. package/dist/tools/coordinator/agent.d.ts.map +1 -0
  259. package/dist/tools/coordinator/agent.js +107 -0
  260. package/dist/tools/coordinator/agent.js.map +1 -0
  261. package/dist/tools/coordinator/index.d.ts +15 -0
  262. package/dist/tools/coordinator/index.d.ts.map +1 -1
  263. package/dist/tools/coordinator/index.js +305 -35
  264. package/dist/tools/coordinator/index.js.map +1 -1
  265. package/dist/types/agent/base.d.ts +8 -0
  266. package/dist/types/agent/base.d.ts.map +1 -1
  267. package/dist/types/agent/index.d.ts +1 -0
  268. package/dist/types/agent/index.d.ts.map +1 -1
  269. package/dist/types/agent/index.js +1 -0
  270. package/dist/types/agent/index.js.map +1 -1
  271. package/dist/types/agent/reactive.d.ts +38 -0
  272. package/dist/types/agent/reactive.d.ts.map +1 -1
  273. package/dist/types/agent/supervisor.d.ts +32 -0
  274. package/dist/types/agent/supervisor.d.ts.map +1 -1
  275. package/dist/types/agent/working-memory.d.ts +29 -0
  276. package/dist/types/agent/working-memory.d.ts.map +1 -0
  277. package/dist/types/agent/working-memory.js +2 -0
  278. package/dist/types/agent/working-memory.js.map +1 -0
  279. package/dist/types/common/index.d.ts +10 -0
  280. package/dist/types/common/index.d.ts.map +1 -1
  281. package/dist/types/common/index.js +18 -0
  282. package/dist/types/common/index.js.map +1 -1
  283. package/dist/types/common/usage-merge.test.d.ts +2 -0
  284. package/dist/types/common/usage-merge.test.d.ts.map +1 -0
  285. package/dist/types/common/usage-merge.test.js +48 -0
  286. package/dist/types/common/usage-merge.test.js.map +1 -0
  287. package/dist/types/connector/mcp.d.ts +9 -2
  288. package/dist/types/connector/mcp.d.ts.map +1 -1
  289. package/dist/types/hitl/index.d.ts +42 -0
  290. package/dist/types/hitl/index.d.ts.map +1 -1
  291. package/dist/types/hitl/index.js +11 -0
  292. package/dist/types/hitl/index.js.map +1 -1
  293. package/dist/types/message/index.d.ts +22 -1
  294. package/dist/types/message/index.d.ts.map +1 -1
  295. package/dist/types/message/index.js +7 -2
  296. package/dist/types/message/index.js.map +1 -1
  297. package/dist/types/provider/chat.d.ts +11 -9
  298. package/dist/types/provider/chat.d.ts.map +1 -1
  299. package/dist/types/run/events.d.ts +6 -0
  300. package/dist/types/run/events.d.ts.map +1 -1
  301. package/dist/types/run/events.js.map +1 -1
  302. package/dist/types/sandbox/index.d.ts +193 -0
  303. package/dist/types/sandbox/index.d.ts.map +1 -1
  304. package/dist/types/sandbox/index.js.map +1 -1
  305. package/dist/types/skills/index.d.ts +2 -0
  306. package/dist/types/skills/index.d.ts.map +1 -1
  307. package/dist/types/tool/index.d.ts +22 -0
  308. package/dist/types/tool/index.d.ts.map +1 -1
  309. package/dist/types/toolset/index.d.ts +71 -0
  310. package/dist/types/toolset/index.d.ts.map +1 -0
  311. package/dist/types/toolset/index.js +2 -0
  312. package/dist/types/toolset/index.js.map +1 -0
  313. package/dist/types/workspace/index.d.ts +1 -0
  314. package/dist/types/workspace/index.d.ts.map +1 -1
  315. package/dist/types/workspace/shared-run.d.ts +61 -0
  316. package/dist/types/workspace/shared-run.d.ts.map +1 -0
  317. package/dist/types/workspace/shared-run.js +2 -0
  318. package/dist/types/workspace/shared-run.js.map +1 -0
  319. package/dist/verification/index.d.ts +1 -0
  320. package/dist/verification/index.d.ts.map +1 -1
  321. package/dist/verification/index.js +1 -0
  322. package/dist/verification/index.js.map +1 -1
  323. package/dist/verification/presets.d.ts +53 -0
  324. package/dist/verification/presets.d.ts.map +1 -0
  325. package/dist/verification/presets.js +70 -0
  326. package/dist/verification/presets.js.map +1 -0
  327. package/dist/verification/presets.test.d.ts +16 -0
  328. package/dist/verification/presets.test.d.ts.map +1 -0
  329. package/dist/verification/presets.test.js +79 -0
  330. package/dist/verification/presets.test.js.map +1 -0
  331. package/dist/version.d.ts.map +1 -1
  332. package/dist/version.js +25 -4
  333. package/dist/version.js.map +1 -1
  334. package/package.json +3 -2
  335. package/src/advisory/executor.test.ts +7 -4
  336. package/src/advisory/executor.ts +11 -2
  337. package/src/agents/ReactiveAgent.ts +7 -0
  338. package/src/agents/SupervisorAgent.ts +63 -16
  339. package/src/agents/__tests__/supervisor-ledger.test.ts +185 -0
  340. package/src/bridge/sse/mapper.test.ts +2 -2
  341. package/src/config/runtime.ts +9 -0
  342. package/src/connector/builtins/webhook.test.ts +21 -0
  343. package/src/connector/index.ts +1 -0
  344. package/src/connector/mcp/client.ts +4 -0
  345. package/src/connector/mcp/index.ts +1 -0
  346. package/src/connector/mcp/streamable-http.test.ts +169 -0
  347. package/src/connector/mcp/streamable-http.ts +152 -0
  348. package/src/constants/compaction/index.ts +8 -3
  349. package/src/constants/sandbox/index.ts +37 -0
  350. package/src/constants/tools/index.ts +33 -2
  351. package/src/manager/run/persistence.ts +34 -6
  352. package/src/persona/assembler.ts +43 -8
  353. package/src/provider/collect.test.ts +2 -2
  354. package/src/provider/collect.ts +4 -1
  355. package/src/public-runtime.ts +15 -1
  356. package/src/public-tools.ts +2 -0
  357. package/src/public-types.ts +7 -0
  358. package/src/registry/index.ts +7 -0
  359. package/src/registry/tool/execute.test.ts +211 -7
  360. package/src/registry/tool/execute.ts +199 -11
  361. package/src/registry/toolset/catalog.test.ts +165 -0
  362. package/src/registry/toolset/catalog.ts +283 -0
  363. package/src/runtime/query/__tests__/deferred-tools.test.ts +230 -0
  364. package/src/runtime/query/__tests__/executor-concurrency.test.ts +122 -0
  365. package/src/runtime/query/__tests__/executor-plugin-hooks.test.ts +48 -3
  366. package/src/runtime/query/__tests__/long-document-flow.test.ts +180 -0
  367. package/src/runtime/query/__tests__/prompt.test.ts +55 -2
  368. package/src/runtime/query/__tests__/stream-recovery.test.ts +156 -0
  369. package/src/runtime/query/continuation.ts +16 -0
  370. package/src/runtime/query/executor.ts +82 -13
  371. package/src/runtime/query/index.ts +58 -5
  372. package/src/runtime/query/iteration/index.ts +361 -74
  373. package/src/runtime/query/iteration/phases/checkpoint.ts +7 -2
  374. package/src/runtime/query/iteration/phases/compaction.ts +89 -3
  375. package/src/runtime/query/iteration/phases/context.ts +68 -0
  376. package/src/runtime/query/iteration/phases/hitl-abort-race.test.ts +86 -0
  377. package/src/runtime/query/iteration/phases/hitl-answer-question.test.ts +139 -0
  378. package/src/runtime/query/iteration/phases/tool-review.ts +7 -3
  379. package/src/runtime/query/iteration/phases/working-memory-compaction.test.ts +215 -0
  380. package/src/runtime/query/iteration/phases/working-memory.ts +86 -0
  381. package/src/runtime/query/prompt.ts +17 -1
  382. package/src/runtime/query/tooling.ts +2 -0
  383. package/src/sandbox/provider/local.ts +33 -0
  384. package/src/session/workspace/__tests__/shared-run.test.ts +181 -0
  385. package/src/session/workspace/index.ts +6 -0
  386. package/src/session/workspace/shared-run.ts +317 -0
  387. package/src/skills/loader.test.ts +89 -0
  388. package/src/skills/loader.ts +37 -6
  389. package/src/streaming/coalesce.test.ts +4 -4
  390. package/src/tools/builtins/__tests__/edit.test.ts +57 -0
  391. package/src/tools/builtins/__tests__/payload-budget.test.ts +92 -0
  392. package/src/tools/builtins/__tests__/read-file.test.ts +43 -0
  393. package/src/tools/builtins/__tests__/verify-outputs.test.ts +71 -0
  394. package/src/tools/builtins/__tests__/write-file.test.ts +97 -0
  395. package/src/tools/builtins/bash.ts +48 -7
  396. package/src/tools/builtins/edit.ts +162 -27
  397. package/src/tools/builtins/index.ts +13 -13
  398. package/src/tools/builtins/read-file.ts +81 -10
  399. package/src/tools/builtins/search-tools.ts +42 -7
  400. package/src/tools/builtins/verify-outputs.ts +126 -0
  401. package/src/tools/builtins/write-file.ts +83 -14
  402. package/src/tools/coordinator/__tests__/agent.test.ts +172 -0
  403. package/src/tools/coordinator/__tests__/approve-plan.test.ts +139 -0
  404. package/src/tools/coordinator/__tests__/ask-user-question.test.ts +370 -0
  405. package/src/tools/coordinator/__tests__/task-list.test.ts +182 -0
  406. package/src/tools/coordinator/agent.ts +157 -0
  407. package/src/tools/coordinator/index.ts +355 -39
  408. package/src/types/agent/base.ts +8 -0
  409. package/src/types/agent/index.ts +1 -0
  410. package/src/types/agent/reactive.ts +42 -0
  411. package/src/types/agent/supervisor.ts +36 -0
  412. package/src/types/agent/working-memory.ts +29 -0
  413. package/src/types/common/index.ts +19 -0
  414. package/src/types/common/usage-merge.test.ts +53 -0
  415. package/src/types/connector/mcp.ts +14 -2
  416. package/src/types/hitl/index.ts +52 -1
  417. package/src/types/message/index.ts +32 -2
  418. package/src/types/provider/chat.ts +12 -9
  419. package/src/types/run/events.ts +6 -0
  420. package/src/types/sandbox/index.ts +219 -0
  421. package/src/types/skills/index.ts +4 -0
  422. package/src/types/tool/index.ts +24 -0
  423. package/src/types/toolset/index.ts +86 -0
  424. package/src/types/workspace/index.ts +9 -0
  425. package/src/types/workspace/shared-run.ts +65 -0
  426. package/src/verification/index.ts +1 -0
  427. package/src/verification/presets.test.ts +112 -0
  428. package/src/verification/presets.ts +72 -0
  429. package/src/version.ts +26 -4
@@ -9,3 +9,4 @@ export * from './gateway.js'
9
9
  export * from './task.js'
10
10
  export * from './lifecycle-event.js'
11
11
  export * from './manager.js'
12
+ export * from './working-memory.js'
@@ -1,9 +1,13 @@
1
+ import type { CompactionConfig } from '../../config/runtime.js'
1
2
  import type { AdvisoryConfig } from '../advisory/index.js'
2
3
  import type { AgentPersona } from '../persona/index.js'
3
4
  import type { LLMProvider } from '../provider/index.js'
5
+ import type { SandboxProvider } from '../sandbox/index.js'
4
6
  import type { Skill } from '../skills/index.js'
5
7
  import type { ToolRegistryContract } from '../tool/index.js'
8
+ import type { VerificationGateConfig } from '../verification/index.js'
6
9
  import type { BaseAgentConfig, BaseAgentResult } from './base.js'
10
+ import type { WorkingMemoryProvider } from './working-memory.js'
7
11
 
8
12
  export interface ReactiveAgentConfig extends BaseAgentConfig {
9
13
  systemPrompt?: string
@@ -17,6 +21,44 @@ export interface ReactiveAgentConfig extends BaseAgentConfig {
17
21
  tools: ToolRegistryContract
18
22
 
19
23
  advisory?: AdvisoryConfig
24
+
25
+ /**
26
+ * Optional capability-aware deny/allow gate for child tool calls.
27
+ * Mirrors the same field on `SupervisorAgentConfig`; when omitted,
28
+ * `drainQuery` falls back to its `autoApproveHandler` default
29
+ * (every tool call auto-approves, no policy applied). Hosts that
30
+ * trust their sandbox should still pass at least
31
+ * `{ enabled: true, denyDangerousPatterns: true, ... }` so the
32
+ * canonical brick patterns hard-deny instead of executing
33
+ * silently.
34
+ */
35
+ verificationGate?: VerificationGateConfig
36
+
37
+ /**
38
+ * Optional ephemeral sandbox provider. When set, drainQuery creates
39
+ * a sandbox via `provider.create()` before the iteration loop and
40
+ * routes filesystem / shell tool calls through it; on run end the
41
+ * SDK calls `sandbox.destroy()`. Hosts that want a per-task
42
+ * container shared across supervisor + every child specialist run
43
+ * pass the SAME provider instance to all of them — caching layered
44
+ * on top of the provider keeps the underlying container alive.
45
+ */
46
+ sandboxProvider?: SandboxProvider
47
+
48
+ /**
49
+ * Optional structured-compaction config. Omitted ⇒ byte-identical run path
50
+ * (no `WorkingStateManager`, compaction early-returns). Mirrors the field
51
+ * on `SupervisorAgentConfig` so a child specialist can share the
52
+ * supervisor's compaction settings.
53
+ */
54
+ compactionConfig?: CompactionConfig
55
+
56
+ /**
57
+ * Optional neutral working-memory seam — same contract as the field on
58
+ * `SupervisorAgentConfig`. Absent ⇒ no block injected. A child specialist
59
+ * sharing the supervisor's output dir passes the same provider.
60
+ */
61
+ workingMemoryProvider?: WorkingMemoryProvider
20
62
  }
21
63
 
22
64
  export interface ReactiveAgentResult extends BaseAgentResult {
@@ -1,12 +1,17 @@
1
+ import type { CompactionConfig } from '../../config/runtime.js'
1
2
  import type { AdvisoryConfig } from '../advisory/index.js'
2
3
  import type { ResumeHandler } from '../hitl/index.js'
3
4
  import type { LLMProvider } from '../provider/index.js'
4
5
  import type { TaskRouterConfig } from '../router/index.js'
6
+ import type { SandboxProvider } from '../sandbox/index.js'
7
+ import type { Skill } from '../skills/index.js'
8
+ import type { ToolRegistryContract } from '../tool/index.js'
5
9
  import type { VerificationGateConfig } from '../verification/index.js'
6
10
  import type { BaseAgentConfig, BaseAgentResult } from './base.js'
7
11
  import type { AgentFactoryOptions } from './factory.js'
8
12
  import type { TaskGateway } from './gateway.js'
9
13
  import type { AgentManagerContract } from './manager.js'
14
+ import type { WorkingMemoryProvider } from './working-memory.js'
10
15
 
11
16
  export interface SupervisorAgentConfig extends BaseAgentConfig {
12
17
  provider: LLMProvider
@@ -15,9 +20,12 @@ export interface SupervisorAgentConfig extends BaseAgentConfig {
15
20
 
16
21
  gateway?: TaskGateway
17
22
  agentManager?: AgentManagerContract
23
+ tools?: ToolRegistryContract
18
24
 
19
25
  systemPrompt: string
20
26
 
27
+ skills?: Skill[]
28
+
21
29
  maxDepth?: number
22
30
 
23
31
  taskRouter?: TaskRouterConfig
@@ -52,6 +60,34 @@ export interface SupervisorAgentConfig extends BaseAgentConfig {
52
60
  * non-deterministic cases.
53
61
  */
54
62
  verificationGate?: VerificationGateConfig
63
+
64
+ /**
65
+ * Optional ephemeral sandbox provider. When set, drainQuery creates
66
+ * a sandbox via `provider.create()` before the supervisor's own
67
+ * iteration loop and routes filesystem / shell tool calls through
68
+ * it. Multi-agent hosts thread the SAME provider instance into
69
+ * every child `ReactiveAgentConfig.sandboxProvider` so supervisor
70
+ * + children share one ephemeral container per task.
71
+ */
72
+ sandboxProvider?: SandboxProvider
73
+
74
+ /**
75
+ * Optional structured-compaction config. When omitted, `query()` never
76
+ * builds a `WorkingStateManager` and compaction early-returns — the run
77
+ * path is byte-identical to a non-compacting run. Hosts opt in (e.g. with
78
+ * a `contextWindowTokens`) to keep a long single run alive instead of
79
+ * silently truncating.
80
+ */
81
+ compactionConfig?: CompactionConfig
82
+
83
+ /**
84
+ * Optional neutral working-memory seam. When set, the SDK re-renders the
85
+ * provider's string into a single pinned leading system message every
86
+ * iteration (the primacy-edge, compaction-preserved slot). Absent ⇒ no
87
+ * block is ever injected. The SDK only positions the string; the host owns
88
+ * its content and trust framing.
89
+ */
90
+ workingMemoryProvider?: WorkingMemoryProvider
55
91
  }
56
92
 
57
93
  export interface AgentTaskResult {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Per-turn context the SDK is allowed to hand a working-memory provider.
3
+ *
4
+ * NEUTRAL by construction: opaque strings + a number, NO host/Postgres/disk
5
+ * types. It mirrors `AgentRuntimeContext.notes: readonly string[]` and the
6
+ * `web-search` seam discipline — the host closes over everything else
7
+ * (threadId, output dir, tenancy) when it builds the provider, so the SDK
8
+ * never learns a domain type. The SDK only POSITIONS the returned string at
9
+ * the primacy edge; the host OWNS the content and its authority framing.
10
+ */
11
+ export interface WorkingMemoryTurnContext {
12
+ /** The active run id (opaque). */
13
+ readonly runId: string
14
+ /** 1-based iteration counter for this run. */
15
+ readonly iteration: number
16
+ }
17
+
18
+ /**
19
+ * Returns a rendered, already-sanitized working-memory block to pin at the
20
+ * primacy edge (a single leading system message, refreshed every iteration).
21
+ *
22
+ * The SDK does no parsing of the returned string — it stores it verbatim under
23
+ * a sentinel header and re-pins it each turn. An empty/blank return ⇒ no block
24
+ * is injected (the byte-identical-when-empty property). Async so the host can
25
+ * `stat` the output dir / read the registry each turn. Failure-isolated by the
26
+ * SDK: a throwing/slow provider degrades to "no refresh this turn", never
27
+ * breaks the run.
28
+ */
29
+ export type WorkingMemoryProvider = (ctx: WorkingMemoryTurnContext) => string | Promise<string>
@@ -22,6 +22,25 @@ export function accumulateTokenUsage(current: TokenUsage, addition: TokenUsage):
22
22
  }
23
23
  }
24
24
 
25
+ /**
26
+ * Merge two usage snapshots seen WITHIN a single streamed turn. Provider usage
27
+ * frames over one stream are cumulative/monotonic (input set once early, output
28
+ * grows), but a late frame can OMIT a field (report 0) — e.g. Anthropic's
29
+ * `message_delta` may carry only output tokens. A naive last-write-wins
30
+ * (`usage = chunk.usage`) then drops the earlier prompt/cache counts and
31
+ * under-reports the turn. Taking the per-field high-water mark preserves every
32
+ * field. DISTINCT from {@link accumulateTokenUsage}, which SUMS across turns.
33
+ */
34
+ export function mergeTokenUsage(current: TokenUsage, next: TokenUsage): TokenUsage {
35
+ return {
36
+ promptTokens: Math.max(current.promptTokens, next.promptTokens),
37
+ completionTokens: Math.max(current.completionTokens, next.completionTokens),
38
+ totalTokens: Math.max(current.totalTokens, next.totalTokens),
39
+ cachedTokens: Math.max(current.cachedTokens, next.cachedTokens),
40
+ cacheWriteTokens: Math.max(current.cacheWriteTokens, next.cacheWriteTokens),
41
+ }
42
+ }
43
+
25
44
  export interface CostInfo {
26
45
  inputCostPer1M: number
27
46
  outputCostPer1M: number
@@ -0,0 +1,53 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { type TokenUsage, accumulateTokenUsage, mergeTokenUsage } from './index.js'
4
+
5
+ const zero: TokenUsage = {
6
+ promptTokens: 0,
7
+ completionTokens: 0,
8
+ totalTokens: 0,
9
+ cachedTokens: 0,
10
+ cacheWriteTokens: 0,
11
+ }
12
+
13
+ /**
14
+ * M7: within one streamed turn, usage frames are cumulative/monotonic but a
15
+ * late frame may omit fields. `mergeTokenUsage` keeps the per-field high-water
16
+ * mark so a trailing output-only frame does not zero the earlier prompt/cache
17
+ * counts (the under-report the audit flagged).
18
+ */
19
+ describe('mergeTokenUsage (within-turn, per-field max)', () => {
20
+ it('preserves prompt/cache tokens when a later frame reports only output', () => {
21
+ // message_start-like frame: input + cache set, output still 0.
22
+ const early: TokenUsage = {
23
+ ...zero,
24
+ promptTokens: 1200,
25
+ cachedTokens: 800,
26
+ cacheWriteTokens: 200,
27
+ }
28
+ // message_delta-like frame: only output tokens, input/cache dropped to 0.
29
+ const lateOutputOnly: TokenUsage = { ...zero, completionTokens: 350 }
30
+
31
+ const merged = mergeTokenUsage(early, lateOutputOnly)
32
+ expect(merged.promptTokens).toBe(1200) // NOT zeroed by the late frame
33
+ expect(merged.cachedTokens).toBe(800)
34
+ expect(merged.cacheWriteTokens).toBe(200)
35
+ expect(merged.completionTokens).toBe(350)
36
+ })
37
+
38
+ it('takes the growing (max) completion count across frames', () => {
39
+ const a: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 10 }
40
+ const b: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 42 }
41
+ expect(mergeTokenUsage(a, b).completionTokens).toBe(42)
42
+ // Order-independent (a late smaller frame never regresses the max).
43
+ expect(mergeTokenUsage(b, a).completionTokens).toBe(42)
44
+ })
45
+
46
+ it('is distinct from accumulateTokenUsage (which sums across turns)', () => {
47
+ const t1: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 20 }
48
+ const t2: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 30 }
49
+ // merge = max within a turn; accumulate = sum across turns.
50
+ expect(mergeTokenUsage(t1, t2).promptTokens).toBe(100)
51
+ expect(accumulateTokenUsage(t1, t2).promptTokens).toBe(200)
52
+ })
53
+ })
@@ -6,7 +6,9 @@ import type {
6
6
  ConnectorInstance,
7
7
  } from './definition.js'
8
8
 
9
- export type MCPTransportType = 'stdio' | 'http-sse'
9
+ export type MCPStreamableHttpTransportType = 'streamable_http' | 'streamable-http'
10
+
11
+ export type MCPTransportType = 'stdio' | 'http-sse' | MCPStreamableHttpTransportType
10
12
 
11
13
  export interface MCPTransportConfigBase {
12
14
  type: MCPTransportType
@@ -27,7 +29,17 @@ export interface MCPHttpSseTransportConfig extends MCPTransportConfigBase {
27
29
  timeoutMs?: number
28
30
  }
29
31
 
30
- export type MCPTransportUnion = MCPStdioTransportConfig | MCPHttpSseTransportConfig
32
+ export interface MCPStreamableHttpTransportConfig extends MCPTransportConfigBase {
33
+ type: MCPStreamableHttpTransportType
34
+ url: string
35
+ headers?: Record<string, string>
36
+ timeoutMs?: number
37
+ }
38
+
39
+ export type MCPTransportUnion =
40
+ | MCPStdioTransportConfig
41
+ | MCPHttpSseTransportConfig
42
+ | MCPStreamableHttpTransportConfig
31
43
 
32
44
  export interface MCPJsonRpcError {
33
45
  code: number
@@ -7,11 +7,27 @@ export type { CheckpointId }
7
7
 
8
8
  export type HITLResumeDecision =
9
9
  | { action: 'continue' }
10
- | { action: 'approve_plan' }
10
+ | { action: 'approve_plan'; feedback?: string }
11
11
  | { action: 'reject_plan'; feedback: string }
12
12
  | { action: 'approve_tools' }
13
13
  | { action: 'modify_tools'; modifications: ToolModification[] }
14
14
  | { action: 'reject_tools'; feedback: string }
15
+ | {
16
+ action: 'answer_question'
17
+ selectedOptionIds: string[]
18
+ freeText?: string
19
+ /**
20
+ * Echo of `UserQuestionData.questionId` — the misdirection
21
+ * guard. The park/resolve registry on hosts is typically
22
+ * keyed by run, so a stale client can answer question N
23
+ * after question N+1 re-parked under the same run. When
24
+ * present and it does not match the asking tool's own
25
+ * questionId, the tool treats the decision as unanswered
26
+ * instead of fabricating a selection against the wrong
27
+ * question.
28
+ */
29
+ questionId?: string
30
+ }
15
31
  | { action: 'pause'; reason: string }
16
32
  | { action: 'abort'; reason: string }
17
33
 
@@ -24,6 +40,7 @@ export type HITLDecisionRequest =
24
40
  checkpointId: CheckpointId
25
41
  summary: CheckpointSummary
26
42
  }
43
+ | { type: 'user_question'; runId: RunId; checkpointId: CheckpointId; question: UserQuestionData }
27
44
 
28
45
  export type ResumeHandler = (request: HITLDecisionRequest) => Promise<HITLResumeDecision>
29
46
 
@@ -40,6 +57,29 @@ export interface ToolModification {
40
57
  modifiedInput?: unknown
41
58
  }
42
59
 
60
+ export interface UserQuestionOption {
61
+ id: string
62
+ label: string
63
+ description?: string
64
+ }
65
+
66
+ /**
67
+ * A model-authored question for the user, parked through the
68
+ * `ResumeHandler` exactly like a plan approval. `questionId` equals
69
+ * the asking `tool_use_id` so the host can mint stable, mergeable
70
+ * activity ids per question and so answers can be matched back to
71
+ * the question that asked them (see
72
+ * `HITLResumeDecision['answer_question'].questionId`).
73
+ */
74
+ export interface UserQuestionData {
75
+ questionId: string
76
+ question: string
77
+ header?: string
78
+ options: UserQuestionOption[]
79
+ multiSelect: boolean
80
+ allowFreeText: boolean
81
+ }
82
+
43
83
  export interface PlanApprovalData {
44
84
  planId: PlanId
45
85
  title: string
@@ -108,6 +148,17 @@ export function autoApproveHandler(request: HITLDecisionRequest): Promise<HITLRe
108
148
  return Promise.resolve({ action: 'approve_tools' })
109
149
  case 'iteration_checkpoint':
110
150
  return Promise.resolve({ action: 'continue' })
151
+ case 'user_question':
152
+ // Headless runs must never deadlock on a question and must
153
+ // never fabricate a user choice: answer with an explicit
154
+ // no-selection sentinel so the asking tool renders "the user
155
+ // did not answer" rather than consent.
156
+ return Promise.resolve({
157
+ action: 'answer_question',
158
+ selectedOptionIds: [],
159
+ freeText: 'No user is available to answer. Proceed using your best judgment.',
160
+ questionId: request.question.questionId,
161
+ })
111
162
  default: {
112
163
  const _exhaustive: never = request
113
164
  throw new Error(`Unhandled HITL request type: ${(_exhaustive as HITLDecisionRequest).type}`)
@@ -2,6 +2,18 @@ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool'
2
2
 
3
3
  export type CacheHint = 'cache' | 'ephemeral' | 'none'
4
4
 
5
+ /**
6
+ * An image attached to a user message (vision input). Additive: providers
7
+ * that support vision (e.g. Anthropic) emit it as an image content block
8
+ * alongside the text; providers that don't simply ignore it.
9
+ */
10
+ export interface ImageAttachment {
11
+ /** Base64-encoded image bytes (no `data:` URI prefix). */
12
+ readonly data: string
13
+ /** IANA media type, e.g. `image/png`, `image/jpeg`, `image/webp`. */
14
+ readonly mediaType: string
15
+ }
16
+
5
17
  export interface ToolCall {
6
18
  id: string
7
19
  type: 'function'
@@ -9,6 +21,14 @@ export interface ToolCall {
9
21
  name: string
10
22
  arguments: string
11
23
  }
24
+ /**
25
+ * Runtime-only execution annotations. This is intentionally separate
26
+ * from `function.arguments`: tool arguments remain the model-authored
27
+ * JSON payload, while provider/runtime recovery state lives here.
28
+ */
29
+ metadata?: {
30
+ inputTruncated?: boolean
31
+ }
12
32
  }
13
33
 
14
34
  export interface BaseMessage {
@@ -26,6 +46,8 @@ export interface SystemMessage extends BaseMessage {
26
46
  export interface UserMessage extends BaseMessage {
27
47
  role: 'user'
28
48
  content: string
49
+ /** Optional image attachments (vision input). */
50
+ attachments?: readonly ImageAttachment[]
29
51
  }
30
52
 
31
53
  export interface AssistantMessage extends BaseMessage {
@@ -51,8 +73,16 @@ export function createSystemMessage(content: string, cacheHint?: CacheHint): Sys
51
73
  }
52
74
  }
53
75
 
54
- export function createUserMessage(content: string): UserMessage {
55
- return { role: 'user', content, timestamp: Date.now() }
76
+ export function createUserMessage(
77
+ content: string,
78
+ attachments?: readonly ImageAttachment[],
79
+ ): UserMessage {
80
+ return {
81
+ role: 'user',
82
+ content,
83
+ timestamp: Date.now(),
84
+ ...(attachments && attachments.length > 0 ? { attachments } : {}),
85
+ }
56
86
  }
57
87
 
58
88
  export function createAssistantMessage(
@@ -1,5 +1,5 @@
1
1
  import type { TokenUsage } from '../common/index.js'
2
- import type { Message } from '../message/index.js'
2
+ import type { Message, ToolCall } from '../message/index.js'
3
3
  import type { LLMToolSchema } from '../tool/index.js'
4
4
 
5
5
  export type ToolChoice =
@@ -28,6 +28,16 @@ export interface ChatCompletionParams {
28
28
  stream?: boolean
29
29
  stop?: string[]
30
30
 
31
+ /**
32
+ * Per-call cancellation. Aborting it tears down the in-flight model
33
+ * request (the provider passes it to the underlying fetch / SDK) AND the
34
+ * runtime races the stream consumer against it, so a Stop stops the
35
+ * CURRENT turn mid-flight — not only between turns. Optional and inert
36
+ * when unset: a non-aborted signal is behaviourally identical to omitting
37
+ * it, so existing callers are unaffected.
38
+ */
39
+ signal?: AbortSignal
40
+
31
41
  toolChoice?: ToolChoice
32
42
  parallelToolCalls?: boolean
33
43
 
@@ -48,14 +58,7 @@ export interface ChatCompletionResponse {
48
58
  message: {
49
59
  role: 'assistant'
50
60
  content: string | null
51
- toolCalls?: Array<{
52
- id: string
53
- type: 'function'
54
- function: {
55
- name: string
56
- arguments: string
57
- }
58
- }>
61
+ toolCalls?: ToolCall[]
59
62
  }
60
63
  finishReason: 'stop' | 'tool_calls' | 'length' | 'content_filter'
61
64
  usage: TokenUsage
@@ -263,6 +263,12 @@ type CoreRunEvent =
263
263
  runId: RunId
264
264
  toolUseId: ToolUseId
265
265
  input: unknown
266
+ /**
267
+ * True when the provider stream ended before the tool JSON
268
+ * arguments closed. `input` stays a sanitized object so public
269
+ * consumers never receive internal recovery sentinels.
270
+ */
271
+ inputTruncated?: boolean
266
272
  }
267
273
 
268
274
  /**