@namzu/sdk 30.1.0 → 31.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 (714) hide show
  1. package/CHANGELOG.md +576 -0
  2. package/README.md +43 -2
  3. package/dist/advisory/executor.d.ts +2 -1
  4. package/dist/advisory/executor.d.ts.map +1 -1
  5. package/dist/advisory/executor.js +4 -1
  6. package/dist/advisory/executor.js.map +1 -1
  7. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  8. package/dist/agents/ReactiveAgent.js +12 -0
  9. package/dist/agents/ReactiveAgent.js.map +1 -1
  10. package/dist/agents/RouterAgent.d.ts.map +1 -1
  11. package/dist/agents/RouterAgent.js +21 -3
  12. package/dist/agents/RouterAgent.js.map +1 -1
  13. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  14. package/dist/agents/SupervisorAgent.js +34 -11
  15. package/dist/agents/SupervisorAgent.js.map +1 -1
  16. package/dist/agents/runAgent.d.ts +12 -0
  17. package/dist/agents/runAgent.d.ts.map +1 -1
  18. package/dist/agents/runAgent.js +26 -2
  19. package/dist/agents/runAgent.js.map +1 -1
  20. package/dist/authorization/command-line.d.ts +81 -0
  21. package/dist/authorization/command-line.d.ts.map +1 -0
  22. package/dist/authorization/command-line.js +347 -0
  23. package/dist/authorization/command-line.js.map +1 -0
  24. package/dist/authorization/rules.d.ts.map +1 -1
  25. package/dist/authorization/rules.js +22 -1
  26. package/dist/authorization/rules.js.map +1 -1
  27. package/dist/bridge/a2a/client.d.ts +23 -5
  28. package/dist/bridge/a2a/client.d.ts.map +1 -1
  29. package/dist/bridge/a2a/client.js +320 -73
  30. package/dist/bridge/a2a/client.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +4 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/acp/server.d.ts +13 -1
  35. package/dist/bridge/acp/server.d.ts.map +1 -1
  36. package/dist/bridge/acp/server.js +150 -44
  37. package/dist/bridge/acp/server.js.map +1 -1
  38. package/dist/bridge/mcp/connector/adapter.d.ts +3 -2
  39. package/dist/bridge/mcp/connector/adapter.d.ts.map +1 -1
  40. package/dist/bridge/mcp/connector/adapter.js +17 -21
  41. package/dist/bridge/mcp/connector/adapter.js.map +1 -1
  42. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  43. package/dist/bridge/sse/mapper.js +3 -0
  44. package/dist/bridge/sse/mapper.js.map +1 -1
  45. package/dist/compaction/dangling.d.ts +29 -2
  46. package/dist/compaction/dangling.d.ts.map +1 -1
  47. package/dist/compaction/dangling.js +172 -35
  48. package/dist/compaction/dangling.js.map +1 -1
  49. package/dist/compaction/index.d.ts +3 -2
  50. package/dist/compaction/index.d.ts.map +1 -1
  51. package/dist/compaction/index.js +1 -1
  52. package/dist/compaction/index.js.map +1 -1
  53. package/dist/compaction/manual.d.ts +11 -1
  54. package/dist/compaction/manual.d.ts.map +1 -1
  55. package/dist/compaction/manual.js +89 -14
  56. package/dist/compaction/manual.js.map +1 -1
  57. package/dist/compaction/plan.d.ts +19 -6
  58. package/dist/compaction/plan.d.ts.map +1 -1
  59. package/dist/compaction/plan.js +18 -4
  60. package/dist/compaction/plan.js.map +1 -1
  61. package/dist/compaction/retention.d.ts +10 -7
  62. package/dist/compaction/retention.d.ts.map +1 -1
  63. package/dist/compaction/retention.js +26 -8
  64. package/dist/compaction/retention.js.map +1 -1
  65. package/dist/compaction/summary.d.ts +4 -4
  66. package/dist/compaction/summary.js +4 -4
  67. package/dist/compaction/verifier.d.ts +19 -1
  68. package/dist/compaction/verifier.d.ts.map +1 -1
  69. package/dist/compaction/verifier.js +20 -1
  70. package/dist/compaction/verifier.js.map +1 -1
  71. package/dist/config/runtime.d.ts +6 -6
  72. package/dist/connector/BaseConnector.d.ts +6 -4
  73. package/dist/connector/BaseConnector.d.ts.map +1 -1
  74. package/dist/connector/BaseConnector.js +8 -2
  75. package/dist/connector/BaseConnector.js.map +1 -1
  76. package/dist/connector/builtins/http.d.ts +16 -4
  77. package/dist/connector/builtins/http.d.ts.map +1 -1
  78. package/dist/connector/builtins/http.js +177 -44
  79. package/dist/connector/builtins/http.js.map +1 -1
  80. package/dist/connector/builtins/webhook.d.ts +15 -4
  81. package/dist/connector/builtins/webhook.d.ts.map +1 -1
  82. package/dist/connector/builtins/webhook.js +165 -45
  83. package/dist/connector/builtins/webhook.js.map +1 -1
  84. package/dist/connector/execution-contract.d.ts +11 -0
  85. package/dist/connector/execution-contract.d.ts.map +1 -0
  86. package/dist/connector/execution-contract.js +14 -0
  87. package/dist/connector/execution-contract.js.map +1 -0
  88. package/dist/connector/http-operation.d.ts +48 -0
  89. package/dist/connector/http-operation.d.ts.map +1 -0
  90. package/dist/connector/http-operation.js +205 -0
  91. package/dist/connector/http-operation.js.map +1 -0
  92. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  93. package/dist/connector/mcp/adapter.js +8 -3
  94. package/dist/connector/mcp/adapter.js.map +1 -1
  95. package/dist/connector/mcp/client.d.ts +14 -8
  96. package/dist/connector/mcp/client.d.ts.map +1 -1
  97. package/dist/connector/mcp/client.js +160 -44
  98. package/dist/connector/mcp/client.js.map +1 -1
  99. package/dist/connector/mcp/http-sse.d.ts +8 -2
  100. package/dist/connector/mcp/http-sse.d.ts.map +1 -1
  101. package/dist/connector/mcp/http-sse.js +70 -17
  102. package/dist/connector/mcp/http-sse.js.map +1 -1
  103. package/dist/connector/mcp/prompt-adapter.d.ts.map +1 -1
  104. package/dist/connector/mcp/prompt-adapter.js +9 -2
  105. package/dist/connector/mcp/prompt-adapter.js.map +1 -1
  106. package/dist/connector/mcp/stdio.d.ts +2 -2
  107. package/dist/connector/mcp/stdio.d.ts.map +1 -1
  108. package/dist/connector/mcp/stdio.js +14 -50
  109. package/dist/connector/mcp/stdio.js.map +1 -1
  110. package/dist/connector/mcp/streamable-http.d.ts +7 -2
  111. package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
  112. package/dist/connector/mcp/streamable-http.js +66 -18
  113. package/dist/connector/mcp/streamable-http.js.map +1 -1
  114. package/dist/connector/tools/adapter.d.ts +2 -2
  115. package/dist/connector/tools/adapter.d.ts.map +1 -1
  116. package/dist/connector/tools/adapter.js +23 -14
  117. package/dist/connector/tools/adapter.js.map +1 -1
  118. package/dist/connector/tools/definitions.d.ts.map +1 -1
  119. package/dist/connector/tools/definitions.js +5 -2
  120. package/dist/connector/tools/definitions.js.map +1 -1
  121. package/dist/connector/tools/result.d.ts +4 -0
  122. package/dist/connector/tools/result.d.ts.map +1 -0
  123. package/dist/connector/tools/result.js +20 -0
  124. package/dist/connector/tools/result.js.map +1 -0
  125. package/dist/connector/web/guarded-fetch.d.ts +4 -2
  126. package/dist/connector/web/guarded-fetch.d.ts.map +1 -1
  127. package/dist/connector/web/guarded-fetch.js +157 -43
  128. package/dist/connector/web/guarded-fetch.js.map +1 -1
  129. package/dist/constants/sandbox/index.d.ts +3 -2
  130. package/dist/constants/sandbox/index.d.ts.map +1 -1
  131. package/dist/constants/sandbox/index.js +3 -2
  132. package/dist/constants/sandbox/index.js.map +1 -1
  133. package/dist/contracts/api.d.ts +2 -0
  134. package/dist/contracts/api.d.ts.map +1 -1
  135. package/dist/contracts/schemas.d.ts +38 -12
  136. package/dist/contracts/schemas.d.ts.map +1 -1
  137. package/dist/contracts/schemas.js +7 -0
  138. package/dist/contracts/schemas.js.map +1 -1
  139. package/dist/directory/derive-supervisor.d.ts.map +1 -1
  140. package/dist/directory/derive-supervisor.js +8 -0
  141. package/dist/directory/derive-supervisor.js.map +1 -1
  142. package/dist/directory/derive.d.ts.map +1 -1
  143. package/dist/directory/derive.js +8 -0
  144. package/dist/directory/derive.js.map +1 -1
  145. package/dist/directory/load.d.ts.map +1 -1
  146. package/dist/directory/load.js +2 -0
  147. package/dist/directory/load.js.map +1 -1
  148. package/dist/directory/types.d.ts +4 -0
  149. package/dist/directory/types.d.ts.map +1 -1
  150. package/dist/eval/experiment.d.ts +10 -10
  151. package/dist/eval/experiment.d.ts.map +1 -1
  152. package/dist/eval/experiment.js +121 -91
  153. package/dist/eval/experiment.js.map +1 -1
  154. package/dist/eval/judge.d.ts +6 -0
  155. package/dist/eval/judge.d.ts.map +1 -1
  156. package/dist/eval/judge.js +7 -2
  157. package/dist/eval/judge.js.map +1 -1
  158. package/dist/eval/types.d.ts +7 -1
  159. package/dist/eval/types.d.ts.map +1 -1
  160. package/dist/manager/agent/lifecycle.d.ts +12 -10
  161. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  162. package/dist/manager/agent/lifecycle.js +16 -3
  163. package/dist/manager/agent/lifecycle.js.map +1 -1
  164. package/dist/manager/connector/environment.d.ts +2 -2
  165. package/dist/manager/connector/environment.d.ts.map +1 -1
  166. package/dist/manager/connector/environment.js +2 -2
  167. package/dist/manager/connector/environment.js.map +1 -1
  168. package/dist/manager/connector/lifecycle.d.ts +10 -2
  169. package/dist/manager/connector/lifecycle.d.ts.map +1 -1
  170. package/dist/manager/connector/lifecycle.js +273 -24
  171. package/dist/manager/connector/lifecycle.js.map +1 -1
  172. package/dist/manager/connector/tenant.d.ts +5 -4
  173. package/dist/manager/connector/tenant.d.ts.map +1 -1
  174. package/dist/manager/connector/tenant.js +47 -22
  175. package/dist/manager/connector/tenant.js.map +1 -1
  176. package/dist/manager/goal/activation.d.ts +23 -0
  177. package/dist/manager/goal/activation.d.ts.map +1 -0
  178. package/dist/manager/goal/activation.js +41 -0
  179. package/dist/manager/goal/activation.js.map +1 -0
  180. package/dist/manager/index.d.ts +3 -2
  181. package/dist/manager/index.d.ts.map +1 -1
  182. package/dist/manager/index.js.map +1 -1
  183. package/dist/manager/run/persistence.d.ts +2 -0
  184. package/dist/manager/run/persistence.d.ts.map +1 -1
  185. package/dist/manager/run/persistence.js +5 -1
  186. package/dist/manager/run/persistence.js.map +1 -1
  187. package/dist/manager/topic/dependency.d.ts +24 -0
  188. package/dist/manager/topic/dependency.d.ts.map +1 -0
  189. package/dist/manager/topic/dependency.js +13 -0
  190. package/dist/manager/topic/dependency.js.map +1 -0
  191. package/dist/manager/topic/lifecycle.d.ts +9 -21
  192. package/dist/manager/topic/lifecycle.d.ts.map +1 -1
  193. package/dist/manager/topic/lifecycle.js +17 -29
  194. package/dist/manager/topic/lifecycle.js.map +1 -1
  195. package/dist/plugin/index.d.ts +1 -0
  196. package/dist/plugin/index.d.ts.map +1 -1
  197. package/dist/plugin/index.js.map +1 -1
  198. package/dist/plugin/lifecycle.d.ts +15 -0
  199. package/dist/plugin/lifecycle.d.ts.map +1 -1
  200. package/dist/plugin/lifecycle.js +144 -38
  201. package/dist/plugin/lifecycle.js.map +1 -1
  202. package/dist/plugin/loader.d.ts +3 -3
  203. package/dist/plugin/loader.d.ts.map +1 -1
  204. package/dist/plugin/loader.js +58 -12
  205. package/dist/plugin/loader.js.map +1 -1
  206. package/dist/provider/collect-chat-completion.d.ts +7 -0
  207. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  208. package/dist/provider/collect-chat-completion.js +35 -0
  209. package/dist/provider/collect-chat-completion.js.map +1 -1
  210. package/dist/provider/fallback.d.ts +3 -1
  211. package/dist/provider/fallback.d.ts.map +1 -1
  212. package/dist/provider/fallback.js +62 -10
  213. package/dist/provider/fallback.js.map +1 -1
  214. package/dist/provider/idle-timeout.d.ts +4 -0
  215. package/dist/provider/idle-timeout.d.ts.map +1 -1
  216. package/dist/provider/idle-timeout.js +131 -15
  217. package/dist/provider/idle-timeout.js.map +1 -1
  218. package/dist/provider/index.d.ts +2 -0
  219. package/dist/provider/index.d.ts.map +1 -1
  220. package/dist/provider/index.js +1 -0
  221. package/dist/provider/index.js.map +1 -1
  222. package/dist/provider/instrumentation.d.ts.map +1 -1
  223. package/dist/provider/instrumentation.js +1 -0
  224. package/dist/provider/instrumentation.js.map +1 -1
  225. package/dist/provider/retry.d.ts.map +1 -1
  226. package/dist/provider/retry.js +13 -1
  227. package/dist/provider/retry.js.map +1 -1
  228. package/dist/public-runtime.d.ts +57 -24
  229. package/dist/public-runtime.d.ts.map +1 -1
  230. package/dist/public-runtime.js +42 -35
  231. package/dist/public-runtime.js.map +1 -1
  232. package/dist/public-tools.d.ts +1 -0
  233. package/dist/public-tools.d.ts.map +1 -1
  234. package/dist/public-tools.js +5 -0
  235. package/dist/public-tools.js.map +1 -1
  236. package/dist/public-types.d.ts +33 -12
  237. package/dist/public-types.d.ts.map +1 -1
  238. package/dist/rag/embedding.d.ts +8 -3
  239. package/dist/rag/embedding.d.ts.map +1 -1
  240. package/dist/rag/embedding.js +120 -9
  241. package/dist/rag/embedding.js.map +1 -1
  242. package/dist/rag/index.d.ts +1 -1
  243. package/dist/rag/index.d.ts.map +1 -1
  244. package/dist/rag/index.js +1 -1
  245. package/dist/rag/index.js.map +1 -1
  246. package/dist/rag/ingestion.d.ts +2 -2
  247. package/dist/rag/ingestion.d.ts.map +1 -1
  248. package/dist/rag/ingestion.js +15 -3
  249. package/dist/rag/ingestion.js.map +1 -1
  250. package/dist/rag/knowledge-base.d.ts +3 -3
  251. package/dist/rag/knowledge-base.d.ts.map +1 -1
  252. package/dist/rag/knowledge-base.js +8 -4
  253. package/dist/rag/knowledge-base.js.map +1 -1
  254. package/dist/rag/operation.d.ts +10 -0
  255. package/dist/rag/operation.d.ts.map +1 -0
  256. package/dist/rag/operation.js +26 -0
  257. package/dist/rag/operation.js.map +1 -0
  258. package/dist/rag/rag-tool.d.ts.map +1 -1
  259. package/dist/rag/rag-tool.js +6 -3
  260. package/dist/rag/rag-tool.js.map +1 -1
  261. package/dist/rag/retriever.d.ts +2 -2
  262. package/dist/rag/retriever.d.ts.map +1 -1
  263. package/dist/rag/retriever.js +31 -15
  264. package/dist/rag/retriever.js.map +1 -1
  265. package/dist/rag/vector-store.d.ts +3 -3
  266. package/dist/rag/vector-store.d.ts.map +1 -1
  267. package/dist/rag/vector-store.js +4 -2
  268. package/dist/rag/vector-store.js.map +1 -1
  269. package/dist/registry/command/kernel-commands.d.ts +16 -4
  270. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  271. package/dist/registry/command/kernel-commands.js +171 -0
  272. package/dist/registry/command/kernel-commands.js.map +1 -1
  273. package/dist/run/reporter.d.ts.map +1 -1
  274. package/dist/run/reporter.js +9 -0
  275. package/dist/run/reporter.js.map +1 -1
  276. package/dist/run-query/index.d.ts +15 -1
  277. package/dist/run-query/index.d.ts.map +1 -1
  278. package/dist/run-query/index.js +69 -15
  279. package/dist/run-query/index.js.map +1 -1
  280. package/dist/runtime/query/context.d.ts.map +1 -1
  281. package/dist/runtime/query/context.js +10 -3
  282. package/dist/runtime/query/context.js.map +1 -1
  283. package/dist/runtime/query/executor.d.ts +3 -0
  284. package/dist/runtime/query/executor.d.ts.map +1 -1
  285. package/dist/runtime/query/executor.js +80 -18
  286. package/dist/runtime/query/executor.js.map +1 -1
  287. package/dist/runtime/query/guard.d.ts +9 -0
  288. package/dist/runtime/query/guard.d.ts.map +1 -1
  289. package/dist/runtime/query/guard.js +11 -0
  290. package/dist/runtime/query/guard.js.map +1 -1
  291. package/dist/runtime/query/index.d.ts +30 -1
  292. package/dist/runtime/query/index.d.ts.map +1 -1
  293. package/dist/runtime/query/index.js +548 -95
  294. package/dist/runtime/query/index.js.map +1 -1
  295. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  296. package/dist/runtime/query/iteration/index.js +74 -14
  297. package/dist/runtime/query/iteration/index.js.map +1 -1
  298. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  299. package/dist/runtime/query/iteration/phases/compaction.js +94 -53
  300. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  301. package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
  302. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  303. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  304. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  305. package/dist/runtime/query/iteration/phases/tool-review.js +21 -0
  306. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  307. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  308. package/dist/runtime/query/iteration/stream-turn.js +4 -0
  309. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  310. package/dist/runtime/query/project-instructions.d.ts +69 -0
  311. package/dist/runtime/query/project-instructions.d.ts.map +1 -0
  312. package/dist/runtime/query/project-instructions.js +137 -0
  313. package/dist/runtime/query/project-instructions.js.map +1 -0
  314. package/dist/runtime/query/request-rich-content.d.ts +22 -0
  315. package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
  316. package/dist/runtime/query/request-rich-content.js +122 -0
  317. package/dist/runtime/query/request-rich-content.js.map +1 -0
  318. package/dist/runtime/query/result.d.ts.map +1 -1
  319. package/dist/runtime/query/result.js +12 -1
  320. package/dist/runtime/query/result.js.map +1 -1
  321. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  322. package/dist/runtime/query/resume-pending.js +19 -20
  323. package/dist/runtime/query/resume-pending.js.map +1 -1
  324. package/dist/runtime/query/resume-run.d.ts.map +1 -1
  325. package/dist/runtime/query/resume-run.js +54 -8
  326. package/dist/runtime/query/resume-run.js.map +1 -1
  327. package/dist/runtime/query/run-state.d.ts +5 -0
  328. package/dist/runtime/query/run-state.d.ts.map +1 -1
  329. package/dist/runtime/query/run-state.js +6 -1
  330. package/dist/runtime/query/run-state.js.map +1 -1
  331. package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
  332. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
  333. package/dist/runtime/query/sandbox-lifecycle.js +167 -0
  334. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
  335. package/dist/sandbox/isolation.d.ts.map +1 -1
  336. package/dist/sandbox/isolation.js +9 -0
  337. package/dist/sandbox/isolation.js.map +1 -1
  338. package/dist/sandbox/provider/local.d.ts +56 -6
  339. package/dist/sandbox/provider/local.d.ts.map +1 -1
  340. package/dist/sandbox/provider/local.js +181 -76
  341. package/dist/sandbox/provider/local.js.map +1 -1
  342. package/dist/sandbox/terminal.d.ts +13 -5
  343. package/dist/sandbox/terminal.d.ts.map +1 -1
  344. package/dist/sandbox/terminal.js +11 -3
  345. package/dist/sandbox/terminal.js.map +1 -1
  346. package/dist/session/errors.d.ts +28 -29
  347. package/dist/session/errors.d.ts.map +1 -1
  348. package/dist/session/errors.js +28 -29
  349. package/dist/session/errors.js.map +1 -1
  350. package/dist/session/handoff/broadcast.d.ts +5 -8
  351. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  352. package/dist/session/handoff/broadcast.js +16 -6
  353. package/dist/session/handoff/broadcast.js.map +1 -1
  354. package/dist/session/handoff/single.d.ts +5 -8
  355. package/dist/session/handoff/single.d.ts.map +1 -1
  356. package/dist/session/handoff/single.js +7 -4
  357. package/dist/session/handoff/single.js.map +1 -1
  358. package/dist/store/attachment/index.d.ts +11 -3
  359. package/dist/store/attachment/index.d.ts.map +1 -1
  360. package/dist/store/attachment/index.js +49 -4
  361. package/dist/store/attachment/index.js.map +1 -1
  362. package/dist/store/feedback/conformance.d.ts.map +1 -1
  363. package/dist/store/feedback/conformance.js +32 -0
  364. package/dist/store/feedback/conformance.js.map +1 -1
  365. package/dist/store/feedback/disk.d.ts +8 -6
  366. package/dist/store/feedback/disk.d.ts.map +1 -1
  367. package/dist/store/feedback/disk.js +111 -76
  368. package/dist/store/feedback/disk.js.map +1 -1
  369. package/dist/store/goal/index.d.ts +111 -0
  370. package/dist/store/goal/index.d.ts.map +1 -0
  371. package/dist/store/goal/index.js +436 -0
  372. package/dist/store/goal/index.js.map +1 -0
  373. package/dist/store/index.d.ts +1 -1
  374. package/dist/store/index.d.ts.map +1 -1
  375. package/dist/store/index.js +1 -1
  376. package/dist/store/index.js.map +1 -1
  377. package/dist/store/kv/revision-record-store.d.ts +70 -0
  378. package/dist/store/kv/revision-record-store.d.ts.map +1 -0
  379. package/dist/store/kv/revision-record-store.js +290 -0
  380. package/dist/store/kv/revision-record-store.js.map +1 -0
  381. package/dist/store/memory/disk.d.ts +9 -7
  382. package/dist/store/memory/disk.d.ts.map +1 -1
  383. package/dist/store/memory/disk.js +256 -98
  384. package/dist/store/memory/disk.js.map +1 -1
  385. package/dist/store/run/disk.d.ts +10 -2
  386. package/dist/store/run/disk.d.ts.map +1 -1
  387. package/dist/store/run/disk.js +70 -4
  388. package/dist/store/run/disk.js.map +1 -1
  389. package/dist/store/run/memory.d.ts +4 -2
  390. package/dist/store/run/memory.d.ts.map +1 -1
  391. package/dist/store/run/memory.js +15 -1
  392. package/dist/store/run/memory.js.map +1 -1
  393. package/dist/store/session/disk.d.ts +9 -0
  394. package/dist/store/session/disk.d.ts.map +1 -1
  395. package/dist/store/session/disk.js +57 -5
  396. package/dist/store/session/disk.js.map +1 -1
  397. package/dist/store/session/memory.d.ts +1 -0
  398. package/dist/store/session/memory.d.ts.map +1 -1
  399. package/dist/store/session/memory.js +14 -0
  400. package/dist/store/session/memory.js.map +1 -1
  401. package/dist/store/topic/memory.d.ts +1 -2
  402. package/dist/store/topic/memory.d.ts.map +1 -1
  403. package/dist/store/topic/memory.js +4 -5
  404. package/dist/store/topic/memory.js.map +1 -1
  405. package/dist/store/topic/objective.d.ts +8 -4
  406. package/dist/store/topic/objective.d.ts.map +1 -1
  407. package/dist/store/topic/objective.js +185 -100
  408. package/dist/store/topic/objective.js.map +1 -1
  409. package/dist/store/topic/state.d.ts +1 -2
  410. package/dist/store/topic/state.d.ts.map +1 -1
  411. package/dist/store/topic/state.js +50 -62
  412. package/dist/store/topic/state.js.map +1 -1
  413. package/dist/tools/builtins/bash.d.ts.map +1 -1
  414. package/dist/tools/builtins/bash.js +20 -0
  415. package/dist/tools/builtins/bash.js.map +1 -1
  416. package/dist/tools/builtins/computer-use.d.ts +9 -1
  417. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  418. package/dist/tools/builtins/computer-use.js.map +1 -1
  419. package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
  420. package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
  421. package/dist/tools/builtins/content-fingerprint.js +9 -10
  422. package/dist/tools/builtins/content-fingerprint.js.map +1 -1
  423. package/dist/tools/builtins/edit.d.ts +6 -1
  424. package/dist/tools/builtins/edit.d.ts.map +1 -1
  425. package/dist/tools/builtins/edit.js +166 -27
  426. package/dist/tools/builtins/edit.js.map +1 -1
  427. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  428. package/dist/tools/builtins/write-file.js +45 -19
  429. package/dist/tools/builtins/write-file.js.map +1 -1
  430. package/dist/tools/command-arguments.d.ts +43 -0
  431. package/dist/tools/command-arguments.d.ts.map +1 -0
  432. package/dist/tools/command-arguments.js +52 -0
  433. package/dist/tools/command-arguments.js.map +1 -0
  434. package/dist/tools/coordinator/index.d.ts +2 -0
  435. package/dist/tools/coordinator/index.d.ts.map +1 -1
  436. package/dist/tools/coordinator/index.js +3 -1
  437. package/dist/tools/coordinator/index.js.map +1 -1
  438. package/dist/tools/defineTool.d.ts +10 -0
  439. package/dist/tools/defineTool.d.ts.map +1 -1
  440. package/dist/tools/defineTool.js +1 -0
  441. package/dist/tools/defineTool.js.map +1 -1
  442. package/dist/tools/env-scrub.d.ts +7 -5
  443. package/dist/tools/env-scrub.d.ts.map +1 -1
  444. package/dist/tools/env-scrub.js +7 -5
  445. package/dist/tools/env-scrub.js.map +1 -1
  446. package/dist/tools/goal/index.d.ts +20 -0
  447. package/dist/tools/goal/index.d.ts.map +1 -0
  448. package/dist/tools/goal/index.js +104 -0
  449. package/dist/tools/goal/index.js.map +1 -0
  450. package/dist/tools/memory/index.d.ts +16 -0
  451. package/dist/tools/memory/index.d.ts.map +1 -1
  452. package/dist/tools/memory/index.js +6 -2
  453. package/dist/tools/memory/index.js.map +1 -1
  454. package/dist/tools/memory/search.d.ts +4 -1
  455. package/dist/tools/memory/search.d.ts.map +1 -1
  456. package/dist/tools/memory/search.js +10 -2
  457. package/dist/tools/memory/search.js.map +1 -1
  458. package/dist/types/agent/base.d.ts +11 -3
  459. package/dist/types/agent/base.d.ts.map +1 -1
  460. package/dist/types/agent/factory.d.ts +2 -0
  461. package/dist/types/agent/factory.d.ts.map +1 -1
  462. package/dist/types/agent/reactive.d.ts +2 -0
  463. package/dist/types/agent/reactive.d.ts.map +1 -1
  464. package/dist/types/agent/supervisor.d.ts +6 -0
  465. package/dist/types/agent/supervisor.d.ts.map +1 -1
  466. package/dist/types/agent/task.d.ts +6 -2
  467. package/dist/types/agent/task.d.ts.map +1 -1
  468. package/dist/types/connector/core.d.ts +13 -8
  469. package/dist/types/connector/core.d.ts.map +1 -1
  470. package/dist/types/connector/definition.d.ts +37 -18
  471. package/dist/types/connector/definition.d.ts.map +1 -1
  472. package/dist/types/connector/http.d.ts +6 -0
  473. package/dist/types/connector/http.d.ts.map +1 -1
  474. package/dist/types/connector/mcp.d.ts +24 -6
  475. package/dist/types/connector/mcp.d.ts.map +1 -1
  476. package/dist/types/connector/tenant.d.ts +17 -7
  477. package/dist/types/connector/tenant.d.ts.map +1 -1
  478. package/dist/types/connector/webhook.d.ts +6 -0
  479. package/dist/types/connector/webhook.d.ts.map +1 -1
  480. package/dist/types/goal/index.d.ts +46 -0
  481. package/dist/types/goal/index.d.ts.map +1 -0
  482. package/dist/types/goal/index.js +2 -0
  483. package/dist/types/goal/index.js.map +1 -0
  484. package/dist/types/ids/index.d.ts +2 -0
  485. package/dist/types/ids/index.d.ts.map +1 -1
  486. package/dist/types/ids/index.js.map +1 -1
  487. package/dist/types/message/index.d.ts +75 -10
  488. package/dist/types/message/index.d.ts.map +1 -1
  489. package/dist/types/message/index.js +49 -3
  490. package/dist/types/message/index.js.map +1 -1
  491. package/dist/types/plugin/index.d.ts +7 -5
  492. package/dist/types/plugin/index.d.ts.map +1 -1
  493. package/dist/types/plugin/index.js.map +1 -1
  494. package/dist/types/provider/chat.d.ts +27 -4
  495. package/dist/types/provider/chat.d.ts.map +1 -1
  496. package/dist/types/provider/interface.d.ts +18 -7
  497. package/dist/types/provider/interface.d.ts.map +1 -1
  498. package/dist/types/provider/stream.d.ts +6 -0
  499. package/dist/types/provider/stream.d.ts.map +1 -1
  500. package/dist/types/rag/embedding.d.ts +15 -2
  501. package/dist/types/rag/embedding.d.ts.map +1 -1
  502. package/dist/types/rag/ingestion.d.ts +2 -2
  503. package/dist/types/rag/ingestion.d.ts.map +1 -1
  504. package/dist/types/rag/knowledge-base.d.ts +3 -3
  505. package/dist/types/rag/knowledge-base.d.ts.map +1 -1
  506. package/dist/types/rag/retrieval.d.ts +2 -2
  507. package/dist/types/rag/retrieval.d.ts.map +1 -1
  508. package/dist/types/rag/scope.d.ts +4 -0
  509. package/dist/types/rag/scope.d.ts.map +1 -1
  510. package/dist/types/rag/vector.d.ts +5 -2
  511. package/dist/types/rag/vector.d.ts.map +1 -1
  512. package/dist/types/run/config.d.ts +20 -0
  513. package/dist/types/run/config.d.ts.map +1 -1
  514. package/dist/types/run/events.d.ts +25 -1
  515. package/dist/types/run/events.d.ts.map +1 -1
  516. package/dist/types/run/events.js.map +1 -1
  517. package/dist/types/run/metadata.d.ts +2 -0
  518. package/dist/types/run/metadata.d.ts.map +1 -1
  519. package/dist/types/run/step.d.ts +2 -6
  520. package/dist/types/run/step.d.ts.map +1 -1
  521. package/dist/types/run/step.js.map +1 -1
  522. package/dist/types/run/store.d.ts +55 -2
  523. package/dist/types/run/store.d.ts.map +1 -1
  524. package/dist/types/sandbox/index.d.ts +47 -6
  525. package/dist/types/sandbox/index.d.ts.map +1 -1
  526. package/dist/types/sandbox/index.js +23 -10
  527. package/dist/types/sandbox/index.js.map +1 -1
  528. package/dist/types/session/store.d.ts +13 -0
  529. package/dist/types/session/store.d.ts.map +1 -1
  530. package/dist/types/tool/index.d.ts +33 -11
  531. package/dist/types/tool/index.d.ts.map +1 -1
  532. package/dist/types/tool/index.js.map +1 -1
  533. package/dist/types/topic/entity.d.ts +3 -4
  534. package/dist/types/topic/entity.d.ts.map +1 -1
  535. package/dist/types/topic/store.d.ts +3 -3
  536. package/dist/utils/id.d.ts +3 -1
  537. package/dist/utils/id.d.ts.map +1 -1
  538. package/dist/utils/id.js +4 -0
  539. package/dist/utils/id.js.map +1 -1
  540. package/dist/utils/process-environment.d.ts +26 -0
  541. package/dist/utils/process-environment.d.ts.map +1 -0
  542. package/dist/utils/process-environment.js +78 -0
  543. package/dist/utils/process-environment.js.map +1 -0
  544. package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
  545. package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
  546. package/dist/vault/InMemoryCredentialVault.js +24 -4
  547. package/dist/vault/InMemoryCredentialVault.js.map +1 -1
  548. package/dist/vault/instrumentation.d.ts.map +1 -1
  549. package/dist/vault/instrumentation.js +15 -0
  550. package/dist/vault/instrumentation.js.map +1 -1
  551. package/package.json +1 -1
  552. package/src/advisory/executor.ts +4 -1
  553. package/src/agents/ReactiveAgent.ts +12 -0
  554. package/src/agents/RouterAgent.ts +25 -3
  555. package/src/agents/SupervisorAgent.ts +33 -11
  556. package/src/agents/runAgent.ts +38 -2
  557. package/src/authorization/command-line.ts +390 -0
  558. package/src/authorization/rules.ts +22 -1
  559. package/src/bridge/a2a/client.ts +384 -97
  560. package/src/bridge/a2a/mapper.ts +5 -0
  561. package/src/bridge/acp/server.ts +184 -42
  562. package/src/bridge/mcp/connector/adapter.ts +28 -20
  563. package/src/bridge/sse/mapper.ts +3 -0
  564. package/src/compaction/dangling.ts +203 -38
  565. package/src/compaction/index.ts +9 -2
  566. package/src/compaction/manual.ts +125 -18
  567. package/src/compaction/plan.ts +42 -11
  568. package/src/compaction/retention.ts +23 -8
  569. package/src/compaction/summary.ts +4 -4
  570. package/src/compaction/verifier.ts +66 -0
  571. package/src/connector/BaseConnector.ts +19 -4
  572. package/src/connector/builtins/http.ts +236 -46
  573. package/src/connector/builtins/webhook.ts +207 -47
  574. package/src/connector/execution-contract.ts +27 -0
  575. package/src/connector/http-operation.ts +238 -0
  576. package/src/connector/mcp/adapter.ts +8 -3
  577. package/src/connector/mcp/client.ts +207 -58
  578. package/src/connector/mcp/http-sse.ts +91 -23
  579. package/src/connector/mcp/prompt-adapter.ts +8 -2
  580. package/src/connector/mcp/stdio.ts +21 -46
  581. package/src/connector/mcp/streamable-http.ts +86 -22
  582. package/src/connector/tools/adapter.ts +23 -14
  583. package/src/connector/tools/definitions.ts +5 -2
  584. package/src/connector/tools/result.ts +21 -0
  585. package/src/connector/web/guarded-fetch.ts +188 -48
  586. package/src/constants/sandbox/index.ts +3 -2
  587. package/src/contracts/api.ts +2 -0
  588. package/src/contracts/schemas.ts +7 -0
  589. package/src/directory/derive-supervisor.ts +8 -0
  590. package/src/directory/derive.ts +8 -0
  591. package/src/directory/load.ts +2 -0
  592. package/src/directory/types.ts +4 -0
  593. package/src/eval/experiment.ts +160 -111
  594. package/src/eval/judge.ts +13 -2
  595. package/src/eval/types.ts +7 -1
  596. package/src/manager/agent/lifecycle.ts +28 -12
  597. package/src/manager/connector/environment.ts +3 -1
  598. package/src/manager/connector/lifecycle.ts +364 -24
  599. package/src/manager/connector/tenant.ts +56 -23
  600. package/src/manager/goal/activation.ts +52 -0
  601. package/src/manager/index.ts +10 -2
  602. package/src/manager/run/persistence.ts +6 -1
  603. package/src/manager/topic/dependency.ts +39 -0
  604. package/src/manager/topic/lifecycle.ts +19 -31
  605. package/src/plugin/index.ts +1 -0
  606. package/src/plugin/lifecycle.ts +180 -39
  607. package/src/plugin/loader.ts +70 -13
  608. package/src/pricing/rates.source.json +315 -204
  609. package/src/provider/collect-chat-completion.ts +36 -0
  610. package/src/provider/fallback.ts +79 -11
  611. package/src/provider/idle-timeout.ts +143 -17
  612. package/src/provider/index.ts +2 -0
  613. package/src/provider/instrumentation.ts +1 -0
  614. package/src/provider/retry.ts +16 -1
  615. package/src/public-runtime.ts +190 -32
  616. package/src/public-tools.ts +5 -0
  617. package/src/public-types.ts +85 -11
  618. package/src/rag/embedding.ts +147 -19
  619. package/src/rag/index.ts +1 -1
  620. package/src/rag/ingestion.ts +16 -2
  621. package/src/rag/knowledge-base.ts +13 -4
  622. package/src/rag/operation.ts +28 -0
  623. package/src/rag/rag-tool.ts +6 -3
  624. package/src/rag/retriever.ts +62 -11
  625. package/src/rag/vector-store.ts +8 -2
  626. package/src/registry/command/kernel-commands.ts +223 -4
  627. package/src/run/reporter.ts +10 -0
  628. package/src/run-query/index.ts +84 -15
  629. package/src/runtime/query/context.ts +13 -3
  630. package/src/runtime/query/executor.ts +90 -17
  631. package/src/runtime/query/guard.ts +12 -0
  632. package/src/runtime/query/index.ts +652 -103
  633. package/src/runtime/query/iteration/index.ts +89 -13
  634. package/src/runtime/query/iteration/phases/compaction.ts +120 -55
  635. package/src/runtime/query/iteration/phases/context.ts +4 -0
  636. package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
  637. package/src/runtime/query/iteration/stream-turn.ts +3 -0
  638. package/src/runtime/query/project-instructions.ts +212 -0
  639. package/src/runtime/query/request-rich-content.ts +153 -0
  640. package/src/runtime/query/result.ts +12 -1
  641. package/src/runtime/query/resume-pending.ts +20 -18
  642. package/src/runtime/query/resume-run.ts +52 -8
  643. package/src/runtime/query/run-state.ts +11 -1
  644. package/src/runtime/query/sandbox-lifecycle.ts +210 -0
  645. package/src/sandbox/isolation.ts +9 -0
  646. package/src/sandbox/provider/local.ts +255 -90
  647. package/src/sandbox/terminal.ts +13 -5
  648. package/src/session/errors.ts +68 -42
  649. package/src/session/handoff/broadcast.ts +20 -14
  650. package/src/session/handoff/single.ts +14 -13
  651. package/src/store/attachment/index.ts +65 -3
  652. package/src/store/feedback/conformance.ts +39 -0
  653. package/src/store/feedback/disk.ts +128 -82
  654. package/src/store/goal/index.ts +594 -0
  655. package/src/store/index.ts +1 -1
  656. package/src/store/kv/revision-record-store.ts +346 -0
  657. package/src/store/memory/disk.ts +288 -113
  658. package/src/store/run/disk.ts +96 -5
  659. package/src/store/run/memory.ts +22 -2
  660. package/src/store/session/disk.ts +93 -6
  661. package/src/store/session/memory.ts +22 -0
  662. package/src/store/topic/memory.ts +4 -5
  663. package/src/store/topic/objective.ts +215 -100
  664. package/src/store/topic/state.ts +100 -63
  665. package/src/tools/builtins/bash.ts +21 -0
  666. package/src/tools/builtins/computer-use.ts +9 -1
  667. package/src/tools/builtins/content-fingerprint.ts +9 -12
  668. package/src/tools/builtins/edit.ts +190 -27
  669. package/src/tools/builtins/write-file.ts +55 -19
  670. package/src/tools/command-arguments.ts +54 -0
  671. package/src/tools/coordinator/index.ts +4 -1
  672. package/src/tools/defineTool.ts +11 -0
  673. package/src/tools/env-scrub.ts +7 -5
  674. package/src/tools/goal/index.ts +129 -0
  675. package/src/tools/memory/index.ts +26 -3
  676. package/src/tools/memory/search.ts +20 -3
  677. package/src/types/agent/base.ts +12 -3
  678. package/src/types/agent/factory.ts +2 -0
  679. package/src/types/agent/reactive.ts +2 -0
  680. package/src/types/agent/supervisor.ts +6 -0
  681. package/src/types/agent/task.ts +6 -2
  682. package/src/types/connector/core.ts +13 -8
  683. package/src/types/connector/definition.ts +54 -20
  684. package/src/types/connector/http.ts +7 -0
  685. package/src/types/connector/mcp.ts +27 -6
  686. package/src/types/connector/tenant.ts +21 -7
  687. package/src/types/connector/webhook.ts +7 -0
  688. package/src/types/goal/index.ts +50 -0
  689. package/src/types/ids/index.ts +2 -0
  690. package/src/types/message/index.ts +143 -9
  691. package/src/types/plugin/index.ts +7 -5
  692. package/src/types/provider/chat.ts +35 -4
  693. package/src/types/provider/interface.ts +22 -7
  694. package/src/types/provider/stream.ts +6 -0
  695. package/src/types/rag/embedding.ts +16 -2
  696. package/src/types/rag/ingestion.ts +2 -1
  697. package/src/types/rag/knowledge-base.ts +7 -3
  698. package/src/types/rag/retrieval.ts +2 -1
  699. package/src/types/rag/scope.ts +5 -0
  700. package/src/types/rag/vector.ts +5 -2
  701. package/src/types/run/config.ts +20 -0
  702. package/src/types/run/events.ts +28 -3
  703. package/src/types/run/metadata.ts +2 -0
  704. package/src/types/run/step.ts +2 -7
  705. package/src/types/run/store.ts +60 -2
  706. package/src/types/sandbox/index.ts +57 -14
  707. package/src/types/session/store.ts +18 -0
  708. package/src/types/tool/index.ts +33 -11
  709. package/src/types/topic/entity.ts +3 -4
  710. package/src/types/topic/store.ts +3 -3
  711. package/src/utils/id.ts +6 -0
  712. package/src/utils/process-environment.ts +101 -0
  713. package/src/vault/InMemoryCredentialVault.ts +29 -4
  714. package/src/vault/instrumentation.ts +24 -0
