@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
@@ -16,6 +16,7 @@
16
16
  * must map to a concrete `Tool`; unknown names throw at composition time
17
17
  * so misconfigured agents fail at startup, not at the first LLM call.
18
18
  */
19
+ import { createEditIntentStore } from "../../state/edit-intents.js";
19
20
  import { sandboxOrientCorePromptFor, sandboxPackageLinkPrompt, sandboxAnalysisStepStandardsPrompt } from "../../prompts/sandbox-standards.js";
20
21
  import { composeSystemPrompt } from "../system-prompt.js";
21
22
  // Sandbox-environment introspection, plus the farm-extension seam face.
@@ -42,34 +43,49 @@ import { createSubmitFileMetadataTool } from "../../tools/sandbox/submit-file-me
42
43
  import { toSandboxPath } from "../../workspace/paths.js";
43
44
  import { SANDBOX_AGENT_DEFAULT_MAX_ITERATIONS } from "./types.js";
44
45
  import { createResolveCitationTool } from "../../tools/research/resolve-citation.js";
46
+ import { createKnowledgeTemplateTool } from "../../tools/knowledge/index.js";
45
47
  /**
46
48
  * Tools every sandbox agent receives — sandbox-environment introspection,
47
- * library docs, and run inspection. Spread into each agent's
48
- * `meta.tools` so planner-facing metadata and the resolved tool record
49
+ * library docs, run inspection, and the knowledge template. Spread into each
50
+ * agent's `meta.tools` so planner-facing metadata and the resolved tool record
49
51
  * stay in sync. Keep minimal — only tools every agent genuinely needs.
52
+ *
53
+ * The knowledge template is here, not on a specialist, because the template
54
+ * follows the step: the planner binds a template to a step from the
55
+ * recommendation and routes that step to whichever specialist owns its data
56
+ * object. The tool acts only on the template the step grounding names, thus
57
+ * a step without a template costs nothing, and it attaches only when the
58
+ * embedder binds a knowledge client (see the registry below).
50
59
  */
51
- export const BASE_SANDBOX_TOOLS = ["listAvailablePackages", "listAvailableRefs", "resolveLibraryId", "queryDocs", "inspectRun"];
60
+ export const BASE_SANDBOX_TOOLS = [
61
+ "listAvailablePackages",
62
+ "listAvailableRefs",
63
+ "resolveLibraryId",
64
+ "queryDocs",
65
+ "inspectRun",
66
+ "knowledgeTemplate",
67
+ ];
52
68
  /**
53
69
  * Resolve `meta.tools` into the bio/research tools record. The workspace
54
70
  * read/mutate tools and `inspect_data_profile` are added by `createSandboxAgent`
55
71
  * regardless of meta — they are the always-on substrate, not in the allowlist.
56
72
  */
