@inflexa-ai/harness 0.45.1 → 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 (789) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  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 +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +307 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +23 -7
  174. package/dist/lib/hooks.js +17 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +161 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +34 -0
  256. package/dist/loop/turn-credentials.js +73 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/types.d.ts +55 -94
  304. package/dist/reference-data/catalog.d.ts +2 -15
  305. package/dist/reference-data/catalog.js +25 -8
  306. package/dist/reference-data/receipt.d.ts +2 -2
  307. package/dist/report-model/assert-rules.js +1 -1
  308. package/dist/report-model/authoring-grammar.d.ts +211 -233
  309. package/dist/report-model/block-walk.d.ts +10 -10
  310. package/dist/report-model/block-walk.js +2 -0
  311. package/dist/report-model/draft-finish.d.ts +8 -8
  312. package/dist/report-model/draft-finish.js +1 -1
  313. package/dist/report-model/draft-hash.js +8 -7
  314. package/dist/report-model/draft-operations.d.ts +22 -10
  315. package/dist/report-model/draft-operations.js +48 -30
  316. package/dist/report-model/draft-read.d.ts +19 -7
  317. package/dist/report-model/draft-read.js +16 -6
  318. package/dist/report-model/draft.d.ts +844 -2
  319. package/dist/report-model/draft.js +3 -1
  320. package/dist/report-model/fixture-resolver.js +39 -16
  321. package/dist/report-model/pin-snapshot.d.ts +2 -2
  322. package/dist/report-model/pin-snapshot.js +15 -15
  323. package/dist/report-model/production-resolver.d.ts +18 -18
  324. package/dist/report-model/production-resolver.js +50 -42
  325. package/dist/report-model/reference-resolver.d.ts +26 -10
  326. package/dist/report-model/reference-resolver.js +68 -5
  327. package/dist/report-model/reference-stamp.js +30 -38
  328. package/dist/report-model/structural-validation.js +12 -4
  329. package/dist/report-model/validate.d.ts +7 -7
  330. package/dist/report-model/validate.js +6 -6
  331. package/dist/report-render/assets.d.ts +2 -2
  332. package/dist/report-render/assets.js +27 -3
  333. package/dist/report-render/chart-export.d.ts +10 -2
  334. package/dist/report-render/chart-export.js +37 -11
  335. package/dist/report-render/chart-presets.d.ts +8 -8
  336. package/dist/report-render/chart-presets.js +3 -3
  337. package/dist/report-render/chart-renderers.d.ts +23 -16
  338. package/dist/report-render/chart-renderers.js +74 -53
  339. package/dist/report-render/chart-toolbox.d.ts +2 -2
  340. package/dist/report-render/chart-toolbox.js +7 -6
  341. package/dist/report-render/chart.d.ts +15 -16
  342. package/dist/report-render/chart.js +369 -252
  343. package/dist/report-render/design.d.ts +36 -297
  344. package/dist/report-render/design.js +0 -12
  345. package/dist/report-render/figures/common.d.ts +12 -12
  346. package/dist/report-render/figures/common.js +42 -31
  347. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  348. package/dist/report-render/figures/dendrogram.js +10 -10
  349. package/dist/report-render/figures/dense.js +15 -8
  350. package/dist/report-render/figures/dotplot.js +46 -33
  351. package/dist/report-render/figures/embedding.js +52 -43
  352. package/dist/report-render/figures/equal-units.d.ts +10 -10
  353. package/dist/report-render/figures/equal-units.js +27 -27
  354. package/dist/report-render/figures/forest.js +9 -7
  355. package/dist/report-render/figures/gsea.js +21 -11
  356. package/dist/report-render/figures/heatmap.js +13 -9
  357. package/dist/report-render/figures/index.d.ts +10 -10
  358. package/dist/report-render/figures/index.js +4 -2
  359. package/dist/report-render/figures/km.js +10 -9
  360. package/dist/report-render/figures/label-room.d.ts +12 -12
  361. package/dist/report-render/figures/label-room.js +7 -2
  362. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  363. package/dist/report-render/figures/locuszoom.js +59 -31
  364. package/dist/report-render/figures/lollipop.js +3 -2
  365. package/dist/report-render/figures/ma.js +8 -4
  366. package/dist/report-render/figures/manhattan.d.ts +1 -2
  367. package/dist/report-render/figures/manhattan.js +52 -34
  368. package/dist/report-render/figures/oncoprint.js +4 -5
  369. package/dist/report-render/figures/pca.js +25 -11
  370. package/dist/report-render/figures/qq.js +20 -9
  371. package/dist/report-render/figures/roc.js +1 -1
  372. package/dist/report-render/figures/sankey.d.ts +2 -2
  373. package/dist/report-render/figures/sankey.js +11 -10
  374. package/dist/report-render/figures/upset.d.ts +6 -6
  375. package/dist/report-render/figures/upset.js +7 -4
  376. package/dist/report-render/figures/volcano.js +12 -10
  377. package/dist/report-render/hybrid-svg.d.ts +4 -4
  378. package/dist/report-render/hybrid-svg.js +7 -5
  379. package/dist/report-render/number-format.d.ts +4 -4
  380. package/dist/report-render/number-format.js +62 -27
  381. package/dist/report-render/page.js +2 -1
  382. package/dist/report-render/provenance-data.d.ts +2 -2
  383. package/dist/report-render/references.d.ts +4 -4
  384. package/dist/report-render/render.d.ts +2 -2
  385. package/dist/report-render/render.js +10 -11
  386. package/dist/report-render/script-json.js +1 -1
  387. package/dist/report-render/table-data.d.ts +6 -6
  388. package/dist/report-render/test/options.d.ts +49 -0
  389. package/dist/report-render/test/options.js +143 -0
  390. package/dist/report-render/test/page-function.d.ts +19 -0
  391. package/dist/report-render/test/page-function.js +33 -0
  392. package/dist/report-render/types.d.ts +10 -10
  393. package/dist/report-render/value-bridge.d.ts +4 -4
  394. package/dist/report-render/value-bridge.js +27 -14
  395. package/dist/report-render/views/chart-view.d.ts +2 -2
  396. package/dist/report-render/views/chart-view.js +2 -2
  397. package/dist/report-render/views/lineage.d.ts +6 -6
  398. package/dist/report-render/views/lineage.js +2 -0
  399. package/dist/report-render/views/page-view.d.ts +2 -2
  400. package/dist/report-render/views/page-view.js +1 -0
  401. package/dist/report-render/views/prose.js +25 -8
  402. package/dist/report-render/views/references-view.js +12 -1
  403. package/dist/report-render/views/values.js +1 -1
  404. package/dist/runtime/assemble.d.ts +53 -26
  405. package/dist/runtime/assemble.js +103 -56
  406. package/dist/runtime/boot.d.ts +8 -7
  407. package/dist/runtime/boot.js +1 -1
  408. package/dist/runtime/connection-budget.d.ts +6 -6
  409. package/dist/runtime/connection-budget.js +1 -1
  410. package/dist/runtime/dbos.d.ts +29 -19
  411. package/dist/runtime/dbos.js +35 -20
  412. package/dist/runtime/result-serialization.js +18 -5
  413. package/dist/runtime/shutdown.d.ts +2 -2
  414. package/dist/sandbox/client.d.ts +7 -3
  415. package/dist/sandbox/cpu-files.d.ts +2 -2
  416. package/dist/sandbox/cpu-files.js +21 -4
  417. package/dist/sandbox/create-sandbox.d.ts +7 -8
  418. package/dist/sandbox/create-sandbox.js +6 -12
  419. package/dist/sandbox/docker-client.d.ts +48 -3
  420. package/dist/sandbox/docker-client.js +10 -6
  421. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  422. package/dist/sandbox/exec-outcome.d.ts +2 -2
  423. package/dist/sandbox/exec-outcome.js +1 -1
  424. package/dist/sandbox/exec.d.ts +10 -6
  425. package/dist/sandbox/exec.js +27 -12
  426. package/dist/sandbox/execution-id.js +14 -6
  427. package/dist/sandbox/farm.d.ts +2 -2
  428. package/dist/sandbox/farm.js +22 -27
  429. package/dist/sandbox/identity.d.ts +7 -0
  430. package/dist/sandbox/identity.js +14 -3
  431. package/dist/sandbox/image-packages.js +15 -27
  432. package/dist/sandbox/k8s-client.d.ts +35 -8
  433. package/dist/sandbox/k8s-client.js +6 -5
  434. package/dist/sandbox/labels.js +1 -0
  435. package/dist/sandbox/liveness.js +3 -1
  436. package/dist/sandbox/mount-plan.d.ts +10 -10
  437. package/dist/sandbox/mount-plan.js +13 -14
  438. package/dist/sandbox/notification-sweep.d.ts +4 -4
  439. package/dist/sandbox/notification-sweep.js +4 -7
  440. package/dist/sandbox/package-identity.d.ts +6 -13
  441. package/dist/sandbox/package-identity.js +46 -28
  442. package/dist/sandbox/reaper.d.ts +10 -10
  443. package/dist/sandbox/reaper.js +4 -6
  444. package/dist/sandbox/sandbox-error.d.ts +2 -9
  445. package/dist/sandbox/sandbox-error.js +21 -8
  446. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  447. package/dist/sandbox/sandbox-step-translate.js +22 -8
  448. package/dist/sandbox/step-sandbox.d.ts +47 -0
  449. package/dist/sandbox/step-sandbox.js +53 -0
  450. package/dist/sandbox/types.d.ts +18 -19
  451. package/dist/sandbox/types.js +1 -1
  452. package/dist/schemas/artifact-manifest.d.ts +4 -4
  453. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  454. package/dist/schemas/file-metadata.js +2 -4
  455. package/dist/schemas/plan-schemas.d.ts +31 -31
  456. package/dist/schemas/run-synthesis.d.ts +95 -26
  457. package/dist/schemas/run-synthesis.js +3 -1
  458. package/dist/schemas/validate-plan.d.ts +4 -4
  459. package/dist/schemas/validate-plan.js +17 -5
  460. package/dist/schemas/workflow-state.d.ts +19 -19
  461. package/dist/schemas/workflow-state.js +2 -2
  462. package/dist/state/active-turns.d.ts +36 -0
  463. package/dist/state/active-turns.js +67 -0
  464. package/dist/state/analyses-metrics.d.ts +8 -8
  465. package/dist/state/analyses-metrics.js +4 -4
  466. package/dist/state/analyses.d.ts +0 -14
  467. package/dist/state/analyses.js +0 -32
  468. package/dist/state/artifacts.d.ts +32 -19
  469. package/dist/state/artifacts.js +28 -5
  470. package/dist/state/data-profile.d.ts +2 -2
  471. package/dist/state/db.d.ts +12 -2
  472. package/dist/state/db.js +5 -0
  473. package/dist/state/edit-intents.d.ts +4 -0
  474. package/dist/state/edit-intents.js +71 -0
  475. package/dist/state/index.d.ts +4 -4
  476. package/dist/state/index.js +2 -2
  477. package/dist/state/init.d.ts +2 -1
  478. package/dist/state/init.js +5 -2
  479. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  480. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  482. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  484. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  486. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  488. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  490. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  492. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  494. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  496. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  498. package/dist/state/migrations/index.js +18 -0
  499. package/dist/state/paused-work.d.ts +52 -0
  500. package/dist/state/paused-work.js +105 -0
  501. package/dist/state/plans.d.ts +27 -8
  502. package/dist/state/plans.js +14 -11
  503. package/dist/state/purge-analysis.d.ts +6 -6
  504. package/dist/state/purge-analysis.js +10 -2
  505. package/dist/state/report-session-state.d.ts +43 -18
  506. package/dist/state/report-session-state.js +43 -4
  507. package/dist/state/report-versions.d.ts +16 -11
  508. package/dist/state/report-versions.js +5 -3
  509. package/dist/state/runs.d.ts +30 -19
  510. package/dist/state/runs.js +43 -51
  511. package/dist/state/schema.d.ts +18 -21
  512. package/dist/state/schema.js +4 -5
  513. package/dist/state/snapshot-parse.d.ts +2 -2
  514. package/dist/state/snapshot-parse.js +14 -8
  515. package/dist/state/step-executions.d.ts +20 -8
  516. package/dist/state/step-executions.js +6 -4
  517. package/dist/state/tool-outputs.d.ts +2 -2
  518. package/dist/state/tool-outputs.js +2 -1
  519. package/dist/state/vector-store.d.ts +16 -16
  520. package/dist/state/vector-store.js +11 -7
  521. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  522. package/dist/tasks/data-profile-absorb.js +21 -16
  523. package/dist/tasks/data-profile-activity.d.ts +5 -5
  524. package/dist/tasks/data-profile-activity.js +5 -5
  525. package/dist/tasks/data-profile-index.d.ts +4 -4
  526. package/dist/tasks/data-profile-index.js +32 -17
  527. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  528. package/dist/tasks/data-profile-resolve.js +88 -62
  529. package/dist/tasks/data-profile.d.ts +40 -31
  530. package/dist/tasks/data-profile.js +138 -95
  531. package/dist/tasks/extract-values.d.ts +26 -79
  532. package/dist/tasks/extract-values.js +48 -108
  533. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  534. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  535. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  536. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  537. package/dist/testing.d.ts +60 -0
  538. package/dist/testing.js +96 -0
  539. package/dist/tools/ad-hoc-router.d.ts +9 -9
  540. package/dist/tools/ad-hoc-router.js +65 -52
  541. package/dist/tools/analysis-invocation.d.ts +7 -0
  542. package/dist/tools/analysis-invocation.js +29 -5
  543. package/dist/tools/approval/contract.d.ts +8 -52
  544. package/dist/tools/approval/contract.js +7 -36
  545. package/dist/tools/approval/gateway.d.ts +27 -28
  546. package/dist/tools/approval/gateway.js +33 -130
  547. package/dist/tools/approval/queries.d.ts +6 -11
  548. package/dist/tools/approval/queries.js +43 -29
  549. package/dist/tools/approval/uuidv7.js +2 -2
  550. package/dist/tools/bio/chembl.d.ts +3 -3
  551. package/dist/tools/bio/chembl.js +10 -0
  552. package/dist/tools/bio/comptox.d.ts +25 -8
  553. package/dist/tools/bio/comptox.js +4 -2
  554. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  555. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  556. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  557. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  558. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  559. package/dist/tools/bio/keys.d.ts +2 -2
  560. package/dist/tools/bio/keys.js +3 -3
  561. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  562. package/dist/tools/bio/lookup-annotation.js +3 -0
  563. package/dist/tools/bio/opentargets.d.ts +1 -1
  564. package/dist/tools/bio/opentargets.js +6 -0
  565. package/dist/tools/bio/pubchem.d.ts +2 -2
  566. package/dist/tools/bio/pubchem.js +6 -0
  567. package/dist/tools/bio/pubmed.d.ts +26 -16
  568. package/dist/tools/bio/pubmed.js +9 -3
  569. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  570. package/dist/tools/bio/search-clinical-trials.js +5 -1
  571. package/dist/tools/bio/search-faers.d.ts +2 -2
  572. package/dist/tools/bio/search-faers.js +1 -1
  573. package/dist/tools/bio/search-gene.d.ts +2 -2
  574. package/dist/tools/bio/search-gene.js +1 -0
  575. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  576. package/dist/tools/bio/search-geo-datasets.js +5 -5
  577. package/dist/tools/bio/search-interactions.d.ts +1 -1
  578. package/dist/tools/bio/search-patents.d.ts +28 -22
  579. package/dist/tools/bio/search-patents.js +20 -17
  580. package/dist/tools/bio/search-protein.d.ts +2 -2
  581. package/dist/tools/bio/search-protein.js +1 -1
  582. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  583. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  584. package/dist/tools/bio/target-safety.d.ts +8 -8
  585. package/dist/tools/bio/target-safety.js +11 -6
  586. package/dist/tools/capability-data.d.ts +9 -5
  587. package/dist/tools/capability-data.js +2 -1
  588. package/dist/tools/define-tool.d.ts +55 -46
  589. package/dist/tools/define-tool.js +39 -27
  590. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  591. package/dist/tools/display/normalize-echart-spec.js +51 -27
  592. package/dist/tools/display/show-user.d.ts +2 -2
  593. package/dist/tools/display/show-user.js +1 -1
  594. package/dist/tools/execute-analysis.d.ts +19 -10
  595. package/dist/tools/execute-analysis.js +83 -62
  596. package/dist/tools/knowledge/check.d.ts +166 -44
  597. package/dist/tools/knowledge/check.js +5 -3
  598. package/dist/tools/knowledge/client.d.ts +31 -62
  599. package/dist/tools/knowledge/client.js +44 -27
  600. package/dist/tools/knowledge/environment.d.ts +6 -6
  601. package/dist/tools/knowledge/environment.js +18 -7
  602. package/dist/tools/knowledge/index.d.ts +2 -2
  603. package/dist/tools/knowledge/index.js +9 -9
  604. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  605. package/dist/tools/knowledge/local-slots.js +11 -4
  606. package/dist/tools/knowledge/pin.d.ts +2 -2
  607. package/dist/tools/knowledge/recommend.d.ts +20 -45
  608. package/dist/tools/knowledge/recommend.js +27 -19
  609. package/dist/tools/knowledge/situation.d.ts +40 -40
  610. package/dist/tools/knowledge/situation.js +2 -9
  611. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  612. package/dist/tools/knowledge/skeleton.js +10 -11
  613. package/dist/tools/knowledge/template.d.ts +20 -18
  614. package/dist/tools/knowledge/template.js +38 -32
  615. package/dist/tools/lib/alphafold-client.js +2 -1
  616. package/dist/tools/lib/amass-client.d.ts +28 -28
  617. package/dist/tools/lib/amass-client.js +20 -10
  618. package/dist/tools/lib/api-utils.d.ts +13 -3
  619. package/dist/tools/lib/api-utils.js +17 -3
  620. package/dist/tools/lib/bgee-client.d.ts +6 -6
  621. package/dist/tools/lib/bgee-client.js +16 -10
  622. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  623. package/dist/tools/lib/cbioportal-client.js +9 -8
  624. package/dist/tools/lib/chembl-client.d.ts +14 -14
  625. package/dist/tools/lib/chembl-client.js +11 -4
  626. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  628. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  629. package/dist/tools/lib/clinical-trials-client.js +10 -10
  630. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  631. package/dist/tools/lib/clinvar-client.js +6 -6
  632. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  633. package/dist/tools/lib/ctx-ops.js +13 -10
  634. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  635. package/dist/tools/lib/dgidb-client.js +10 -12
  636. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  637. package/dist/tools/lib/ema-client.d.ts +2 -2
  638. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  639. package/dist/tools/lib/ensembl-client.js +5 -4
  640. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  641. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  642. package/dist/tools/lib/html-text.d.ts +6 -0
  643. package/dist/tools/lib/html-text.js +9 -0
  644. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  645. package/dist/tools/lib/identifier-resolver.js +7 -3
  646. package/dist/tools/lib/impc-client.d.ts +8 -8
  647. package/dist/tools/lib/impc-client.js +46 -35
  648. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  649. package/dist/tools/lib/iuphar-client.js +7 -16
  650. package/dist/tools/lib/monarch-client.d.ts +4 -4
  651. package/dist/tools/lib/openfda-client.d.ts +22 -22
  652. package/dist/tools/lib/openfda-client.js +23 -22
  653. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  654. package/dist/tools/lib/pathway-client.d.ts +4 -4
  655. package/dist/tools/lib/pathway-client.js +15 -19
  656. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  657. package/dist/tools/lib/pharmgkb-client.js +1 -1
  658. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  659. package/dist/tools/lib/protein-family-modality.js +0 -2
  660. package/dist/tools/lib/protein-family-normalize.js +7 -0
  661. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  662. package/dist/tools/lib/pubchem-client.js +1 -0
  663. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  664. package/dist/tools/lib/pubchem-ops.js +8 -0
  665. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  666. package/dist/tools/lib/pubmed-client.js +1 -1
  667. package/dist/tools/lib/string-client.d.ts +6 -6
  668. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  669. package/dist/tools/lib/uniprot-client.js +5 -1
  670. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  671. package/dist/tools/memory/update-working-memory.js +21 -3
  672. package/dist/tools/read-tool-output.js +8 -2
  673. package/dist/tools/registry.d.ts +2 -2
  674. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  675. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  676. package/dist/tools/report-session/derive-table.d.ts +19 -59
  677. package/dist/tools/report-session/derive-table.js +120 -122
  678. package/dist/tools/report-session/examine-page.d.ts +6 -6
  679. package/dist/tools/report-session/examine-page.js +14 -12
  680. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  681. package/dist/tools/report-session/list-artifacts.js +5 -5
  682. package/dist/tools/report-session/page-faults.d.ts +6 -6
  683. package/dist/tools/report-session/page-faults.js +3 -1
  684. package/dist/tools/report-session/preview-report.d.ts +4 -3
  685. package/dist/tools/report-session/preview-report.js +26 -7
  686. package/dist/tools/report-session/record-version.d.ts +9 -4
  687. package/dist/tools/report-session/record-version.js +16 -9
  688. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  689. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  690. package/dist/tools/research/generate-analogy-report.js +80 -76
  691. package/dist/tools/research/generate-plan.d.ts +16 -16
  692. package/dist/tools/research/generate-plan.js +410 -374
  693. package/dist/tools/research/guarded-address.js +3 -2
  694. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  695. package/dist/tools/research/inspect-data-profile.js +26 -25
  696. package/dist/tools/research/inspect-run.d.ts +54 -27
  697. package/dist/tools/research/inspect-run.js +50 -40
  698. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  699. package/dist/tools/research/literature-reviewer.js +29 -28
  700. package/dist/tools/research/search-arxiv.d.ts +1 -1
  701. package/dist/tools/research/search-arxiv.js +1 -1
  702. package/dist/tools/research/search-github-repos.d.ts +10 -7
  703. package/dist/tools/research/search-github-repos.js +25 -22
  704. package/dist/tools/research/search-semantic-scholar.js +1 -1
  705. package/dist/tools/research/searxng-engine.d.ts +2 -2
  706. package/dist/tools/research/searxng-engine.js +6 -4
  707. package/dist/tools/research/web-fetch.d.ts +24 -21
  708. package/dist/tools/research/web-fetch.js +65 -74
  709. package/dist/tools/research/web-search.d.ts +26 -17
  710. package/dist/tools/research/web-search.js +26 -21
  711. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  712. package/dist/tools/sandbox/link-packages.js +11 -8
  713. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  714. package/dist/tools/sandbox/list-available-packages.js +31 -25
  715. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  716. package/dist/tools/sandbox/list-available-refs.js +61 -36
  717. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  718. package/dist/tools/sandbox/report-blocker.js +23 -73
  719. package/dist/tools/sandbox/skills.d.ts +16 -12
  720. package/dist/tools/sandbox/skills.js +16 -12
  721. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  722. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  723. package/dist/tools/start-report-session.d.ts +13 -5
  724. package/dist/tools/start-report-session.js +35 -8
  725. package/dist/tools/terminal-text.d.ts +5 -2
  726. package/dist/tools/terminal-text.js +35 -3
  727. package/dist/tools/workspace/decision-record.d.ts +4 -4
  728. package/dist/tools/workspace/decision-record.js +23 -13
  729. package/dist/tools/workspace/edit-file.d.ts +59 -20
  730. package/dist/tools/workspace/edit-file.js +81 -16
  731. package/dist/tools/workspace/execute-command.d.ts +15 -13
  732. package/dist/tools/workspace/execute-command.js +11 -9
  733. package/dist/tools/workspace/file-stat.d.ts +6 -3
  734. package/dist/tools/workspace/grep.d.ts +10 -7
  735. package/dist/tools/workspace/grep.js +9 -3
  736. package/dist/tools/workspace/list-files.d.ts +6 -3
  737. package/dist/tools/workspace/mutator.d.ts +28 -15
  738. package/dist/tools/workspace/mutator.js +107 -53
  739. package/dist/tools/workspace/read-file.d.ts +8 -5
  740. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  741. package/dist/tools/workspace/result-bounds.js +4 -2
  742. package/dist/tools/workspace/run-exec.d.ts +2 -2
  743. package/dist/tools/workspace/run-exec.js +3 -3
  744. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  745. package/dist/tools/workspace/scan-inputs.js +17 -5
  746. package/dist/tools/workspace/show-file.d.ts +1 -1
  747. package/dist/tools/workspace/show-file.js +2 -1
  748. package/dist/tools/workspace/show-plan.d.ts +8 -5
  749. package/dist/tools/workspace/show-plan.js +9 -8
  750. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  751. package/dist/tools/workspace/workspace-search.js +27 -14
  752. package/dist/tools/workspace/write-file.d.ts +9 -7
  753. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  754. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  755. package/dist/workflows/execute-analysis.d.ts +46 -62
  756. package/dist/workflows/execute-analysis.js +137 -219
  757. package/dist/workflows/pause.d.ts +71 -0
  758. package/dist/workflows/pause.js +173 -0
  759. package/dist/workflows/sandbox-step.d.ts +38 -61
  760. package/dist/workflows/sandbox-step.js +99 -106
  761. package/dist/workflows/test/sql-writes.d.ts +21 -0
  762. package/dist/workflows/test/sql-writes.js +36 -0
  763. package/dist/workspace/filesystem.d.ts +6 -6
  764. package/dist/workspace/filesystem.js +10 -8
  765. package/dist/workspace/paths.d.ts +1 -1
  766. package/dist/workspace/paths.js +15 -4
  767. package/dist/workspace/search-config.d.ts +2 -2
  768. package/dist/workspace/search-config.js +1 -1
  769. package/package.json +21 -22
  770. package/dist/loop/call-guard.d.ts +0 -50
  771. package/dist/loop/call-guard.js +0 -90
  772. package/dist/loop/continue-agent.d.ts +0 -40
  773. package/dist/loop/continue-agent.js +0 -38
  774. package/dist/loop/genai-spans.d.ts +0 -47
  775. package/dist/loop/genai-spans.js +0 -134
  776. package/dist/loop/run-agent.d.ts +0 -245
  777. package/dist/loop/run-agent.js +0 -1124
  778. package/dist/loop/run-step.d.ts +0 -29
  779. package/dist/loop/run-step.js +0 -34
  780. package/dist/loop/run-to-terminal.d.ts +0 -66
  781. package/dist/loop/run-to-terminal.js +0 -93
  782. package/dist/loop/tool-mask.d.ts +0 -23
  783. package/dist/loop/tool-mask.js +0 -46
  784. package/dist/providers/streaming-chat.d.ts +0 -32
  785. package/dist/providers/streaming-chat.js +0 -91
  786. package/dist/tasks/derive-table-exec.d.ts +0 -54
  787. package/dist/tasks/derive-table-exec.js +0 -86
  788. package/dist/workflows/suspension.d.ts +0 -32
  789. package/dist/workflows/suspension.js +0 -38
