@inflexa-ai/harness 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -3,16 +3,36 @@
3
3
  * shared by every embedder. Host-neutral: it references only DBOS and the OTel
4
4
  * API, which the harness already depends on, so it ships in the harness.
5
5
  *
6
+ * Outside a workflow the launch starts the run with `DBOS.startWorkflow`. A
7
+ * tool call of a chat turn runs inside a step, and DBOS refuses a start or an
8
+ * enqueue from a step. Thus inside a workflow the launch enqueues the run
9
+ * through a `DBOSClient` on the run queue, which no step check covers, and
10
+ * which keeps the run out of the children of the caller. Both paths take the
11
+ * run id as the workflow id, and DBOS gives back the existing workflow for an
12
+ * id that it holds. Thus a second launch of one run id starts nothing. A launch
13
+ * that fails while a workflow of its run id exists resolves, because the run is
14
+ * durably started.
15
+ *
6
16
  * A launch detaches the run from the caller's trace. The DBOS workflow span
7
17
  * takes the active context as its parent, and the caller is a chat request
8
18
  * (or another short-lived operation) whose span ends in milliseconds while the
9
19
  * run lasts hours. So the launch opens a root span of its own, runs
10
20
  * `startWorkflow` under it, and joins the two traces by a span link back to
11
- * the originating span plus `inflexa.run_id` on both sides. With no
12
- * TracerProvider registered every call here is a no-op on the API's
13
- * non-recording span.
21
+ * the originating span plus `inflexa.run_id` on both sides. An enqueued run
22
+ * starts on the dispatch loop of the queue, in no trace of the launch, and
23
+ * `inflexa.run_id` joins it. With no TracerProvider registered every call here
24
+ * is a no-op on the API's non-recording span.
14
25
  */
26
+ import type { Pool } from "pg";
27
+ import type { Logger } from "../lib/logger.js";
15
28
  import type { RunLauncher } from "./run-launcher.js";
16
29
  /** Attribute carrying the run id on the originating span and on the run's root span. */
17
30
  export declare const ATTR_INFLEXA_RUN_ID = "inflexa.run_id";
18
- export declare function createDbosRunLauncher(): RunLauncher;
31
+ /** The queue of a run that a launch inside a workflow enqueues. It has no limit, thus a run waits only for the poll of the queue. */
32
+ export declare const RUN_QUEUE = "analysis-runs";
33
+ export type DbosRunLauncherDeps = {
34
+ /** A pool onto the system database of the engine: the same database that the application pool holds. */
35
+ readonly pool: Pool;
36
+ readonly logger?: Logger;
37
+ };
38
+ export declare function createDbosRunLauncher(deps: DbosRunLauncherDeps): RunLauncher;
@@ -3,23 +3,68 @@
3
3
  * shared by every embedder. Host-neutral: it references only DBOS and the OTel
4
4
  * API, which the harness already depends on, so it ships in the harness.
5
5
  *
6
+ * Outside a workflow the launch starts the run with `DBOS.startWorkflow`. A
7
+ * tool call of a chat turn runs inside a step, and DBOS refuses a start or an
8
+ * enqueue from a step. Thus inside a workflow the launch enqueues the run
9
+ * through a `DBOSClient` on the run queue, which no step check covers, and
10
+ * which keeps the run out of the children of the caller. Both paths take the
11
+ * run id as the workflow id, and DBOS gives back the existing workflow for an
12
+ * id that it holds. Thus a second launch of one run id starts nothing. A launch
13
+ * that fails while a workflow of its run id exists resolves, because the run is
14
+ * durably started.
15
+ *
6
16
  * A launch detaches the run from the caller's trace. The DBOS workflow span
7
17
  * takes the active context as its parent, and the caller is a chat request
8
18
  * (or another short-lived operation) whose span ends in milliseconds while the
9
19
  * run lasts hours. So the launch opens a root span of its own, runs
