@inflexa-ai/harness 0.45.0 → 0.46.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 (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -5,6 +5,47 @@
5
5
  * and the completion schemas that validate LLM structured output.
6
6
  */
7
7
  import { z } from "zod";
8
+ /**
9
+ * One scientific setting of a grounded step: a parameter of the procedure
10
+ * that `knowledge_recommend` returned, with the procedure step it belongs to
11
+ * and the source of its value. The host binds the settings to the template
12
+ * of the step at dispatch, thus a template default never replaces a plan
13
+ * decision silently.
14
+ */
15
+ export declare const GroundingSettingSchema: z.ZodObject<{
16
+ step: z.ZodString;
17
+ name: z.ZodString;
18
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
19
+ source: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strip>;
21
+ export type GroundingSetting = z.infer<typeof GroundingSettingSchema>;
22
+ /**
23
+ * The grounding of one method step: the claim identifiers and the snapshot
24
+ * digest that `knowledge_recommend` returned in this run, the template the
25
+ * step renders, the settings of the procedure, and a one-line reason.
26
+ * Optional on both step schemas, thus a stored plan and a plan made without
27
+ * the knowledge service load and validate as before. Phase 0 validates the
28
+ * shape only. An empty field is visible: the evaluation counts a method step
29
+ * without a value as ungrounded.
30
+ */
31
+ export declare const GroundingSchema: z.ZodObject<{
32
+ status: z.ZodEnum<{
33
+ flagged: "flagged";
34
+ grounded: "grounded";
35
+ ungrounded: "ungrounded";
36
+ }>;
37
+ snapshot: z.ZodString;
38
+ claims: z.ZodArray<z.ZodString>;
39
+ template: z.ZodOptional<z.ZodString>;
40
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
+ step: z.ZodString;
42
+ name: z.ZodString;
43
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
44
+ source: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strip>>>;
46
+ reason: z.ZodString;
47
+ }, z.core.$strip>;
48
+ export type Grounding = z.infer<typeof GroundingSchema>;
8
49
  /**
9
50
  * A step of an analysis plan. `PlanStepSchema` (schemas/plan-schemas.ts) narrows
10
51
  * this into the planner's output contract and emits it as the `submit_plan`
@@ -24,10 +65,10 @@ export declare const AnalysisStepSchema: z.ZodObject<{
24
65
  packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
66
  depends_on: z.ZodArray<z.ZodString>;
26
67
  status: z.ZodDefault<z.ZodEnum<{
68
+ completed: "completed";
27
69
  failed: "failed";
28
70
  pending: "pending";
29
71
  running: "running";
30
- completed: "completed";
31
72
  skipped: "skipped";
32
73
  }>>;
33
74
  resources: z.ZodOptional<z.ZodObject<{
@@ -37,7 +78,25 @@ export declare const AnalysisStepSchema: z.ZodObject<{
37
78
  count: z.ZodNumber;
38
79
  }, z.core.$strip>>;
39
80
  }, z.core.$strip>>;
81
+ grounding: z.ZodOptional<z.ZodObject<{
82
+ status: z.ZodEnum<{
83
+ flagged: "flagged";
84
+ grounded: "grounded";
85
+ ungrounded: "ungrounded";
86
+ }>;
87
+ snapshot: z.ZodString;
88
+ claims: z.ZodArray<z.ZodString>;
89
+ template: z.ZodOptional<z.ZodString>;
90
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
91
+ step: z.ZodString;
92
+ name: z.ZodString;
93
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
94
+ source: z.ZodOptional<z.ZodString>;
95
+ }, z.core.$strip>>>;
96
+ reason: z.ZodString;
97
+ }, z.core.$strip>>;
40
98
  agent: z.ZodOptional<z.ZodString>;
99
+ capability: z.ZodOptional<z.ZodString>;
41
100
  timeout: z.ZodOptional<z.ZodNumber>;
42
101
  maxSteps: z.ZodNumber;
43
102
  description: z.ZodOptional<z.ZodString>;
@@ -61,10 +120,10 @@ export declare const AnalysisPlanSchema: z.ZodObject<{
61
120
  packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
62
121
  depends_on: z.ZodArray<z.ZodString>;
63
122
  status: z.ZodDefault<z.ZodEnum<{
123
+ completed: "completed";
64
124
  failed: "failed";
65
125
  pending: "pending";
66
126
  running: "running";
67
- completed: "completed";
68
127
  skipped: "skipped";
69
128
  }>>;
70
129
  resources: z.ZodOptional<z.ZodObject<{
@@ -74,7 +133,25 @@ export declare const AnalysisPlanSchema: z.ZodObject<{
74
133
  count: z.ZodNumber;
75
134
  }, z.core.$strip>>;
76
135
  }, z.core.$strip>>;
136
+ grounding: z.ZodOptional<z.ZodObject<{
137
+ status: z.ZodEnum<{
138
+ flagged: "flagged";
139
+ grounded: "grounded";
140
+ ungrounded: "ungrounded";
141
+ }>;
142
+ snapshot: z.ZodString;
143
+ claims: z.ZodArray<z.ZodString>;
144
+ template: z.ZodOptional<z.ZodString>;
145
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
146
+ step: z.ZodString;
147
+ name: z.ZodString;
148
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
149
+ source: z.ZodOptional<z.ZodString>;
150
+ }, z.core.$strip>>>;
151
+ reason: z.ZodString;
152
+ }, z.core.$strip>>;
77
153
  agent: z.ZodOptional<z.ZodString>;
154
+ capability: z.ZodOptional<z.ZodString>;
78
155
  timeout: z.ZodOptional<z.ZodNumber>;
79
156
  maxSteps: z.ZodNumber;
80
157
  description: z.ZodOptional<z.ZodString>;
@@ -133,10 +210,10 @@ export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
133
210
  packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
134
211
  depends_on: z.ZodArray<z.ZodString>;
135
212
  status: z.ZodDefault<z.ZodEnum<{
213
+ completed: "completed";
136
214
  failed: "failed";
137
215
  pending: "pending";
138
216
  running: "running";
139
- completed: "completed";
140
217
  skipped: "skipped";
141
218
  }>>;
142
219
  resources: z.ZodOptional<z.ZodObject<{
@@ -146,7 +223,25 @@ export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
146
223
  count: z.ZodNumber;
147
224
  }, z.core.$strip>>;
148
225
  }, z.core.$strip>>;
226
+ grounding: z.ZodOptional<z.ZodObject<{
227
+ status: z.ZodEnum<{
228
+ flagged: "flagged";
229
+ grounded: "grounded";
230
+ ungrounded: "ungrounded";
231
+ }>;
232
+ snapshot: z.ZodString;
233
+ claims: z.ZodArray<z.ZodString>;
234
+ template: z.ZodOptional<z.ZodString>;
235
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
236
+ step: z.ZodString;
237
+ name: z.ZodString;
238
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
239
+ source: z.ZodOptional<z.ZodString>;
240
+ }, z.core.$strip>>>;
241
+ reason: z.ZodString;
242
+ }, z.core.$strip>>;
149
243
  agent: z.ZodOptional<z.ZodString>;
244
+ capability: z.ZodOptional<z.ZodString>;
150
245
  timeout: z.ZodOptional<z.ZodNumber>;
151
246
  maxSteps: z.ZodNumber;
152
247
  description: z.ZodOptional<z.ZodString>;
@@ -160,7 +255,7 @@ export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
160
255
  }, z.core.$strip>;
161
256
  }, z.core.$strip>, z.ZodObject<{
162
257
  type: z.ZodLiteral<"json">;
163
- data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
258
+ data: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
164
259
  label: z.ZodOptional<z.ZodString>;
165
260
  }, z.core.$strip>, z.ZodObject<{
166
261
  type: z.ZodLiteral<"text">;
@@ -176,16 +271,16 @@ export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
176
271
  */
177
272
  export declare const SuspensionActionSchema: z.ZodObject<{
178
273
  label: z.ZodString;
179
- value: z.ZodRecord<z.ZodString, z.ZodUnknown>;
274
+ value: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
180
275
  variant: z.ZodOptional<z.ZodEnum<{
181
276
  default: "default";
182
- outline: "outline";
183
277
  destructive: "destructive";
278
+ outline: "outline";
184
279
  }>>;
185
280
  icon: z.ZodOptional<z.ZodEnum<{
281
+ "alert-circle": "alert-circle";
186
282
  check: "check";
187
283
  x: "x";
188
- "alert-circle": "alert-circle";
189
284
  }>>;
190
285
  }, z.core.$strip>;
191
286
  /**
@@ -202,9 +297,9 @@ export declare const SuspensionInputSchema: z.ZodObject<{
202
297
  key: z.ZodString;
203
298
  label: z.ZodString;
204
299
  type: z.ZodEnum<{
300
+ select: "select";
205
301
  text: "text";
206
302
  textarea: "textarea";
207
- select: "select";
208
303
  }>;
209
304
  placeholder: z.ZodOptional<z.ZodString>;
210
305
  required: z.ZodOptional<z.ZodBoolean>;
@@ -253,10 +348,10 @@ export declare const SuspensionPayloadSchema: z.ZodObject<{
253
348
  packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
254
349
  depends_on: z.ZodArray<z.ZodString>;
255
350
  status: z.ZodDefault<z.ZodEnum<{
351
+ completed: "completed";
256
352
  failed: "failed";
257
353
  pending: "pending";
258
354
  running: "running";
259
- completed: "completed";
260
355
  skipped: "skipped";
261
356
  }>>;
262
357
  resources: z.ZodOptional<z.ZodObject<{
@@ -266,7 +361,25 @@ export declare const SuspensionPayloadSchema: z.ZodObject<{
266
361
  count: z.ZodNumber;
267
362
  }, z.core.$strip>>;
268
363
  }, z.core.$strip>>;
364
+ grounding: z.ZodOptional<z.ZodObject<{
365
+ status: z.ZodEnum<{
366
+ flagged: "flagged";
367
+ grounded: "grounded";
368
+ ungrounded: "ungrounded";
369
+ }>;
370
+ snapshot: z.ZodString;
371
+ claims: z.ZodArray<z.ZodString>;
372
+ template: z.ZodOptional<z.ZodString>;
373
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
374
+ step: z.ZodString;
375
+ name: z.ZodString;
376
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
377
+ source: z.ZodOptional<z.ZodString>;
378
+ }, z.core.$strip>>>;
379
+ reason: z.ZodString;
380
+ }, z.core.$strip>>;
269
381
  agent: z.ZodOptional<z.ZodString>;
382
+ capability: z.ZodOptional<z.ZodString>;
270
383
  timeout: z.ZodOptional<z.ZodNumber>;
271
384
  maxSteps: z.ZodNumber;
272
385
  description: z.ZodOptional<z.ZodString>;
@@ -280,7 +393,7 @@ export declare const SuspensionPayloadSchema: z.ZodObject<{
280
393
  }, z.core.$strip>;
281
394
  }, z.core.$strip>, z.ZodObject<{
282
395
  type: z.ZodLiteral<"json">;
283
- data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
396
+ data: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
284
397
  label: z.ZodOptional<z.ZodString>;
285
398
  }, z.core.$strip>, z.ZodObject<{
286
399
  type: z.ZodLiteral<"text">;
@@ -288,25 +401,25 @@ export declare const SuspensionPayloadSchema: z.ZodObject<{
288
401
  }, z.core.$strip>], "type">>>;
289
402
  actions: z.ZodArray<z.ZodObject<{
290
403
  label: z.ZodString;
291
- value: z.ZodRecord<z.ZodString, z.ZodUnknown>;
404
+ value: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
292
405
  variant: z.ZodOptional<z.ZodEnum<{
293
406
  default: "default";
294
- outline: "outline";
295
407
  destructive: "destructive";
408
+ outline: "outline";
296
409
  }>>;
297
410
  icon: z.ZodOptional<z.ZodEnum<{
411
+ "alert-circle": "alert-circle";
298
412
  check: "check";
299
413
  x: "x";
300
- "alert-circle": "alert-circle";
301
414
  }>>;
302
415
  }, z.core.$strip>>;
303
416
  inputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
304
417
  key: z.ZodString;
305
418
  label: z.ZodString;
306
419
  type: z.ZodEnum<{
420
+ select: "select";
307
421
  text: "text";
308
422
  textarea: "textarea";
309
- select: "select";
310
423
  }>;
311
424
  placeholder: z.ZodOptional<z.ZodString>;
312
425
  required: z.ZodOptional<z.ZodBoolean>;
@@ -6,6 +6,50 @@
6
6
  */
7
7
  import { z } from "zod";
8
8
  // ── Plan structures ─────────────────────────────────────────────────
9
+ /**
10
+ * One scientific setting of a grounded step: a parameter of the procedure
11
+ * that `knowledge_recommend` returned, with the procedure step it belongs to
12
+ * and the source of its value. The host binds the settings to the template
13
+ * of the step at dispatch, thus a template default never replaces a plan
14
+ * decision silently.
15
+ */
16
+ export const GroundingSettingSchema = z.object({
17
+ step: z.string().describe("The procedure step the setting belongs to (for example `differential_expression` or `normalize`)."),
18
+ name: z.string().describe("The parameter name as the procedure names it (for example `alpha` or `lfc_shrink`)."),
19
+ value: z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]).describe("The value the procedure sets."),
20
+ source: z.string().optional().describe("The source of the value (a doi or a document) when the procedure names one. Absent otherwise."),
21
+ });
22
+ /**
23
+ * The grounding of one method step: the claim identifiers and the snapshot
24
+ * digest that `knowledge_recommend` returned in this run, the template the
25
+ * step renders, the settings of the procedure, and a one-line reason.
26
+ * Optional on both step schemas, thus a stored plan and a plan made without
27
+ * the knowledge service load and validate as before. Phase 0 validates the
28
+ * shape only. An empty field is visible: the evaluation counts a method step
29
+ * without a value as ungrounded.
30
+ */
31
+ export const GroundingSchema = z.object({
32
+ status: z
33
+ .enum(["grounded", "ungrounded", "flagged"])
34
+ .describe("`grounded` when the step follows a returned procedure; `ungrounded` when no rule covered it or the service did not answer; `flagged` when a rule changed the outcome of the step."),
35
+ snapshot: z.string().describe("The `snapshot.digest` that `knowledge_recommend` returned in this run, or `none`."),
36
+ claims: z
37
+ .array(z.string())
38
+ .describe("The claim identifiers of the step as `knowledge_recommend` returned them (for example `R-0031@e7d0`). Empty when ungrounded."),
39
+ template: z
40
+ .string()
41
+ .optional()
42
+ .describe("The template id with its version (for example `tpl-deseq2-two-group@1.0.0`) when the step renders a template. Absent otherwise."),
43
+ settings: z
44
+ .array(GroundingSettingSchema)
45
+ .optional()
46
+ .describe("The scientific settings of the step: the parameters of the procedure steps the plan step holds, as `knowledge_recommend` returned them. " +
47
+ "Copy the `grounding.settings` of the skeleton step as it is, one entry per parameter, with its step, name, value, and source. " +
48
+ "Do not restate a setting as prose only, and do not change a value here: state a different value in the step and its reason. Absent when the step is ungrounded."),
49
+ reason: z
50
+ .string()
51
+ .describe("One line: the situation and the method with the rule that selects it, the side chosen for a disputed rule, or why the step is ungrounded or flagged."),
52
+ });
9
53
  /**
10
54
  * A step of an analysis plan. `PlanStepSchema` (schemas/plan-schemas.ts) narrows
11
55
  * this into the planner's output contract and emits it as the `submit_plan`
@@ -52,8 +96,18 @@ export const AnalysisStepSchema = z.object({
52
96
  })
53
97
  .optional()
54
98
  .describe("Resources the step needs. Ground the estimate in the actual data size — see the resource-estimation rules."),
99
+ grounding: GroundingSchema.optional().describe("The knowledge grounding of a method step: fill it from the answer of `knowledge_recommend` when that tool is attached. Omit it when no knowledge tool is attached."),
55
100
  // Execution fields
56
101
  agent: z.string().optional().describe("Assigned sandbox agent name from registry"),
102
+ // Optional on the persistence schema so a plan stored before this field still parses.
103
+ // `PlanStepSchema` re-requires it for planner output. The launch reads it with the agent id to
104
+ // resolve what reference data the capability declares — refer to `capabilityDataRequirement`.
105
+ capability: z
106
+ .string()
107
+ .optional()
108
+ .describe("The one capability phrase of the assigned agent that this step uses, copied EXACTLY from the agent catalog. " +
109
+ "One phrase, verbatim — never a paraphrase, never a list, never your own wording. " +
110
+ "The launch resolves the reference data that the capability declares before the run starts, so a reworded phrase loses that check and the step discovers an absent source itself."),
57
111
  timeout: z.number().optional().describe("Execution timeout in seconds (falls back to image default)"),
58
112
  maxSteps: z.number().describe("Max LLM agentic steps for sandbox agent"),
59
113
  description: z.string().optional().describe("Human-readable description of what the step produces."),
@@ -107,7 +161,7 @@ export const ContentBlockSchema = z.discriminatedUnion("type", [
107
161
  z.object({ type: z.literal("plan"), plan: AnalysisPlanSchema }),
108
162
  z.object({
109
163
  type: z.literal("json"),
110
- data: z.record(z.string(), z.unknown()),
164
+ data: z.record(z.string(), z.json()),
111
165
  label: z.string().optional(),
112
166
  }),
113
167
  z.object({ type: z.literal("text"), text: z.string() }),
@@ -122,7 +176,7 @@ export const ContentBlockSchema = z.discriminatedUnion("type", [
122
176
  */