@@ -23,7 +23,13 @@
23
23
 
24
24
  import { GENAI } from '../constants/telemetry/index.js'
25
25
  import { classifyProviderError, isAbortError } from '../types/provider/errors.js'
26
- import type { ChatCompletionParams, LLMProvider, StreamChunk } from '../types/provider/index.js'
26
+ import type {
27
+ ChatCompletionParams,
28
+ LLMProvider,
29
+ ReasoningEffort,
30
+ StreamChunk,
31
+ ThinkingConfig,
32
+ } from '../types/provider/index.js'
27
33
  import type { Logger } from '../utils/logger.js'
28
34
 
29
35
  /**
@@ -211,6 +217,42 @@ function isOutputChunk(chunk: StreamChunk): boolean {
211
217
  )
212
218
  }
213
219
 
220
+ /** Read one member's canonical menu, adapting the one-release legacy member. */
221
+ function memberReasoningEffortLevels(
222
+ member: ProviderChainMember,
223
+ requestModel: string,
224
+ thinking?: ThinkingConfig,
225
+ ): readonly ReasoningEffort[] | undefined {
226
+ const model = member.model ?? requestModel
227
+ if (member.provider.reasoningEffortLevelsFor) {
228
+ return member.provider.reasoningEffortLevelsFor(model, thinking)
229
+ }
230
+ return member.provider.effortLevelsFor?.(model, thinking)
231
+ }
232
+
233
+ /**
234
+ * The levels one request may carry safely through every member it can reach.
235
+ *
236
+ * `ChatCompletionParams.effort` survives a fallback swap unchanged. A menu
237
+ * copied from the head can therefore offer a value the tail rejects, turning
238
+ * recovery into a second request failure. Preserve the head's ordering while
239
+ * intersecting every member's exact, member-model-specific answer. One unknown
240
+ * answer makes the chain unknown; an explicit empty/no-common answer is `[]`.
241
+ */
242
+ function commonReasoningEffortLevels(
243
+ members: readonly ProviderChainMember[],
244
+ requestModel: string,
245
+ thinking?: ThinkingConfig,
246
+ ): readonly ReasoningEffort[] | undefined {
247
+ let common: readonly ReasoningEffort[] | undefined
248
+ for (const member of members) {
249
+ const offered = memberReasoningEffortLevels(member, requestModel, thinking)
250
+ if (offered === undefined) return undefined
251
+ common = common === undefined ? [...offered] : common.filter((level) => offered.includes(level))
252
+ }
253
+ return common ?? []
254
+ }
255
+
214
256
  /**
215
257
  * Wrap an ordered chain so a member that cannot serve is replaced in place.
216
258
  *
@@ -254,7 +296,9 @@ function isOutputChunk(chunk: StreamChunk): boolean {
254
296
  * whose members disagree before ever building one (`@namzu/cli` does, and only
255
297
  * runs a mismatched chain when the operator has said so explicitly). Taking the
256
298
  * intersection here instead would cost the primary a capability on every run to
257
- * guard against a failure that happens rarely.
299
+ * guard against a failure that happens rarely. Reasoning effort is the deliberate
300
+ * exception: the SAME field is replayed unchanged after a swap, so only a common
301
+ * level can be truthfully offered before the request.
258
302
  */