10
20
  * `startWorkflow` under it, and joins the two traces by a span link back to
11
- * the originating span plus `inflexa.run_id` on both sides. With no
12
- * TracerProvider registered every call here is a no-op on the API's
13
- * non-recording span.
21
+ * the originating span plus `inflexa.run_id` on both sides. An enqueued run
22
+ * starts on the dispatch loop of the queue, in no trace of the launch, and
23
+ * `inflexa.run_id` joins it. With no TracerProvider registered every call here
24
+ * is a no-op on the API's non-recording span.
14
25
  */
15
26
  import { DBOS } from "@dbos-inc/dbos-sdk";
16
27
  import { context, isSpanContextValid, ROOT_CONTEXT, trace } from "@opentelemetry/api";
28
+ import { createNoopLogger } from "../lib/console-logger.js";
29
+ import { dbosClientFor } from "./dbos-workflow-purger.js";
17
30
  /** Attribute carrying the run id on the originating span and on the run's root span. */
18
31
  export const ATTR_INFLEXA_RUN_ID = "inflexa.run_id";
32
+ /** The queue of a run that a launch inside a workflow enqueues. It has no limit, thus a run waits only for the poll of the queue. */
33
+ export const RUN_QUEUE = "analysis-runs";
19
34
  const TRACER_NAME = "inflexa.harness.run-launcher";