123
177
  export const SuspensionActionSchema = z.object({
124
178
  label: z.string(),
125
- value: z.record(z.string(), z.unknown()),
179
+ value: z.record(z.string(), z.json()),
126
180
  variant: z.enum(["default", "outline", "destructive"]).optional(),
127
181
  icon: z.enum(["check", "x", "alert-circle"]).optional(),
128
182
  });
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The turn that runs on a thread. The open of a turn claims the thread, and the
3
+ * end of the turn releases it. A claim whose turn no longer runs, for example
4
+ * after a cancel, gives way to the next turn.
5
+ */
6
+ import type { ResultAsync } from "neverthrow";
7
+ import { type DbError } from "../lib/db-result.js";
8
+ import type { Querier } from "./db.js";
9
+ /** The outcome of a claim: the thread is the turn's, another turn that still runs holds it, or no live thread exists. */
10
+ export type TurnClaim = {
11
+ readonly kind: "claimed";
12
+ } | {
13
+ readonly kind: "held";
14
+ readonly turnId: string;
15
+ } | {
16
+ readonly kind: "no_thread";
17
+ };
18
+ /**
19
+ * Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
20
+ * run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
21
+ */
22
+ export declare function claimThreadForTurn(pool: Querier, threadId: string, turnId: string, stillRuns: (turnId: string) => Promise<boolean>): ResultAsync<TurnClaim, DbError>;
23
+ /**
24
+ * Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
25
+ * code, thus the harness closes its record here. A record that is closed already does not change.
26
+ */
27
+ export declare function closeOpenTurnRecords(pool: Querier, threadId: string): ResultAsync<void, DbError>;
28
+ /** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
29
+ export declare function turnOfAsk(pool: Querier, askId: string): ResultAsync<string | undefined, DbError>;
30
+ /** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
31
+ export declare function queryTurnsOfAnalysis(pool: Querier, analysisId: string): ResultAsync<{
32
+ readonly threadId: string;
33
+ readonly turnId: string;
34
+ }[], DbError>;
35
+ /** Release the thread, when the turn still holds it. A second release changes nothing. */
36
+ export declare function releaseThreadOfTurn(pool: Querier, threadId: string, turnId: string): ResultAsync<void, DbError>;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The turn that runs on a thread. The open of a turn claims the thread, and the
3
+ * end of the turn releases it. A claim whose turn no longer runs, for example
4
+ * after a cancel, gives way to the next turn.
5
+ */
6
+ import { z } from "zod";
7
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
8
+ const HolderRowSchema = z.object({ active_turn_id: z.string().nullable() });
9
+ /** Each attempt reads the holder one time. A holder that changes between two reads takes one more attempt. */
10
+ const CLAIM_ATTEMPTS = 3;
11
+ /**
12
+ * Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
13
+ * run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
14
+ */
15
+ export function claimThreadForTurn(pool, threadId, turnId, stillRuns) {
16
+ return tryQuery("activeTurns.claim", async () => {
17
+ let holder = null;
18
+ for (let attempt = 0; attempt < CLAIM_ATTEMPTS; attempt++) {
19
+ const { rows } = await pool.query("SELECT active_turn_id FROM cortex_analysis_threads WHERE thread_id = $1 AND deleted_at IS NULL", [threadId]);
20
+ const row = rows[0];
21
+ if (row === undefined)
22
+ return { kind: "no_thread" };
23
+ holder = HolderRowSchema.parse(row).active_turn_id;
24
+ if (holder !== null && holder !== turnId && (await stillRuns(holder)))
25
+ return { kind: "held", turnId: holder };
26
+ const taken = await pool.query(`UPDATE cortex_analysis_threads SET active_turn_id = $2
27
+ WHERE thread_id = $1 AND active_turn_id IS NOT DISTINCT FROM $3`, [threadId, turnId, holder]);
28
+ if ((taken.rowCount ?? 0) > 0)
29
+ return { kind: "claimed" };
30
+ }
31
+ return { kind: "held", turnId: holder ?? "" };
32
+ });
33
+ }
34
+ /**
35
+ * Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
36
+ * code, thus the harness closes its record here. A record that is closed already does not change.
37
+ */
38
+ export function closeOpenTurnRecords(pool, threadId) {
39
+ return tryMutation("activeTurns.closeOpen", () => pool.query("UPDATE cortex_thread_turns SET status = 'aborted', closed_at = NOW() WHERE thread_id = $1 AND status = 'open'", [threadId])).map(() => undefined);
40
+ }
41
+ const AskTurnRowSchema = z.object({ active_turn_id: z.string().nullable() });
42
+ /** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
43
+ export function turnOfAsk(pool, askId) {
44
+ return tryQuery("activeTurns.turnOfAsk", async () => {
45
+ const { rows } = await pool.query(`SELECT threads.active_turn_id FROM cortex_asks asks
46
+ JOIN cortex_analysis_threads threads ON threads.thread_id = asks.thread_id
47
+ WHERE asks.id = $1`, [askId]);
48
+ const row = rows[0];
49
+ return row === undefined ? undefined : (AskTurnRowSchema.parse(row).active_turn_id ?? undefined);
50
+ });
51
+ }
52
+ const TurnOfThreadRowSchema = z.object({ thread_id: z.string(), active_turn_id: z.string() });
53
+ /** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
54
+ export function queryTurnsOfAnalysis(pool, analysisId) {
55
+ return tryQuery("activeTurns.ofAnalysis", async () => {
56
+ const { rows } = await pool.query(`SELECT thread_id, active_turn_id FROM cortex_analysis_threads
57
+ WHERE analysis_id = $1 AND active_turn_id IS NOT NULL AND deleted_at IS NULL`, [analysisId]);
58
+ return rows.map((row) => {
59
+ const parsed = TurnOfThreadRowSchema.parse(row);
60
+ return { threadId: parsed.thread_id, turnId: parsed.active_turn_id };
61
+ });
62
+ });
63
+ }
64
+ /** Release the thread, when the turn still holds it. A second release changes nothing. */
65
+ export function releaseThreadOfTurn(pool, threadId, turnId) {
66
+ return tryMutation("activeTurns.release", () => pool.query("UPDATE cortex_analysis_threads SET active_turn_id = NULL WHERE thread_id = $1 AND active_turn_id = $2", [threadId, turnId])).map(() => undefined);
67
+ }
@@ -10,7 +10,7 @@ import { type DbError } from "../lib/db-result.js";
10
10
  import type { Querier } from "./db.js";
