@namzu/sdk 30.2.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 (712) hide show
  1. package/CHANGELOG.md +556 -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.map +1 -1
  207. package/dist/provider/collect-chat-completion.js +4 -0
  208. package/dist/provider/collect-chat-completion.js.map +1 -1
  209. package/dist/provider/fallback.d.ts +3 -1
  210. package/dist/provider/fallback.d.ts.map +1 -1
  211. package/dist/provider/fallback.js +62 -10
  212. package/dist/provider/fallback.js.map +1 -1
  213. package/dist/provider/idle-timeout.d.ts +4 -0
  214. package/dist/provider/idle-timeout.d.ts.map +1 -1
  215. package/dist/provider/idle-timeout.js +131 -15
  216. package/dist/provider/idle-timeout.js.map +1 -1
  217. package/dist/provider/index.d.ts +2 -0
  218. package/dist/provider/index.d.ts.map +1 -1
  219. package/dist/provider/index.js +1 -0
  220. package/dist/provider/index.js.map +1 -1
  221. package/dist/provider/instrumentation.d.ts.map +1 -1
  222. package/dist/provider/instrumentation.js +1 -0
  223. package/dist/provider/instrumentation.js.map +1 -1
  224. package/dist/provider/retry.d.ts.map +1 -1
  225. package/dist/provider/retry.js +13 -1
  226. package/dist/provider/retry.js.map +1 -1
  227. package/dist/public-runtime.d.ts +57 -24
  228. package/dist/public-runtime.d.ts.map +1 -1
  229. package/dist/public-runtime.js +42 -35
  230. package/dist/public-runtime.js.map +1 -1
  231. package/dist/public-tools.d.ts +1 -0
  232. package/dist/public-tools.d.ts.map +1 -1
  233. package/dist/public-tools.js +5 -0
  234. package/dist/public-tools.js.map +1 -1
  235. package/dist/public-types.d.ts +33 -12
  236. package/dist/public-types.d.ts.map +1 -1
  237. package/dist/rag/embedding.d.ts +8 -3
  238. package/dist/rag/embedding.d.ts.map +1 -1
  239. package/dist/rag/embedding.js +120 -9
  240. package/dist/rag/embedding.js.map +1 -1
  241. package/dist/rag/index.d.ts +1 -1
  242. package/dist/rag/index.d.ts.map +1 -1
  243. package/dist/rag/index.js +1 -1
  244. package/dist/rag/index.js.map +1 -1
  245. package/dist/rag/ingestion.d.ts +2 -2
  246. package/dist/rag/ingestion.d.ts.map +1 -1
  247. package/dist/rag/ingestion.js +15 -3
  248. package/dist/rag/ingestion.js.map +1 -1
  249. package/dist/rag/knowledge-base.d.ts +3 -3
  250. package/dist/rag/knowledge-base.d.ts.map +1 -1
  251. package/dist/rag/knowledge-base.js +8 -4
  252. package/dist/rag/knowledge-base.js.map +1 -1
  253. package/dist/rag/operation.d.ts +10 -0
  254. package/dist/rag/operation.d.ts.map +1 -0
  255. package/dist/rag/operation.js +26 -0
  256. package/dist/rag/operation.js.map +1 -0
  257. package/dist/rag/rag-tool.d.ts.map +1 -1
  258. package/dist/rag/rag-tool.js +6 -3
  259. package/dist/rag/rag-tool.js.map +1 -1
  260. package/dist/rag/retriever.d.ts +2 -2
  261. package/dist/rag/retriever.d.ts.map +1 -1
  262. package/dist/rag/retriever.js +31 -15
  263. package/dist/rag/retriever.js.map +1 -1
  264. package/dist/rag/vector-store.d.ts +3 -3
  265. package/dist/rag/vector-store.d.ts.map +1 -1
  266. package/dist/rag/vector-store.js +4 -2
  267. package/dist/rag/vector-store.js.map +1 -1
  268. package/dist/registry/command/kernel-commands.d.ts +16 -4
  269. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  270. package/dist/registry/command/kernel-commands.js +171 -0
  271. package/dist/registry/command/kernel-commands.js.map +1 -1
  272. package/dist/run/reporter.d.ts.map +1 -1
  273. package/dist/run/reporter.js +9 -0
  274. package/dist/run/reporter.js.map +1 -1
  275. package/dist/run-query/index.d.ts +15 -1
  276. package/dist/run-query/index.d.ts.map +1 -1
  277. package/dist/run-query/index.js +69 -15
  278. package/dist/run-query/index.js.map +1 -1
  279. package/dist/runtime/query/context.d.ts.map +1 -1
  280. package/dist/runtime/query/context.js +10 -3
  281. package/dist/runtime/query/context.js.map +1 -1
  282. package/dist/runtime/query/executor.d.ts +3 -0
  283. package/dist/runtime/query/executor.d.ts.map +1 -1
  284. package/dist/runtime/query/executor.js +80 -18
  285. package/dist/runtime/query/executor.js.map +1 -1
  286. package/dist/runtime/query/guard.d.ts +9 -0
  287. package/dist/runtime/query/guard.d.ts.map +1 -1
  288. package/dist/runtime/query/guard.js +11 -0
  289. package/dist/runtime/query/guard.js.map +1 -1
  290. package/dist/runtime/query/index.d.ts +30 -1
  291. package/dist/runtime/query/index.d.ts.map +1 -1
  292. package/dist/runtime/query/index.js +548 -95
  293. package/dist/runtime/query/index.js.map +1 -1
  294. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  295. package/dist/runtime/query/iteration/index.js +74 -14
  296. package/dist/runtime/query/iteration/index.js.map +1 -1
  297. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  298. package/dist/runtime/query/iteration/phases/compaction.js +94 -53
  299. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  300. package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
  301. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  302. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  303. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  304. package/dist/runtime/query/iteration/phases/tool-review.js +21 -0
  305. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  306. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  307. package/dist/runtime/query/iteration/stream-turn.js +4 -0
  308. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  309. package/dist/runtime/query/project-instructions.d.ts +69 -0
  310. package/dist/runtime/query/project-instructions.d.ts.map +1 -0
  311. package/dist/runtime/query/project-instructions.js +137 -0
  312. package/dist/runtime/query/project-instructions.js.map +1 -0
  313. package/dist/runtime/query/request-rich-content.d.ts +22 -0
  314. package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
  315. package/dist/runtime/query/request-rich-content.js +122 -0
  316. package/dist/runtime/query/request-rich-content.js.map +1 -0
  317. package/dist/runtime/query/result.d.ts.map +1 -1
  318. package/dist/runtime/query/result.js +12 -1
  319. package/dist/runtime/query/result.js.map +1 -1
  320. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  321. package/dist/runtime/query/resume-pending.js +19 -20
  322. package/dist/runtime/query/resume-pending.js.map +1 -1
  323. package/dist/runtime/query/resume-run.d.ts.map +1 -1
  324. package/dist/runtime/query/resume-run.js +54 -8
  325. package/dist/runtime/query/resume-run.js.map +1 -1
  326. package/dist/runtime/query/run-state.d.ts +5 -0
  327. package/dist/runtime/query/run-state.d.ts.map +1 -1
  328. package/dist/runtime/query/run-state.js +6 -1
  329. package/dist/runtime/query/run-state.js.map +1 -1
  330. package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
  331. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
  332. package/dist/runtime/query/sandbox-lifecycle.js +167 -0
  333. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
  334. package/dist/sandbox/isolation.d.ts.map +1 -1
  335. package/dist/sandbox/isolation.js +9 -0
  336. package/dist/sandbox/isolation.js.map +1 -1
  337. package/dist/sandbox/provider/local.d.ts +56 -6
  338. package/dist/sandbox/provider/local.d.ts.map +1 -1
  339. package/dist/sandbox/provider/local.js +181 -76
  340. package/dist/sandbox/provider/local.js.map +1 -1
  341. package/dist/sandbox/terminal.d.ts +13 -5
  342. package/dist/sandbox/terminal.d.ts.map +1 -1
  343. package/dist/sandbox/terminal.js +11 -3
  344. package/dist/sandbox/terminal.js.map +1 -1
  345. package/dist/session/errors.d.ts +28 -29
  346. package/dist/session/errors.d.ts.map +1 -1
  347. package/dist/session/errors.js +28 -29
  348. package/dist/session/errors.js.map +1 -1
  349. package/dist/session/handoff/broadcast.d.ts +5 -8
  350. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  351. package/dist/session/handoff/broadcast.js +16 -6
  352. package/dist/session/handoff/broadcast.js.map +1 -1
  353. package/dist/session/handoff/single.d.ts +5 -8
  354. package/dist/session/handoff/single.d.ts.map +1 -1
  355. package/dist/session/handoff/single.js +7 -4
  356. package/dist/session/handoff/single.js.map +1 -1
  357. package/dist/store/attachment/index.d.ts +11 -3
  358. package/dist/store/attachment/index.d.ts.map +1 -1
  359. package/dist/store/attachment/index.js +49 -4
  360. package/dist/store/attachment/index.js.map +1 -1
  361. package/dist/store/feedback/conformance.d.ts.map +1 -1
  362. package/dist/store/feedback/conformance.js +32 -0
  363. package/dist/store/feedback/conformance.js.map +1 -1
  364. package/dist/store/feedback/disk.d.ts +8 -6
  365. package/dist/store/feedback/disk.d.ts.map +1 -1
  366. package/dist/store/feedback/disk.js +111 -76
  367. package/dist/store/feedback/disk.js.map +1 -1
  368. package/dist/store/goal/index.d.ts +111 -0
  369. package/dist/store/goal/index.d.ts.map +1 -0
  370. package/dist/store/goal/index.js +436 -0
  371. package/dist/store/goal/index.js.map +1 -0
  372. package/dist/store/index.d.ts +1 -1
  373. package/dist/store/index.d.ts.map +1 -1
  374. package/dist/store/index.js +1 -1
  375. package/dist/store/index.js.map +1 -1
  376. package/dist/store/kv/revision-record-store.d.ts +70 -0
  377. package/dist/store/kv/revision-record-store.d.ts.map +1 -0
  378. package/dist/store/kv/revision-record-store.js +290 -0
  379. package/dist/store/kv/revision-record-store.js.map +1 -0
  380. package/dist/store/memory/disk.d.ts +9 -7
  381. package/dist/store/memory/disk.d.ts.map +1 -1
  382. package/dist/store/memory/disk.js +256 -98
  383. package/dist/store/memory/disk.js.map +1 -1
  384. package/dist/store/run/disk.d.ts +10 -2
  385. package/dist/store/run/disk.d.ts.map +1 -1
  386. package/dist/store/run/disk.js +70 -4
  387. package/dist/store/run/disk.js.map +1 -1
  388. package/dist/store/run/memory.d.ts +4 -2
  389. package/dist/store/run/memory.d.ts.map +1 -1
  390. package/dist/store/run/memory.js +15 -1
  391. package/dist/store/run/memory.js.map +1 -1
  392. package/dist/store/session/disk.d.ts +9 -0
  393. package/dist/store/session/disk.d.ts.map +1 -1
  394. package/dist/store/session/disk.js +57 -5
  395. package/dist/store/session/disk.js.map +1 -1
  396. package/dist/store/session/memory.d.ts +1 -0
  397. package/dist/store/session/memory.d.ts.map +1 -1
  398. package/dist/store/session/memory.js +14 -0
  399. package/dist/store/session/memory.js.map +1 -1
  400. package/dist/store/topic/memory.d.ts +1 -2
  401. package/dist/store/topic/memory.d.ts.map +1 -1
  402. package/dist/store/topic/memory.js +4 -5
  403. package/dist/store/topic/memory.js.map +1 -1
  404. package/dist/store/topic/objective.d.ts +8 -4
  405. package/dist/store/topic/objective.d.ts.map +1 -1
  406. package/dist/store/topic/objective.js +185 -100
  407. package/dist/store/topic/objective.js.map +1 -1
  408. package/dist/store/topic/state.d.ts +1 -2
  409. package/dist/store/topic/state.d.ts.map +1 -1
  410. package/dist/store/topic/state.js +50 -62
  411. package/dist/store/topic/state.js.map +1 -1
  412. package/dist/tools/builtins/bash.d.ts.map +1 -1
  413. package/dist/tools/builtins/bash.js +20 -0
  414. package/dist/tools/builtins/bash.js.map +1 -1
  415. package/dist/tools/builtins/computer-use.d.ts +9 -1
  416. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  417. package/dist/tools/builtins/computer-use.js.map +1 -1
  418. package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
  419. package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
  420. package/dist/tools/builtins/content-fingerprint.js +9 -10
  421. package/dist/tools/builtins/content-fingerprint.js.map +1 -1
  422. package/dist/tools/builtins/edit.d.ts +6 -1
  423. package/dist/tools/builtins/edit.d.ts.map +1 -1
  424. package/dist/tools/builtins/edit.js +166 -27
  425. package/dist/tools/builtins/edit.js.map +1 -1
  426. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  427. package/dist/tools/builtins/write-file.js +45 -19
  428. package/dist/tools/builtins/write-file.js.map +1 -1
  429. package/dist/tools/command-arguments.d.ts +43 -0
  430. package/dist/tools/command-arguments.d.ts.map +1 -0
  431. package/dist/tools/command-arguments.js +52 -0
  432. package/dist/tools/command-arguments.js.map +1 -0
  433. package/dist/tools/coordinator/index.d.ts +2 -0
  434. package/dist/tools/coordinator/index.d.ts.map +1 -1
  435. package/dist/tools/coordinator/index.js +3 -1
  436. package/dist/tools/coordinator/index.js.map +1 -1
  437. package/dist/tools/defineTool.d.ts +10 -0
  438. package/dist/tools/defineTool.d.ts.map +1 -1
  439. package/dist/tools/defineTool.js +1 -0
  440. package/dist/tools/defineTool.js.map +1 -1
  441. package/dist/tools/env-scrub.d.ts +7 -5
  442. package/dist/tools/env-scrub.d.ts.map +1 -1
  443. package/dist/tools/env-scrub.js +7 -5
  444. package/dist/tools/env-scrub.js.map +1 -1
  445. package/dist/tools/goal/index.d.ts +20 -0
  446. package/dist/tools/goal/index.d.ts.map +1 -0
  447. package/dist/tools/goal/index.js +104 -0
  448. package/dist/tools/goal/index.js.map +1 -0
  449. package/dist/tools/memory/index.d.ts +16 -0
  450. package/dist/tools/memory/index.d.ts.map +1 -1
  451. package/dist/tools/memory/index.js +6 -2
  452. package/dist/tools/memory/index.js.map +1 -1
  453. package/dist/tools/memory/search.d.ts +4 -1
  454. package/dist/tools/memory/search.d.ts.map +1 -1
  455. package/dist/tools/memory/search.js +10 -2
  456. package/dist/tools/memory/search.js.map +1 -1
  457. package/dist/types/agent/base.d.ts +11 -3
  458. package/dist/types/agent/base.d.ts.map +1 -1
  459. package/dist/types/agent/factory.d.ts +2 -0
  460. package/dist/types/agent/factory.d.ts.map +1 -1
  461. package/dist/types/agent/reactive.d.ts +2 -0
  462. package/dist/types/agent/reactive.d.ts.map +1 -1
  463. package/dist/types/agent/supervisor.d.ts +6 -0
  464. package/dist/types/agent/supervisor.d.ts.map +1 -1
  465. package/dist/types/agent/task.d.ts +6 -2
  466. package/dist/types/agent/task.d.ts.map +1 -1
  467. package/dist/types/connector/core.d.ts +13 -8
  468. package/dist/types/connector/core.d.ts.map +1 -1
  469. package/dist/types/connector/definition.d.ts +37 -18
  470. package/dist/types/connector/definition.d.ts.map +1 -1
  471. package/dist/types/connector/http.d.ts +6 -0
  472. package/dist/types/connector/http.d.ts.map +1 -1
  473. package/dist/types/connector/mcp.d.ts +24 -6
  474. package/dist/types/connector/mcp.d.ts.map +1 -1
  475. package/dist/types/connector/tenant.d.ts +17 -7
  476. package/dist/types/connector/tenant.d.ts.map +1 -1
  477. package/dist/types/connector/webhook.d.ts +6 -0
  478. package/dist/types/connector/webhook.d.ts.map +1 -1
  479. package/dist/types/goal/index.d.ts +46 -0
  480. package/dist/types/goal/index.d.ts.map +1 -0
  481. package/dist/types/goal/index.js +2 -0
  482. package/dist/types/goal/index.js.map +1 -0
  483. package/dist/types/ids/index.d.ts +2 -0
  484. package/dist/types/ids/index.d.ts.map +1 -1
  485. package/dist/types/ids/index.js.map +1 -1
  486. package/dist/types/message/index.d.ts +75 -10
  487. package/dist/types/message/index.d.ts.map +1 -1
  488. package/dist/types/message/index.js +49 -3
  489. package/dist/types/message/index.js.map +1 -1
  490. package/dist/types/plugin/index.d.ts +7 -5
  491. package/dist/types/plugin/index.d.ts.map +1 -1
  492. package/dist/types/plugin/index.js.map +1 -1
  493. package/dist/types/provider/chat.d.ts +27 -4
  494. package/dist/types/provider/chat.d.ts.map +1 -1
  495. package/dist/types/provider/interface.d.ts +18 -7
  496. package/dist/types/provider/interface.d.ts.map +1 -1
  497. package/dist/types/provider/stream.d.ts +6 -0
  498. package/dist/types/provider/stream.d.ts.map +1 -1
  499. package/dist/types/rag/embedding.d.ts +15 -2
  500. package/dist/types/rag/embedding.d.ts.map +1 -1
  501. package/dist/types/rag/ingestion.d.ts +2 -2
  502. package/dist/types/rag/ingestion.d.ts.map +1 -1
  503. package/dist/types/rag/knowledge-base.d.ts +3 -3
  504. package/dist/types/rag/knowledge-base.d.ts.map +1 -1
  505. package/dist/types/rag/retrieval.d.ts +2 -2
  506. package/dist/types/rag/retrieval.d.ts.map +1 -1
  507. package/dist/types/rag/scope.d.ts +4 -0
  508. package/dist/types/rag/scope.d.ts.map +1 -1
  509. package/dist/types/rag/vector.d.ts +5 -2
  510. package/dist/types/rag/vector.d.ts.map +1 -1
  511. package/dist/types/run/config.d.ts +20 -0
  512. package/dist/types/run/config.d.ts.map +1 -1
  513. package/dist/types/run/events.d.ts +25 -1
  514. package/dist/types/run/events.d.ts.map +1 -1
  515. package/dist/types/run/events.js.map +1 -1
  516. package/dist/types/run/metadata.d.ts +2 -0
  517. package/dist/types/run/metadata.d.ts.map +1 -1
  518. package/dist/types/run/step.d.ts +2 -6
  519. package/dist/types/run/step.d.ts.map +1 -1
  520. package/dist/types/run/step.js.map +1 -1
  521. package/dist/types/run/store.d.ts +55 -2
  522. package/dist/types/run/store.d.ts.map +1 -1
  523. package/dist/types/sandbox/index.d.ts +47 -6
  524. package/dist/types/sandbox/index.d.ts.map +1 -1
  525. package/dist/types/sandbox/index.js +23 -10
  526. package/dist/types/sandbox/index.js.map +1 -1
  527. package/dist/types/session/store.d.ts +13 -0
  528. package/dist/types/session/store.d.ts.map +1 -1
  529. package/dist/types/tool/index.d.ts +33 -11
  530. package/dist/types/tool/index.d.ts.map +1 -1
  531. package/dist/types/tool/index.js.map +1 -1
  532. package/dist/types/topic/entity.d.ts +3 -4
  533. package/dist/types/topic/entity.d.ts.map +1 -1
  534. package/dist/types/topic/store.d.ts +3 -3
  535. package/dist/utils/id.d.ts +3 -1
  536. package/dist/utils/id.d.ts.map +1 -1
  537. package/dist/utils/id.js +4 -0
  538. package/dist/utils/id.js.map +1 -1
  539. package/dist/utils/process-environment.d.ts +26 -0
  540. package/dist/utils/process-environment.d.ts.map +1 -0
  541. package/dist/utils/process-environment.js +78 -0
  542. package/dist/utils/process-environment.js.map +1 -0
  543. package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
  544. package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
  545. package/dist/vault/InMemoryCredentialVault.js +24 -4
  546. package/dist/vault/InMemoryCredentialVault.js.map +1 -1
  547. package/dist/vault/instrumentation.d.ts.map +1 -1
  548. package/dist/vault/instrumentation.js +15 -0
  549. package/dist/vault/instrumentation.js.map +1 -1
  550. package/package.json +1 -1
  551. package/src/advisory/executor.ts +4 -1
  552. package/src/agents/ReactiveAgent.ts +12 -0
  553. package/src/agents/RouterAgent.ts +25 -3
  554. package/src/agents/SupervisorAgent.ts +33 -11
  555. package/src/agents/runAgent.ts +38 -2
  556. package/src/authorization/command-line.ts +390 -0
  557. package/src/authorization/rules.ts +22 -1
  558. package/src/bridge/a2a/client.ts +384 -97
  559. package/src/bridge/a2a/mapper.ts +5 -0
  560. package/src/bridge/acp/server.ts +184 -42
  561. package/src/bridge/mcp/connector/adapter.ts +28 -20
  562. package/src/bridge/sse/mapper.ts +3 -0
  563. package/src/compaction/dangling.ts +203 -38
  564. package/src/compaction/index.ts +9 -2
  565. package/src/compaction/manual.ts +125 -18
  566. package/src/compaction/plan.ts +42 -11
  567. package/src/compaction/retention.ts +23 -8
  568. package/src/compaction/summary.ts +4 -4
  569. package/src/compaction/verifier.ts +66 -0
  570. package/src/connector/BaseConnector.ts +19 -4
  571. package/src/connector/builtins/http.ts +236 -46
  572. package/src/connector/builtins/webhook.ts +207 -47
  573. package/src/connector/execution-contract.ts +27 -0
  574. package/src/connector/http-operation.ts +238 -0
  575. package/src/connector/mcp/adapter.ts +8 -3
  576. package/src/connector/mcp/client.ts +207 -58
  577. package/src/connector/mcp/http-sse.ts +91 -23
  578. package/src/connector/mcp/prompt-adapter.ts +8 -2
  579. package/src/connector/mcp/stdio.ts +21 -46
  580. package/src/connector/mcp/streamable-http.ts +86 -22
  581. package/src/connector/tools/adapter.ts +23 -14
  582. package/src/connector/tools/definitions.ts +5 -2
  583. package/src/connector/tools/result.ts +21 -0
  584. package/src/connector/web/guarded-fetch.ts +188 -48
  585. package/src/constants/sandbox/index.ts +3 -2
  586. package/src/contracts/api.ts +2 -0
  587. package/src/contracts/schemas.ts +7 -0
  588. package/src/directory/derive-supervisor.ts +8 -0
  589. package/src/directory/derive.ts +8 -0
  590. package/src/directory/load.ts +2 -0
  591. package/src/directory/types.ts +4 -0
  592. package/src/eval/experiment.ts +160 -111
  593. package/src/eval/judge.ts +13 -2
  594. package/src/eval/types.ts +7 -1
  595. package/src/manager/agent/lifecycle.ts +28 -12
  596. package/src/manager/connector/environment.ts +3 -1
  597. package/src/manager/connector/lifecycle.ts +364 -24
  598. package/src/manager/connector/tenant.ts +56 -23
  599. package/src/manager/goal/activation.ts +52 -0
  600. package/src/manager/index.ts +10 -2
  601. package/src/manager/run/persistence.ts +6 -1
  602. package/src/manager/topic/dependency.ts +39 -0
  603. package/src/manager/topic/lifecycle.ts +19 -31
  604. package/src/plugin/index.ts +1 -0
  605. package/src/plugin/lifecycle.ts +180 -39
  606. package/src/plugin/loader.ts +70 -13
  607. package/src/provider/collect-chat-completion.ts +3 -0
  608. package/src/provider/fallback.ts +79 -11
  609. package/src/provider/idle-timeout.ts +143 -17
  610. package/src/provider/index.ts +2 -0
  611. package/src/provider/instrumentation.ts +1 -0
  612. package/src/provider/retry.ts +16 -1
  613. package/src/public-runtime.ts +190 -32
  614. package/src/public-tools.ts +5 -0
  615. package/src/public-types.ts +85 -11
  616. package/src/rag/embedding.ts +147 -19
  617. package/src/rag/index.ts +1 -1
  618. package/src/rag/ingestion.ts +16 -2
  619. package/src/rag/knowledge-base.ts +13 -4
  620. package/src/rag/operation.ts +28 -0
  621. package/src/rag/rag-tool.ts +6 -3
  622. package/src/rag/retriever.ts +62 -11
  623. package/src/rag/vector-store.ts +8 -2
  624. package/src/registry/command/kernel-commands.ts +223 -4
  625. package/src/run/reporter.ts +10 -0
  626. package/src/run-query/index.ts +84 -15
  627. package/src/runtime/query/context.ts +13 -3
  628. package/src/runtime/query/executor.ts +90 -17
  629. package/src/runtime/query/guard.ts +12 -0
  630. package/src/runtime/query/index.ts +652 -103
  631. package/src/runtime/query/iteration/index.ts +89 -13
  632. package/src/runtime/query/iteration/phases/compaction.ts +120 -55
  633. package/src/runtime/query/iteration/phases/context.ts +4 -0
  634. package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
  635. package/src/runtime/query/iteration/stream-turn.ts +3 -0
  636. package/src/runtime/query/project-instructions.ts +212 -0
  637. package/src/runtime/query/request-rich-content.ts +153 -0
  638. package/src/runtime/query/result.ts +12 -1
  639. package/src/runtime/query/resume-pending.ts +20 -18
  640. package/src/runtime/query/resume-run.ts +52 -8
  641. package/src/runtime/query/run-state.ts +11 -1
  642. package/src/runtime/query/sandbox-lifecycle.ts +210 -0
  643. package/src/sandbox/isolation.ts +9 -0
  644. package/src/sandbox/provider/local.ts +255 -90
  645. package/src/sandbox/terminal.ts +13 -5
  646. package/src/session/errors.ts +68 -42
  647. package/src/session/handoff/broadcast.ts +20 -14
  648. package/src/session/handoff/single.ts +14 -13
  649. package/src/store/attachment/index.ts +65 -3
  650. package/src/store/feedback/conformance.ts +39 -0
  651. package/src/store/feedback/disk.ts +128 -82
  652. package/src/store/goal/index.ts +594 -0
  653. package/src/store/index.ts +1 -1
  654. package/src/store/kv/revision-record-store.ts +346 -0
  655. package/src/store/memory/disk.ts +288 -113
  656. package/src/store/run/disk.ts +96 -5
  657. package/src/store/run/memory.ts +22 -2
  658. package/src/store/session/disk.ts +93 -6
  659. package/src/store/session/memory.ts +22 -0
  660. package/src/store/topic/memory.ts +4 -5
  661. package/src/store/topic/objective.ts +215 -100
  662. package/src/store/topic/state.ts +100 -63
  663. package/src/tools/builtins/bash.ts +21 -0
  664. package/src/tools/builtins/computer-use.ts +9 -1
  665. package/src/tools/builtins/content-fingerprint.ts +9 -12
  666. package/src/tools/builtins/edit.ts +190 -27
  667. package/src/tools/builtins/write-file.ts +55 -19
  668. package/src/tools/command-arguments.ts +54 -0
  669. package/src/tools/coordinator/index.ts +4 -1
  670. package/src/tools/defineTool.ts +11 -0
  671. package/src/tools/env-scrub.ts +7 -5
  672. package/src/tools/goal/index.ts +129 -0
  673. package/src/tools/memory/index.ts +26 -3
  674. package/src/tools/memory/search.ts +20 -3
  675. package/src/types/agent/base.ts +12 -3
  676. package/src/types/agent/factory.ts +2 -0
  677. package/src/types/agent/reactive.ts +2 -0
  678. package/src/types/agent/supervisor.ts +6 -0
  679. package/src/types/agent/task.ts +6 -2
  680. package/src/types/connector/core.ts +13 -8
  681. package/src/types/connector/definition.ts +54 -20
  682. package/src/types/connector/http.ts +7 -0
  683. package/src/types/connector/mcp.ts +27 -6
  684. package/src/types/connector/tenant.ts +21 -7
  685. package/src/types/connector/webhook.ts +7 -0
  686. package/src/types/goal/index.ts +50 -0
  687. package/src/types/ids/index.ts +2 -0
  688. package/src/types/message/index.ts +143 -9
  689. package/src/types/plugin/index.ts +7 -5
  690. package/src/types/provider/chat.ts +35 -4
  691. package/src/types/provider/interface.ts +22 -7
  692. package/src/types/provider/stream.ts +6 -0
  693. package/src/types/rag/embedding.ts +16 -2
  694. package/src/types/rag/ingestion.ts +2 -1
  695. package/src/types/rag/knowledge-base.ts +7 -3
  696. package/src/types/rag/retrieval.ts +2 -1
  697. package/src/types/rag/scope.ts +5 -0
  698. package/src/types/rag/vector.ts +5 -2
  699. package/src/types/run/config.ts +20 -0
  700. package/src/types/run/events.ts +28 -3
  701. package/src/types/run/metadata.ts +2 -0
  702. package/src/types/run/step.ts +2 -7
  703. package/src/types/run/store.ts +60 -2
  704. package/src/types/sandbox/index.ts +57 -14
  705. package/src/types/session/store.ts +18 -0
  706. package/src/types/tool/index.ts +33 -11
  707. package/src/types/topic/entity.ts +3 -4
  708. package/src/types/topic/store.ts +3 -3
  709. package/src/utils/id.ts +6 -0
  710. package/src/utils/process-environment.ts +101 -0
  711. package/src/vault/InMemoryCredentialVault.ts +29 -4
  712. package/src/vault/instrumentation.ts +24 -0