57
- function resolveSandboxTools(deps, tools) {
73
+ function resolveSandboxTools(deps, tools, mutator) {
58
74
  const ncbi = createNcbiTools(deps.bioKeys);
59
- const chemDb = createChemDbTools(deps.bioKeys, { ...(deps.logger ? { logger: deps.logger } : {}) });
75
+ const chemDb = createChemDbTools(deps.bioKeys, { logger: deps.logger });
60
76
  const amass = createAmassTools(deps.bioKeys);
61
77
  if (tools.includes("resolve_citation") && deps.citationResolver === undefined) {
62
78
  throw new Error('createSandboxAgent: SandboxToolName "resolve_citation" requires a CitationResolver dependency.');
63
79
  }
64
80
  const registry = {
65
81
  listAvailablePackages: createListAvailablePackagesTool({
66
- ...(deps.farmLockFile ? { farmLockFile: deps.farmLockFile } : {}),
67
- ...(deps.imagePackagesFile ? { imagePackagesFile: deps.imagePackagesFile } : {}),
82
+ farmLockFile: deps.farmLockFile,
83
+ imagePackagesFile: deps.imagePackagesFile,
68
84
  // The bound seam adds `link_packages` below, and the description of
69
85
  // the listing must then stop at "absent", not at "missing".
70
86
  linkToolPresent: deps.extendAnalysisFarm !== undefined,
71
87
  }),
72
- listAvailableRefs: createListAvailableRefsTool({ ...(deps.refStorePath ? { refStorePath: deps.refStorePath } : {}) }),
88
+ listAvailableRefs: createListAvailableRefsTool({ refStorePath: deps.refStorePath }),
73
89
  scanInputs: createScanInputsTool({
74
90
  workspaceFs: deps.workspaceFs,
75
91
  analysisId: deps.step.analysisId,
@@ -97,6 +113,15 @@ function resolveSandboxTools(deps, tools) {
97
113
  searchRegulatoryApprovals: amass.regulatoryApprovals,
98
114
  targetSafety: targetSafetyTool,
99
115
  comptox: chemDb.comptox,
116
+ knowledgeTemplate: deps.knowledge && mutator
117
+ ? createKnowledgeTemplateTool({
118
+ client: deps.knowledge,
119
+ mutator,
120
+ farmLockFile: deps.farmLockFile,
121
+ imagePackagesFile: deps.imagePackagesFile,
122
+ binding: deps.step.templateBinding,
123
+ })
124
+ : undefined,
100
125
  };
101
126
  const seen = new Set();
102
127
  const resolved = [];
@@ -105,6 +130,12 @@ function resolveSandboxTools(deps, tools) {
105
130
  continue;
106
131
  seen.add(name);
107
132
  const tool = registry[name];
133
+ // The knowledge template is the one optional member of the allowlist: every
134
+ // agent lists it through BASE_SANDBOX_TOOLS, and it attaches only when the
135
+ // embedder binds a client and the agent can write. Absence is a normal
136
+ // state, not a wiring fault.
137
+ if (name === "knowledgeTemplate" && !tool)
138
+ continue;
108
139
  if (!tool) {
109
140
  throw new Error(`createSandboxAgent: unknown SandboxToolName "${name}" — ` + `agent meta references a tool with no harness implementation.`);
110
141
  }
@@ -124,24 +155,30 @@ function buildWorkspaceTools(deps, readOnly) {
124
155
  // it is correct for non-step agents such as the data profiler too.
125
156
  const hostWorkingDir = step.allowedWritePrefix;
126
157
  const sandboxWorkingDir = toSandboxPath(step.workspaceRoot, step.analysisId, hostWorkingDir);
127
- const mutateTools = readOnly
128
- ? []
129
- : (() => {
130
- const mutator = createWorkspaceMutator({
131
- workspaceRoot: step.workspaceRoot,
132
- analysisId: step.analysisId,
133
- workingDir: hostWorkingDir,
134
- ...(lineageCollector ? { lineageCollector } : {}),
135
- });
136
- return [createWriteFileTool({ mutator }), createEditFileTool({ mutator, workspaceFilesystem: workspaceFs, workingDir: hostWorkingDir })];
137
- })();
138
- return [
158
+ const mutator = readOnly
159
+ ? undefined
160
+ : createWorkspaceMutator({
161
+ workspaceRoot: step.workspaceRoot,
162
+ analysisId: step.analysisId,
163
+ workingDir: hostWorkingDir,
164
+ lineageCollector,
165
+ });
166
+ const mutateTools = mutator
167
+ ? [
168
+ createWriteFileTool({ mutator }),
169
+ createEditFileTool({ mutator, workspaceFilesystem: workspaceFs, workingDir: hostWorkingDir, intents: createEditIntentStore(pool) }),
170
+ ]
171
+ : [];
172
+ const tools = [
139
173
  createExecuteCommandTool({
140
174
  sandboxClient,
141
175
  sandbox: step.sandbox,
142
176
  deadlineMs: step.deadlineMs,
143
177
  defaultCwd: sandboxWorkingDir,
144
- ...(lineageCollector ? { lineageCollector, mountRoot: `/${step.analysisId}` } : {}),
178
+ lineageCollector,
179
+ mountRoot: `/${step.analysisId}`,
180
+ workspaceFilesystem: workspaceFs,
181
+ mutator,
145
182
  }),
146
183
  ...mutateTools,
147
184
  createReadFileTool(workspaceFs, hostWorkingDir),
@@ -150,6 +187,7 @@ function buildWorkspaceTools(deps, readOnly) {
150
187
  createGrepTool(workspaceFs, hostWorkingDir),
151
188
  ...(embedding ? [createWorkspaceSearchTool(pool, embedding)] : []),
152
189
  ];
190
+ return { tools, mutator };
153
191
  }
154
192
  /**
155
193
  * Build one sandbox `AgentDefinition`. The system prompt is composed once
@@ -185,8 +223,9 @@ export function createSandboxAgent(deps, meta, body, opts = {}) {
185
223
  const agentBody = [body, ...sandboxLayer].map((s) => s.trim()).join("\n\n");
186
224
  const systemPrompt = composeSystemPrompt(agentBody);
187
225
  const skillTools = deps.skillsDir ? Object.values(createSkillTools({ skillsDir: deps.skillsDir, skills: meta.skills })) : [];
226
+ const workspace = buildWorkspaceTools(deps, opts.readOnly ?? false);
188
227
  const tools = [
189
- ...buildWorkspaceTools(deps, opts.readOnly ?? false),
228
+ ...workspace.tools,
190
229
  ...(deps.toolOutputStore ? [createReadToolOutputTool(deps.toolOutputStore)] : []),
191
230
  // Always-on, not in the `meta.tools` allowlist: the data profile is the only
192
231
  // record of what the analysis's input dataset IS, and no file carries it (the
@@ -199,8 +238,8 @@ export function createSandboxAgent(deps, meta, body, opts = {}) {
199
238
  // seam (the harness-sandbox-agents spec).
200
239
  ...(deps.extendAnalysisFarm ? [createLinkPackagesTool({ extendAnalysisFarm: deps.extendAnalysisFarm, analysisId: deps.step.analysisId })] : []),
201
240
  ...skillTools,
202
- ...resolveSandboxTools(deps, meta.tools),
203
- ...(deps.blockerHolder ? [createReportBlockerTool(deps.blockerHolder)] : []),
241
+ ...resolveSandboxTools(deps, meta.tools, workspace.mutator),
242
+ ...(deps.reportsBlocker === true ? [createReportBlockerTool()] : []),
204
243
  ...(deps.fileMetadata ? [createSubmitFileMetadataTool(deps.fileMetadata)] : []),
205
244
  ];
206
245
  return {
@@ -3,6 +3,11 @@
3
3
  */
4
4
  import { translationalSafetyAgentPrompt } from "../../prompts/sandbox/translational-safety-agent.js";
5
5
  import { BASE_SANDBOX_TOOLS, createSandboxAgent } from "./shared.js";
6
+ /**
7
+ * Named once, because the capability phrase is the key of its own data requirement below and a
8
+ * plan step copies it verbatim. Two spellings of one capability would lose the pre-launch check.
9
+ */
10
+ const MATCHED_NEGATIVE_CAPABILITY = "matched negative gene set for a tissue risk benchmark (annotation_free or tested_clean negatives) matched on tissue expression and PPI connectivity with mouse and human phenotype annotation exclusions";
6
11
  export const meta = {
7
12
  id: "translational-safety-agent",
8
13
  capabilities: [
@@ -20,6 +25,8 @@ export const meta = {
20
25
  "hematological toxicity assessment",
21
26
  "mouse KO phenotype lookup",
22
27
  "cross-species baseline expression lookup",
28
+ MATCHED_NEGATIVE_CAPABILITY,
29
+ "expression and PPI connectivity matching",
23
30
  ],
24
31
  suitableFor: [
25
32
  "safety-biomarkers",
@@ -29,6 +36,25 @@ export const meta = {
29
36
  "clinical-safety-labs",
30
37
  "drug-interaction-data",
31
38
  "pharmacogenomic-data",
39
+ "gene-lists",
40
+ ],
41
+ // The method of this capability reads six opt-in datasets. Without any one of them a negatives
42
+ // file would carry a label the run cannot defend, so the launch refuses rather than spend a run.
43
+ // The recommended datasets it also reads (the expression table, the network, the gene tables,
44
+ // the GO collection) stay out: a default store holds them, and declaring one would refuse a
45
+ // launch an embedder already provisioned.
46
+ dataRequirements: [
47
+ {
48
+ capability: MATCHED_NEGATIVE_CAPABILITY,
49
+ datasets: [
50
+ "string-aliases-human",
51
+ "mgi-mouse-human-homology",
52
+ "impc-phenotyping",
53
+ "hpo-annotations",
54
+ "opentargets-mouse-phenotype",
55
+ "opentargets-target-safety-event",
56
+ ],
57
+ },
32
58
  ],
33
59
  skills: ["translational-safety", "cheminformatics", "shared/omics-general"],
34
60
  tools: [
@@ -12,9 +12,23 @@
12
12
  * in the tool's `perSource` report; the rest of the call still answers.
13
13
  */
14
14
  /** Closed allowlist of tools any sandbox agent may declare. */
15
- export type SandboxToolName = "listAvailablePackages" | "listAvailableRefs" | "scanInputs" | "resolveLibraryId" | "queryDocs" | "inspectRun" | "pubmed" | "resolve_citation" | "searchGene" | "lookupAnnotation" | "searchInteractions" | "chembl" | "pubchem" | "opentargets" | "geneDiseaseEvidence" | "drugGeneInteractions" | "genePreclinicalProfile" | "searchFaers" | "searchClinicalTrials" | "searchGeoDatasets" | "searchRegulatoryApprovals" | "targetSafety" | "comptox";
15
+ export type SandboxToolName = "listAvailablePackages" | "listAvailableRefs" | "scanInputs" | "resolveLibraryId" | "queryDocs" | "inspectRun" | "pubmed" | "resolve_citation" | "searchGene" | "lookupAnnotation" | "searchInteractions" | "chembl" | "pubchem" | "opentargets" | "geneDiseaseEvidence" | "drugGeneInteractions" | "genePreclinicalProfile" | "searchFaers" | "searchClinicalTrials" | "searchGeoDatasets" | "searchRegulatoryApprovals" | "targetSafety" | "comptox" | "knowledgeTemplate";
16
+ /**
17
+ * The reference datasets that one capability of one agent cannot run without.
18
+ *
19
+ * A requirement belongs to a capability, never to the agent: an agent holds capabilities that need
20
+ * no reference data at all, so an agent-wide requirement would refuse a step that needs nothing.
21
+ * The skill of the agent still states what the data IS and how to use it. This states which catalog
22
+ * entry carries it, in a form a test can pin.
23
+ */
24
+ export type CapabilityDataRequirement = {
25
+ /** One phrase of the same agent's `capabilities`, verbatim — the step copies it from the catalog. */
26
+ readonly capability: string;
27
+ /** Reference-catalog dataset ids. Declare only an opt-in dataset: a recommended one is already in a default store. */
28
+ readonly datasets: readonly string[];
29
+ };
16
30
  /** Planner-facing metadata + tool allowlist for one sandbox agent. */
17
- export interface AgentMeta {
31
+ export type AgentMeta = {
18
32
  /** Stable agent id — also the key in the catalog and the `AgentDefinition.id`. */
19
33
  readonly id: string;
20
34
  /** Capabilities surfaced to the planner. */
@@ -29,6 +43,15 @@ export interface AgentMeta {
29
43
  readonly defaultMaxSteps?: number;
30
44
  /** False for agents the planner must NOT assign to plan steps (executors, the profiler). */
31
45
  readonly plannable?: boolean;
32
- }
46
+ /**
47
+ * Per-capability reference-data requirements. Omitted by an agent whose capabilities all run on
48
+ * what a default store holds.
49
+ *
50
+ * The pre-launch pass resolves these against the live store, so an absent dataset refuses the
51
+ * launch instead of costing a run. The planner-facing projection deliberately drops this field:
52
+ * a prompt names no dataset, so the ids reach a caller through a tool and the launch through here.
53
+ */
54
+ readonly dataRequirements?: readonly CapabilityDataRequirement[];
55
+ };
33
56
  /** Default runaway-guard for sandbox agents. */
34
57
  export declare const SANDBOX_AGENT_DEFAULT_MAX_ITERATIONS = 200;
@@ -10,9 +10,9 @@
10
10
  * for the per-agent skill list. Declared structurally so `AgentMeta` types
11
11
  * with `readonly` arrays work without a cast at the call site.
12
12
  */
13
- interface AgentMetaLike {
13
+ type AgentMetaLike = {
14
14
  readonly id: string;
15
15
  readonly skills: readonly string[];
16
- }
16
+ };
17
17
  export declare function validateAgentSkills(skillsDir: string, catalog: Readonly<Record<string, AgentMetaLike>>): void;
18
18
  export {};
@@ -5,6 +5,8 @@
5
5
  * agent resolves to a readable SKILL.md. Catches Dockerfile drift and typos
6
6
  * in agent meta before the first analysis runs.
7
7
  */
8
+ import { errorMessageOf } from "../../lib/thrown.js";
9
+ import { textOf } from "../../lib/unknown-text.js";
8
10
  import { statSync } from "node:fs";
9
11
  import { join } from "node:path";
10
12
  export function validateAgentSkills(skillsDir, catalog) {
@@ -15,7 +17,7 @@ export function validateAgentSkills(skillsDir, catalog) {
15
17
  }
16
18
  }
17
19
  catch (err) {
18
- const msg = err instanceof Error ? err.message : String(err);
20
+ const msg = errorMessageOf(err) ?? textOf(err);
19
21
  throw new Error(`SKILLS_DIR "${skillsDir}" is not accessible: ${msg}. ` + `Set SKILLS_DIR to a directory containing skill subfolders (one SKILL.md each).`, { cause: err });
20
22
  }
21
23
  const missing = [];
@@ -8,13 +8,27 @@
8
8
  * `{{AGENT_CATALOG}}` placeholder.
9
9
  */
10
10
  /** Planner-facing metadata for one sandbox agent. */
11
- export interface PlannerAgentMeta {
11
+ export type PlannerAgentMeta = {
12
12
  readonly id: string;
13
13
  readonly capabilities: readonly string[];
14
14
  readonly suitableFor: readonly string[];
15
- }
15
+ };
16
16
  /** The sandbox agents the planner may assign to analysis-plan steps. */
17
17
  export declare const PLANNABLE_AGENT_CATALOG: readonly PlannerAgentMeta[];
18
+ /**
19
+ * The reference datasets one capability of one agent cannot run without, by catalog id.
20
+ *
21
+ * Empty for an unknown agent, for an agent that declares nothing, and for a phrase no declaration
22
+ * matches. An unmatched phrase must NOT refuse a launch: the pass can only demand what a
23
+ * declaration states, so a paraphrased phrase degrades to the behaviour of a step with no phrase.
24
+ */
25
+ export declare function capabilityDataRequirement(agentId: string, capability: string): readonly string[];
26
+ /** Every declared requirement, for a caller that asks what a capability wants before it plans. */
27
+ export declare function declaredDataRequirements(): readonly {
28
+ agentId: string;
29
+ capability: string;
30
+ datasets: readonly string[];
31
+ }[];
18
32
  /**
19
33
  * Ids of the agents the planner may assign — the `z.enum` domain for
20
34
  * `PlanStepSchema.agent`. A non-empty tuple, as `z.enum` requires.
@@ -16,16 +16,35 @@ export const PLANNABLE_AGENT_CATALOG = Object.values(SANDBOX_AGENT_META)
16
16
  capabilities: [...meta.capabilities],
17
17
  suitableFor: [...meta.suitableFor],
18
18
  }));
19
+ /**
20
+ * The reference datasets one capability of one agent cannot run without, by catalog id.
21
+ *
22
+ * Empty for an unknown agent, for an agent that declares nothing, and for a phrase no declaration
23
+ * matches. An unmatched phrase must NOT refuse a launch: the pass can only demand what a
24
+ * declaration states, so a paraphrased phrase degrades to the behaviour of a step with no phrase.
25
+ */
26
+ export function capabilityDataRequirement(agentId, capability) {
27
+ const entry = SANDBOX_AGENT_META[agentId]?.dataRequirements?.find((requirement) => requirement.capability === capability);
28
+ return entry?.datasets ?? [];
29
+ }
30
+ /** Every declared requirement, for a caller that asks what a capability wants before it plans. */
31
+ export function declaredDataRequirements() {
32
+ return Object.values(SANDBOX_AGENT_META).flatMap((meta) => (meta.dataRequirements ?? []).map((requirement) => ({
33
+ agentId: meta.id,
34
+ capability: requirement.capability,
35
+ datasets: requirement.datasets,
36
+ })));
37
+ }
19
38
  /**
20
39
  * Ids of the agents the planner may assign — the `z.enum` domain for
21
40
  * `PlanStepSchema.agent`. A non-empty tuple, as `z.enum` requires.
22
41
  */
23
42
  export const PLANNABLE_AGENT_IDS = (() => {
24
- const ids = PLANNABLE_AGENT_CATALOG.map((meta) => meta.id);
25
- if (ids.length === 0) {
43
+ const [first, ...rest] = PLANNABLE_AGENT_CATALOG.map((meta) => meta.id);
44
+ if (first === undefined) {
26
45
  throw new Error("PLANNABLE_AGENT_CATALOG is empty");
27
46
  }
28
- return ids;
47
+ return [first, ...rest];
29
48
  })();
30
49
  /**
31
50
  * Every sandbox agent id — plannable agents plus the workflow-dedicated
@@ -29,7 +29,7 @@
29
29
  * Both flags default off, so the zero-argument call yields a fully guarded
30
30
  * headless agent — the safe default is also the shortest one to write.
31
31
  */
32
- export interface ComposeSystemPromptOptions {
32
+ export type ComposeSystemPromptOptions = {
33
33
  /**
34
34
  * Include the SOUL identity layer (name, scope, refusal of harmful
35
35
  * requests, impersonation and external-action guardrails). Default `false`
@@ -41,7 +41,7 @@ export interface ComposeSystemPromptOptions {
41
41
  * Default `false` — opt in only for the conversation agent.
42
42
  */
43
43
  readonly conversational?: boolean;
44
- }
44
+ };
45
45
  /**
46
46
  * Compose an agent's full system prompt: the always-on SOUL execution core, the
47
47
  * layers the agent opted into, then the agent's own prompt — joined by blank
@@ -23,12 +23,15 @@ export type ApprovePlanInput = {
23
23
  analysisId: string;
24
24
  threadId: string;
25
25
  planId: string;
26
+ /** The newest run of the plan in the view that the person approved, or `null` when that view showed no run. */
27
+ newestRunId: string | null;
26
28
  identity: Identity;
27
29
  auth: AuthContext;
28
30
  };
29
31
  /**
30
- * The outcome of an approval. `started` is false when a run of the plan was already active: the
31
- * approval then changed nothing, and `message` is `null`. `message` is also `null` when the record
32
+ * The outcome of an approval. `started` is false when a run of the plan was already active, or when the
33
+ * view of the person was stale: the approval then changed nothing, `runId` names the active run or the
34
+ * newest run of the plan, and `message` is `null`. `message` is also `null` when the record
32
35
  * could not be appended, because the run started anyway. It has no `createdAt`: the transcript read
33
36
  * adds the time of the row.
34
37
  */
@@ -55,7 +55,7 @@ async function approve(deps, input) {
55
55
  scope: { kind: "analysis", analysisId, threadId },
56
56
  provenance: APPROVAL_PROVENANCE,
57
57
  };
58
- const launched = await launchPlanRun(deps, { session, planId });
58
+ const launched = await launchPlanRun(deps, { session, planId, newestRunId: input.newestRunId });
59
59
  if (launched.isErr())
60
60
  return err(launched.error);
61
61
  const { runId, started } = launched.value;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * The chat turn as a DBOS workflow.
3
+ *
4
+ * The host opens a turn in its request: the harness checks the thread, resolves
5
+ * the agent, claims the thread for the turn, and starts the workflow. The
6
+ * workflow input holds ids and settings, the sanitized user text, and no
7
+ * credential. The live credential stays in the memory of the process, and the
8
+ * function of the host gives it to a turn that a recovery runs in a new process.
9
+ *
10
+ * The body prepares the opening in one step, reads the view of the thread up to
11
+ * the last row before the turn, and runs the turn of `chat-turn.ts` with the
12
+ * transport of a workflow: each model call and each tool call is a step, each
13
+ * write of the turn is a step with a key, and the frames go to the durable
14
+ * stream of the workflow. A host reads them with `read`.
15
+ */
16
+ import type { AuthContext } from "../auth/types.js";
17
+ import type { TokenUsageRollup } from "../contracts/usage.js";
18
+ import type { ChatFrame } from "../contracts/chat-events.js";
19
+ import type { AgentDefinition } from "../loop/types.js";
20
+ import type { ThreadType } from "../memory/thread-store.js";
21
+ import type { PromptCachePolicy } from "../providers/types.js";
22
+ import type { AskReply } from "../tools/approval/contract.js";
23
+ import type { AnswerOutcome } from "../tools/approval/queries.js";
24
+ import { type ChatTurnRan, type ChatTurnRefusal, type ChatTurnSession, type RunChatTurnDeps } from "./chat-turn.js";
25
+ /** The name of the turn workflow. */
26
+ export declare const CHAT_TURN_WORKFLOW = "chat-turn";
27
+ /** The input of a turn workflow: ids and settings, with no history and no credential. */
28
+ export type ChatTurnInput = {
29
+ readonly turnId: string;
30
+ readonly analysisId: string;
31
+ readonly threadId: string;
32
+ readonly threadType: ThreadType;
33
+ /** The user text after the sanitization of the opening. */
34
+ readonly userText: string;
35
+ readonly userId: string;
36
+ readonly author?: string;
37
+ readonly startedAtMs: number;
38
+ readonly promptCache?: PromptCachePolicy;
39
+ };
40
+ /** How a turn workflow ended. */
41
+ export type ChatTurnEnd = {
42
+ readonly status: "done" | "aborted" | "failed";
43
+ /** The text of a failure. */
44
+ readonly reason?: string;
45
+ /**
46
+ * The machine code of a failure: `provider` or `internal`. A turn with no workflow also gives the suspend reason of
47
+ * the host, `credential`, or `outage`, because only a workflow can pause on them.
48
+ */
49
+ readonly code?: string;
50
+ readonly durationMs: number;
51
+ /** True when the opening of the turn landed. */
52
+ readonly opened: boolean;
53
+ /** The stop reason of the root loop of a turn that ran to its end, for example `content-filter`. */
54
+ readonly finishReason?: string;
55
+ /** The word of the endpoint for the stop, when the provider captured one. */
56
+ readonly rawFinishReason?: string;
57
+ readonly turnUsage?: TokenUsageRollup;
58
+ /** The final text of a run that returned. */
59
+ readonly fallbackText?: string;
60
+ /** True when rows of the turn or its close did not land. */
61
+ readonly storeFailed?: boolean;
62
+ };
63
+ /** The values of a turn that a host opens. */
64
+ export type OpenChatTurnRequest = {
65
+ readonly analysisId: string;
66
+ readonly threadId: string;
67
+ readonly userInput: string;
68
+ /** Who sent the user message. */
69
+ readonly author?: string;
70
+ /** When the host got the message. Absent counts from the open. */
71
+ readonly startedAtMs?: number;
72
+ readonly promptCache?: PromptCachePolicy;
73
+ };
74
+ export type ChatTurnStart = {
75
+ readonly kind: "started";
76
+ readonly turnId: string;
77
+ readonly agent: AgentDefinition;
78
+ } | ChatTurnRefusal | {
79
+ readonly kind: "turn_in_progress";
80
+ };
81
+ /** The chat turns of a runtime, as a host uses them. */
82
+ export type ChatTurns = {
83
+ /** Open a turn and start its workflow. A refusal comes back before the turn writes a row. */
84
+ open(session: ChatTurnSession, request: OpenChatTurnRequest): Promise<ChatTurnStart>;
85
+ /** The frames of a turn from its start, live, until the turn ends. A second read gives the same frames. */
86
+ read(turnId: string): AsyncGenerator<ChatFrame>;
87
+ /** Stop a turn. The turn closes as `aborted`. */
88
+ stop(turnId: string): Promise<void>;
89
+ /** Answer an ask. The turn that waits for it gets the answer, in the process that runs it. */
90
+ answer(askId: string, reply: AskReply): Promise<AnswerOutcome>;
91
+ /** How a turn ended, when its workflow ends. `null` for a turn whose workflow was canceled or failed. */
92
+ outcome(turnId: string): Promise<ChatTurnEnd | null>;
93
+ };
94
+ export type ChatTurnWorkflowDeps = RunChatTurnDeps & {
95
+ /**
96
+ * The credential of a turn that the process did not open, for example after a restart. A host with one fixed
97
+ * credential gives it for each turn. Absent, or `undefined` for a turn: the turn pauses with the cause `credential`
98
+ * before its next model call, until a resume gives a credential.
99
+ */
100
+ readonly credentialFor?: (turnId: string) => AuthContext | undefined;
101
+ /** The delays of the timer of an outage. Absent: the default of the pause. */
102
+ readonly pauseRetryDelaysMs?: readonly number[];
103
+ /** How long a turn waits for the answer of an ask. Absent: {@link DEFAULT_ASK_WAIT_SECONDS}. */
104
+ readonly askWaitSeconds?: number;
105
+ };
106
+ /** A turn waits half an hour for the answer of an ask, and then the ask expires. */
107
+ export declare const DEFAULT_ASK_WAIT_SECONDS: number;
108
+ /**
109
+ * Register the turn workflow and give the chat turns of the runtime. Call it before DBOS launches, because DBOS
110
+ * finds the workflow of a recovery by its registered name.
111
+ */
112
+ export declare function registerChatTurns(deps: ChatTurnWorkflowDeps): ChatTurns;
113
+ /** How a turn that ran ended, as a host reads it. */
114
+ export declare function chatTurnEndOf(ran: ChatTurnRan): ChatTurnEnd;