11
11
  import type { RunStatus, TerminalRunStatus } from "./schema.js";
12
12
  /** The newest run of one analysis, with the title of its plan and the counts of its step rows. */
13
- export interface LatestRunSummary {
13
+ export type LatestRunSummary = {
14
14
  readonly analysisId: string;
15
15
  readonly runId: string;
16
16
  readonly status: RunStatus;
@@ -19,26 +19,26 @@ export interface LatestRunSummary {
19
19
  readonly totalSteps: number;
20
20
  readonly startedAt: string;
21
21
  readonly completedAt: string | null;
22
- }
22
+ };
23
23
  /** A run of a list of run ids, with the fields of the newest-run read and the thread of the run. */
24
- export interface RunProgressSummary extends LatestRunSummary {
24
+ export type RunProgressSummary = LatestRunSummary & {
25
25
  /** The thread of the run as the ledger stores it, or `null`. */
26
26
  readonly threadId: string | null;
27
- }
27
+ };
28
28
  /** A terminal run that ended at or after a time. */
29
- export interface EndedRunSummary {
29
+ export type EndedRunSummary = {
30
30
  readonly analysisId: string;
31
31
  readonly runId: string;
32
32
  readonly status: TerminalRunStatus;
33
33
  readonly completedAt: string;
34
- }
34
+ };
35
35
  /** The data profile state of one analysis that has a profile status. */
36
- export interface DataProfileSummary {
36
+ export type DataProfileSummary = {
37
37
  readonly analysisId: string;
38
38
  readonly status: DataProfileLifecycleStatus;
39
39
  readonly completedAt: string | null;
40
40
  readonly profiledFiles: number | null;
41
- }
41
+ };
42
42
  export declare function queryRunCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
43
43
  analysisId: string;
44
44
  status: string;
@@ -146,7 +146,7 @@ export function queryRunsEndedSince(pool, input) {
146
146
  const result = await pool.query({
147
147
  text: `SELECT analysis_id, run_id, status, completed_at
148
148
  FROM cortex_runs
149
- WHERE status IN ('completed', 'partial', 'failed', 'canceled', 'suspended_insufficient_funds')
149
+ WHERE status IN ('completed', 'partial', 'failed', 'canceled')
150
150
  AND completed_at >= $1
151
151
  ORDER BY completed_at DESC, run_id DESC
152
152
  LIMIT $2`,
@@ -185,9 +185,9 @@ export function queryDataProfileStatusByAnalyses(pool, analysisIds) {
185
185
  status: r.data_profile_status,
186
186
  completedAt: r.data_profile_completed_at ?? null,
187
187
  profiledFiles: profileDatasetFileCount({
188
- ...(r.partition === null ? {} : { partition: r.partition }),
189
- ...(r.coverage === null ? {} : { coverage: r.coverage }),
190
- ...(r.kinds === null ? {} : { kinds: r.kinds }),
188
+ partition: r.partition ?? undefined,
189
+ coverage: r.coverage ?? undefined,
190
+ kinds: r.kinds ?? undefined,
191
191
  }),
192
192
  }));
193
193
  });