@@ -10,6 +10,8 @@ import type {
10
10
  import type { ScoreUncertainty } from './uncertainty.js'
11
11
  import { describeUncertainty, uncertaintyOf } from './uncertainty.js'
12
12
 
13
+ const MAX_CASE_TIMEOUT_MS = 2_147_483_647
14
+
13
15
  export interface ExperimentConfig<TInput = unknown> {
14
16
  name: string
15
17
  cases: readonly EvalCase<TInput>[]
@@ -22,18 +24,18 @@ export interface ExperimentConfig<TInput = unknown> {
22
24
  */
23
25
  run: (input: TInput, evalCase: EvalCase<TInput>, signal: AbortSignal) => Promise<EvalRun>
24
26
  /**
25
- * Deadline for a single case. Unset means no deadline.
27
+ * Wall-clock deadline for one case, including execution and every
28
+ * scorer. Unset means no deadline.
26
29
  *
27
- * `executeCase` used to be a bare await, so a `run` closure that never
28
- * settled blocked its worker and `runExperiment` never returned no
29
- * report, no partial results, nothing to read. The documented path
30
- * inherits deadlines from the runtime it drives, so the residual is a
31
- * closure that does not go through `query()` and a mid-iteration
32
- * provider stall the between-iterations guard cannot see. Both are
33
- * reachable, and neither is the suite's fault to absorb silently.
30
+ * A non-cooperative `run` closure or scorer is detached by an independent
31
+ * race, so it cannot hold the suite forever. The same signal is passed to
32
+ * both phases; I/O-owning scorers should forward it to their transport,
33
+ * as `judgeScorer` does.
34
34
  *
35
- * A timed-out case is REPORTED and the suite continues, exactly like a
36
- * case that threw: forty cases should not be lost to one that hung.
35
+ * A run that exhausts the budget is reported as failed. A scorer that
36
+ * exhausts the remainder is unavailable, making an otherwise unjudged
37
+ * case inconclusive. Either way the suite continues: forty cases should
38
+ * not be lost to one operation that hung.
37
39
  */
38
40
  timeoutMs?: number
39
41
  /** Mean score a case must reach to count as passed. Default 1. */
@@ -61,6 +63,7 @@ export async function runExperiment<TInput>(
61
63
  const startedAt = Date.now()
62
64
  const threshold = config.passThreshold ?? 1
63
65
  const concurrency = Math.max(1, config.concurrency ?? 1)
66
+ const timeoutMs = validateCaseTimeoutMs(config.timeoutMs)
64
67
 
65
68
  const results: CaseResult[] = new Array(config.cases.length)
66
69
  let cursor = 0
@@ -71,71 +74,7 @@ export async function runExperiment<TInput>(
71
74
  const evalCase = config.cases[index]
72
75
  if (!evalCase) return
73
76
 
74
- const run = await executeCase(config, evalCase)
75
- const scorers = evalCase.scorers ?? config.scorers
76
- const scores: Record<string, Score> = {}
77
-
78
- // Scores are keyed by name, so two scorers sharing one collapse:
79
- // the mean's denominator becomes the count of distinct NAMES and
80
- // the surviving score is whichever ran last. Two
81
- // `containsScorer(...)` instances are both called 'contains', so
82
- // this is easy to hit by accident and silently halves the
83
- // evidence. Ambiguous results are worse than a loud failure.
84
- const seen = new Set<string>()
85
- for (const scorer of scorers) {
86
- if (seen.has(scorer.name)) {
87
- throw new Error(
88
- `Duplicate scorer name "${scorer.name}" for case "${evalCase.name}". Scores are keyed by name, so the second would overwrite the first and the case mean would be computed over the wrong denominator. Give each scorer a distinct name.`,
89
- )
90
- }
91
- seen.add(scorer.name)
92
- scores[scorer.name] = await safeScore(scorer, run, evalCase)
93
- }
94
-
95
- // Only scores that were actually produced count — an unavailable
96
- // scorer leaves the denominator alone rather than dragging the
97
- // mean toward zero with a measurement that never happened.
98
- const values = Object.values(scores)
99
- .filter((s) => s.unavailable !== true)
100
- .map((s) => s.score)
101
- const mean = values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length
102
-
103
- // A gate miss fails the case whatever the mean says. Averaging a
104
- // hard check together with a fuzzy one lets three good scores
105
- // carry a zero: trajectory 0 + completion 1 + contains 1 +
106
- // judge 1 averages to 0.75 and reports passed at a threshold of
107
- // 0.75 — the exact regression the harness exists to catch,
108
- // reported green. An UNAVAILABLE gate does not fail the case;
109
- // it did not judge the run at all, which is the inconclusive
110
- // path, not a failure.
111
- const failedGates = scorers
112
- .filter((s) => s.severity === 'gate')
113
- .filter((s) => {
114
- const score = scores[s.name]
115
- if (!score || score.unavailable === true) return false
116
- return score.score < (s.threshold ?? threshold)
117
- })
118
- .map((s) => s.name)
119
-
120
- const status: CaseStatus =
121
- Object.keys(scores).length > 0 && values.length === 0
122
- ? 'inconclusive'
123
- : failedGates.length > 0
124
- ? 'failed'
125
- : mean >= threshold
126
- ? 'passed'
127
- : 'failed'
128
- const result: CaseResult = {
129
- case: evalCase.name,
130
- run,
131
- scores,
132
- mean,
133
- status,
134
- passed: status === 'passed',
135
- // Named, not just counted: "failed" with a mean of 0.75 sends
136
- // somebody to read four scores and guess which one mattered.
137
- ...(failedGates.length > 0 ? { failedGates } : {}),
138
- }
77
+ const result = await evaluateCase(config, evalCase, threshold, timeoutMs)
139
78
  results[index] = result
140
79
  config.onCaseFinish?.(result)
141
80
  }
@@ -165,6 +104,138 @@ export async function runExperiment<TInput>(
165
104
  }
166
105
  }
167
106
 
107
+ function validateCaseTimeoutMs(value: number | undefined): number | undefined {
108
+ if (value === undefined) return undefined
109
+ if (!Number.isInteger(value) || value < 1 || value > MAX_CASE_TIMEOUT_MS) {
110
+ throw new RangeError(
111
+ `timeoutMs must be an integer from 1 to ${MAX_CASE_TIMEOUT_MS}, or omitted; received ${String(value)}`,
112
+ )
113
+ }
114
+ return value
115
+ }
116
+
117
+ interface CaseDeadline {
118
+ readonly signal: AbortSignal
119
+ race<T>(work: Promise<T>): Promise<T>
120
+ dispose(): void
121
+ }
122
+
123
+ /** One wall-clock budget shared by execution and every scorer for a case. */
124
+ function openCaseDeadline(timeoutMs: number | undefined): CaseDeadline {
125
+ const controller = new AbortController()
126
+ let timer: ReturnType<typeof setTimeout> | undefined
127
+ let expiry: Promise<never> | undefined
128
+ let onAbort: (() => void) | undefined
129
+
130
+ if (timeoutMs !== undefined && timeoutMs > 0) {
131
+ expiry = new Promise<never>((_resolve, reject) => {
132
+ onAbort = () => reject(controller.signal.reason)
133
+ controller.signal.addEventListener('abort', onAbort, { once: true })
134
+ })
135
+ // A case can settle just before its timer. Keep the deadline promise
136
+ // observed independently so a same-tick expiry cannot become an
137
+ // unhandled rejection while the scope is being disposed.
138
+ void expiry.catch(() => {})
139
+ timer = setTimeout(
140
+ () => controller.abort(new Error(`case timed out after ${timeoutMs}ms`)),
141
+ timeoutMs,
142
+ )
143
+ }
144
+
145
+ return {
146
+ signal: controller.signal,
147
+ async race<T>(work: Promise<T>): Promise<T> {
148
+ if (!expiry) return await work
149
+ // A non-cooperative run or scorer may reject after the deadline won.
150
+ // Observe that loser without making suite settlement depend on it.
151
+ void work.catch(() => {})
152
+ return await Promise.race([work, expiry])
153
+ },
154
+ dispose() {
155
+ clearTimeout(timer)
156
+ if (onAbort) controller.signal.removeEventListener('abort', onAbort)
157
+ },
158
+ }
159
+ }
160
+
161
+ async function evaluateCase<TInput>(
162
+ config: ExperimentConfig<TInput>,
163
+ evalCase: EvalCase<TInput>,
164
+ threshold: number,
165
+ timeoutMs: number | undefined,
166
+ ): Promise<CaseResult> {
167
+ const deadline = openCaseDeadline(timeoutMs)
168
+ try {
169
+ const run = await executeCase(config, evalCase, deadline)
170
+ const scorers = evalCase.scorers ?? config.scorers
171
+ const scores: Record<string, Score> = {}
172
+
173
+ // Scores are keyed by name, so two scorers sharing one collapse:
174
+ // the mean's denominator becomes the count of distinct NAMES and
175
+ // the surviving score is whichever ran last. Two
176
+ // `containsScorer(...)` instances are both called 'contains', so
177
+ // this is easy to hit by accident and silently halves the
178
+ // evidence. Ambiguous results are worse than a loud failure.
179
+ const seen = new Set<string>()
180
+ for (const scorer of scorers) {
181
+ if (seen.has(scorer.name)) {
182
+ throw new Error(
183
+ `Duplicate scorer name "${scorer.name}" for case "${evalCase.name}". Scores are keyed by name, so the second would overwrite the first and the case mean would be computed over the wrong denominator. Give each scorer a distinct name.`,
184
+ )
185
+ }
186
+ seen.add(scorer.name)
187
+ scores[scorer.name] = await safeScore(scorer, run, evalCase, deadline)
188
+ }
189
+
190
+ // Only scores that were actually produced count — an unavailable
191
+ // scorer leaves the denominator alone rather than dragging the
192
+ // mean toward zero with a measurement that never happened.
193
+ const values = Object.values(scores)
194
+ .filter((s) => s.unavailable !== true)
195
+ .map((s) => s.score)
196
+ const mean = values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length
197
+
198
+ // A gate miss fails the case whatever the mean says. Averaging a
199
+ // hard check together with a fuzzy one lets three good scores
200
+ // carry a zero: trajectory 0 + completion 1 + contains 1 +
201
+ // judge 1 averages to 0.75 and reports passed at a threshold of
202
+ // 0.75 — the exact regression the harness exists to catch,
203
+ // reported green. An UNAVAILABLE gate does not fail the case;
204
+ // it did not judge the run at all, which is the inconclusive
205
+ // path, not a failure.
206
+ const failedGates = scorers
207
+ .filter((s) => s.severity === 'gate')
208
+ .filter((s) => {
209
+ const score = scores[s.name]
210
+ if (!score || score.unavailable === true) return false
211
+ return score.score < (s.threshold ?? threshold)
212
+ })
213
+ .map((s) => s.name)
214
+
215
+ const status: CaseStatus =
216
+ Object.keys(scores).length > 0 && values.length === 0
217
+ ? 'inconclusive'
218
+ : failedGates.length > 0
219
+ ? 'failed'
220
+ : mean >= threshold
221
+ ? 'passed'
222
+ : 'failed'
223
+ return {
224
+ case: evalCase.name,
225
+ run,
226
+ scores,
227
+ mean,
228
+ status,
229
+ passed: status === 'passed',
230
+ // Named, not just counted: "failed" with a mean of 0.75 sends
231
+ // somebody to read four scores and guess which one mattered.
232
+ ...(failedGates.length > 0 ? { failedGates } : {}),
233
+ }
234
+ } finally {
235
+ deadline.dispose()
236
+ }
237
+ }
238
+
168
239
  /**
169
240
  * A case that throws is a RESULT, not a crash. An eval suite whose first
170
241
  * broken case aborts the run tells you nothing about the other forty.
@@ -172,38 +243,12 @@ export async function runExperiment<TInput>(
172
243
  async function executeCase<TInput>(
173
244
  config: ExperimentConfig<TInput>,
174
245
  evalCase: EvalCase<TInput>,
246
+ deadline: CaseDeadline,
175
247
  ): Promise<EvalRun> {
176
248
  const startedAt = Date.now()
177
- const controller = new AbortController()
178
- const timeoutMs = config.timeoutMs
179
- // The signal is handed to `run` so a closure that drives `query()` can
180
- // pass it through and actually stop working. A closure that ignores it
181
- // is merely detached rather than stopped — the same bargain every other
182
- // deadline in the SDK makes — but the SUITE is unblocked either way,
183
- // which is the part that was missing.
184
- const timer =
185
- timeoutMs !== undefined && timeoutMs > 0
186
- ? setTimeout(
187
- () => controller.abort(new Error(`case timed out after ${timeoutMs}ms`)),
188
- timeoutMs,
189
- )
190
- : undefined
191
-
192
- const deadline =
193
- timer === undefined
194
- ? undefined
195
- : new Promise<never>((_resolve, reject) => {
196
- controller.signal.addEventListener('abort', () => reject(controller.signal.reason), {
197
- once: true,
198
- })
199
- })
200
-
201
249
  try {
202
- const work = config.run(evalCase.input, evalCase, controller.signal)
203
- // A rejection of the loser must never surface as an unhandled
204
- // rejection after the race has already been decided.
205
- if (deadline) work.catch(() => {})
206
- return await (deadline ? Promise.race([work, deadline]) : work)
250
+ const work = config.run(evalCase.input, evalCase, deadline.signal)
251
+ return await deadline.race(work)
207
252
  } catch (err) {
208
253
  return {
209
254
  output: null,
@@ -217,16 +262,16 @@ async function executeCase<TInput>(
217
262
  durationMs: Date.now() - startedAt,
218
263
  error: err instanceof Error ? err.message : String(err),
219
264
  }
220
- } finally {
221
- // Only the timer needs clearing. Aborting here would fire a spurious
222
- // signal at a `run` that has already settled — the deadline branch
223
- // has aborted already, and every other path is done.
224
- clearTimeout(timer)
225
265
  }
226
266
  }
227
267
 
228
268
  /** A throwing scorer scores zero with the throw as its reason. */
229
- async function safeScore(scorer: Scorer, run: EvalRun, evalCase: EvalCase): Promise<Score> {
269
+ async function safeScore(
270
+ scorer: Scorer,
271
+ run: EvalRun,
272
+ evalCase: EvalCase,
273
+ deadline: CaseDeadline,
274
+ ): Promise<Score> {
230
275
  // A run that THREW scores zero, whatever the scorer would have said.
231
276
  // `executeCase` catches the failure and returns an empty run, and an
232
277
  // empty run walks straight into every scorer's happy path:
@@ -239,7 +284,11 @@ async function safeScore(scorer: Scorer, run: EvalRun, evalCase: EvalCase): Prom
239
284
  }
240
285
 
241
286
  try {
242
- return await scorer.score(run, evalCase)
287
+ deadline.signal.throwIfAborted()
288
+ // Defer invocation into the promise so a synchronous scorer throw is
289
+ // raced and observed by the same path as an asynchronous rejection.
290
+ const work = Promise.resolve().then(() => scorer.score(run, evalCase, deadline.signal))
291
+ return await deadline.race(work)
243
292
  } catch (err) {
244
293
  // UNAVAILABLE, not zero. A scorer that threw did not judge the run
245
294
  // badly — it failed to judge it at all, and the two call for
package/src/eval/judge.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { collectChatCompletion } from '../provider/collect-chat-completion.js'
2
+ import { resolveStreamIdleTimeoutMs, withStreamIdleTimeout } from '../provider/idle-timeout.js'
2
3
  import type { LLMProvider } from '../types/provider/interface.js'
3
4
  import type { EvalCase, EvalRun, Score, Scorer } from './types.js'
4
5
 
@@ -60,6 +61,12 @@ export interface JudgeScorerConfig {
60
61
  * truncation rather than the run.
61
62
  */
62
63
  maxOutputChars?: number
64
+ /**
65
+ * Milliseconds without a judge chunk before its provider stream is
66
+ * treated as stalled. Defaults to the SDK's finite provider-stream idle
67
+ * bound. Set `0` only for explicit unbounded compatibility.
68
+ */
69
+ streamIdleTimeoutMs?: number
63
70
  }
64
71
 
65
72
  const DEFAULT_SCALE = 4
@@ -198,6 +205,9 @@ function buildPrompt(
198
205
 
199
206
  export function judgeScorer(config: JudgeScorerConfig): Scorer {
200
207
  const scale = config.scale ?? DEFAULT_SCALE
208
+ const provider = withStreamIdleTimeout(config.provider, {
209
+ idleTimeoutMs: resolveStreamIdleTimeoutMs(config.streamIdleTimeoutMs),
210
+ })
201
211
  if (!Number.isInteger(scale) || scale < 1) {
202
212
  throw new Error(`judgeScorer: scale must be a positive integer, got ${scale}`)
203
213
  }
@@ -209,15 +219,16 @@ export function judgeScorer(config: JudgeScorerConfig): Scorer {
209
219
 
210
220
  return {
211
221
  name: config.name ?? 'judge',
212
- async score(run: EvalRun, evalCase: EvalCase): Promise<Score> {
222
+ async score(run: EvalRun, evalCase: EvalCase, signal?: AbortSignal): Promise<Score> {
213
223
  const response = await collectChatCompletion(
214
- config.provider.chatStream({
224
+ provider.chatStream({
215
225
  model: config.model,
216
226
  messages: [{ role: 'user', content: buildPrompt(config, run, evalCase, scale) }],
217
227
  // The same run must grade the same way twice, or a
218
228
  // regression cannot be told from sampling noise.
219
229
  temperature: 0,
220
230
  maxTokens: 512,
231
+ ...(signal ? { signal } : {}),
221
232
  }),
222
233
  )
223
234
 
package/src/eval/types.ts CHANGED
@@ -98,7 +98,13 @@ export type ScorerSeverity = 'gate' | 'soft'
98
98
 
99
99
  export interface Scorer {
100
100
  name: string
101
- score(run: EvalRun, evalCase: EvalCase): Score | Promise<Score>
101
+ /**
102
+ * Produce one measurement. `runExperiment` passes the case's shared
103
+ * deadline signal, which covers both execution and every scorer. A pure
104
+ * scorer may ignore it; a scorer that owns I/O should carry it to that
105
+ * transport so timed-out work is stopped rather than merely abandoned.
106
+ */
107
+ score(run: EvalRun, evalCase: EvalCase, signal?: AbortSignal): Score | Promise<Score>
102
108
  /** See {@link ScorerSeverity}. Default `soft`. */
103
109
  severity?: ScorerSeverity
104
110
  /**
@@ -40,6 +40,7 @@ import { generateTaskId } from '../../utils/id.js'
40
40
  import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js'
41
41
  import { type Logger, resolveLogger } from '../../utils/logger.js'
42
42
  import { requireOpenProject } from '../project/lifecycle.js'
43
+ import { type TopicManagerDependency, resolveTopicManager } from '../topic/dependency.js'
43
44
  import type { TopicManager } from '../topic/lifecycle.js'
44
45
 
45
46
  /**
@@ -61,19 +62,11 @@ import type { TopicManager } from '../topic/lifecycle.js'
61
62
  * registry deny-by-default while matching pattern doc §7.1 (lazy workspace
62
63
  * provisioning).
63
64
  */
64
- export interface AgentManagerDeps {
65
+ interface AgentManagerBaseDeps {
65
66
  readonly sessionStore: SessionStore
66
67
  readonly workspaceRegistry: WorkspaceBackendRegistry
67
68
  readonly summaryMaterializer: SessionSummaryMaterializer
68
69
  readonly capacity: CapacityValidator
69
- /**
70
- * Gate session creation on the parent Topic being `'open'` via
71
- * {@link TopicManager.requireOpen}. Added in Phase 2.6 to close the
72
- * archive-gate gap flagged by the Phase 2.5 commit: without this,
73
- * `TopicManager.archive` was best-effort because spawn could still
74
- * attach a live session under an archived Thread.
75
- */
76
- readonly threadManager: TopicManager
77
70
 
78
71
  /**
79
72
  * A pre-built logger. No in-package caller threads a real one today —
@@ -89,6 +82,16 @@ export interface AgentManagerDeps {
89
82
  readonly log?: Logger
90
83
  }
91
84
 
85
+ /**
86
+ * Dependencies for {@link AgentManager}.
87
+ *
88
+ * `topicManager` gates child-session creation on the parent Topic being open.
89
+ * The deprecated `threadManager` spelling remains accepted for one migration
90
+ * window through {@link TopicManagerDependency}; new callers use
91
+ * `topicManager`.
92
+ */
93
+ export type AgentManagerDeps = AgentManagerBaseDeps & TopicManagerDependency
94
+
92
95
  interface ChildSpawnRecord {
93
96
  subSessionId: SubSessionId
94
97
  childSessionId: SessionId
@@ -138,6 +141,7 @@ export class AgentManager {
138
141
  /** One provisioning at a time per parent — see {@link provisionSpawn}. */
139
142
  private spawnLocks: Map<SessionId, Promise<void>> = new Map()
140
143
  private deps: AgentManagerDeps
144
+ private topicManager: TopicManager
141
145
 
142
146
  constructor(
143
147
  registry: AgentRegistry,
@@ -146,8 +150,11 @@ export class AgentManager {
146
150
  ) {
147
151
  this.registry = registry
148
152
  this.config = { ...AGENT_MANAGER_DEFAULTS, ...config }
149
- this.log = resolveLogger(deps.log).child({ [SCOPE_ATTRIBUTE]: 'manager/agent/lifecycle' })
153
+ this.log = resolveLogger(deps.log).child({
154
+ [SCOPE_ATTRIBUTE]: 'manager/agent/lifecycle',
155
+ })
150
156
  this.deps = deps
157
+ this.topicManager = resolveTopicManager(deps)
151
158
  }
152
159
 
153
160
  async sendMessage(
@@ -387,6 +394,8 @@ export class AgentManager {
387
394
  model: options.configOverrides?.model ?? 'default',
388
395
  tokenBudget: allocatedTokens,
389
396
  timeoutMs: options.budgetAllocation?.timeoutMs ?? this.config.childTimeoutMs,
397
+ streamIdleTimeoutMs: options.configOverrides?.streamIdleTimeoutMs,
398
+ maxRequestRichContentBytes: options.configOverrides?.maxRequestRichContentBytes,
390
399
  temperature: options.configOverrides?.temperature,
391
400
  parentSpan: options.configOverrides?.parentSpan,
392
401
  maxIterations: options.configOverrides?.maxIterations,
@@ -408,6 +417,13 @@ export class AgentManager {
408
417
  }
409
418
  }
410
419
 
420
+ // Lineage is assigned by the spawning manager, not proposed by the
421
+ // child definition. A fixed configBuilder can ignore its inputs and
422
+ // configOverrides is caller-authored; neither may turn a child back
423
+ // into depth zero or attach it to a different parent run.
424
+ childConfig.parentRunId = context.parentRunId
425
+ childConfig.depth = context.depth + 1
426
+
411
427
  // Stamped AFTER the builder, for the fourth time and the same reason:
412
428
  // a `configBuilder` is written by whoever registered the agent and
413
429
  // cannot forward a field it was never told about. A scope applied
@@ -668,7 +684,7 @@ export class AgentManager {
668
684
  // partial/legacy path).
669
685
  const store = this.deps.sessionStore
670
686
 
671
- // Thread archive gate — runs FIRST so an archived thread fails fastest
687
+ // Topic archive gate — runs FIRST so an archived Topic fails fastest
672
688
  // with the correct error (not DelegationCapacityExceeded or a project
673
689
  // lookup error). Phase 2.6 closes the gap the Phase 2.5 commit
674
690
  // flagged: without it, `TopicManager.archive` could be undermined by
@@ -678,7 +694,7 @@ export class AgentManager {
678
694
  // callers of `SessionStore.createSession` bypass it — the store layer
679
695
  // is intentionally unaware of topic status to preserve its
680
696
  // single-responsibility boundary.
681
- await this.deps.threadManager.requireOpen(context.topicId, context.tenantId)
697
+ await this.topicManager.requireOpen(context.topicId, context.tenantId)
682
698
 
683
699
  // Parent session cross-check: validate that `options.parentSessionId`
684
700
  // exists for this tenant AND lives under the same topic as the
@@ -10,6 +10,7 @@ import type {
10
10
  ConnectorExecuteResult,
11
11
  ConnectorInstance,
12
12
  ConnectorLifecycleEvent,
13
+ ConnectorOperationOptions,
13
14
  CredentialVault,
14
15
  EnvironmentDescriptor,
15
16
  ExecutionContextConfig,
@@ -205,9 +206,10 @@ export class EnvironmentConnectorManager {
205
206
  async healthCheck(
206
207
  envId: EnvironmentId,
207
208
  instanceId: import('../../types/ids/index.js').ConnectorInstanceId,
209
+ options?: ConnectorOperationOptions,
208
210
  ): Promise<boolean> {
209
211
  const state = this.getEnvironmentOrThrow(envId)
210
- return state.manager.healthCheck(instanceId)
212
+ return state.manager.healthCheck(instanceId, options)
211
213
  }
212
214
 
213
215
  listInstances(envId: EnvironmentId): ConnectorInstance[] {