@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
@@ -1,23 +1,24 @@
1
- import { jsonSchema, tool as aiTool } from "ai";
1
+ import { errorMessageOf } from "../lib/thrown.js";
2
+ import { textOf } from "../lib/unknown-text.js";
3
+ import { ok } from "neverthrow";
2
4
  import { z } from "zod";
3
5
  import { PLANNABLE_AGENT_CATALOG } from "../agents/sandbox-catalog.js";
4
6
  import { SANDBOX_AGENT_META } from "../agents/sandbox/index.js";
5
7
  import { forSubAgent } from "../auth/types.js";
6
8
  import { DATA_PROFILE_ORIENTATION_MAX_CHARS, buildDataProfileOrientation } from "../app/data-profile-orientation.js";
7
- import { createNoopUsageRecorder } from "../billing/noop-usage-recorder.js";
8
9
  import { createNoopLogger } from "../lib/console-logger.js";
9
- import { unwrapOrThrow } from "../lib/result.js";
10
- import { countChatTokens } from "../loop/metrics.js";
11
- import { accountForChatCall } from "../loop/run-agent.js";
10
+ import { toThrowable, unwrapOrThrow } from "../lib/result.js";
11
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
12
+ import { runLoop } from "../loop/run-loop.js";
12
13
  import { packagesSection, resourceEstimationSection } from "../prompts/planner.js";
13
14
  import { effectiveDeadlineMs } from "../providers/types.js";
14
15
  import { formatQuery, parseQuery } from "../sandbox/package-identity.js";
15
16
  import { loadDataProfileStatus } from "../state/index.js";
17
+ import { defineTool } from "./define-tool.js";
16
18
  export const AD_HOC_ROUTER_AGENT_ID = "adhoc-router";
17
19
  export const AD_HOC_ROUTER_TIMEOUT_MS = 10_000;
18
20
  export const AD_HOC_FALLBACK_AGENT_ID = "scientific-executor";