@@ -19,17 +19,3 @@ export declare function loadAnalysisStatus(pool: Querier, resourceId: string): R
19
19
  status: string;
20
20
  context: string | null;
21
21
  } | null, DbError>;
22
- /**
23
- * Mark an analysis as suspended.
24
- * Idempotent — no-op if already suspended.
25
- *
26
- * `suspended_insufficient_funds` is the name of the one suspended state, for
27
- * each reason of the host, thus no reason is persisted. A chat turn never calls
28
- * it.
29
- */
30
- export declare function suspendAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
31
- /**
32
- * Resume a suspended analysis after the user tops up.
33
- * Only transitions from `suspended_insufficient_funds` → `active`.
34
- */
35
- export declare function resumeAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
@@ -40,35 +40,3 @@ export function loadAnalysisStatus(pool, resourceId) {
40
40
  return { status: row.status, context: row.context ?? null };
41
41
  });
42
42
  }
43
- /**
44
- * Mark an analysis as suspended.
45
- * Idempotent — no-op if already suspended.
46
- *
47
- * `suspended_insufficient_funds` is the name of the one suspended state, for
48
- * each reason of the host, thus no reason is persisted. A chat turn never calls
49
- * it.
50
- */
51
- export function suspendAnalysis(pool, analysisId) {
52
- return tryMutation("analyses.suspendAnalysis", async () => {
53
- await pool.query({
54
- text: `UPDATE cortex_analysis_state
55
- SET status = 'suspended_insufficient_funds', updated_at = $1
56
- WHERE analysis_id = $2 AND status != 'suspended_insufficient_funds'`,
57
- values: [new Date().toISOString(), analysisId],
58
- });
59
- });
60
- }
61
- /**
62
- * Resume a suspended analysis after the user tops up.
63
- * Only transitions from `suspended_insufficient_funds` → `active`.
64
- */
65
- export function resumeAnalysis(pool, analysisId) {
66
- return tryMutation("analyses.resumeAnalysis", async () => {
67
- await pool.query({
68
- text: `UPDATE cortex_analysis_state
69
- SET status = 'active', updated_at = $1
70
- WHERE analysis_id = $2 AND status = 'suspended_insufficient_funds'`,
71
- values: [new Date().toISOString(), analysisId],
72
- });
73
- });
74
- }