@namzu/sdk 30.2.0 → 31.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/CHANGELOG.md +562 -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 +79 -13
  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/index.d.ts +1 -1
  496. package/dist/types/provider/index.d.ts.map +1 -1
  497. package/dist/types/provider/interface.d.ts +18 -7
  498. package/dist/types/provider/interface.d.ts.map +1 -1
  499. package/dist/types/provider/model.d.ts +12 -0
  500. package/dist/types/provider/model.d.ts.map +1 -1
  501. package/dist/types/provider/stream.d.ts +6 -0
  502. package/dist/types/provider/stream.d.ts.map +1 -1
  503. package/dist/types/rag/embedding.d.ts +15 -2
  504. package/dist/types/rag/embedding.d.ts.map +1 -1
  505. package/dist/types/rag/ingestion.d.ts +2 -2
  506. package/dist/types/rag/ingestion.d.ts.map +1 -1
  507. package/dist/types/rag/knowledge-base.d.ts +3 -3
  508. package/dist/types/rag/knowledge-base.d.ts.map +1 -1
  509. package/dist/types/rag/retrieval.d.ts +2 -2
  510. package/dist/types/rag/retrieval.d.ts.map +1 -1
  511. package/dist/types/rag/scope.d.ts +4 -0
  512. package/dist/types/rag/scope.d.ts.map +1 -1
  513. package/dist/types/rag/vector.d.ts +5 -2
  514. package/dist/types/rag/vector.d.ts.map +1 -1
  515. package/dist/types/run/config.d.ts +20 -0
  516. package/dist/types/run/config.d.ts.map +1 -1
  517. package/dist/types/run/events.d.ts +25 -1
  518. package/dist/types/run/events.d.ts.map +1 -1
  519. package/dist/types/run/events.js.map +1 -1
  520. package/dist/types/run/metadata.d.ts +2 -0
  521. package/dist/types/run/metadata.d.ts.map +1 -1
  522. package/dist/types/run/step.d.ts +2 -6
  523. package/dist/types/run/step.d.ts.map +1 -1
  524. package/dist/types/run/step.js.map +1 -1
  525. package/dist/types/run/store.d.ts +55 -2
  526. package/dist/types/run/store.d.ts.map +1 -1
  527. package/dist/types/sandbox/index.d.ts +47 -6
  528. package/dist/types/sandbox/index.d.ts.map +1 -1
  529. package/dist/types/sandbox/index.js +23 -10
  530. package/dist/types/sandbox/index.js.map +1 -1
  531. package/dist/types/session/store.d.ts +13 -0
  532. package/dist/types/session/store.d.ts.map +1 -1
  533. package/dist/types/tool/index.d.ts +33 -11
  534. package/dist/types/tool/index.d.ts.map +1 -1
  535. package/dist/types/tool/index.js.map +1 -1
  536. package/dist/types/topic/entity.d.ts +3 -4
  537. package/dist/types/topic/entity.d.ts.map +1 -1
  538. package/dist/types/topic/store.d.ts +3 -3
  539. package/dist/utils/id.d.ts +3 -1
  540. package/dist/utils/id.d.ts.map +1 -1
  541. package/dist/utils/id.js +4 -0
  542. package/dist/utils/id.js.map +1 -1
  543. package/dist/utils/process-environment.d.ts +26 -0
  544. package/dist/utils/process-environment.d.ts.map +1 -0
  545. package/dist/utils/process-environment.js +78 -0
  546. package/dist/utils/process-environment.js.map +1 -0
  547. package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
  548. package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
  549. package/dist/vault/InMemoryCredentialVault.js +24 -4
  550. package/dist/vault/InMemoryCredentialVault.js.map +1 -1
  551. package/dist/vault/instrumentation.d.ts.map +1 -1
  552. package/dist/vault/instrumentation.js +15 -0
  553. package/dist/vault/instrumentation.js.map +1 -1
  554. package/package.json +1 -1
  555. package/src/advisory/executor.ts +4 -1
  556. package/src/agents/ReactiveAgent.ts +12 -0
  557. package/src/agents/RouterAgent.ts +25 -3
  558. package/src/agents/SupervisorAgent.ts +33 -11
  559. package/src/agents/runAgent.ts +38 -2
  560. package/src/authorization/command-line.ts +390 -0
  561. package/src/authorization/rules.ts +22 -1
  562. package/src/bridge/a2a/client.ts +384 -97
  563. package/src/bridge/a2a/mapper.ts +5 -0
  564. package/src/bridge/acp/server.ts +184 -42
  565. package/src/bridge/mcp/connector/adapter.ts +28 -20
  566. package/src/bridge/sse/mapper.ts +3 -0
  567. package/src/compaction/dangling.ts +203 -38
  568. package/src/compaction/index.ts +9 -2
  569. package/src/compaction/manual.ts +125 -18
  570. package/src/compaction/plan.ts +42 -11
  571. package/src/compaction/retention.ts +23 -8
  572. package/src/compaction/summary.ts +4 -4
  573. package/src/compaction/verifier.ts +66 -0
  574. package/src/connector/BaseConnector.ts +19 -4
  575. package/src/connector/builtins/http.ts +236 -46
  576. package/src/connector/builtins/webhook.ts +207 -47
  577. package/src/connector/execution-contract.ts +27 -0
  578. package/src/connector/http-operation.ts +238 -0
  579. package/src/connector/mcp/adapter.ts +8 -3
  580. package/src/connector/mcp/client.ts +207 -58
  581. package/src/connector/mcp/http-sse.ts +91 -23
  582. package/src/connector/mcp/prompt-adapter.ts +8 -2
  583. package/src/connector/mcp/stdio.ts +21 -46
  584. package/src/connector/mcp/streamable-http.ts +86 -22
  585. package/src/connector/tools/adapter.ts +23 -14
  586. package/src/connector/tools/definitions.ts +5 -2
  587. package/src/connector/tools/result.ts +21 -0
  588. package/src/connector/web/guarded-fetch.ts +188 -48
  589. package/src/constants/sandbox/index.ts +3 -2
  590. package/src/contracts/api.ts +2 -0
  591. package/src/contracts/schemas.ts +7 -0
  592. package/src/directory/derive-supervisor.ts +8 -0
  593. package/src/directory/derive.ts +8 -0
  594. package/src/directory/load.ts +2 -0
  595. package/src/directory/types.ts +4 -0
  596. package/src/eval/experiment.ts +160 -111
  597. package/src/eval/judge.ts +13 -2
  598. package/src/eval/types.ts +7 -1
  599. package/src/manager/agent/lifecycle.ts +28 -12
  600. package/src/manager/connector/environment.ts +3 -1
  601. package/src/manager/connector/lifecycle.ts +364 -24
  602. package/src/manager/connector/tenant.ts +56 -23
  603. package/src/manager/goal/activation.ts +52 -0
  604. package/src/manager/index.ts +10 -2
  605. package/src/manager/run/persistence.ts +6 -1
  606. package/src/manager/topic/dependency.ts +39 -0
  607. package/src/manager/topic/lifecycle.ts +19 -31
  608. package/src/plugin/index.ts +1 -0
  609. package/src/plugin/lifecycle.ts +180 -39
  610. package/src/plugin/loader.ts +70 -13
  611. package/src/provider/collect-chat-completion.ts +3 -0
  612. package/src/provider/fallback.ts +79 -11
  613. package/src/provider/idle-timeout.ts +143 -17
  614. package/src/provider/index.ts +2 -0
  615. package/src/provider/instrumentation.ts +1 -0
  616. package/src/provider/retry.ts +16 -1
  617. package/src/public-runtime.ts +190 -32
  618. package/src/public-tools.ts +5 -0
  619. package/src/public-types.ts +85 -11
  620. package/src/rag/embedding.ts +147 -19
  621. package/src/rag/index.ts +1 -1
  622. package/src/rag/ingestion.ts +16 -2
  623. package/src/rag/knowledge-base.ts +13 -4
  624. package/src/rag/operation.ts +28 -0
  625. package/src/rag/rag-tool.ts +6 -3
  626. package/src/rag/retriever.ts +62 -11
  627. package/src/rag/vector-store.ts +8 -2
  628. package/src/registry/command/kernel-commands.ts +223 -4
  629. package/src/run/reporter.ts +10 -0
  630. package/src/run-query/index.ts +84 -15
  631. package/src/runtime/query/context.ts +13 -3
  632. package/src/runtime/query/executor.ts +90 -17
  633. package/src/runtime/query/guard.ts +12 -0
  634. package/src/runtime/query/index.ts +652 -103
  635. package/src/runtime/query/iteration/index.ts +89 -13
  636. package/src/runtime/query/iteration/phases/compaction.ts +120 -55
  637. package/src/runtime/query/iteration/phases/context.ts +4 -0
  638. package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
  639. package/src/runtime/query/iteration/stream-turn.ts +3 -0
  640. package/src/runtime/query/project-instructions.ts +212 -0
  641. package/src/runtime/query/request-rich-content.ts +153 -0
  642. package/src/runtime/query/result.ts +12 -1
  643. package/src/runtime/query/resume-pending.ts +20 -18
  644. package/src/runtime/query/resume-run.ts +52 -8
  645. package/src/runtime/query/run-state.ts +11 -1
  646. package/src/runtime/query/sandbox-lifecycle.ts +210 -0
  647. package/src/sandbox/isolation.ts +9 -0
  648. package/src/sandbox/provider/local.ts +255 -90
  649. package/src/sandbox/terminal.ts +13 -5
  650. package/src/session/errors.ts +68 -42
  651. package/src/session/handoff/broadcast.ts +20 -14
  652. package/src/session/handoff/single.ts +14 -13
  653. package/src/store/attachment/index.ts +65 -3
  654. package/src/store/feedback/conformance.ts +39 -0
  655. package/src/store/feedback/disk.ts +128 -82
  656. package/src/store/goal/index.ts +594 -0
  657. package/src/store/index.ts +1 -1
  658. package/src/store/kv/revision-record-store.ts +346 -0
  659. package/src/store/memory/disk.ts +288 -113
  660. package/src/store/run/disk.ts +96 -5
  661. package/src/store/run/memory.ts +22 -2
  662. package/src/store/session/disk.ts +93 -6
  663. package/src/store/session/memory.ts +22 -0
  664. package/src/store/topic/memory.ts +4 -5
  665. package/src/store/topic/objective.ts +215 -100
  666. package/src/store/topic/state.ts +100 -63
  667. package/src/tools/builtins/bash.ts +21 -0
  668. package/src/tools/builtins/computer-use.ts +9 -1
  669. package/src/tools/builtins/content-fingerprint.ts +9 -12
  670. package/src/tools/builtins/edit.ts +190 -27
  671. package/src/tools/builtins/write-file.ts +55 -19
  672. package/src/tools/command-arguments.ts +54 -0
  673. package/src/tools/coordinator/index.ts +4 -1
  674. package/src/tools/defineTool.ts +11 -0
  675. package/src/tools/env-scrub.ts +7 -5
  676. package/src/tools/goal/index.ts +129 -0
  677. package/src/tools/memory/index.ts +26 -3
  678. package/src/tools/memory/search.ts +20 -3
  679. package/src/types/agent/base.ts +12 -3
  680. package/src/types/agent/factory.ts +2 -0
  681. package/src/types/agent/reactive.ts +2 -0
  682. package/src/types/agent/supervisor.ts +6 -0
  683. package/src/types/agent/task.ts +6 -2
  684. package/src/types/connector/core.ts +13 -8
  685. package/src/types/connector/definition.ts +54 -20
  686. package/src/types/connector/http.ts +7 -0
  687. package/src/types/connector/mcp.ts +27 -6
  688. package/src/types/connector/tenant.ts +21 -7
  689. package/src/types/connector/webhook.ts +7 -0
  690. package/src/types/goal/index.ts +50 -0
  691. package/src/types/ids/index.ts +2 -0
  692. package/src/types/message/index.ts +147 -12
  693. package/src/types/plugin/index.ts +7 -5
  694. package/src/types/provider/chat.ts +35 -4
  695. package/src/types/provider/index.ts +1 -1
  696. package/src/types/provider/interface.ts +22 -7
  697. package/src/types/provider/model.ts +13 -0
  698. package/src/types/provider/stream.ts +6 -0
  699. package/src/types/rag/embedding.ts +16 -2
  700. package/src/types/rag/ingestion.ts +2 -1
  701. package/src/types/rag/knowledge-base.ts +7 -3
  702. package/src/types/rag/retrieval.ts +2 -1
  703. package/src/types/rag/scope.ts +5 -0
  704. package/src/types/rag/vector.ts +5 -2
  705. package/src/types/run/config.ts +20 -0
  706. package/src/types/run/events.ts +28 -3
  707. package/src/types/run/metadata.ts +2 -0
  708. package/src/types/run/step.ts +2 -7
  709. package/src/types/run/store.ts +60 -2
  710. package/src/types/sandbox/index.ts +57 -14
  711. package/src/types/session/store.ts +18 -0
  712. package/src/types/tool/index.ts +33 -11
  713. package/src/types/topic/entity.ts +3 -4
  714. package/src/types/topic/store.ts +3 -3
  715. package/src/utils/id.ts +6 -0
  716. package/src/utils/process-environment.ts +101 -0
  717. package/src/vault/InMemoryCredentialVault.ts +29 -4
  718. package/src/vault/instrumentation.ts +24 -0