19
- /** Must differ from a loop step name such as `llm-0`, since both share the usage-record key space. */
20
- const AD_HOC_ROUTE_CALL_NAME = "adhoc-route";
21
+ const SUBMIT_ROUTE_TOOL_ID = "submit_route";
21
22
  const resourcesSchema = z.object({
22
23
  cpu: z.number().positive(),
23
24
  memoryGb: z.number().positive(),
@@ -70,7 +71,7 @@ async function profileOrientation(pool, analysisId, logger) {
70
71
  return buildDataProfileOrientation(status.result, analysisId, DATA_PROFILE_ORIENTATION_MAX_CHARS);
71
72
  }
72
73
  catch (error) {
73
- logger.warn("could not load data profile for ad hoc routing", { error: error instanceof Error ? error.message : String(error) });
74
+ logger.warn("could not load data profile for ad hoc routing", { error: errorMessageOf(error) ?? textOf(error) });
74
75
  return "The persisted data profile could not be loaded; route from the request alone.";
75
76
  }
76
77
  }
@@ -98,7 +99,7 @@ async function routePackages(raw, resolve, logger) {
98
99
  const seen = new Set();
99
100
  for (const element of entries) {
100
101
  if (typeof element !== "string") {
101
- droppedPackages.push({ entry: String(element), reason: "unparsable" });
102
+ droppedPackages.push({ entry: textOf(element), reason: "unparsable" });
102
103
  continue;
103
104
  }
104
105
  const entry = element.trim();
@@ -123,7 +124,7 @@ async function routePackages(raw, resolve, logger) {
123
124
  catch (error) {
124
125
  // A resolution that throws is the same condition as an inventory that
125
126
  // reports itself unavailable: it says nothing about the packages.
126
- logger.warn("ad hoc package resolution failed", { error: error instanceof Error ? error.message : String(error) });
127
+ logger.warn("ad hoc package resolution failed", { error: errorMessageOf(error) ?? textOf(error) });
127
128
  rows = null;
128
129
  }
129
130
  if (rows === null)
@@ -154,13 +155,15 @@ async function routePackages(raw, resolve, logger) {
154
155
  }
155
156
  return { packages, droppedPackages };
156
157
  }
158
+ /** The one tool of the router. The route is the input of its call, thus the call itself records nothing. */
157
159
  function routeTool() {
158
- return {
159
- submit_route: aiTool({
160
- description: "Submit the single specialist, the resource recommendation, and the packages of the step. This is the only valid response.",
161
- inputSchema: jsonSchema(z.toJSONSchema(routeSchema)),
162
- }),
163
- };
160
+ return defineTool({
161
+ id: SUBMIT_ROUTE_TOOL_ID,
162
+ description: "Submit the single specialist, the resource recommendation, and the packages of the step. This is the only valid response.",
163
+ inputSchema: routeSchema,
164
+ describeCall: "none",
165
+ execute: () => Promise.resolve(ok({ recorded: true })),
166
+ });
164
167
  }
165
168
  export async function routeAdHocRequest(deps, input) {
166
169
  const logger = (deps.logger ?? createNoopLogger()).named("adhoc-router").with({ analysisId: input.analysisId, model: deps.model });
@@ -168,14 +171,15 @@ export async function routeAdHocRequest(deps, input) {
168
171
  const catalog = PLANNABLE_AGENT_CATALOG.map((agent) => `- ${agent.id}: capabilities [${agent.capabilities.join(", ")}]; suitable for [${agent.suitableFor.join(", ")}]`).join("\n");
169
172
  const orientation = await profileOrientation(deps.pool, input.analysisId, logger);
170
173
  const controller = new AbortController();
174
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a guard, not a wait: it aborts the routing controller at the deadline while the provider call runs, and the finally clears it.
171
175
  const timer = setTimeout(() => controller.abort(new Error("ad hoc routing timed out")), effectiveDeadlineMs(deps.provider, AD_HOC_ROUTER_TIMEOUT_MS, deps.timeoutMs));
172
176
  const signal = AbortSignal.any([input.signal, controller.signal]);
173
177
  let raw;
174
178
  let failure;
175
179
  try {
176
- const response = unwrapOrThrow(await deps.provider
177
- .chat({
178
- system: [
180
+ const router = {
181
+ id: AD_HOC_ROUTER_AGENT_ID,
182
+ systemPrompt: [
179
183
  "Select exactly one specialist for a targeted one-step analysis, estimate its sandbox resources, and name the packages that the step imports.",
180
184
  "Choose only from the supplied catalog. Do not create a plan, reject the request, or select scientific-executor.",
181
185
  resourceEstimationSection(deps.resourcePolicy),
@@ -184,45 +188,54 @@ export async function routeAdHocRequest(deps, input) {
184
188
  "You hold no package census. For a name that both ecosystems hold, the language of the specialist you select and the wording of the request decide the track.",
185
189
  "Respond only by calling submit_route.",
186
190
  ].join("\n\n"),
187
- messages: [
188
- {
189
- role: "user",
190
- content: `Request:\n${input.request}\n\nPersisted data-profile orientation:\n${orientation}\n\nEligible specialists:\n${catalog}`,
191
- },
192
- ],
193
- // No forced tool choice: some Claude models reject it with a
194
- // 400. A reply without the call falls back below as `malformed`.
195
- tools: routeTool(),
196
- }, routerSession, signal)
197
- .map(countChatTokens(AD_HOC_ROUTER_AGENT_ID)));
198
- // A failed call throws at unwrapOrThrow above, so no usage is recorded.
199
- accountForChatCall(response, {
200
- session: routerSession,
201
- agentId: AD_HOC_ROUTER_AGENT_ID,
202
- callPath: routerSession.provenance.callPath,
203
- stepName: AD_HOC_ROUTE_CALL_NAME,
204
- ...(input.invocationId === undefined ? {} : { invocationId: input.invocationId }),
205
- usageRecorder: deps.usageRecorder ?? createNoopUsageRecorder(),
206
- logger,
207
- rollups: input.turnUsage === undefined ? [] : [input.turnUsage],
191
+ model: deps.model,
192
+ tools: [routeTool()],
193
+ // One request: the route is the input of the call, thus no second request is due.
194
+ maxIterations: 1,
195
+ };
196
+ const run = await runLoop(router, [
197
+ {
198
+ role: "user",
199
+ content: `Request:\n${input.request}\n\nPersisted data-profile orientation:\n${orientation}\n\nEligible specialists:\n${catalog}`,
200
+ },
201
+ ], routerSession, {
202
+ provider: deps.provider,
203
+ signal,
204
+ emit: () => undefined,
205
+ // One request reads no cache back, thus a cache write is a cost with no return.
206
+ promptCache: "off",
207
+ logger: deps.logger,
208
+ usageRecorder: deps.usageRecorder,
209
+ // The router call folds its usage into the turn total, and the turn root reports it.
210
+ turnUsage: input.turnUsage ?? {},
211
+ invocationId: input.invocationId,
212
+ stopWhen: (steps) => steps.some((step) => step.calls.some((call) => call.toolName === SUBMIT_ROUTE_TOOL_ID)),
208
213
  });
209
- const call = Array.isArray(response.message.content)
210
- ? response.message.content.find((part) => part.type === "tool-call" && part.toolName === "submit_route")
211
- : undefined;
212
- raw = call?.input;
213
- if (!call)
214
- failure = "malformed";
214
+ if (run.finish.reason === "aborted") {
215
+ if (input.signal.aborted)
216
+ throw toThrowable(input.signal.reason);
217
+ failure = "timeout";
218
+ logger.warn("ad hoc route fell back", { failure });
219
+ }
220
+ else {
221
+ // No forced tool choice: some Claude models reject it with a 400. A reply
222
+ // without the call falls back below as `malformed`.
223
+ const call = run.steps.flatMap((step) => step.calls).find((entry) => entry.toolName === SUBMIT_ROUTE_TOOL_ID);
224
+ raw = call?.input;
225
+ if (!call)
226
+ failure = "malformed";
227
+ }
215
228
  }
216
229
  catch (error) {
217
230
  if (input.signal.aborted)
218
231
  throw error;
219
- failure = controller.signal.aborted && !input.signal.aborted ? "timeout" : "provider_error";
220
- logger.warn("ad hoc route fell back", { failure, error: error instanceof Error ? error.message : String(error) });
232
+ failure = controller.signal.aborted ? "timeout" : "provider_error";
233
+ logger.warn("ad hoc route fell back", { failure, error: errorMessageOf(error) ?? textOf(error) });
221
234
  }
222
235
  finally {
223
236
  clearTimeout(timer);
224
237
  }
225
- const candidate = raw !== null && typeof raw === "object" ? raw : {};
238
+ const candidate = parseUnknownRecord(raw) ?? {};
226
239
  const requestedAgent = typeof candidate.agentId === "string" ? candidate.agentId : undefined;
227
240
  const validAgent = requestedAgent !== undefined && PLANNABLE_AGENT_CATALOG.some((agent) => agent.id === requestedAgent);
228
241
  const agentId = validAgent ? requestedAgent : AD_HOC_FALLBACK_AGENT_ID;
@@ -249,14 +262,14 @@ export async function routeAdHocRequest(deps, input) {
249
262
  // most requests use a capability that declares nothing.
250
263
  const requestedCapability = typeof candidate.capability === "string" ? candidate.capability.trim() : "";
251
264
  const capability = (SANDBOX_AGENT_META[agentId]?.capabilities ?? []).includes(requestedCapability) ? requestedCapability : undefined;
252
- logger.info("ad hoc route selected", { agentId, resources, rationale, failure, packages, droppedPackages, ...(capability ? { capability } : {}) });
265
+ logger.info("ad hoc route selected", { agentId, resources, rationale, failure, packages, droppedPackages, capability });
253
266
  return {
254
267
  agentId,
255
268
  resources,
256
269
  rationale,
257
270
  packages,
258
271
  droppedPackages,
259
- ...(capability ? { capability } : {}),
260
- ...(failure ? { fallbackClass: failure } : {}),
272
+ capability,
273
+ fallbackClass: failure,
261
274
  };
262
275
  }
@@ -2,3 +2,10 @@
2
2
  export declare function adHocPlanId(analysisId: string, invocationId: string): string;
3
3
  /** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
4
4
  export declare function adHocRunId(analysisId: string, invocationId: string): string;
5
+ /**
6
+ * The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
7
+ * gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
8
+ */
9
+ export declare function callRunId(callKey: string): string;
10
+ /** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
11
+ export declare function durableCallKey(toolCallId: string): string | undefined;
@@ -1,7 +1,10 @@
1
+ import { DBOS } from "@dbos-inc/dbos-sdk";
1
2
  import { createHash } from "node:crypto";
2
3
  const TOOL_ID = "execute_analysis";
3
- function digest(analysisId, invocationId) {
4
- return createHash("sha256").update(`${TOOL_ID}\0${analysisId}\0${invocationId}`, "utf8").digest();
4
+ function digest(...parts) {
5
+ return createHash("sha256")
6
+ .update([TOOL_ID, ...parts].join("\0"), "utf8")
7
+ .digest();
5
8
  }
6
9
  /** Deterministic internal plan id in the existing persistence shape. */
7
10
  export function adHocPlanId(analysisId, invocationId) {
@@ -9,9 +12,30 @@ export function adHocPlanId(analysisId, invocationId) {
9
12
  }
10
13
  /** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
11
14
  export function adHocRunId(analysisId, invocationId) {
12
- const bytes = Buffer.from(digest(analysisId, invocationId).subarray(4, 20));
13
- bytes[6] = (bytes[6] & 0x0f) | 0x50;
14
- bytes[8] = (bytes[8] & 0x3f) | 0x80;
15
+ return uuidOf(digest(analysisId, invocationId));
16
+ }
17
+ /**
18
+ * The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
19
+ * gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
20
+ */
21
+ export function callRunId(callKey) {
22
+ return uuidOf(digest("plan", callKey));
23
+ }
24
+ /** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
25
+ export function durableCallKey(toolCallId) {
26
+ const workflowId = DBOS.workflowID;
27
+ return workflowId === undefined ? undefined : `${workflowId}:${toolCallId}`;
28
+ }
29
+ function uuidOf(hash) {
30
+ const bytes = Buffer.from(hash.subarray(4, 20));
31
+ const versionByte = bytes[6];
32
+ if (versionByte === undefined)
33
+ throw new Error("the digest is shorter than the UUID layout");
34
+ bytes[6] = (versionByte & 0x0f) | 0x50;
35
+ const variantByte = bytes[8];
36
+ if (variantByte === undefined)
37
+ throw new Error("the digest is shorter than the UUID layout");
38
+ bytes[8] = (variantByte & 0x3f) | 0x80;
15
39
  const hex = bytes.toString("hex");
16
40
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
17
41
  }
@@ -1,15 +1,13 @@
1
1
  /**
2
- * The tool-approval seam contract: the request a conversation tool pauses on,
3
- * the decision the user returns, and the deny-by-default realization shipped for
4
- * hosts that wire no interactive surface.
2
+ * The tool-approval contract: the request that the approval hook of a tool gives,
3
+ * and the decision that the user returns.
5
4
  *
6
- * The seam is generic — nothing here names a tool or a domain. A tool describes
5
+ * The contract is generic — nothing here names a tool or a domain. A tool describes
7
6
  * the concrete action it needs approved (`AskRequest`); a surface renders it, the
8
- * user decides, and the decision comes back as an `AskApproval` on approval or an
9
- * `AskRejectedError` throw on denial.
7
+ * user decides, and the loop runs the call on an approval or denies it.
10
8
  *
11
- * These are standalone types so `define-tool.ts` can type-import them into
12
- * `ToolContext` without an import cycle back through the tools layer.
9
+ * These are standalone types so `define-tool.ts` can type-import them without an
10
+ * import cycle back through the tools layer.
13
11
  */
14
12
  /**
15
13
  * The human-facing content a surface renders to describe the exact action being
@@ -17,7 +15,7 @@
17
15
  * they saw is precisely what is granted, nothing broader. No tool- or
18
16
  * domain-specific fields: the harness stays agnostic to what is being approved.
19
17
  */
20
- export interface AskRequest {
18
+ export type AskRequest = {
21
19
  readonly title: string;
22
20
  readonly command: string;
23
21
  readonly detail?: string;
@@ -29,15 +27,12 @@ export interface AskRequest {
29
27
  * field, and the surface never renders it. Absent, the grant keys on `command`.
30
28
  */
31
29
  readonly grantKey?: string;
32
- }
30
+ };
33
31
  /**
34
32
  * A user's decision on an approval request — three distinct outcomes, never a
35
33
  * boolean. `once` approves the single pending invocation; `always` approves it
36
34
  * AND records a standing grant for the matched action; `reject` denies and MAY
37
35
  * carry model-facing feedback.
38
- *
39
- * This full three-variant union is the wire type the outward `answer` API takes;
40
- * `ctx.ask` itself resolves only with the `AskApproval` subset (denial throws).
41
36
  */
42
37
  export type AskReply = {
43
38
  readonly kind: "once";
@@ -47,42 +42,3 @@ export type AskReply = {
47
42
  readonly kind: "reject";
48
43
  readonly feedback?: string;
49
44
  };
50
- /**
51
- * The subset of `AskReply` `ctx.ask` may resolve with. Denial never returns — it
52
- * throws `AskRejectedError` — so a resolved approval is only ever `once` or
53
- * `always`, and a caller never has to inspect for a reject variant.
54
- */
55
- export type AskApproval = Exclude<AskReply, {
56
- kind: "reject";
57
- }>;
58
- /**
59
- * The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
60
- * model-facing feedback.
61
- *
62
- * Denial is a throw rather than a returned reject variant so a tool never has to
63
- * inspect the reply to learn it was denied: only asks throw, so the throw itself
64
- * is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
65
- * the caught error to an execution-denied tool result and stops the turn.
66
- */
67
- export declare class AskRejectedError extends Error {
68
- readonly feedback?: string;
69
- constructor(feedback?: string);
70
- }
71
- /**
72
- * The user-approval seam. `ask` pauses on an approval request and resolves with
73
- * the approval decision, or throws `AskRejectedError` when the user denies.
74
- * Realizations are wired by the embedder; an unwired host resolves to
75
- * `UnavailableAsk`.
76
- */
77
- export interface Ask {
78
- ask(request: AskRequest): Promise<AskApproval>;
79
- }
80
- /**
81
- * Deny-by-default realization — the shipped `Ask` for hosts that wire no
82
- * interactive surface (workflow contexts, headless embedders). Every request is
83
- * denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
84
- * rather than left waiting on a surface that will never respond.
85
- */
86
- export declare class UnavailableAsk implements Ask {
87
- ask(_request: AskRequest): Promise<AskApproval>;
88
- }
@@ -1,41 +1,12 @@
1
1
  /**
2
- * The tool-approval seam contract: the request a conversation tool pauses on,
3
- * the decision the user returns, and the deny-by-default realization shipped for
4
- * hosts that wire no interactive surface.
2
+ * The tool-approval contract: the request that the approval hook of a tool gives,
3
+ * and the decision that the user returns.
5
4
  *
6
- * The seam is generic — nothing here names a tool or a domain. A tool describes
5
+ * The contract is generic — nothing here names a tool or a domain. A tool describes
7
6
  * the concrete action it needs approved (`AskRequest`); a surface renders it, the
8
- * user decides, and the decision comes back as an `AskApproval` on approval or an
9
- * `AskRejectedError` throw on denial.
7
+ * user decides, and the loop runs the call on an approval or denies it.
10
8
  *
11
- * These are standalone types so `define-tool.ts` can type-import them into
12
- * `ToolContext` without an import cycle back through the tools layer.
9
+ * These are standalone types so `define-tool.ts` can type-import them without an
10
+ * import cycle back through the tools layer.
13
11
  */
14
- /**
15
- * The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
16
- * model-facing feedback.
17
- *
18
- * Denial is a throw rather than a returned reject variant so a tool never has to
19
- * inspect the reply to learn it was denied: only asks throw, so the throw itself
20
- * is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
21
- * the caught error to an execution-denied tool result and stops the turn.
22
- */
23
- export class AskRejectedError extends Error {
24
- feedback;
25
- constructor(feedback) {
26
- super(feedback ? `approval rejected: ${feedback}` : "approval rejected");
27
- this.name = "AskRejectedError";
28
- this.feedback = feedback;
29
- }
30
- }
31
- /**
32
- * Deny-by-default realization — the shipped `Ask` for hosts that wire no
33
- * interactive surface (workflow contexts, headless embedders). Every request is
34
- * denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
35
- * rather than left waiting on a surface that will never respond.
36
- */
37
- export class UnavailableAsk {
38
- async ask(_request) {
39
- throw new AskRejectedError("approval is unavailable in this environment");
40
- }
41
- }
12
+ export {};
@@ -1,48 +1,47 @@
1
1
  /**
2
- * The poll-based tool-approval gateway — the constructed `Ask` seam realization
3
- * an embedder wires over its Postgres pool, plus the outward `answer` / `pending`
4
- * API it drives and the boot-time `sweepExpired`.
5
- *
6
- * `ask` is the per-turn seam an embedder binds: a conversation tool's `ctx.ask`
7
- * pauses on it. The database is the single source of truth for ask state — `ask`
8
- * inserts a `pending` ledger row, emits the `data-ask` part, and polls that row to
9
- * a terminal status; there is no in-memory resolver map. `answer` is one guarded
10
- * write. See the poll site below for why.
2
+ * The tool-approval gateway: the ask ledger over the Postgres pool of an
3
+ * embedder. A turn workflow raises an ask under a known id and waits for the
4
+ * answer itself. `answer` is one guarded write, and `pending` and the boot-time
5
+ * `sweepExpired` read and expire the ledger.
11
6
  */
12
7
  import type { Pool } from "pg";
13
- import type { EmitFn } from "../../loop/types.js";
14
- import { type AskApproval, type AskReply, type AskRequest } from "./contract.js";
15
- import { type AnswerOutcome, type PendingAsk } from "./queries.js";
8
+ import type { AskPart } from "../../contracts/chat-parts.js";
9
+ import type { AskReply, AskRequest } from "./contract.js";
10
+ import { type AnswerOutcome, type AskStatus, type PendingAsk } from "./queries.js";
16
11
  export type { AnswerOutcome, PendingAsk } from "./queries.js";
17
12
  /** Construction deps: the harness application pool the ledger lives in. */
18
- export interface AskGatewayDeps {
13
+ export type AskGatewayDeps = {
19
14
  readonly pool: Pool;
20
- }
21
- /**
22
- * Per-turn context an embedder binds into the `Ask` seam. It scopes the ask to an
23
- * analysis/thread and to one user, carries the turn's abort `signal`, and supplies
24
- * the `emit` sink the `data-ask` part flows through.
25
- */
26
- export interface AskContext {
15
+ };
16
+ /** Who an ask goes to and where it belongs. */
17
+ export type AskScope = {
27
18
  readonly analysisId: string;
28
19
  /** The opaque identity of the person the ask goes to. The harness never reads it. */
29
20
  readonly userId: string;
30
21
  readonly threadId?: string;
31
- readonly signal: AbortSignal;
32
- readonly emit: EmitFn;
33
- }
34
- /** The gateway surface: the per-turn seam plus the outward embedder-driven API. */
35
- export interface AskGateway {
36
- ask(request: AskRequest, ctx: AskContext): Promise<AskApproval>;
22
+ };
23
+ /** The gateway surface: the raise of a turn and the outward embedder-driven API. */
24
+ export type AskGateway = {
25
+ /**
26
+ * Raise an ask under a known id, for a turn workflow that waits for the answer itself. A standing grant settles
27
+ * it at once as `resolved`. Else the row waits as `pending`. A second raise of the same id changes nothing.
28
+ */
29
+ raise(id: string, request: AskRequest, scope: AskScope): Promise<"granted" | "pending">;
30
+ /** Mark a pending ask `expired`. */
31
+ expire(id: string): Promise<void>;
32
+ /** Mark a pending ask `aborted`. */
33
+ abort(id: string): Promise<void>;
37
34
  answer(id: string, reply: AskReply): Promise<AnswerOutcome>;
38
35
  pending(): Promise<PendingAsk[]>;
39
36
  /** Expire pending asks older than `maxAgeMs` (default {@link DEFAULT_SWEEP_MAX_AGE_MS}). */
40
37
  sweepExpired(maxAgeMs?: number): Promise<number>;
41
- }
38
+ };
42
39
  /**
43
40
  * Pending rows older than this are treated as orphans of a dead process. Far
44
41
  * beyond any plausible live turn, so a boot sweep during a rolling deployment
45
- * cannot expire an ask another pod is still polling.
42
+ * cannot expire an ask another pod is still waiting on.
46
43
  */
47
44
  export declare const DEFAULT_SWEEP_MAX_AGE_MS: number;
48
45
  export declare function createAskGateway(deps: AskGatewayDeps): AskGateway;
46
+ /** The `data-ask` part of an ask in one status. Each status of one ask reconciles under the same id. */
47
+ export declare function askPartOf(id: string, request: AskRequest, status: AskStatus, reply?: AskReply["kind"]): AskPart;