@@ -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,11 +8,11 @@
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
18
  /**
@@ -40,11 +40,11 @@ export function declaredDataRequirements() {
40
40
  * `PlanStepSchema.agent`. A non-empty tuple, as `z.enum` requires.
41
41
  */
42
42
  export const PLANNABLE_AGENT_IDS = (() => {
43
- const ids = PLANNABLE_AGENT_CATALOG.map((meta) => meta.id);
44
- if (ids.length === 0) {
43
+ const [first, ...rest] = PLANNABLE_AGENT_CATALOG.map((meta) => meta.id);
44
+ if (first === undefined) {
45
45
  throw new Error("PLANNABLE_AGENT_CATALOG is empty");
46
46
  }
47
- return ids;
47
+ return [first, ...rest];
48
48
  })();
49
49
  /**
50
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
@@ -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;
@@ -0,0 +1,307 @@
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 { randomUUID } from "node:crypto";
17
+ import { DBOS } from "@dbos-inc/dbos-sdk";
18
+ import { closeDurableStream } from "@dbos-inc/vercel-ai";
19
+ import { z } from "zod";
20
+ import { createNoopLogger } from "../lib/console-logger.js";
21
+ import { unwrapOrThrow } from "../lib/result.js";
22
+ import { createConversationDisplayRecorder } from "../memory/conversation-display-recorder.js";
23
+ import { createThreadHistory } from "../memory/thread-history.js";
24
+ import { createWorkingMemory } from "../memory/working-memory.js";
25
+ import { claimThreadForTurn, closeOpenTurnRecords, releaseThreadOfTurn, turnOfAsk } from "../state/active-turns.js";
26
+ import { clearPausesOfWork } from "../state/paused-work.js";
27
+ import { workPause } from "../workflows/pause.js";
28
+ import { askPartOf } from "../tools/approval/gateway.js";
29
+ import { stepUuid } from "../tools/workspace/edit-file.js";
30
+ import { openThread, readTurnContext, runOpenTurn, userTextOf, } from "./chat-turn.js";
31
+ import { CHAT_STREAM_KEY, createTurnStreamWriter, readChatTurn } from "../loop/chat-stream.js";
32
+ import { credentialGuard, turnCredentials, withRootTurn } from "../loop/turn-credentials.js";
33
+ import { assembleMessages, loadHistoryView, sanitizedUserMessage } from "./message-assembly.js";
34
+ /** The name of the turn workflow. */
35
+ export const CHAT_TURN_WORKFLOW = "chat-turn";
36
+ /** A turn waits half an hour for the answer of an ask, and then the ask expires. */
37
+ export const DEFAULT_ASK_WAIT_SECONDS = 30 * 60;
38
+ const AskReplySchema = z.discriminatedUnion("kind", [
39
+ z.object({ kind: z.literal("once") }),
40
+ z.object({ kind: z.literal("always") }),
41
+ z.object({ kind: z.literal("reject"), feedback: z.string().optional() }),
42
+ ]);
43
+ /** The topic of the message that carries the answer of one ask to its turn. */
44
+ function askTopic(askId) {
45
+ return `ask:${askId}`;
46
+ }
47
+ const ACTIVE_STATUSES = new Set(["PENDING", "ENQUEUED"]);
48
+ /** The part of the stored input of a turn workflow that the stop of a turn reads. */
49
+ const StoredTurnInputSchema = z.tuple([z.looseObject({ threadId: z.string() })]);
50
+ /**
51
+ * Register the turn workflow and give the chat turns of the runtime. Call it before DBOS launches, because DBOS
52
+ * finds the workflow of a recovery by its registered name.
53
+ */
54
+ export function registerChatTurns(deps) {
55
+ const logger = (deps.logger ?? createNoopLogger()).named("harness.chat");
56
+ // The live credential of each turn that this process opened, and the stop of each turn that this process runs.
57
+ const controls = new Map();
58
+ turnCredentials.setHostCredential(deps.credentialFor);
59
+ const workflow = DBOS.registerWorkflow(async (input) => {
60
+ const controller = new AbortController();
61
+ controls.set(input.turnId, controller);
62
+ try {
63
+ return await withRootTurn(input.turnId, () => runTurnWorkflow(deps, input, controller.signal));
64
+ }
65
+ finally {
66
+ controls.delete(input.turnId);
67
+ turnCredentials.drop(input.turnId);
68
+ }
69
+ }, { name: CHAT_TURN_WORKFLOW });
70
+ const stillRuns = async (turnId) => {
71
+ const status = await DBOS.getWorkflowStatus(turnId);
72
+ return status !== null && ACTIVE_STATUSES.has(status.status);
73
+ };
74
+ return {
75
+ async open(session, request) {
76
+ const startedAtMs = request.startedAtMs ?? Date.now();
77
+ let threadType;
78
+ try {
79
+ const opened = await openThread(deps, request);
80
+ if (opened.kind === "not_found")
81
+ return opened;
82
+ threadType = opened.threadType;
83
+ }
84
+ catch (cause) {
85
+ return { kind: "prepare_failed", cause };
86
+ }
87
+ const agent = deps.agents.forThread(threadType);
88
+ if (agent.isErr())
89
+ return { kind: "agent_unresolved", threadType };
90
+ const turnId = randomUUID();
91
+ const claim = await claimThreadForTurn(deps.pool, request.threadId, turnId, stillRuns);
92
+ if (claim.isErr())
93
+ return { kind: "prepare_failed", cause: claim.error };
94
+ if (claim.value.kind === "no_thread")
95
+ return { kind: "not_found" };
96
+ if (claim.value.kind === "held")
97
+ return { kind: "turn_in_progress" };
98
+ turnCredentials.put(turnId, session.auth);
99
+ const input = {
100
+ turnId,
101
+ analysisId: request.analysisId,
102
+ threadId: request.threadId,
103
+ threadType,
104
+ userText: userTextOf(sanitizedUserMessage(request.userInput)),
105
+ userId: session.identity.user,
106
+ author: request.author,
107
+ startedAtMs,
108
+ promptCache: request.promptCache,
109
+ };
110
+ try {
111
+ await DBOS.startWorkflow(workflow, { workflowID: turnId })(input);
112
+ }
113
+ catch (cause) {
114
+ turnCredentials.drop(turnId);
115
+ await releaseThreadOfTurn(deps.pool, request.threadId, turnId).unwrapOr(undefined);
116
+ return { kind: "prepare_failed", cause };
117
+ }
118
+ return { kind: "started", turnId, agent: agent.value };
119
+ },
120
+ read(turnId) {
121
+ return readChatTurn(turnId, {});
122
+ },
123
+ async stop(turnId) {
124
+ const controller = controls.get(turnId);
125
+ if (controller !== undefined) {
126
+ controller.abort(new DOMException("The user stopped the turn.", "AbortError"));
127
+ return;
128
+ }
129
+ // No process of this host runs the turn: the cancel ends the workflow and its sub-agents, and the harness
130
+ // closes its records.
131
+ const status = await DBOS.getWorkflowStatus(turnId);
132
+ if (status === null || !ACTIVE_STATUSES.has(status.status))
133
+ return;
134
+ await DBOS.cancelWorkflow(turnId, { cancelChildren: true });
135
+ const cleared = await clearPausesOfWork(deps.pool, turnId);
136
+ if (cleared.isErr())
137
+ logger.warn("the pauses of a canceled turn did not clear", { turnId, op: cleared.error.op });
138
+ const input = StoredTurnInputSchema.safeParse(status.input);
139
+ if (!input.success)
140
+ return;
141
+ const [{ threadId }] = input.data;
142
+ const closed = await closeOpenTurnRecords(deps.pool, threadId);
143
+ if (closed.isErr())
144
+ logger.warn("the record of a canceled turn did not close", { turnId, op: closed.error.op });
145
+ await releaseThreadOfTurn(deps.pool, threadId, turnId).unwrapOr(undefined);
146
+ },
147
+ async answer(askId, reply) {
148
+ if (deps.askGateway === undefined)
149
+ return "not_found";
150
+ const outcome = await deps.askGateway.answer(askId, reply);
151
+ if (outcome !== "applied")
152
+ return outcome;
153
+ const turnId = await turnOfAsk(deps.pool, askId).unwrapOr(undefined);
154
+ if (turnId !== undefined)
155
+ await DBOS.send(turnId, reply, askTopic(askId));
156
+ return outcome;
157
+ },
158
+ async outcome(turnId) {
159
+ try {
160
+ return await DBOS.retrieveWorkflow(turnId).getResult();
161
+ }
162
+ catch (err) {
163
+ // The stop of a turn in a different process cancels its workflow, and the stop closes its records.
164
+ logger.debug("a chat turn ended with no outcome", { turnId, ...logger.errorFields(err) });
165
+ return null;
166
+ }
167
+ },
168
+ };
169
+ }
170
+ /**
171
+ * The approval of a turn workflow. The raise of the ask is a step, and the turn waits for the answer with a durable
172
+ * wait of its body, thus a recovery waits again for the same ask. A stop of the turn ends the wait.
173
+ */
174
+ function workflowApproval(gateway, input, emitPart, signal, waitSeconds) {
175
+ return async (request, call) => {
176
+ const id = stepUuid(`${input.turnId}:ask:${call.toolCallId}`);
177
+ const scope = { analysisId: input.analysisId, userId: input.userId, threadId: input.threadId };
178
+ const raised = await DBOS.runStep(() => gateway.raise(id, request, scope), { name: "chat-turn.ask" });
179
+ if (raised === "granted") {
180
+ await emitPart(askPartOf(id, request, "resolved", "always"));
181
+ return { kind: "approved" };
182
+ }
183
+ await emitPart(askPartOf(id, request, "pending"));
184
+ const stopped = new Promise((resolve) => {
185
+ if (signal.aborted)
186
+ resolve("stopped");
187
+ signal.addEventListener("abort", () => resolve("stopped"), { once: true });
188
+ });
189
+ const answered = await Promise.race([DBOS.recv(askTopic(id), waitSeconds), stopped]);
190
+ if (answered === "stopped") {
191
+ await DBOS.runStep(() => gateway.abort(id), { name: "chat-turn.ask-abort" });
192
+ await emitPart(askPartOf(id, request, "aborted"));
193
+ throw signal.reason ?? new DOMException("The user stopped the turn.", "AbortError");
194
+ }
195
+ const reply = AskReplySchema.safeParse(answered);
196
+ if (!reply.success) {
197
+ await DBOS.runStep(() => gateway.expire(id), { name: "chat-turn.ask-expire" });
198
+ await emitPart(askPartOf(id, request, "expired"));
199
+ return { kind: "denied", feedback: "The approval expired unanswered." };
200
+ }
201
+ if (reply.data.kind === "reject") {
202
+ await emitPart(askPartOf(id, request, "rejected", "reject"));
203
+ return { kind: "denied", feedback: reply.data.feedback };
204
+ }
205
+ await emitPart(askPartOf(id, request, "resolved", reply.data.kind));
206
+ return { kind: "approved" };
207
+ };
208
+ }
209
+ async function runTurnWorkflow(deps, input, signal) {
210
+ const agent = deps.agents.forThread(input.threadType);
211
+ if (agent.isErr())
212
+ throw new Error(`No agent is registered for the thread type "${input.threadType}".`);
213
+ const rootSource = { agentId: agent.value.id, callPath: [agent.value.id] };
214
+ const history = createThreadHistory(deps.pool, deps.logger);
215
+ const opening = await DBOS.runStep(async () => {
216
+ const endSeq = unwrapOrThrow(await history.latestSeq(input.threadId)) ?? -1;
217
+ const assembled = await assembleMessages({
218
+ threadId: input.threadId,
219
+ threadType: input.threadType,
220
+ analysisId: input.analysisId,
221
+ userInput: input.userText,
222
+ ...(await readTurnContext(deps.pool, input.analysisId)),
223
+ history,
224
+ workingMemory: createWorkingMemory(deps.pool),
225
+ logger: deps.logger,
226
+ throughSeq: endSeq,
227
+ });
228
+ return { endSeq, userMessage: assembled.userMessage, contextRecords: assembled.contextRecords };
229
+ }, { name: "chat-turn.prepare" });
230
+ // The rows up to the turn never change, thus a replay reads the same view, and no checkpoint holds the thread.
231
+ const view = await loadHistoryView({ threadId: input.threadId, threadType: input.threadType, history, logger: deps.logger, throughSeq: opening.endSeq });
232
+ const userText = userTextOf(opening.userMessage);
233
+ const recorder = createConversationDisplayRecorder({
234
+ userText,
235
+ agentId: agent.value.id,
236
+ sink: () => undefined,
237
+ messageIds: { user: stepUuid(`${input.turnId}:user`), assistant: (index) => stepUuid(`${input.turnId}:assistant:${index}`) },
238
+ });
239
+ const writer = createTurnStreamWriter(rootSource, (frame) => recorder.observe(frame));
240
+ await writer.write({ type: "message-start", messageId: recorder.userMessageId(), role: "user", text: userText, source: rootSource });
241
+ await writer.write({ type: "message-start", messageId: recorder.assistantMessageId(), role: "assistant", source: rootSource });
242
+ const transport = {
243
+ signal,
244
+ emit: writer.emit,
245
+ chatStream: CHAT_STREAM_KEY,
246
+ toolWriter: writer.toolWriter,
247
+ recorder,
248
+ durably: (name, write) => DBOS.runStep(write, { name }),
249
+ groupKey: (index) => `${input.turnId}:${index}`,
250
+ announce: (messageId) => writer.write({ type: "message-start", messageId, role: "assistant", source: rootSource }),
251
+ modelMiddleware: [credentialGuard(() => turnCredentials.of(input.turnId))],
252
+ approve: deps.askGateway === undefined
253
+ ? undefined
254
+ : workflowApproval(deps.askGateway, input, async (part) => {
255
+ await writer.emit({ type: "data-ask", data: part });
256
+ }, signal, deps.askWaitSeconds ?? DEFAULT_ASK_WAIT_SECONDS),
257
+ pause: workPause({
258
+ pool: deps.pool,
259
+ workId: input.turnId,
260
+ workKind: "turn",
261
+ analysisId: input.analysisId,
262
+ threadId: input.threadId,
263
+ emit: async (part) => {
264
+ await writer.emit({ type: "data-pause", source: rootSource, data: part });
265
+ },
266
+ retryDelaysMs: deps.pauseRetryDelaysMs,
267
+ logger: deps.logger,
268
+ }).afterFailure,
269
+ };
270
+ const session = {
271
+ identity: { user: input.userId },
272
+ scope: { kind: "analysis", analysisId: input.analysisId, threadId: input.threadId },
273
+ // The credential comes at each read, thus a call after a resume uses the credential that the resume put. A
274
+ // turn with no credential makes no model call, thus no adapter reads the empty value.
275
+ get auth() {
276
+ return turnCredentials.of(input.turnId) ?? {};
277
+ },
278
+ };
279
+ const ran = await runOpenTurn(deps, { analysisId: input.analysisId, threadId: input.threadId, userInput: input.userText }, { kind: "ok", threadType: input.threadType, history: view, userMessage: opening.userMessage, contextRecords: opening.contextRecords }, agent.value, { session, author: input.author, startedAtMs: input.startedAtMs, promptCache: input.promptCache }, transport);
280
+ const { outcome } = ran;
281
+ await writer.write(outcome.status === "failed"
282
+ ? { type: "error", message: outcome.reason, reason: outcome.code, source: rootSource }
283
+ : { type: "finish", source: rootSource, turnUsage: ran.turnUsage });
284
+ await writer.settle();
285
+ await closeDurableStream(CHAT_STREAM_KEY, outcome.status === "done" ? "stop" : outcome.status === "aborted" ? "aborted" : "error");
286
+ // A sub-agent that a stop canceled in its pause leaves its row, thus the end of the turn clears each row of the turn.
287
+ await DBOS.runStep(async () => unwrapOrThrow(await clearPausesOfWork(deps.pool, input.turnId)), { name: "chat-turn.clear-pauses" });
288
+ await DBOS.runStep(async () => unwrapOrThrow(await releaseThreadOfTurn(deps.pool, input.threadId, input.turnId)), { name: "chat-turn.release" });
289
+ return chatTurnEndOf(ran);
290
+ }
291
+ /** How a turn that ran ended, as a host reads it. */
292
+ export function chatTurnEndOf(ran) {
293
+ const { outcome } = ran;
294
+ const finish = outcome.status === "failed" ? undefined : outcome.finish;
295
+ return {
296
+ status: outcome.status,
297
+ reason: outcome.status === "failed" ? outcome.reason : undefined,
298
+ code: outcome.status === "failed" ? outcome.code : undefined,
299
+ durationMs: ran.durationMs,
300
+ opened: ran.opened,
301
+ finishReason: finish?.reason,
302
+ rawFinishReason: finish?.rawFinishReason,
303
+ turnUsage: ran.turnUsage,
304
+ fallbackText: ran.fallbackText,
305
+ storeFailed: ran.storeError === undefined ? undefined : true,
306
+ };
307
+ }