@@ -0,0 +1,594 @@
1
+ import { join } from 'node:path'
2
+
3
+ import { TenantIsolationError } from '../../session/errors.js'
4
+ import type {
5
+ GoalBlockReason,
6
+ GoalPhase,
7
+ GoalRef,
8
+ GoalRoundAuthority,
9
+ SessionGoal,
10
+ } from '../../types/goal/index.js'
11
+ import type { GoalId, SessionId, TenantId } from '../../types/ids/index.js'
12
+ import type { SessionStore } from '../../types/session/store.js'
13
+ import { asGoalId, asSessionId, generateGoalId } from '../../utils/id.js'
14
+ import {
15
+ DiskRevisionRecordStore,
16
+ type RevisionMutation,
17
+ type RevisionedRecordLocation,
18
+ revisionFileSegment,
19
+ } from '../kv/revision-record-store.js'
20
+ import { defineSchema } from '../schema.js'
21
+
22
+ /** Current source-backed limit for a human goal objective. */
23
+ export const MAX_GOAL_OBJECTIVE_CHARS = 4_000
24
+
25
+ /** Source-aligned default; hosts may choose a smaller positive finite cap. */
26
+ export const DEFAULT_MAX_GOAL_ROUNDS = 256
27
+
28
+ export interface CreateSessionGoalParams {
29
+ readonly sessionId: SessionId
30
+ readonly objective: string
31
+ readonly maxGoalRounds?: number
32
+ }
33
+
34
+ export interface EditSessionGoalParams {
35
+ readonly objective: string
36
+ }
37
+
38
+ export interface SessionGoalStore {
39
+ getGoal(sessionId: SessionId, tenantId: TenantId): Promise<SessionGoal | null>
40
+ createGoal(params: CreateSessionGoalParams, tenantId: TenantId): Promise<SessionGoal>
41
+ editGoal(
42
+ sessionId: SessionId,
43
+ tenantId: TenantId,
44
+ ref: GoalRef,
45
+ changes: EditSessionGoalParams,
46
+ ): Promise<SessionGoal>
47
+ pauseGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal>
48
+ resumeGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal>
49
+ /** Durably reserve one automatic round before any provider work begins. */
50
+ admitRound(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<GoalRoundAuthority>
51
+ completeGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal>
52
+ blockGoal(
53
+ sessionId: SessionId,
54
+ tenantId: TenantId,
55
+ ref: GoalRef,
56
+ reason: GoalBlockReason,
57
+ ): Promise<SessionGoal>
58
+ clearGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<void>
59
+ }
60
+
61
+ /** A mutation was based on a goal revision that is no longer current. */
62
+ export class StaleGoalError extends Error {
63
+ readonly details: {
64
+ readonly sessionId: SessionId
65
+ readonly expectedRevision: number
66
+ readonly actualRevision: number
67
+ }
68
+
69
+ constructor(details: StaleGoalError['details']) {
70
+ super(
71
+ `Stale goal for ${details.sessionId}: expected revision=${details.expectedRevision}, actual=${details.actualRevision}.`,
72
+ )
73
+ this.name = 'StaleGoalError'
74
+ this.details = details
75
+ }
76
+ }
77
+
78
+ /** A session already has a goal that has not completed or been cleared. */
79
+ export class GoalExistsError extends Error {
80
+ constructor(readonly goal: SessionGoal) {
81
+ super(`Session ${goal.sessionId} already has an ${goal.phase} goal.`)
82
+ this.name = 'GoalExistsError'
83
+ }
84
+ }
85
+
86
+ /** A goal operation was requested for a session with no current goal. */
87
+ export class GoalNotFoundError extends Error {
88
+ constructor(readonly sessionId: SessionId) {
89
+ super(`Session ${sessionId} has no current goal.`)
90
+ this.name = 'GoalNotFoundError'
91
+ }
92
+ }
93
+
94
+ /** A goal transition is invalid from its current durable phase. */
95
+ export class GoalTransitionError extends Error {
96
+ constructor(
97
+ readonly phase: GoalPhase,
98
+ readonly operation: string,
99
+ ) {
100
+ super(`Cannot ${operation} a goal whose phase is ${phase}.`)
101
+ this.name = 'GoalTransitionError'
102
+ }
103
+ }
104
+
105
+ /** Goal storage refuses ids that do not name a live tenant-owned Session. */
106
+ export class GoalSessionNotFoundError extends Error {
107
+ constructor(readonly sessionId: SessionId) {
108
+ super(`Cannot use a goal for ${sessionId}: that session does not exist.`)
109
+ this.name = 'GoalSessionNotFoundError'
110
+ }
111
+ }
112
+
113
+ /** Admission reached its finite cap after durably blocking the goal. */
114
+ export class GoalRoundLimitError extends Error {
115
+ constructor(readonly goal: SessionGoal) {
116
+ super(`Goal ${goal.id} has admitted all ${goal.maxGoalRounds} automatic rounds.`)
117
+ this.name = 'GoalRoundLimitError'
118
+ }
119
+ }
120
+
121
+ interface SessionGoalRecord {
122
+ readonly sessionId: SessionId
123
+ readonly tenantId: TenantId
124
+ /** Storage sequence survives clear and fresh goal identities. */
125
+ readonly storageRevision: number
126
+ readonly goal: SessionGoal | null
127
+ readonly updatedAt: number
128
+ }
129
+
130
+ const SCHEMA = defineSchema({
131
+ kind: 'session-goal',
132
+ current: 2,
133
+ migrations: {
134
+ 1: (record) => {
135
+ const goal = record.goal
136
+ if (goal === null || typeof goal !== 'object' || Array.isArray(goal)) return record
137
+ return {
138
+ ...record,
139
+ goal: {
140
+ ...goal,
141
+ maxGoalRounds: DEFAULT_MAX_GOAL_ROUNDS,
142
+ roundsAdmitted: 0,
143
+ },
144
+ }
145
+ },
146
+ },
147
+ })
148
+ const revisionRecords = new DiskRevisionRecordStore<SessionGoalRecord>(
149
+ SCHEMA,
150
+ 'session goal store',
151
+ (record) => record.storageRevision,
152
+ )
153
+
154
+ interface GoalBackend {
155
+ readonly read: (sessionId: SessionId) => Promise<SessionGoalRecord | null>
156
+ readonly transact: <R>(
157
+ sessionId: SessionId,
158
+ mutate: (current: SessionGoalRecord | null) => RevisionMutation<SessionGoalRecord, R>,
159
+ ) => Promise<R>
160
+ }
161
+
162
+ const backends = new WeakMap<object, GoalBackend>()
163
+
164
+ function backendFor(store: object): GoalBackend {
165
+ const backend = backends.get(store)
166
+ if (!backend) throw new Error('Session goal store backend was not initialized.')
167
+ return backend
168
+ }
169
+
170
+ function validSessionId(value: SessionId): SessionId {
171
+ if (typeof value !== 'string') throw new TypeError('sessionId must be a string.')
172
+ return asSessionId(value)
173
+ }
174
+
175
+ function validRef(ref: GoalRef): GoalRef {
176
+ if (typeof ref.id !== 'string') throw new TypeError('goal id must be a string.')
177
+ const id = asGoalId(ref.id)
178
+ if (!Number.isSafeInteger(ref.revision) || ref.revision < 1) {
179
+ throw new TypeError(`goal revision must be a positive safe integer, got ${ref.revision}.`)
180
+ }
181
+ return { id, revision: ref.revision }
182
+ }
183
+
184
+ function objective(value: string): string {
185
+ if (typeof value !== 'string') throw new TypeError('goal objective must be a string.')
186
+ const trimmed = value.trim()
187
+ if (trimmed.length === 0) throw new TypeError('goal objective must not be empty.')
188
+ if ([...trimmed].length > MAX_GOAL_OBJECTIVE_CHARS) {
189
+ throw new TypeError(`goal objective must be at most ${MAX_GOAL_OBJECTIVE_CHARS} characters.`)
190
+ }
191
+ return trimmed
192
+ }
193
+
194
+ function maxGoalRounds(value: number | undefined): number {
195
+ const resolved = value ?? DEFAULT_MAX_GOAL_ROUNDS
196
+ if (!Number.isSafeInteger(resolved) || resolved < 1) {
197
+ throw new TypeError(`maxGoalRounds must be a positive safe integer, got ${resolved}.`)
198
+ }
199
+ return resolved
200
+ }
201
+
202
+ function blockReason(value: GoalBlockReason): GoalBlockReason {
203
+ if (
204
+ typeof value?.code !== 'string' ||
205
+ !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(value.code) ||
206
+ typeof value?.message !== 'string' ||
207
+ value.message.trim().length === 0
208
+ ) {
209
+ throw new TypeError(
210
+ 'goal block reason requires a lower-kebab-case code and a non-empty message.',
211
+ )
212
+ }
213
+ return { code: value.code, message: value.message.trim() }
214
+ }
215
+
216
+ function assertTenant(record: SessionGoalRecord, tenantId: TenantId): void {
217
+ if (record.tenantId !== tenantId) {
218
+ throw new TenantIsolationError({
219
+ requested: tenantId,
220
+ resource: `session-goal(${record.sessionId})`,
221
+ })
222
+ }
223
+ }
224
+
225
+ function currentGoal(
226
+ record: SessionGoalRecord | null,
227
+ sessionId: SessionId,
228
+ tenantId: TenantId,
229
+ ref: GoalRef,
230
+ ): SessionGoal {
231
+ if (!record) throw new GoalNotFoundError(sessionId)
232
+ assertTenant(record, tenantId)
233
+ if (record.sessionId !== sessionId) throw new Error('Session goal storage key mismatch.')
234
+ const goal = record.goal
235
+ if (!goal) throw new GoalNotFoundError(sessionId)
236
+ if (goal.id !== ref.id || goal.revision !== ref.revision) {
237
+ throw new StaleGoalError({
238
+ sessionId,
239
+ expectedRevision: ref.revision,
240
+ actualRevision: goal.revision,
241
+ })
242
+ }
243
+ return goal
244
+ }
245
+
246
+ abstract class SessionGoalStoreBase implements SessionGoalStore {
247
+ protected constructor(
248
+ protected readonly sessions: Pick<SessionStore, 'getSession'>,
249
+ protected readonly now: () => number,
250
+ protected readonly makeGoalId: () => GoalId,
251
+ ) {}
252
+
253
+ protected abstract put(record: SessionGoalRecord): Promise<void>
254
+
255
+ private async requireSession(sessionId: SessionId, tenantId: TenantId): Promise<SessionId> {
256
+ const checked = validSessionId(sessionId)
257
+ if (!(await this.sessions.getSession(checked, tenantId))) {
258
+ throw new GoalSessionNotFoundError(checked)
259
+ }
260
+ return checked
261
+ }
262
+
263
+ async getGoal(sessionId: SessionId, tenantId: TenantId): Promise<SessionGoal | null> {
264
+ const checked = await this.requireSession(sessionId, tenantId)
265
+ const record = await backendFor(this).read(checked)
266
+ if (!record) return null
267
+ assertTenant(record, tenantId)
268
+ if (record.sessionId !== checked) throw new Error('Session goal storage key mismatch.')
269
+ return record.goal
270
+ }
271
+
272
+ async createGoal(params: CreateSessionGoalParams, tenantId: TenantId): Promise<SessionGoal> {
273
+ const sessionId = await this.requireSession(params.sessionId, tenantId)
274
+ const text = objective(params.objective)
275
+ const maxRounds = maxGoalRounds(params.maxGoalRounds)
276
+ return await backendFor(this).transact(sessionId, (existing) => {
277
+ if (existing) {
278
+ assertTenant(existing, tenantId)
279
+ if (existing.goal && existing.goal.phase !== 'complete') {
280
+ throw new GoalExistsError(existing.goal)
281
+ }
282
+ }
283
+ const now = this.now()
284
+ const goal: SessionGoal = {
285
+ id: this.makeGoalId(),
286
+ sessionId,
287
+ tenantId,
288
+ revision: 1,
289
+ objective: text,
290
+ phase: 'active',
291
+ maxGoalRounds: maxRounds,
292
+ roundsAdmitted: 0,
293
+ createdAt: now,
294
+ updatedAt: now,
295
+ }
296
+ const record: SessionGoalRecord = {
297
+ sessionId,
298
+ tenantId,
299
+ storageRevision: (existing?.storageRevision ?? 0) + 1,
300
+ goal,
301
+ updatedAt: now,
302
+ }
303
+ return { record, result: goal }
304
+ })
305
+ }
306
+
307
+ async editGoal(
308
+ sessionId: SessionId,
309
+ tenantId: TenantId,
310
+ ref: GoalRef,
311
+ changes: EditSessionGoalParams,
312
+ ): Promise<SessionGoal> {
313
+ const checked = await this.requireSession(sessionId, tenantId)
314
+ const expected = validRef(ref)
315
+ const nextObjective = objective(changes.objective)
316
+ return await this.mutate(checked, tenantId, expected, (goal) => {
317
+ if (goal.phase === 'complete') throw new GoalTransitionError(goal.phase, 'edit')
318
+ return {
319
+ ...goal,
320
+ objective: nextObjective,
321
+ }
322
+ })
323
+ }
324
+
325
+ async pauseGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal> {
326
+ return await this.transition(sessionId, tenantId, ref, 'pause', ['active'], 'paused')
327
+ }
328
+
329
+ async resumeGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal> {
330
+ return await this.transition(
331
+ sessionId,
332
+ tenantId,
333
+ ref,
334
+ 'resume',
335
+ ['paused', 'blocked'],
336
+ 'active',
337
+ )
338
+ }
339
+
340
+ async admitRound(
341
+ sessionId: SessionId,
342
+ tenantId: TenantId,
343
+ ref: GoalRef,
344
+ ): Promise<GoalRoundAuthority> {
345
+ const checked = await this.requireSession(sessionId, tenantId)
346
+ const expected = validRef(ref)
347
+ const outcome = await backendFor(this).transact<
348
+ | { readonly kind: 'admitted'; readonly authority: GoalRoundAuthority }
349
+ | { readonly kind: 'exhausted'; readonly goal: SessionGoal }
350
+ >(checked, (existing) => {
351
+ const goal = currentGoal(existing, checked, tenantId, expected)
352
+ if (goal.phase !== 'active') throw new GoalTransitionError(goal.phase, 'admit a round for')
353
+ const now = this.now()
354
+ if (goal.roundsAdmitted >= goal.maxGoalRounds) {
355
+ const blocked: SessionGoal = {
356
+ ...goal,
357
+ revision: goal.revision + 1,
358
+ phase: 'blocked',
359
+ blockedReason: {
360
+ code: 'round-limit',
361
+ message: `Reached the ${goal.maxGoalRounds}-round limit.`,
362
+ },
363
+ updatedAt: now,
364
+ }
365
+ return {
366
+ record: {
367
+ sessionId: checked,
368
+ tenantId,
369
+ storageRevision: (existing?.storageRevision ?? 0) + 1,
370
+ goal: blocked,
371
+ updatedAt: now,
372
+ },
373
+ result: { kind: 'exhausted', goal: blocked },
374
+ }
375
+ }
376
+
377
+ const admitted: SessionGoal = {
378
+ ...goal,
379
+ revision: goal.revision + 1,
380
+ roundsAdmitted: goal.roundsAdmitted + 1,
381
+ updatedAt: now,
382
+ }
383
+ const authority: GoalRoundAuthority = {
384
+ id: admitted.id,
385
+ revision: admitted.revision,
386
+ sessionId: admitted.sessionId,
387
+ tenantId: admitted.tenantId,
388
+ objective: admitted.objective,
389
+ round: admitted.roundsAdmitted,
390
+ maxGoalRounds: admitted.maxGoalRounds,
391
+ }
392
+ return {
393
+ record: {
394
+ sessionId: checked,
395
+ tenantId,
396
+ storageRevision: (existing?.storageRevision ?? 0) + 1,
397
+ goal: admitted,
398
+ updatedAt: now,
399
+ },
400
+ result: { kind: 'admitted', authority },
401
+ }
402
+ })
403
+ if (outcome.kind === 'exhausted') throw new GoalRoundLimitError(outcome.goal)
404
+ return outcome.authority
405
+ }
406
+
407
+ async completeGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<SessionGoal> {
408
+ return await this.transition(
409
+ sessionId,
410
+ tenantId,
411
+ ref,
412
+ 'complete',
413
+ ['active', 'paused', 'blocked'],
414
+ 'complete',
415
+ )
416
+ }
417
+
418
+ async blockGoal(
419
+ sessionId: SessionId,
420
+ tenantId: TenantId,
421
+ ref: GoalRef,
422
+ reason: GoalBlockReason,
423
+ ): Promise<SessionGoal> {
424
+ const validated = blockReason(reason)
425
+ const checked = await this.requireSession(sessionId, tenantId)
426
+ const expected = validRef(ref)
427
+ return await this.mutate(checked, tenantId, expected, (goal) => {
428
+ if (goal.phase !== 'active') throw new GoalTransitionError(goal.phase, 'block')
429
+ return { ...goal, phase: 'blocked', blockedReason: validated }
430
+ })
431
+ }
432
+
433
+ async clearGoal(sessionId: SessionId, tenantId: TenantId, ref: GoalRef): Promise<void> {
434
+ const checked = await this.requireSession(sessionId, tenantId)
435
+ const expected = validRef(ref)
436
+ await backendFor(this).transact(checked, (existing) => {
437
+ currentGoal(existing, checked, tenantId, expected)
438
+ const now = this.now()
439
+ return {
440
+ record: {
441
+ sessionId: checked,
442
+ tenantId,
443
+ storageRevision: (existing?.storageRevision ?? 0) + 1,
444
+ goal: null,
445
+ updatedAt: now,
446
+ },
447
+ result: undefined,
448
+ }
449
+ })
450
+ }
451
+
452
+ private async transition(
453
+ sessionId: SessionId,
454
+ tenantId: TenantId,
455
+ ref: GoalRef,
456
+ operation: string,
457
+ from: readonly GoalPhase[],
458
+ to: GoalPhase,
459
+ ): Promise<SessionGoal> {
460
+ const checked = await this.requireSession(sessionId, tenantId)
461
+ const expected = validRef(ref)
462
+ return await this.mutate(checked, tenantId, expected, (goal) => {
463
+ if (!from.includes(goal.phase)) throw new GoalTransitionError(goal.phase, operation)
464
+ const { blockedReason: _blockedReason, ...rest } = goal
465
+ return { ...rest, phase: to }
466
+ })
467
+ }
468
+
469
+ private async mutate(
470
+ sessionId: SessionId,
471
+ tenantId: TenantId,
472
+ ref: GoalRef,
473
+ change: (goal: SessionGoal) => Omit<SessionGoal, 'revision' | 'updatedAt'>,
474
+ ): Promise<SessionGoal> {
475
+ return await backendFor(this).transact(sessionId, (existing) => {
476
+ const goal = currentGoal(existing, sessionId, tenantId, ref)
477
+ const now = this.now()
478
+ const updated: SessionGoal = {
479
+ ...change(goal),
480
+ revision: goal.revision + 1,
481
+ updatedAt: now,
482
+ }
483
+ return {
484
+ record: {
485
+ sessionId,
486
+ tenantId,
487
+ storageRevision: (existing?.storageRevision ?? 0) + 1,
488
+ goal: updated,
489
+ updatedAt: now,
490
+ },
491
+ result: updated,
492
+ }
493
+ })
494
+ }
495
+ }
496
+
497
+ export interface InMemorySessionGoalStoreConfig {
498
+ readonly sessions: Pick<SessionStore, 'getSession'>
499
+ }
500
+
501
+ export class InMemorySessionGoalStore extends SessionGoalStoreBase {
502
+ private readonly records = new Map<SessionId, SessionGoalRecord>()
503
+
504
+ constructor(
505
+ config: InMemorySessionGoalStoreConfig,
506
+ now: () => number = Date.now,
507
+ makeGoalId: () => GoalId = generateGoalId,
508
+ ) {
509
+ super(config.sessions, now, makeGoalId)
510
+ backends.set(this, {
511
+ read: async (sessionId) => this.records.get(sessionId) ?? null,
512
+ transact: async <R>(
513
+ sessionId: SessionId,
514
+ mutate: (current: SessionGoalRecord | null) => RevisionMutation<SessionGoalRecord, R>,
515
+ ) => {
516
+ const proposal = mutate(this.records.get(sessionId) ?? null)
517
+ await this.put(proposal.record)
518
+ return proposal.result
519
+ },
520
+ })
521
+ }
522
+
523
+ protected async put(record: SessionGoalRecord): Promise<void> {
524
+ const existing = this.records.get(record.sessionId)
525
+ if (existing) assertTenant(existing, record.tenantId)
526
+ const actual = existing?.storageRevision ?? 0
527
+ if (record.storageRevision !== actual + 1) {
528
+ throw new StaleGoalError({
529
+ sessionId: record.sessionId,
530
+ expectedRevision: record.storageRevision - 1,
531
+ actualRevision: existing?.goal?.revision ?? 0,
532
+ })
533
+ }
534
+ this.records.set(record.sessionId, record)
535
+ }
536
+ }
537
+
538
+ export interface DiskSessionGoalStoreConfig {
539
+ /** Session root; goals live under `<rootDir>/goals/`. */
540
+ readonly rootDir: string
541
+ /** Authority for session existence and tenant ownership. */
542
+ readonly sessions: Pick<SessionStore, 'getSession'>
543
+ }
544
+
545
+ export class DiskSessionGoalStore extends SessionGoalStoreBase {
546
+ constructor(
547
+ private readonly config: DiskSessionGoalStoreConfig,
548
+ now: () => number = Date.now,
549
+ makeGoalId: () => GoalId = generateGoalId,
550
+ ) {
551
+ super(config.sessions, now, makeGoalId)
552
+ backends.set(this, {
553
+ read: async (sessionId) => await revisionRecords.read(this.location(sessionId)),
554
+ transact: async <R>(
555
+ sessionId: SessionId,
556
+ mutate: (current: SessionGoalRecord | null) => RevisionMutation<SessionGoalRecord, R>,
557
+ ): Promise<R> => {
558
+ const location = this.location(sessionId)
559
+ const proposal = mutate(await revisionRecords.read(location))
560
+ try {
561
+ await this.put(proposal.record)
562
+ } catch (error) {
563
+ if (error instanceof StaleGoalError) mutate(await revisionRecords.read(location))
564
+ throw error
565
+ }
566
+ return proposal.result
567
+ },
568
+ })
569
+ }
570
+
571
+ private location(sessionId: SessionId): RevisionedRecordLocation {
572
+ const root = join(this.config.rootDir, 'goals')
573
+ const segment = revisionFileSegment(sessionId)
574
+ return {
575
+ legacyPath: join(root, `${segment}.json`),
576
+ revisionsDir: join(root, '.revisions', segment),
577
+ }
578
+ }
579
+
580
+ protected async put(record: SessionGoalRecord): Promise<void> {
581
+ await revisionRecords.transact(this.location(record.sessionId), (existing) => {
582
+ if (existing) assertTenant(existing, record.tenantId)
583
+ const actual = existing?.storageRevision ?? 0
584
+ if (record.storageRevision !== actual + 1) {
585
+ throw new StaleGoalError({
586
+ sessionId: record.sessionId,
587
+ expectedRevision: record.storageRevision - 1,
588
+ actualRevision: existing?.goal?.revision ?? 0,
589
+ })
590
+ }
591
+ return { record, result: undefined }
592
+ })
593
+ }
594
+ }
@@ -1,7 +1,7 @@
1
1
  export { InMemoryStore } from './InMemoryStore.js'
2
2
  export type { Identifiable, Timestamped } from './InMemoryStore.js'
3
3
 
4
- export { RunDiskStore, readRunEventsIn } from './run/disk.js'
4
+ export { RunDiskStore, readRunEventsIn, readRunMessagesIn } from './run/disk.js'
5
5
  export { InMemoryRunStore } from './run/memory.js'
6
6
  export { DiskCheckpointStore } from './run/checkpoint-disk.js'
7
7
  export type { DiskCheckpointStoreAttribution } from './run/checkpoint-disk.js'