@inflexa-ai/harness 0.45.1 → 0.46.2

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 (790) 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 +306 -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 +32 -7
  174. package/dist/lib/hooks.js +22 -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 +160 -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 +39 -0
  256. package/dist/loop/turn-credentials.js +90 -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/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
2
2
  /**
3
3
  * The prose markup: the text block, the claim block, the section wrapper, and the page navigation.
4
4
  *
@@ -11,6 +11,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "hono/jsx/jsx-
11
11
  */
12
12
  import { raw } from "hono/html";
13
13
  import { blockMark } from "./block-mark.js";
14
+ import { splitLines } from "../../lib/text.js";
14
15
  import { DEFAULT_VIEW_OPTIONS, lineagePlace, lineageStamp } from "./lineage.js";
15
16
  import { Marker } from "./references-view.js";
16
17
  /** The paragraph class of a text block and a claim block. The paragraph fills the content column. */
@@ -24,20 +25,34 @@ const BRAND_HREF = "https://inflexa.ai/";
24
25
  * out, thus a leading or a trailing blank line adds no empty paragraph.
25
26
  */
26
27
  function splitParagraphs(prose) {
27
- const parts = prose.split(/\n[ \t]*\n/);
28
28
  const paragraphs = [];
29
- for (const part of parts) {
30
- const trimmed = part.trim();
31
- if (trimmed.length > 0) {
32
- paragraphs.push(trimmed);
29
+ let paragraph = [];
30
+ for (const line of splitLines(prose)) {
31
+ if (isBlankLine(line)) {
32
+ if (paragraph.length > 0)
33
+ paragraphs.push(paragraph.join("\n").trim());
34
+ paragraph = [];
35
+ continue;
33
36
  }
37
+ paragraph.push(line);
34
38
  }
39
+ if (paragraph.length > 0)
40
+ paragraphs.push(paragraph.join("\n").trim());
35
41
  return paragraphs;
36
42
  }
43
+ /** A line of spaces and tabs alone. Only those two end a paragraph split. */
44
+ function isBlankLine(line) {
45
+ for (const char of line) {
46
+ if (char !== " " && char !== "\t")
47
+ return false;
48
+ }
49
+ return true;
50
+ }
37
51
  /**
38
52
  * One typed list as list markup. The flag selects the element: an ordered list numbers its items, and an
39
53
  * unordered one bullets them. Each item is one inline line, thus no item holds a list of its own.
40
54
  */
55
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
41
56
  function TextListView({ list, mark }) {
42
57
  const items = list.items.map((item) => _jsx("li", { class: "report-list-item", children: item }));
43
58
  return list.ordered ? (_jsx("ol", { class: LIST_CLASS, ...mark, children: items })) : (_jsx("ul", { class: LIST_CLASS, ...mark, children: items }));
@@ -73,7 +88,9 @@ export function renderClaim(block, ledger, view = DEFAULT_VIEW_OPTIONS) {
73
88
  // Under the lineage a wrapper holds the paragraphs, thus the wrapper alone carries the mark.
74
89
  const mark = view.lineage ? {} : blockMark(block.id);
75
90
  const body = paragraphs.length === 0 ? (_jsx("p", { class: PARAGRAPH_CLASS, ...mark, children: markers })) : (_jsx(_Fragment, { children: paragraphs.map((paragraph, index) => (_jsxs("p", { class: PARAGRAPH_CLASS, ...mark, children: [paragraph, index === last ? markers : null] }))) }));
76
- return String(view.lineage ? (_jsx("div", { ...blockMark(block.id), ...lineageStamp(view.lineage, block.id, block.bindings), children: body })) : (body));
91
+ return String(
92
+ // oxlint-disable-next-line typescript/no-base-to-string -- hono JSXNode.toString() renders these sync element trees to HTML; the rule sees only its declared `string | Promise<string>` return.
93
+ view.lineage ? (_jsx("div", { ...blockMark(block.id), ...lineageStamp(view.lineage, block.id, block.bindings), children: body })) : (body));
77
94
  }
78
95
  /** The heading class of a section, by heading level. A heading uses the sans family, never the mono family. */
79
96
  function headingClass(level) {
@@ -86,7 +103,7 @@ function headingClass(level) {
86
103
  */
87
104
  export function renderSection(section, depth, childrenHtml) {
88
105
  const level = Math.min(depth + 2, 4);
89
- const Heading = `h${level}`;
106
+ const Heading = level === 2 ? "h2" : level === 3 ? "h3" : "h4";
90
107
  return String(_jsxs("section", { id: section.id, class: "report-section", ...blockMark(section.id), children: [_jsx(Heading, { class: headingClass(level), children: section.title }), raw(childrenHtml)] }));
91
108
  }
92
109
  /**
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "hono/jsx/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
2
2
  import { citationRecordOf } from "../../report-model/reference-resolver.js";
3
3
  import { citationKeyOf } from "../references.js";
4
4
  import { LineageControl } from "./lineage.js";
@@ -12,22 +12,27 @@ import { LineageControl } from "./lineage.js";
12
12
  * marker that names no place carries no control. The page shows the control only where a stamp gives the
13
13
  * script a key to walk.
14
14
  */
15
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
15
16
  export function Marker({ n, lineage }) {
16
17
  return (_jsxs("span", { class: "report-marker", children: [_jsx("a", { href: `#ref-${n}`, children: `[${n}]` }), lineage !== undefined ? _jsx(LineageControl, { place: lineage }) : null] }));
17
18
  }
18
19
  /** The kind label of one reference entry. */
20
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
19
21
  function RefKind({ children }) {
20
22
  return _jsx("span", { class: "report-ref-kind", children: children });
21
23
  }
22
24
  /** A path in a monospace code span. */
25
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
23
26
  function PathCode({ children }) {
24
27
  return _jsx("code", { class: "report-ref-path", children: children });
25
28
  }
26
29
  /** A plain detail such as a locator or an external id. */
30
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
27
31
  function Detail({ children }) {
28
32
  return _jsx("span", { class: "report-ref-detail", children: children });
29
33
  }
30
34
  /** The head of a content hash in a monospace span. */
35
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
31
36
  function HashCode({ children }) {
32
37
  return _jsx("code", { class: "report-ref-hash", children: children });
33
38
  }
@@ -52,6 +57,7 @@ function hashHead(hash) {
52
57
  * The hash head stays the text of the link. Thus the reader reads the same head as before, and the click
53
58
  * opens the script itself. A chain with no staged script shows the head alone.
54
59
  */
60
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
55
61
  function ScriptLink({ chain }) {
56
62
  const head = _jsx(HashCode, { children: hashHead(chain.scriptHash) });
57
63
  return chain.scriptSource === undefined ? (head) : (_jsx("a", { class: "report-ref-link", href: chain.scriptSource, children: head }));
@@ -68,6 +74,7 @@ function ScriptLink({ chain }) {
68
74
  * host. Each hash head stays beside its link, because the head is what a reader compares against the name of
69
75
  * a staged file.
70
76
  */
77
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
71
78
  function ChainLine({ chain }) {
72
79
  return (_jsxs("div", { class: "report-ref-chain", children: [_jsx(RefKind, { children: "Derived from" }), " ", chain.sources.map((source, index) => (_jsxs(_Fragment, { children: [index > 0 ? " and " : "", _jsx(PathCode, { children: source.path }), " ", _jsx(HashCode, { children: hashHead(source.hash) })] }))), " ", _jsx(Detail, { children: "by script" }), " ", _jsx(ScriptLink, { chain: chain }), chain.outputSource !== undefined ? (_jsxs(_Fragment, { children: [" ", _jsx(Detail, { children: "into" }), " ", _jsx("a", { class: "report-ref-link", href: chain.outputSource, children: _jsx(PathCode, { children: chain.outputSource }) })] })) : null] }));
73
80
  }
@@ -99,6 +106,7 @@ function describeLocator(locator) {
99
106
  * the reference pins one cell. A derivation entry names its operation and its two inputs, each by path and
100
107
  * locator.
101
108
  */
109
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
102
110
  function ReferenceBody({ reference }) {
103
111
  switch (reference.kind) {
104
112
  case "artifact-value":
@@ -117,6 +125,7 @@ function ReferenceBody({ reference }) {
117
125
  * A path that no record names renders the body alone, thus a page over pinned artifacts alone reads exactly
118
126
  * as it did before the chains existed.
119
127
  */
128
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
120
129
  function ArtifactEntry({ reference, chains }) {
121
130
  const path = pathOf(reference);
122
131
  const chain = path === undefined ? undefined : chains?.get(path);
@@ -130,6 +139,7 @@ function ArtifactEntry({ reference, chains }) {
130
139
  * The description sits in the appendix and never on the card. The card sits in the body of the report,
131
140
  * where a paragraph about the paper competes with the prose around it.
132
141
  */
142
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
133
143
  function CitationEntry({ reference, records }) {
134
144
  const key = citationKeyOf(reference);
135
145
  const record = citationRecordOf(records, key);
@@ -137,6 +147,7 @@ function CitationEntry({ reference, records }) {
137
147
  return (_jsxs(_Fragment, { children: [_jsx(RefKind, { children: "Citation" }), " ", record !== undefined ? (_jsxs(_Fragment, { children: [_jsx("span", { class: "report-cite-source", children: record.citation }), " "] })) : null, _jsx(Detail, { children: key }), description !== undefined ? _jsx("div", { class: "report-cite-description", children: description }) : null] }));
138
148
  }
139
149
  /** One appendix entry. The kind of the reference selects the shape, and the two shapes share the ladder. */
150
+ // oxlint-disable-next-line typescript/explicit-function-return-type -- hono's JSX ElementType contract demands FunctionComponentResult, which its own jsxDEV factory return (JSXNode) does not satisfy; no writable type names what the body returns, so the inferred JSXNode return stays.
140
151
  function ReferenceEntry({ reference, records, chains }) {
141
152
  return reference.kind === "citation" ? _jsx(CitationEntry, { reference: reference, records: records }) : _jsx(ArtifactEntry, { reference: reference, chains: chains });
142
153
  }
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "hono/jsx/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
2
2
  /**
3
3
  * The value markup: the metric card, the data table, the figure, and the citation card.
4
4
  *
@@ -17,6 +17,8 @@
17
17
  import { type Result, type ResultAsync } from "neverthrow";
18
18
  import { type ConversationAgentDeps } from "../agents/conversation-agent.js";
19
19
  import { type ApprovePlanInput, type ApprovePlanRefusal, type PlanApproval } from "../app/approve-plan.js";
20
+ import { type ChatTurns } from "../app/chat-turn-workflow.js";
21
+ import { type WorkSurface } from "../app/work.js";
20
22
  import { type ReportSessionRuntime } from "../app/report-session-runtime.js";
21
23
  import type { UsageRecorder } from "../billing/usage-recorder.js";
22
24
  import type { ResourcePolicy } from "../config/resource-limits.js";
@@ -26,17 +28,15 @@ import { type AcquireEyes } from "../lib/eyes.js";
26
28
  import type { ThreadType } from "../memory/thread-store.js";
27
29
  import { type ExecuteAnalysisDeps, type ExecuteAnalysisInput, type ExecuteAnalysisResult } from "../workflows/execute-analysis.js";
28
30
  import { type SandboxStepDeps, type SandboxStepInput, type SandboxStepResult } from "../workflows/sandbox-step.js";
29
- import type { Suspension } from "../workflows/suspension.js";
30
31
  import { type DataProfileDeps, type DataProfileWorkflowInput } from "../tasks/data-profile.js";
31
- import { type ExtractValuesResult, type ExtractValuesWorkflowInput } from "../tasks/extract-values.js";
32
- import type { DeriveTableExecInput } from "../tools/report-session/derive-table.js";
33
- import type { ExecResult } from "../sandbox/types.js";
34
32
  import { type CitationResolverConfig } from "../citations/resolve.js";
35
33
  import type { CitationResolver } from "../citations/types.js";
36
- import type { AuthContext } from "../auth/types.js";
34
+ import type { AuthContext, Identity } from "../auth/types.js";
37
35
  import type { ReferenceResolver } from "../report-model/reference-resolver.js";
38
36
  import type { ProvenanceSeam } from "../provenance/seam.js";
37
+ import { type AskGateway } from "../tools/approval/gateway.js";
39
38
  import type { MakeSessionPagePublisher, ResolvePageAsset, ResolvePageUrl } from "../tools/report-session/index.js";
39
+ import type { BioToolKeys } from "../tools/bio/keys.js";
40
40
  /** Registered child sandbox-step callable the parent's child dispatch closes over. */
41
41
  export type SandboxStepCallable = (input: SandboxStepInput) => Promise<SandboxStepResult>;
42
42
  /**
@@ -55,19 +55,20 @@ export type SandboxStepCallable = (input: SandboxStepInput) => Promise<SandboxSt
55
55
  * `executeAnalysis` bag omits `workingMemory`, because the step seeds must read
56
56
  * the same memory that the conversation agent writes.
57
57
  */
58
- export interface CoreWorkflowDeps {
59
- readonly sandboxStep: Omit<SandboxStepDeps, "usageRecorder" | "citationResolver" | "toolOutputStore">;
60
- readonly buildExecuteAnalysis: (sandboxStep: SandboxStepCallable) => Omit<ExecuteAnalysisDeps, "usageRecorder" | "citationResolver" | "toolOutputStore" | "workingMemory">;
58
+ export type CoreWorkflowDeps = {
59
+ readonly sandboxStep: Omit<SandboxStepDeps, "usageRecorder" | "citationResolver" | "toolOutputStore" | "runAuthorizer">;
60
+ readonly buildExecuteAnalysis: (sandboxStep: SandboxStepCallable) => Omit<ExecuteAnalysisDeps, "usageRecorder" | "literatureReviewer" | "toolOutputStore" | "workingMemory"> & {
61
+ /** API keys for the bio/chem tools of the literature reviewer of the synthesis. */
62
+ readonly bioKeys: BioToolKeys;
63
+ };
61
64
  readonly dataProfile: Omit<DataProfileDeps, "usageRecorder" | "toolOutputStore">;
62
- }
65
+ };
63
66
  /** The registered, callable workflow handles. */
64
- export interface RegisteredWorkflows {
67
+ export type RegisteredWorkflows = {
65
68
  readonly executeAnalysis: (input: ExecuteAnalysisInput) => Promise<ExecuteAnalysisResult>;
66
69
  readonly sandboxStep: SandboxStepCallable;
67
70
  readonly dataProfile: (input: DataProfileWorkflowInput) => Promise<void>;
68
- readonly extractValues: (input: ExtractValuesWorkflowInput) => Promise<Result<ExtractValuesResult, Suspension>>;
69
- readonly deriveTableExec: (input: DeriveTableExecInput) => Promise<Result<ExecResult, Suspension>>;
70
- }
71
+ };
71
72
  /**
72
73
  * Conversation-agent deps minus the workflow callable, the resource policy, the
73
74
  * usage recorder, the report-session anchor, the eyes, and the tool output store.
@@ -85,21 +86,23 @@ export interface RegisteredWorkflows {
85
86
  * chrome config. A caller that bound the eyes here would give the conversation
86
87
  * agent a seam that the report agent never sees.
87
88
  */
88
- export type ConversationAssemblyDeps = Omit<ConversationAgentDeps, "executeAnalysisWorkflow" | "resourcePolicy" | "usageRecorder" | "citationResolver" | "anchorReportSession" | "eyes" | "toolOutputStore">;
89
+ export type ConversationAssemblyDeps = Omit<ConversationAgentDeps, "executeAnalysisWorkflow" | "resourcePolicy" | "usageRecorder" | "citationResolver" | "anchorReportSession" | "eyes" | "toolOutputStore" | "registerSubAgent">;
89
90
  /**
90
- * What binds one reference resolver: the analysis whose pinned artifacts it reads, and the auth of the tool
91
- * call that reads them. A resolver serves one analysis, thus the report tools build one for each call.
91
+ * What binds one reference resolver: the analysis whose pinned artifacts it reads, and the identity and the
92
+ * auth of the tool call that reads them. A resolver serves one analysis, thus the report tools build one for
93
+ * each call.
92
94
  */
93
- export interface ReportResolverScope {
95
+ export type ReportResolverScope = {
94
96
  readonly analysisId: string;
97
+ readonly identity: Identity;
95
98
  readonly auth: AuthContext;
96
- }
99
+ };
97
100
  /**
98
101
  * The factory that gives the reference resolver of one report tool call. The harness wires the production
99
102
  * realization, and an embedder can bind its own at its composition root.
100
103
  */
101
104
  export type MakeReportReferenceResolver = (scope: ReportResolverScope) => Promise<ReferenceResolver>;
102
- export interface CoreRuntimeDeps {
105
+ export type CoreRuntimeDeps = {
103
106
  readonly conversation: ConversationAssemblyDeps;
104
107
  readonly workflows: CoreWorkflowDeps;
105
108
  /**
@@ -185,7 +188,15 @@ export interface CoreRuntimeDeps {
185
188
  * which an embedder calls on its own. Thus that composition binds the seam there as well.
186
189
  */
187
190
  readonly provenance?: ProvenanceSeam;
188
- }
191
+ /**
192
+ * The credential of a chat turn that this process did not open, for example a turn that a recovery runs after a
193
+ * restart. The workflow input of a turn holds no credential. Absent, or `undefined` for a turn: the turn pauses
194
+ * with the cause `credential` before its next model call, until a resume gives a credential.
195
+ */
196
+ readonly credentialFor?: (turnId: string) => AuthContext | undefined;
197
+ /** The delays of the timer of an outage, for each kind of work. Absent: the default of the pause. */
198
+ readonly pauseRetryDelaysMs?: readonly number[];
199
+ };
189
200
  /**
190
201
  * The refusal a thread type carries no agent yet. `report` is a valid
191
202
  * `ThreadType` with no registered agent until its builder plugs in at assembly,
@@ -194,19 +205,19 @@ export interface CoreRuntimeDeps {
194
205
  * life, and a bare-`AgentDefinition` return would force every future member to
195
206
  * register an agent in the same commit that adds the member.
196
207
  */
197
- export interface UnregisteredThreadType {
208
+ export type UnregisteredThreadType = {
198
209
  readonly type: "unregistered_thread_type";
199
210
  readonly threadType: ThreadType;
200
- }
211
+ };
201
212
  /**
202
213
  * How a thread's type selects the agent that runs its turns. Resolution is a
203
214
  * synchronous record lookup, so the channel is plain `Result`, never
204
215
  * `ResultAsync`: a registered type resolves to its assembled singleton, an
205
216
  * unregistered one refuses on the error channel.
206
217
  */
207
- export interface ThreadAgentResolver {
218
+ export type ThreadAgentResolver = {
208
219
  forThread(type: ThreadType): Result<AgentDefinition, UnregisteredThreadType>;
209
- }
220
+ };
210
221
  /**
211
222
  * Wrap a type→agent registry as the resolution surface. Held apart from
212
223
  * `assembleCoreRuntime` so the resolution contract — a registered type resolves
@@ -219,7 +230,7 @@ export interface ThreadAgentResolver {
219
230
  * stay valid across every turn.
220
231
  */
221
232
  export declare function createThreadAgentResolver(registry: Partial<Record<ThreadType, AgentDefinition>>): ThreadAgentResolver;
222
- export interface CoreRuntime {
233
+ export type CoreRuntime = {
223
234
  /**
224
235
  * Thread→agent resolution — the only way to reach an assembled agent by
225
236
  * thread type. Holds the singletons this call built; `conversation` resolves
@@ -236,13 +247,29 @@ export interface CoreRuntime {
236
247
  readonly reportSession: Pick<ReportSessionRuntime, "ensureSessionState">;
237
248
  readonly workflows: RegisteredWorkflows;
238
249
  readonly citationResolver: CitationResolver;
250
+ /**
251
+ * The tool-approval gateway over the pool of the runtime: the one realization of `ctx.ask`. A host answers,
252
+ * lists, and sweeps the asks through it.
253
+ */
254
+ readonly askGateway: AskGateway;
255
+ /**
256
+ * The chat turns of the runtime: `open` starts the workflow of a turn, `read` gives its frames, `stop` ends it,
257
+ * and `answer` answers one of its asks. The turn makes its model, its usage recorder, and its approval binding
258
+ * from the runtime, thus a host gives only the session and the user input.
259
+ */
260
+ readonly chatTurns: ChatTurns;
261
+ /**
262
+ * The durable work of an analysis: `list` gives each active turn, run, and data profile with its waits, `stop`
263
+ * ends one work in each state, and `resume` and `hold` reach the waits of one work. Only a client resumes paused work.
264
+ */
265
+ readonly work: WorkSurface;
239
266
  /**
240
267
  * Approve a stored plan by its id and start its run with no model call. It runs over the deps that
241
268
  * reach the `execute_analysis` tool of the conversation agent, thus the approval and the tool launch
242
269
  * a plan the same way.
243
270
  */
244
271
  readonly approvePlan: (input: ApprovePlanInput) => ResultAsync<PlanApproval, ApprovePlanRefusal>;
245
- }
272
+ };
246
273
  /**
247
274
  * The eyes of the composition, or none.
248
275
  *
@@ -18,21 +18,27 @@ import { err, ok } from "neverthrow";
18
18
  import { createConversationAgent } from "../agents/conversation-agent.js";
19
19
  import { createReportSessionAgent } from "../agents/report-session-agent.js";
20
20
  import { approvePlan } from "../app/approve-plan.js";
21
+ import { registerChatTurns } from "../app/chat-turn-workflow.js";
22
+ import { createWork } from "../app/work.js";
23
+ import { createRunCanceler } from "../execution/run-canceler.js";
21
24
  import { createReportSessionRuntime } from "../app/report-session-runtime.js";
22
25
  import { createNoopUsageRecorder } from "../billing/noop-usage-recorder.js";
26
+ import { registerSubAgent } from "../loop/sub-agent.js";
27
+ import { workPause } from "../workflows/pause.js";
23
28
  import { hasBrowserUrl } from "../lib/chrome.js";
24
29
  import { createStaticEyes } from "../lib/eyes.js";
25
30
  import { registerExecuteAnalysis } from "../workflows/execute-analysis.js";
26
31
  import { registerSandboxStep } from "../workflows/sandbox-step.js";
27
- import { registerDataProfileWorkflow } from "../tasks/data-profile.js";
28
- import { bindExtractionTrigger, createExtractionArm, registerExtractValuesWorkflow, } from "../tasks/extract-values.js";
29
- import { registerDeriveTableExecWorkflow, triggerDeriveTableExec } from "../tasks/derive-table-exec.js";
32
+ import { registerDataProfileWorkflow, stopDataProfile } from "../tasks/data-profile.js";
33
+ import { createExtractionArm, runExtraction } from "../tasks/extract-values.js";
30
34
  import { createCitationResolver } from "../citations/resolve.js";
31
35
  import { createThreadStore } from "../memory/thread-store.js";
32
36
  import { createWorkingMemory } from "../memory/working-memory.js";
33
37
  import { createArtifactReadStore, createProductionResolver } from "../report-model/production-resolver.js";
34
38
  import { createReportVersionStore } from "../state/report-versions.js";
35
39
  import { createToolOutputStore } from "../state/tool-outputs.js";
40
+ import { createAskGateway } from "../tools/approval/gateway.js";
41
+ import { createLiteratureReviewerTool } from "../tools/research/literature-reviewer.js";
36
42
  const _assertDomainError = true;
37
43
  /**
38
44
  * Wrap a type→agent registry as the resolution surface. Held apart from
@@ -80,36 +86,49 @@ export function assembleCoreRuntime(deps) {
80
86
  const { conversation, workflows: wf, resourcePolicy } = deps;
81
87
  const usageRecorder = deps.usageRecorder ?? createNoopUsageRecorder();
82
88
  const citationResolver = createCitationResolver({
83
- ...(deps.citationResolverConfig ?? {}),
84
- ...(deps.citationResolverConfig?.ncbiApiKey !== undefined || conversation.bioKeys.ncbi === undefined ? {} : { ncbiApiKey: conversation.bioKeys.ncbi }),
85
- ...(deps.citationResolverConfig?.semanticScholarApiKey !== undefined || conversation.bioKeys.semanticScholar === undefined
86
- ? {}
87
- : { semanticScholarApiKey: conversation.bioKeys.semanticScholar }),
89
+ ...deps.citationResolverConfig,
90
+ ncbiApiKey: deps.citationResolverConfig?.ncbiApiKey ?? conversation.bioKeys.ncbi,
91
+ semanticScholarApiKey: deps.citationResolverConfig?.semanticScholarApiKey ?? conversation.bioKeys.semanticScholar,
88
92
  });
89
93
  const toolOutputStore = createToolOutputStore(conversation.pool);
90
- const sandboxStep = registerSandboxStep({ ...wf.sandboxStep, citationResolver, usageRecorder, toolOutputStore });
91
- const executeAnalysis = registerExecuteAnalysis({
92
- ...wf.buildExecuteAnalysis(sandboxStep),
94
+ const pauseRetryDelaysMs = deps.pauseRetryDelaysMs;
95
+ // Each child of a sub-agent pauses with the work of its caller, thus a resume of the turn or of the run ends its wait.
96
+ const subAgentPauses = ({ runSession, ...work }, emit) => workPause({
97
+ pool: conversation.pool,
98
+ ...work,
99
+ emit,
100
+ retryDelaysMs: pauseRetryDelaysMs,
101
+ run: runSession === undefined ? undefined : { session: runSession, authorizer: conversation.runAuthorizer },
102
+ logger: conversation.logger,
103
+ }).afterFailure;
104
+ const registerPausingSubAgent = (name, body) => registerSubAgent(name, body, subAgentPauses);
105
+ const sandboxStep = registerSandboxStep({
106
+ ...wf.sandboxStep,
93
107
  citationResolver,
94
108
  usageRecorder,
95
109
  toolOutputStore,
96
- workingMemory: createWorkingMemory(conversation.pool),
97
- });
98
- const dataProfile = registerDataProfileWorkflow({ ...wf.dataProfile, usageRecorder, toolOutputStore });
99
- // The extraction workflow shares the profile's sandbox and authorization rails, thus it draws the same
100
- // three seams from the profile deps. The report resolver factory binds the extraction arm over this
101
- // callable, thus a fall-through report reference reads its file out of process on the profile rails.
102
- const extractValues = registerExtractValuesWorkflow({
103
- sandboxClient: wf.dataProfile.sandboxClient,
104
- runAuthorizer: wf.dataProfile.runAuthorizer,
105
- ...(wf.dataProfile.logger ? { logger: wf.dataProfile.logger } : {}),
110
+ pauseRetryDelaysMs,
111
+ runAuthorizer: conversation.runAuthorizer,
106
112
  });
107
- // A session derivation runs its container here and not in the turn. An exec is a durable step of a
108
- // workflow, thus the tool starts this workflow and awaits it.
109
- const deriveTableExec = registerDeriveTableExecWorkflow({
110
- sandboxClient: wf.dataProfile.sandboxClient,
111
- ...(wf.dataProfile.logger ? { logger: wf.dataProfile.logger } : {}),
113
+ const { bioKeys: synthesisBioKeys, ...executeAnalysisDeps } = wf.buildExecuteAnalysis(sandboxStep);
114
+ const literatureReviewer = createLiteratureReviewerTool({
115
+ provider: executeAnalysisDeps.provider,
116
+ model: executeAnalysisDeps.synthesisModel,
117
+ bioKeys: synthesisBioKeys,
118
+ citationResolver,
119
+ usageRecorder,
120
+ toolOutputStore,
121
+ logger: executeAnalysisDeps.logger,
122
+ }, registerPausingSubAgent);
123
+ const executeAnalysis = registerExecuteAnalysis({
124
+ ...executeAnalysisDeps,
125
+ literatureReviewer,
126
+ usageRecorder,
127
+ toolOutputStore,
128
+ workingMemory: createWorkingMemory(conversation.pool),
129
+ pauseRetryDelaysMs,
112
130
  });
131
+ const dataProfile = registerDataProfileWorkflow({ ...wf.dataProfile, usageRecorder, toolOutputStore, pauseRetryDelaysMs });
113
132
  // The session runtime binds the per-session state to the thread behind the
114
133
  // tool boundary, thus one instance serves every report thread. It comes before
115
134
  // the conversation agent, because `start_report_session` takes its anchor
@@ -119,7 +138,7 @@ export function assembleCoreRuntime(deps) {
119
138
  const reportSession = createReportSessionRuntime({
120
139
  pool: conversation.pool,
121
140
  resolveWorkspaceRoot: conversation.resolveWorkspaceRoot,
122
- ...(conversation.logger ? { logger: conversation.logger } : {}),
141
+ logger: conversation.logger,
123
142
  });
124
143
  // The eyes of the composition resolve one time here. Thus the agent that looks at a page and
125
144
  // the tool that starts a session read one answer. No tool reads the precedence again.
@@ -127,20 +146,21 @@ export function assembleCoreRuntime(deps) {
127
146
  const conversationAgent = createConversationAgent({
128
147
  ...conversation,
129
148
  executeAnalysisWorkflow: executeAnalysis,
130
- anchorReportSession: reportSession.ensureSessionState,
149
+ anchorReportSession: reportSession.ensureSessionState.bind(reportSession),
131
150
  resourcePolicy,
132
151
  usageRecorder,
133
152
  toolOutputStore,
134
153
  citationResolver,
135
- ...(eyes ? { eyes } : {}),
154
+ eyes,
136
155
  // The start tool passes it to the spawn, which emits the creation of a
137
156
  // report session. The same seam reaches the report agent below.
138
- ...(deps.provenance ? { provenance: deps.provenance } : {}),
157
+ provenance: deps.provenance,
158
+ registerSubAgent: registerPausingSubAgent,
139
159
  });
140
160
  // The report agent is a singleton over the conversation deps, the same way the
141
161
  // session runtime is. Its preview tool writes the page into the analysis tree
142
162
  // and returns the path, thus the page write reaches no host seam.
143
- const reportVersionStore = createReportVersionStore({ pool: conversation.pool, ...(conversation.logger ? { logger: conversation.logger } : {}) });
163
+ const reportVersionStore = createReportVersionStore({ pool: conversation.pool, logger: conversation.logger });
144
164
  const reportThreads = createThreadStore(conversation.pool);
145
165
  // The read cache of the production report path, one for each recent analysis. A preview
146
166
  // and the record that follows it are two tool calls over one draft, thus they meet the
@@ -149,18 +169,18 @@ export function assembleCoreRuntime(deps) {
149
169
  // call never outlives the call, and one unchanged file costs one hash and one container.
150
170
  const reportArtifactReads = createArtifactReadStore();
151
171
  // The reference resolver of the report path, and its production wiring. A resolver reads
152
- // the pinned artifacts of one analysis, thus the factory binds one analysis and one auth
153
- // for each tool call. The extraction arm falls through to the registered extract-values
154
- // callable for an over-cap file or a host parse fault. The cap gates the host read, and
155
- // the resolver defaults it to 16 MiB.
172
+ // the pinned artifacts of one analysis, thus the factory binds one analysis and one caller
173
+ // for each tool call. The extraction arm falls through to an extraction pass on the sandbox
174
+ // rail of the profile for an over-cap file or a host parse fault. The pass runs inside the
175
+ // step of the tool call. The cap gates the host read, and the resolver defaults it to 16 MiB.
156
176
  const makeProductionReportResolver = async (scope) => {
157
- const arm = createExtractionArm(bindExtractionTrigger({ runAuthorizer: conversation.runAuthorizer, workflow: extractValues }, { auth: scope.auth, analysisId: scope.analysisId }));
177
+ const arm = createExtractionArm((requests) => runExtraction({ sandboxClient: wf.dataProfile.sandboxClient, logger: wf.dataProfile.logger }, scope, requests));
158
178
  return createProductionResolver({
159
179
  workspaceRoot: await conversation.resolveWorkspaceRoot(scope.analysisId),
160
180
  analysisId: scope.analysisId,
161
181
  extractionArm: arm,
162
182
  readCache: reportArtifactReads.forAnalysis(scope.analysisId),
163
- ...(deps.reportHostReadCapBytes !== undefined ? { cap: deps.reportHostReadCapBytes } : {}),
183
+ cap: deps.reportHostReadCapBytes,
164
184
  });
165
185
  };
166
186
  const makeReportResolver = deps.makeReportReferenceResolver ?? makeProductionReportResolver;
@@ -174,19 +194,18 @@ export function assembleCoreRuntime(deps) {
174
194
  store: reportVersionStore,
175
195
  threads: reportThreads,
176
196
  chrome: conversation.chrome,
177
- // The derivation tool draws the rails of the value tier: the same sandbox client
178
- // and the same run authorizer. Thus a session derivation and an extraction run on
179
- // one substrate, and neither one mints a run of the analysis.
197
+ // The derivation tool draws the rail of the value tier: the same sandbox client. Thus a
198
+ // session derivation and an extraction run on one substrate, and neither one mints a run
199
+ // of the analysis.
180
200
  derivations: reportSession.derivations,
181
- runDerivation: (input) => triggerDeriveTableExec(deriveTableExec, input),
182
- runAuthorizer: conversation.runAuthorizer,
201
+ sandboxClient: wf.dataProfile.sandboxClient,
183
202
  makeResolver: makeReportResolver,
184
- ...(eyes ? { eyes } : {}),
185
- ...(deps.resolveReportPageAsset ? { resolvePageAsset: deps.resolveReportPageAsset } : {}),
186
- ...(deps.makeSessionPagePublisher ? { makeSessionPages: deps.makeSessionPagePublisher } : {}),
187
- ...(deps.resolveReportPageUrl ? { resolvePageUrl: deps.resolveReportPageUrl } : {}),
188
- ...(deps.provenance ? { provenance: deps.provenance } : {}),
189
- ...(conversation.logger ? { logger: conversation.logger } : {}),
203
+ eyes,
204
+ resolvePageAsset: deps.resolveReportPageAsset,
205
+ makeSessionPages: deps.makeSessionPagePublisher,
206
+ resolvePageUrl: deps.resolveReportPageUrl,
207
+ provenance: deps.provenance,
208
+ logger: conversation.logger,
190
209
  toolOutputStore,
191
210
  });
192
211
  // The single registration point for every typed agent. A future thread type's
@@ -200,15 +219,43 @@ export function assembleCoreRuntime(deps) {
200
219
  conversation: conversationAgent,
201
220
  report: reportAgent,
202
221
  };
222
+ const agentResolver = createThreadAgentResolver(agents);
223
+ const askGateway = createAskGateway({ pool: conversation.pool });
224
+ const chatTurns = registerChatTurns({
225
+ pool: conversation.pool,
226
+ logger: conversation.logger,
227
+ provenance: deps.provenance,
228
+ agents: agentResolver,
229
+ provider: conversation.provider,
230
+ usageRecorder,
231
+ askGateway,
232
+ credentialFor: deps.credentialFor,
233
+ pauseRetryDelaysMs,
234
+ });
203
235
  return {
204
- agents: createThreadAgentResolver(agents),
205
- reportSession: { ensureSessionState: reportSession.ensureSessionState },
236
+ agents: agentResolver,
237
+ askGateway,
238
+ chatTurns,
239
+ work: createWork({
240
+ pool: conversation.pool,
241
+ runAuthorizer: conversation.runAuthorizer,
242
+ logger: conversation.logger,
243
+ stopTurn: (turnId) => chatTurns.stop(turnId),
244
+ runCanceler: createRunCanceler({
245
+ pool: conversation.pool,
246
+ runCharge: executeAnalysisDeps.runCharge,
247
+ runAuthorizer: conversation.runAuthorizer,
248
+ // The end of a canceled run goes where the run engine emits the rest of the run.
249
+ provenance: executeAnalysisDeps.provenance,
250
+ logger: conversation.logger,
251
+ }),
252
+ stopProfile: (analysisId, workflowId) => stopDataProfile({ pool: conversation.pool, logger: conversation.logger, notifyDataProfileSettled: wf.dataProfile.notifyDataProfileSettled }, analysisId, workflowId),
253
+ }),
254
+ reportSession: { ensureSessionState: reportSession.ensureSessionState.bind(reportSession) },
206
255
  workflows: {
207
256
  executeAnalysis,
208
257
  sandboxStep,
209
258
  dataProfile,
210
- extractValues,
211
- deriveTableExec,
212
259
  },
213
260
  citationResolver,
214
261
  approvePlan: (input) => approvePlan({
@@ -216,10 +263,10 @@ export function assembleCoreRuntime(deps) {
216
263
  executeAnalysisWorkflow: executeAnalysis,
217
264
  runAuthorizer: conversation.runAuthorizer,
218
265
  runLauncher: conversation.runLauncher,
219
- ...(resourcePolicy ? { resourcePolicy } : {}),
220
- ...(conversation.extendAnalysisFarm ? { extendAnalysisFarm: conversation.extendAnalysisFarm } : {}),
221
- ...(conversation.logger ? { logger: conversation.logger } : {}),
222
- ...(deps.provenance ? { provenance: deps.provenance } : {}),
266
+ resourcePolicy,
267
+ extendAnalysisFarm: conversation.extendAnalysisFarm,
268
+ logger: conversation.logger,
269
+ provenance: deps.provenance,
223
270
  }, input),
224
271
  };
225
272
  }
@@ -2,7 +2,7 @@
2
2
  * `bootHarness` — the harness-owned boot sequence.
3
3
  *
4
4
  * `assembleCoreRuntime` stays sync and pure (it is the register-before-launch
5
- * cohort SOT, driven by tests on `passthroughStep`). `bootHarness` wraps it with
5
+ * cohort SOT, driven by tests outside a workflow). `bootHarness` wraps it with
6
6
  * the ordered, effectful boot steps every host must run in the same order, and
7
7
  * returns a `shutdown` handle the embedder wires to its process signals. The
8
8
  * ordering is load-bearing and runs cheapest-failure-first:
@@ -39,15 +39,16 @@
39
39
  * once shutdown starts, exiting takes precedence (see `runShutdownSequence`).
40
40
  */
41
41
  import type { Pool } from "pg";
42
+ import type { Querier } from "../state/db.js";
42
43
  import type { Logger } from "../lib/logger.js";
43
44
  import { type CoreRuntime, type CoreRuntimeDeps } from "./assemble.js";
44
45
  import { type ConnectionBudgetConfig } from "./connection-budget.js";
45
46
  import { type DbosConfig } from "./dbos.js";
46
- export interface BootHarnessDeps {
47
+ export type BootHarnessDeps = {
47
48
  /** Everything `assembleCoreRuntime` needs (workflow + conversation deps, resource policy). */
48
49
  readonly core: CoreRuntimeDeps;
49
- /** App `pg.Pool` — used for state init, the connection-budget guard, and closed on shutdown. */
50
- readonly pool: Pool;
50
+ /** The ledger pool — used for state init, the connection-budget guard, and closed on shutdown. */
51
+ readonly pool: Querier & Pick<Pool, "connect" | "end" | "options">;
51
52
  /** Skills root; validated against the harness-owned agent catalog before launch. */
52
53
  readonly skillsDir: string;
53
54
  /** DBOS launch config (carries the stable `executorId`). */
@@ -72,10 +73,10 @@ export interface BootHarnessDeps {
72
73
  readonly flushLogger?: () => Promise<void>;
73
74
  /** Process exit at shutdown. Default no-op — the embedder owns process lifecycle. */
74
75
  readonly exit?: (code: number) => void;
75
- }
76
- export interface BootedHarness {
76
+ };
77
+ export type BootedHarness = {
77
78
  readonly runtime: CoreRuntime;
78
79
  /** Runs the graceful-shutdown sequence in durability order. Wire to SIGTERM/SIGINT. */
79
80
  readonly shutdown: (signal: string) => Promise<void>;
80
- }
81
+ };
81
82
  export declare function bootHarness(deps: BootHarnessDeps): Promise<BootedHarness>;