20
- export function createDbosRunLauncher() {
35
+ export function createDbosRunLauncher(deps) {
36
+ const logger = (deps.logger ?? createNoopLogger()).named("run-launcher");
37
+ let queueRegistered;
38
+ const registerRunQueue = (client) => {
39
+ queueRegistered ??= client.registerQueue(RUN_QUEUE, { onConflict: "never_update" }).catch((cause) => {
40
+ queueRegistered = undefined;
41
+ throw cause;
42
+ });
43
+ return queueRegistered;
44
+ };
45
+ const enqueue = async (workflow, opts, input) => {
46
+ const client = await dbosClientFor(deps.pool, logger);
47
+ await registerRunQueue(client);
48
+ // The run runs the code of this version, the same as a start in this process.
49
+ await client.enqueue({ workflowName: workflow.name, queueName: RUN_QUEUE, workflowID: opts.workflowId, appVersion: DBOS.applicationVersion }, input);
50
+ };
51
+ // An earlier launch of the run id can start the run, and a later launch can then fail for a transient reason.
52
+ // The run is durably started, thus the fault is not a fault of the launch. The read goes through the client,
53
+ // because a status read of `DBOS` in a workflow body takes a checkpoint, and only this failure path reads.
54
+ // A failed read keeps the fault of the start, because the existence of the run is then unknown.
55
+ const workflowExists = async (workflowId) => {
56
+ try {
57
+ const client = await dbosClientFor(deps.pool, logger);
58
+ return (await client.getWorkflow(workflowId)) !== undefined;
59
+ }
60
+ catch (cause) {
61
+ logger.warn("the workflow of a run whose launch failed was not read", { runId: workflowId, ...logger.errorFields(cause) });
62
+ return false;
63
+ }
64
+ };
21
65
  return {
22
66
  async launch(workflow, opts, input) {
67
+ const inWorkflow = DBOS.isWithinWorkflow();
23
68
  const originating = trace.getSpan(context.active());
24
69
  const links = [];
25
70
  if (originating !== undefined && isSpanContextValid(originating.spanContext())) {
@@ -28,8 +73,17 @@ export function createDbosRunLauncher() {
28
73
  }
29
74
  const root = trace.getTracer(TRACER_NAME).startSpan("launch run", { links, attributes: { [ATTR_INFLEXA_RUN_ID]: opts.workflowId } }, ROOT_CONTEXT);
30
75
  try {
76
+ if (inWorkflow) {
77
+ await enqueue(workflow, opts, input);
78
+ return;
79
+ }
31
80
  await context.with(trace.setSpan(ROOT_CONTEXT, root), () => DBOS.startWorkflow(workflow, { workflowID: opts.workflowId })(input));
32
81
  }
82
+ catch (cause) {
83
+ if (await workflowExists(opts.workflowId))
84
+ return;
85
+ throw cause;
86
+ }
33
87
  finally {
34
88
  root.end();
35
89
  }
@@ -13,18 +13,19 @@
13
13
  * injected pool already reaches the ledger.
14
14
  *
15
15
  * The engine owns the deletion itself, including the breadth-first walk over
16
- * `parent_workflow_id` that reaches child step workflows. Its single
17
- * `DELETE FROM dbos.workflow_status WHERE workflow_uuid = ANY(...)` is all the
18
- * dependent tables need: step outputs, streams, inputs, events, notifications,
19
- * and queue rows each hold an `ON DELETE CASCADE` foreign key to
16
+ * `parent_workflow_id` that reaches child step workflows. It deletes the step
17
+ * outputs, the inputs, and the output of each workflow by name. The streams, the
18
+ * events, and the notifications each hold an `ON DELETE CASCADE` foreign key to
20
19
  * `workflow_status`, so they go with the status row.
21
20
  */
21
+ import { DBOSClient } from "@dbos-inc/dbos-sdk";
22
22
  import type { Pool } from "pg";
23
23
  import type { Logger } from "../lib/logger.js";
24
24
  import type { WorkflowPurger } from "./workflow-purger.js";
25
- export interface DbosWorkflowPurgerDeps {
25
+ export type DbosWorkflowPurgerDeps = {
26
26
  /** Pool onto the engine's system database — the same database the application pool holds. */
27
27
  readonly pool: Pool;
28
28
  readonly logger?: Logger;
29
- }
29
+ };
30
+ export declare function dbosClientFor(pool: Pool, logger: Logger): Promise<DBOSClient>;
30
31
  export declare function createDbosWorkflowPurger({ pool, logger: injected }: DbosWorkflowPurgerDeps): WorkflowPurger;
@@ -13,12 +13,13 @@
13
13
  * injected pool already reaches the ledger.
14
14
  *
15
15
  * The engine owns the deletion itself, including the breadth-first walk over
16
- * `parent_workflow_id` that reaches child step workflows. Its single
17
- * `DELETE FROM dbos.workflow_status WHERE workflow_uuid = ANY(...)` is all the
18
- * dependent tables need: step outputs, streams, inputs, events, notifications,
19
- * and queue rows each hold an `ON DELETE CASCADE` foreign key to
16
+ * `parent_workflow_id` that reaches child step workflows. It deletes the step
17
+ * outputs, the inputs, and the output of each workflow by name. The streams, the
18
+ * events, and the notifications each hold an `ON DELETE CASCADE` foreign key to
20
19
  * `workflow_status`, so they go with the status row.
21
20
  */
21
+ import { textOf } from "../lib/unknown-text.js";
22
+ import { z } from "zod";
22
23
  import { DBOSClient } from "@dbos-inc/dbos-sdk";
23
24
  import { errAsync, okAsync } from "neverthrow";
24
25
  import { createNoopLogger } from "../lib/console-logger.js";
@@ -36,9 +37,9 @@ const SYSTEM_SCHEMA = "dbos";
36
37
  * the first is nothing to purge, so the code on its own settles nothing.
37
38
  */
38
39
  const UNDEFINED_TABLE = "42P01";
40
+ const UndefinedTableCause = z.object({ code: z.literal(UNDEFINED_TABLE) });
39
41
  function isUndefinedTable(e) {
40
- const cause = e.cause;
41
- return cause !== null && typeof cause === "object" && "code" in cause && cause.code === UNDEFINED_TABLE;
42
+ return UndefinedTableCause.safeParse(e.cause).success;
42
43
  }
43
44
  /**
44
45
  * Route the client's own diagnostics — pool errors and idle-client errors — onto
@@ -56,7 +57,7 @@ function isUndefinedTable(e) {
56
57
  * message and drops the one stack the SDK bothered to hand over.
57
58
  */
58
59
  function asEngineLogger(logger) {
59
- const render = (entry) => (typeof entry === "string" ? entry : String(entry));
60
+ const render = (entry) => (typeof entry === "string" ? entry : textOf(entry));
60
61
  return {
61
62
  debug: (entry) => logger.debug(render(entry)),
62
63
  info: (entry) => logger.info(render(entry)),
@@ -64,23 +65,30 @@ function asEngineLogger(logger) {
64
65
  error: (entry, metadata) => logger.error(render(entry), metadata?.stack === undefined ? undefined : { stack: metadata.stack }),
65
66
  };
66
67
  }
67
- export function createDbosWorkflowPurger({ pool, logger: injected }) {
68
- const logger = (injected ?? createNoopLogger()).named("workflow-purger");
69
- // One client per factory, not per call. Creating a client does no I/O, but the
70
- // client registers `error` and `connect` handlers on the pool it is handed, so a
71
- // client per purge would accumulate handler pairs on a long-lived pool. Its
72
- // `destroy()` ends that pool, so a client over an injected pool must never be
73
- // destroyed either — which leaves a per-call client nothing to release. Creation
74
- // is lazy so building a purger stays free for a host that never purges.
75
- let pending;
76
- const engine = () => {
68
+ /**
69
+ * One client for each pool, shared by every purger and by the run canceler. A client registers
70
+ * `error` and `connect` handlers on the pool it is handed, so a client for each caller would
71
+ * accumulate handler pairs on a long-lived pool. Its `destroy()` ends that pool, so a client over
72
+ * an injected pool must never be destroyed either — which leaves a per-call client nothing to
73
+ * release. Creation is lazy so a host that never reaches the engine builds no client. The logger of
74
+ * the first caller for a pool becomes the engine logger of that pool.
75
+ */
76
+ const clients = new WeakMap();
77
+ export function dbosClientFor(pool, logger) {
78
+ let client = clients.get(pool);
79
+ if (client === undefined) {
77
80
  // `create` never initializes the system database, and initialization is the
78
81
  // only path that reads the connection string once a pool is supplied — so the
79
82
  // url is unreachable from this client rather than merely untaken, and there is
80
- // none to thread through the seam.
81
- pending ??= DBOSClient.create({ systemDatabaseUrl: "", systemDatabasePool: pool, logger: asEngineLogger(logger) });
82
- return pending;
83
- };
83
+ // no url to pass.
84
+ client = DBOSClient.create({ systemDatabaseUrl: "", systemDatabasePool: pool, logger: asEngineLogger(logger) });
85
+ clients.set(pool, client);
86
+ }
87
+ return client;
88
+ }
89
+ export function createDbosWorkflowPurger({ pool, logger: injected }) {
90
+ const logger = (injected ?? createNoopLogger()).named("workflow-purger");
91
+ const engine = () => dbosClientFor(pool, logger);
84
92
  /**
85
93
  * Whether the engine's schema exists at all — the only thing that separates a
86
94
  * ledger the engine never created from one that is broken. It costs a round trip
@@ -15,7 +15,7 @@
15
15
  import type { DataProfileInputSignature } from "../state/data-profile.js";
16
16
  import type { StagedInput } from "./staged-input.js";
17
17
  /** The fields a signature covers. A manifest entry satisfies it structurally. */
18
- export interface SignableInput {
18
+ export type SignableInput = {
19
19
  readonly fileId: string;
20
20
  readonly size: number;
21
21
  readonly mtimeMs?: number;
@@ -25,7 +25,7 @@ export interface SignableInput {
25
25
  * not junk, and dropping it would be the one outcome worse than including it.
26
26
  */
27
27
  readonly relativePath?: string;
28
- }
28
+ };
29
29
  /**
30
30
  * Digest a staged input set, quarantine first.
31
31
  *
@@ -12,10 +12,10 @@
12
12
  * fail-fast vs. best-effort. This module owns only the stage bodies.
13
13
  */
14
14
  import { type Result } from "neverthrow";
15
- import type { Pool } from "pg";
15
+ import type { Querier } from "../state/db.js";
16
16
  import type { ToolOutputStore } from "../loop/tool-output.js";
17
17
  import type { LoopMessage } from "../loop/types.js";
18
- import type { AgentChat, EmbeddingProvider } from "../providers/types.js";
18
+ import type { ChatProvider, EmbeddingProvider } from "../providers/types.js";
19
19
  import type { ResolveWorkspaceRoot } from "../workspace/paths.js";
20
20
  import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
21
21
  import type { StepSummary } from "../schemas/step-summary.js";
@@ -29,24 +29,24 @@ import type { PostStepArtifacts, PostStepContext, StepOutputs } from "../workflo
29
29
  * The subset of `SandboxStepDeps` the post-step stages consume. The sandbox-step
30
30
  * body passes its own `deps` straight through (it is a structural superset).
31
31
  */
32
- export interface PostStepPipelineDeps {
33
- readonly pool: Pool;
32
+ export type PostStepPipelineDeps = {
33
+ readonly pool: Querier;
34
34
  /** Operational logging seam; omitted falls back to no-op. */
35
35
  readonly logger?: Logger;
36
36
  /** LLM usage-accounting seam for the metadata + summary continuations; omitted falls back to the no-op recorder. */
37
37
  readonly usageRecorder?: UsageRecorder;
38
38
  /** The store of the task, thus a reference of the task stays readable in the metadata + summary continuations. */
39
39
  readonly toolOutputStore?: ToolOutputStore;
40
- /** Non-streaming chat — the provider of the task, which the metadata + summary continuations extend. */
41
- readonly provider: AgentChat;
40
+ /** The provider of the task, which the metadata and summary follow-up requests extend. */
41
+ readonly provider: ChatProvider;
42
42
  /** Write-side embedder for the vector index. */
43
43
  readonly embedding: EmbeddingProvider;
44
44
  readonly artifactRegistry: ArtifactRegistry;
45
45
  /** Workspace-root resolution seam (see workspace/paths.ts). */
46
46
  readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
47
- }
47
+ };
48
48
  /** The product of the file-metadata stage, as its `DBOS.runStep` checkpoints it. */
49
- export interface StepFileMetadata {
49
+ export type StepFileMetadata = {
50
50
  /** One entry per manifest file, described or fallback. */
51
51
  readonly entries: readonly FileMetadataEntry[];
52
52
  /**
@@ -54,7 +54,7 @@ export interface StepFileMetadata {
54
54
  * `DBOS.runStep`, so a replay must give the summary the same prefix.
55
55
  */
56
56
  readonly messages: readonly LoopMessage[];
57
- }
57
+ };
58
58
  /** Describes each manifest file; a file the model cannot describe gets a deterministic fallback, never a dropped entry. */
59
59
  export declare function generateStepFileMetadata(deps: PostStepPipelineDeps, postCtx: PostStepContext, manifest: readonly ArtifactManifestEntry[]): Promise<StepFileMetadata>;
60
60
  /**
@@ -123,7 +123,7 @@ export async function reconcileAndRegisterStepArtifacts(deps, postCtx, manifest)
123
123
  agentId: input.agentId,
124
124
  manifest: [...manifest],
125
125
  collector: lineageCollector,
126
- ...(deps.logger ? { logger: deps.logger } : {}),
126
+ logger: deps.logger,
127
127
  });
128
128
  if (reconciled.manifest.length === 0)
129
129
  return ok(reconciled.manifest);
@@ -12,6 +12,7 @@ import { join, relative } from "node:path";
12
12
  import { inferArtifactType } from "../schemas/artifact-manifest.js";
13
13
  import { computeSha256File } from "../lib/fs-helpers.js";
14
14
  import { IGNORED_DIRS } from "../sandbox/ignored-dirs.js";
15
+ import { errnoOf } from "../lib/fs-result.js";
15
16
  /**
16
17
  * Walk a step's writable artifact directory and produce a fully-hashed
17
18
  * `ArtifactManifestEntry[]`. Skips IGNORED_DIRS. Paths are relative to
@@ -26,8 +27,7 @@ export async function walkStepArtifacts(args) {
26
27
  entries = await readdir(dir, { withFileTypes: true });
27
28
  }
28
29
  catch (err) {
29
- const code = err.code;
30
- if (code === "ENOENT")
30
+ if (errnoOf(err) === "ENOENT")
31
31
  return;
32
32
  throw err;
33
33
  }
@@ -1,7 +1,7 @@
1
1
  import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
2
2
  import type { ProvenanceCollector } from "../provenance/collector.js";
3
3
  import type { Logger } from "../lib/logger.js";
4
- export interface ReconcileManifestInput {
4
+ export type ReconcileManifestInput = {
5
5
  /** Absolute host root of the analysis's workspace tree. */
6
6
  workspaceRoot: string;
7
7
  /** Analysis (resource) ID. */
@@ -22,11 +22,11 @@ export interface ReconcileManifestInput {
22
22
  * the sole account of why lineage changed or a step died.
23
23
  */
24
24
  logger?: Logger;
25
- }
26
- export interface ReconcileManifestResult {
25
+ };
26
+ export type ReconcileManifestResult = {
27
27
  /** Reconciled manifest — phantoms removed, every entry rehashed from disk. */
28
28
  manifest: ArtifactManifestEntry[];
29
29
  /** Number of entries dropped because their file was missing. */
30
30
  droppedCount: number;
31
- }
31
+ };
32
32
  export declare function reconcileManifestWithDisk(input: ReconcileManifestInput): Promise<ReconcileManifestResult>;
@@ -24,6 +24,7 @@ import path from "node:path";
24
24
  import { createNoopLogger } from "../lib/console-logger.js";
25
25
  import { classifyWithinRoot, computeSha256File, hasValidContentHash } from "../lib/fs-helpers.js";
26
26
  import { recordArtifactReconcileDropped, recordLineageInputDropped } from "../lib/metrics.js";
27
+ import { errnoOf } from "../lib/fs-result.js";
27
28
  export async function reconcileManifestWithDisk(input) {
28
29
  const { workspaceRoot, resourceId, runId, stepId, agentId, manifest, collector } = input;
29
30
  const logger = (input.logger ?? createNoopLogger()).named("reconcile-manifest").with({ runId, stepId, agentId });
@@ -58,7 +59,7 @@ export async function reconcileManifestWithDisk(input) {
58
59
  info = await stat(absPath);
59
60
  }
60
61
  catch (err) {
61
- if (err.code === "ENOENT") {
62
+ if (errnoOf(err) === "ENOENT") {
62
63
  logger.debug("dropping phantom entry", { path: entry.path });
63
64
  collector.removeRecord(entry.path);
64
65
  droppedCount++;
@@ -168,7 +169,7 @@ async function fillInputHashesFromDisk(collector, workspaceRoot, resourceId, run
168
169
  info = await stat(hostPath);
169
170
  }
170
171
  catch (err) {
171
- if (err.code === "ENOENT") {
172
+ if (errnoOf(err) === "ENOENT") {
172
173
  // Warn, not debug: a capture layer named a file this step never
173
174
  // consumed, and the count of those is how a reader tells a noisy
174
175
  // hook from an artifact that genuinely vanished under the step.
@@ -1,63 +1,72 @@
1
1
  /**
2
- * RunAuthorizer — the async-edge run-authorization seam.
2
+ * RunAuthorizer — run authorization at the async edge.
3
3
  *
4
4
  * Every async edge that starts durable work (`execute_analysis`,
5
5
  * data-profile) must turn the caller's opaque auth into a durable `RunSession`
6
6
  * before dispatching a workflow. That turning is the ONE place the credential
7
- * kind matters (a live caller credential → mint a fresh run credential Cortex
8
- * owns; an existing run credential → reuse it, caller-owned) — so it lives
9
- * behind this seam, not in the harness tools. The managed impl owns the
10
- * mint/reuse + revoke against the host authority; an OSS impl issues a local
11
- * `RunSession` with no host call, no jti, no revoke. The harness's tools depend only on
12
- * this interface and never read a credential.
7
+ * kind matters (a live caller credential → create a run credential; a run
8
+ * credential handed over by the caller → take it) — so it lives in this
9
+ * interface, not in the harness tools. Either way the work owns the credential.
10
+ * An OSS impl issues a local `RunSession` with no host call and nothing to
11
+ * revoke. The harness's tools depend only on this interface and never read a
12
+ * credential.
13
13
  *
14
- * Mirrors the `SessionPagePublisher` seam: a narrow interface in the harness, the managed
14
+ * Mirrors `SessionPagePublisher`: a narrow interface in the harness, the managed
15
15
  * realization injected at the composition root.
16
16
  */
17
17
  import type { ResultAsync } from "neverthrow";
18
18
  import type { AuthContext, Provenance, RunFrame, RunSession, Scope } from "../auth/types.js";
19
19
  import type { GateFailure, NoticeFailure } from "../lib/hooks.js";
20
20
  /**
21
- * Locates a run credential when no `RunAuthorization` exists: the persisted
22
- * jti from `cortex_runs` plus the revoking caller's opaque `auth` — the sole
23
- * carrier of credential/org behind a session, downcast only by managed
21
+ * Locates a run credential when no `RunSession` exists: the persisted
22
+ * mandate id from `cortex_runs` plus the revoking caller's opaque `auth` — the
23
+ * sole carrier of credential/org behind a session, downcast only by managed
24
24
  * realizations.
25
25
  */
26
- export interface RevokeByJtiRef {
27
- readonly jti: string;
26
+ export type RevokeByMandateRef = {
27
+ readonly mandateId: string;
28
28
  readonly auth: AuthContext;
29
- }
29
+ };
30
30
  /** What an async edge knows when it authorizes a run: the opaque caller auth,
31
31
  * the scope + provenance to stamp on the run, and the run frame to mint for. */
32
- export interface AuthorizeRunInput {
32
+ export type AuthorizeRunInput = {
33
33
  readonly auth: AuthContext;
34
34
  readonly scope: Scope;
35
35
  readonly provenance: Provenance;
36
36
  readonly frame: RunFrame;
37
- }
38
- export interface RunAuthorization {
39
- readonly runSession: RunSession;
40
- /**
41
- * True when this authorizer minted the run credential and therefore owns its
42
- * lifecycle — the run's terminal path must `revoke`. False when an existing
43
- * run credential was reused (the caller owns it; `revoke` is a no-op).
44
- */
45
- readonly ownsMandate: boolean;
46
- }
37
+ };
47
38
  /**
48
39
  * Authorize durable work at the async edge. `authorize` produces the durable
49
- * `RunSession`; `revoke` releases a self-minted run credential on the terminal
50
- * path (a no-op for reused or local authorizations).
40
+ * `RunSession`. The terminal path of the work revokes the mandate that the work
41
+ * holds, whoever created it; a realization with no mandate does nothing in
42
+ * `revoke`.
43
+ *
44
+ * The `RunSession` is a durable reference to the run credential, not a
45
+ * time-bound secret: the work has no time limit, and a pause can last days. A
46
+ * realization resolves the reference to a short-lived credential where it
47
+ * calls its host, and `suspend` and `renew` follow the pause of the work.
51
48
  */
52
- export interface RunAuthorizer {
53
- authorize(input: AuthorizeRunInput): ResultAsync<RunAuthorization, GateFailure>;
54
- revoke(authorization: RunAuthorization, reason: string): ResultAsync<void, NoticeFailure>;
49
+ export type RunAuthorizer = {
50
+ authorize(input: AuthorizeRunInput): ResultAsync<RunSession, GateFailure>;
51
+ revoke(runSession: RunSession, reason: string): ResultAsync<void, NoticeFailure>;
52
+ /**
53
+ * Out-of-band revocation for paths holding no `RunSession`. Normal
54
+ * terminal paths use `revoke(runSession, reason)` under the run
55
+ * credential; `revokeByMandateId` covers external cancellation, where only
56
+ * the reference on `cortex_runs` survives. Local/OSS authorizers no-op —
57
+ * they record no reference.
58
+ */
59
+ revokeByMandateId(ref: RevokeByMandateRef, reason: string): ResultAsync<void, NoticeFailure>;
60
+ /**
61
+ * The work paused and waits for a person: stop the run credential until a
62
+ * renewal. A notice — the work waits whatever the outcome. A wait that only
63
+ * a timer ends does not suspend, because no person resumes it.
64
+ */
65
+ suspend(runSession: RunSession, reason: string): ResultAsync<void, NoticeFailure>;
55
66
  /**
56
- * Out-of-band revocation for paths holding no `RunAuthorization`. Normal
57
- * terminal paths use `revoke(authorization, reason)` under the run
58
- * credential; `revokeByJti` covers external cancellation, where the run
59
- * credential's JWT was never persisted and only its jti survives on
60
- * `cortex_runs`. Local/OSS authorizers no-op — they mint no jti.
67
+ * A person resumes paused work: renew the run credential under the opaque
68
+ * `auth` of that person. A gate — a refusal keeps the work paused and sends
69
+ * no resume.
61
70
  */
62
- revokeByJti(ref: RevokeByJtiRef, reason: string): ResultAsync<void, NoticeFailure>;
63
- }
71
+ renew(runSession: RunSession, auth: AuthContext): ResultAsync<void, GateFailure>;
72
+ };
@@ -1,17 +1,17 @@
1
1
  /**
2
- * RunAuthorizer — the async-edge run-authorization seam.
2
+ * RunAuthorizer — run authorization at the async edge.
3
3
  *
4
4
  * Every async edge that starts durable work (`execute_analysis`,
5
5
  * data-profile) must turn the caller's opaque auth into a durable `RunSession`
6
6
  * before dispatching a workflow. That turning is the ONE place the credential
7
- * kind matters (a live caller credential → mint a fresh run credential Cortex
8
- * owns; an existing run credential → reuse it, caller-owned) — so it lives
9
- * behind this seam, not in the harness tools. The managed impl owns the
10
- * mint/reuse + revoke against the host authority; an OSS impl issues a local
11
- * `RunSession` with no host call, no jti, no revoke. The harness's tools depend only on
12
- * this interface and never read a credential.
7
+ * kind matters (a live caller credential → create a run credential; a run
8
+ * credential handed over by the caller → take it) — so it lives in this
9
+ * interface, not in the harness tools. Either way the work owns the credential.
10
+ * An OSS impl issues a local `RunSession` with no host call and nothing to
11
+ * revoke. The harness's tools depend only on this interface and never read a
12
+ * credential.
13
13
  *
14
- * Mirrors the `SessionPagePublisher` seam: a narrow interface in the harness, the managed
14
+ * Mirrors `SessionPagePublisher`: a narrow interface in the harness, the managed
15
15
  * realization injected at the composition root.
16
16
  */
17
17
  export {};