259
303
  export function withProviderFallback(
260
304
  members: readonly ProviderChainMember[],
@@ -302,7 +346,20 @@ export function withProviderFallback(
302
346
  })
303
347
  }
304
348
 
305
- const request = member.model !== undefined ? { ...params, model: member.model } : params
349
+ const targetModel = member.model ?? params.model
350
+ // Route identity is stamped at the final member dispatch, not only by
351
+ // query's initial head request. A fallback may share a provider id/model
352
+ // with another member while using different credentials or a different
353
+ // endpoint; `chainIndex` is what keeps their native replay state apart.
354
+ const request: ChatCompletionParams = {
355
+ ...params,
356
+ model: targetModel,
357
+ providerRoute: {
358
+ providerId: member.provider.id,
359
+ model: targetModel,
360
+ chainIndex: cursor,
361
+ },
362
+ }
306
363
  let produced = false
307
364
  try {
308
365
  for await (const chunk of member.provider.chatStream(request)) {
@@ -382,7 +439,16 @@ export function withProviderFallback(
382
439
  return first.provider.capabilities
383
440
  },
384
441
  chatStream,
385
- ...(first.provider.listModels ? { listModels: () => first.provider.listModels?.() } : {}),
442
+ ...(first.provider.listModels
443
+ ? {
444
+ listModels: (signal?: AbortSignal) => first.provider.listModels?.(signal),
445
+ }
446
+ : {}),
447
+ ...(first.provider.probeCredential
448
+ ? {
449
+ probeCredential: (signal?: AbortSignal) => first.provider.probeCredential?.(signal),
450
+ }
451
+ : {}),
386
452
  // Forwarded for the reason `retry.ts` forwards it: a wrapper that drops
387
453
  // the model turns a probe the caller could answer into one it cannot.
388
454
  ...(first.provider.healthCheck
@@ -391,13 +457,15 @@ export function withProviderFallback(
391
457
  ...(first.provider.doctorCheck
392
458
  ? { doctorCheck: (model?: string) => first.provider.doctorCheck?.(model) }
393
459
  : {}),
394
- // The HEAD's answer, like every other member here, and that is the
395
- // right reading rather than a limitation: the window is resolved once
396
- // at the start of a run, when the head is what is serving. A chain
397
- // that swaps mid-run has bigger differences between its members than
398
- // a context size, and re-resolving on every swap would put a network
399
- // call on the recovery path — which is the last place that can afford
400
- // one.
460
+ // Unlike the legacy head-only member below, this is a declaration about
461
+ // the request that may actually traverse the whole chain. The method is
462
+ // always present on a multi-member wrapper: `undefined` is its honest
463
+ // answer when any member cannot enumerate its selected model.
464
+ reasoningEffortLevelsFor: (model: string, thinking?: ThinkingConfig) =>
465
+ commonReasoningEffortLevels(members, model, thinking),
466
+ // Compatibility projection only. Existing consumers of the deprecated
467
+ // member keep the head-only answer they had; new consumers use the
468
+ // canonical chain-aware member above.
401
469
  ...(first.provider.effortLevelsFor
402
470
  ? {
403
471
  effortLevelsFor: (
@@ -3,6 +3,22 @@ import type { LLMProvider } from '../types/provider/interface.js'
3
3
  import type { Logger } from '../utils/logger.js'
4
4
  import { ProviderRequestError } from './errors.js'
5
5
 
6
+ /** Five minutes without one provider chunk is a stalled model call. */
7
+ export const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 5 * 60_000
8
+
9
+ const MAX_TIMER_DELAY_MS = 2_147_483_647
10
+
11
+ /** Resolve the shared run/router stream bound before either creates durable run identity. */
12
+ export function resolveStreamIdleTimeoutMs(value: number | undefined): number {
13
+ const resolved = value ?? DEFAULT_STREAM_IDLE_TIMEOUT_MS
14
+ if (!Number.isInteger(resolved) || resolved < 0 || resolved > MAX_TIMER_DELAY_MS) {
15
+ throw new RangeError(
16
+ `streamIdleTimeoutMs must be an integer from 0 to ${MAX_TIMER_DELAY_MS}; received ${String(resolved)}`,
17
+ )
18
+ }
19
+ return resolved
20
+ }
21
+
6
22
  /**
7
23
  * Notices a stream that stopped producing without ending.
8
24
  *
@@ -62,26 +78,77 @@ export function withStreamIdleTimeout(
62
78
  const disarm = options.clearTimeoutFn ?? clearTimeout
63
79
 
64
80
  async function* chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk> {
65
- const iterator = provider.chatStream(params)[Symbol.asyncIterator]()
81
+ const callerSignal = params.signal
82
+ callerSignal?.throwIfAborted()
83
+
84
+ // Do not abort the caller's controller. The watchdog owns this transport
85
+ // signal and fuses the caller's stop into it in the one safe direction.
86
+ // Keeping it stable for the whole stream is important: drivers attach one
87
+ // listener when the request opens and expect that signal to remain the
88
+ // request's cancellation identity until the socket closes.
89
+ const transportAbort = new AbortController()
90
+ type TerminalCause =
91
+ | { readonly kind: 'caller'; readonly reason: unknown }
92
+ | { readonly kind: 'idle'; readonly error: ProviderRequestError }
93
+ let terminalCause: TerminalCause | undefined
94
+ let rejectCallerAbort: ((reason?: unknown) => void) | undefined
95
+ const callerAbort = callerSignal
96
+ ? new Promise<never>((_resolve, reject) => {
97
+ rejectCallerAbort = reject
98
+ })
99
+ : undefined
100
+ const onCallerAbort = (): void => {
101
+ const reason = callerSignal?.reason
102
+ if (terminalCause === undefined) terminalCause = { kind: 'caller', reason }
103
+ if (!transportAbort.signal.aborted) transportAbort.abort(reason)
104
+ rejectCallerAbort?.(reason)
105
+ }
106
+ callerSignal?.addEventListener('abort', onCallerAbort, { once: true })
107
+
108
+ let iteratorForCleanup: AsyncIterator<StreamChunk> | undefined
66
109
  try {
110
+ const iterator = provider
111
+ .chatStream({ ...params, signal: transportAbort.signal })
112
+ [Symbol.asyncIterator]()
113
+ iteratorForCleanup = iterator
67
114
  for (;;) {
68
115
  let timer: ReturnType<typeof setTimeout> | undefined
69
116
  let result: IteratorResult<StreamChunk>
70
117
  try {
71
- result = await Promise.race([
72
- iterator.next(),
73
- new Promise<never>((_resolve, reject) => {
74
- timer = arm(() => {
75
- reject(
76
- new ProviderRequestError({
77
- kind: 'network',
78
- providerId: provider.id,
79
- detail: `stream idle for ${Math.round(idleTimeoutMs / 1000)}s — aborting so the run lifecycle can settle it`,
80
- }),
81
- )
82
- }, idleTimeoutMs)
83
- }),
84
- ])
118
+ const idle = new Promise<never>((_resolve, reject) => {
119
+ timer = arm(() => {
120
+ if (terminalCause !== undefined) return
121
+ const duration =
122
+ idleTimeoutMs < 1_000 || idleTimeoutMs % 1_000 !== 0
123
+ ? `${idleTimeoutMs}ms`
124
+ : `${idleTimeoutMs / 1_000}s`
125
+ const error = new ProviderRequestError({
126
+ kind: 'network',
127
+ providerId: provider.id,
128
+ detail: `stream idle for ${duration} — aborting so the run lifecycle can settle it`,
129
+ })
130
+ // Latch BEFORE the transport is aborted. Some provider SDKs
131
+ // synchronously reject their pending `next()` with a generic
132
+ // AbortError. Retry/fallback correctly treat that shape as a
133
+ // caller stop, so letting it escape would erase this network
134
+ // cause and make the recovery policy unreachable.
135
+ terminalCause = { kind: 'idle', error }
136
+ transportAbort.abort(error)
137
+ reject(error)
138
+ }, idleTimeoutMs)
139
+ })
140
+ const pending = callerAbort
141
+ ? [iterator.next(), idle, callerAbort]
142
+ : [iterator.next(), idle]
143
+ result = await Promise.race(pending)
144
+ } catch (err) {
145
+ // The first control-flow cause wins even if the driver's own
146
+ // abort listener rejected its pull with a different error object.
147
+ // In particular, a generic AbortError caused by OUR watchdog is
148
+ // still the network failure retry/fallback need to see.
149
+ if (terminalCause?.kind === 'idle') throw terminalCause.error
150
+ if (terminalCause?.kind === 'caller') throw terminalCause.reason
151
+ throw err
85
152
  } finally {
86
153
  // In a `finally`, so a rejection from either side of the
87
154
  // race clears the timer. Clearing only on success leaks one
@@ -93,6 +160,7 @@ export function withStreamIdleTimeout(
93
160
  yield result.value
94
161
  }
95
162
  } finally {
163
+ callerSignal?.removeEventListener('abort', onCallerAbort)
96
164
  // Asked to clean up, NOT awaited — and the difference is the whole
97
165
  // case this decorator exists for. A generator stalled inside an
98
166
  // `await` is not suspended at a `yield`, so `return()` resumes
@@ -104,9 +172,67 @@ export function withStreamIdleTimeout(
104
172
  // signal that nobody is reading — so it is made and abandoned,
105
173
  // with the rejection swallowed because there is no one left to
106
174
  // tell.
107
- void iterator.return?.().catch(() => {})
175
+ try {
176
+ void iteratorForCleanup?.return?.().catch(() => {})
177
+ } catch {
178
+ // A non-conforming iterator can throw before returning its cleanup
179
+ // promise. The original stream outcome still owns this boundary.
180
+ }
108
181
  }
109
182
  }
110
183
 
111
- return { ...provider, chatStream }
184
+ // Explicit forwarding rather than object spread. A provider may be a class
185
+ // whose methods live on its prototype; spreading it silently strips those
186
+ // methods, and retry reads `retryDefaults` AFTER this wrapper is installed.
187
+ return {
188
+ get id() {
189
+ return provider.id
190
+ },
191
+ get name() {
192
+ return provider.name
193
+ },
194
+ get capabilities() {
195
+ return provider.capabilities
196
+ },
197
+ get retryDefaults() {
198
+ return provider.retryDefaults
199
+ },
200
+ chatStream,
201
+ ...(provider.listModels
202
+ ? { listModels: (signal?: AbortSignal) => provider.listModels?.(signal) }
203
+ : {}),
204
+ ...(provider.probeCredential
205
+ ? {
206
+ probeCredential: (signal?: AbortSignal) => provider.probeCredential?.(signal),
207
+ }
208
+ : {}),
209
+ ...(provider.healthCheck
210
+ ? { healthCheck: (model?: string) => provider.healthCheck?.(model) }
211
+ : {}),
212
+ ...(provider.doctorCheck
213
+ ? { doctorCheck: (model?: string) => provider.doctorCheck?.(model) }
214
+ : {}),
215
+ ...(provider.reasoningEffortLevelsFor
216
+ ? {
217
+ reasoningEffortLevelsFor: (
218
+ model: string,
219
+ thinking?: Parameters<NonNullable<LLMProvider['reasoningEffortLevelsFor']>>[1],
220
+ ) => provider.reasoningEffortLevelsFor?.(model, thinking),
221
+ }
222
+ : {}),
223
+ ...(provider.effortLevelsFor
224
+ ? {
225
+ effortLevelsFor: (
226
+ model: string,
227
+ thinking?: Parameters<NonNullable<LLMProvider['effortLevelsFor']>>[1],
228
+ ) => provider.effortLevelsFor?.(model, thinking) ?? [],
229
+ }
230
+ : {}),
231
+ ...(provider.resolveContextWindow
232
+ ? {
233
+ resolveContextWindow: (model: string, signal?: AbortSignal) =>
234
+ provider.resolveContextWindow?.(model, signal) ?? Promise.resolve(undefined),
235
+ }
236
+ : {}),
237
+ } as LLMProvider
112
238
  }
@@ -36,6 +36,8 @@ export {
36
36
  export { DEFAULT_PROVIDER_RETRY, withProviderRetry } from './retry.js'
37
37
  export type { ProviderRetryConfig, WithProviderRetryOptions } from './retry.js'
38
38
  export { withProviderFallback } from './fallback.js'
39
+ export { DEFAULT_STREAM_IDLE_TIMEOUT_MS, withStreamIdleTimeout } from './idle-timeout.js'
40
+ export type { WithStreamIdleTimeoutOptions } from './idle-timeout.js'
39
41
  export type {
40
42
  ProviderChainMember,
41
43
  ServingMember,
@@ -43,6 +43,7 @@ export function wrapProviderWithProbes(
43
43
  id: provider.id,
44
44
  name: provider.name,
45
45
  listModels: provider.listModels?.bind(provider),
46
+ probeCredential: provider.probeCredential?.bind(provider),
46
47
  healthCheck: provider.healthCheck?.bind(provider),
47
48
 
48
49
  async *chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk> {
@@ -249,7 +249,14 @@ export function withProviderRetry(
249
249
  return provider.capabilities
250
250
  },
251
251
  chatStream,
252
- ...(provider.listModels ? { listModels: () => provider.listModels?.() } : {}),
252
+ ...(provider.listModels
253
+ ? { listModels: (signal?: AbortSignal) => provider.listModels?.(signal) }
254
+ : {}),
255
+ ...(provider.probeCredential
256
+ ? {
257
+ probeCredential: (signal?: AbortSignal) => provider.probeCredential?.(signal),
258
+ }
259
+ : {}),
253
260
  // The model is forwarded, not dropped. A wrapper that swallowed it would
254
261
  // leave the wrapped driver probing whatever it probes with no argument
255
262
  // — which for at least one driver is "nothing", so the check would come
@@ -260,6 +267,14 @@ export function withProviderRetry(
260
267
  ...(provider.doctorCheck
261
268
  ? { doctorCheck: (model?: string) => provider.doctorCheck?.(model) }
262
269
  : {}),
270
+ ...(provider.reasoningEffortLevelsFor
271
+ ? {
272
+ reasoningEffortLevelsFor: (
273
+ model: string,
274
+ thinking?: Parameters<NonNullable<LLMProvider['reasoningEffortLevelsFor']>>[1],
275
+ ) => provider.reasoningEffortLevelsFor?.(model, thinking),
276
+ }
277
+ : {}),
263
278
  // Forwarded for the same reason `healthCheck` is, and both were
264
279
  // missing until something consumed them. A member this wrapper drops
265
280
  // does not fail — it reads as "this driver cannot answer", which is a