@inflexa-ai/harness 0.45.1 → 0.46.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (790) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +306 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +32 -7
  174. package/dist/lib/hooks.js +22 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +160 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +39 -0
  256. package/dist/loop/turn-credentials.js +90 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -11,6 +11,10 @@
11
11
  */
12
12
  import { stripNulCharacters } from "../input-sanitization.js";
13
13
  import { tryMutation, tryQuery } from "../lib/db-result.js";
14
+ import { parseJsonAs } from "../lib/parse-json.js";
15
+ import { UnknownArraySchema } from "../lib/unknown-containers.js";
16
+ import { z } from "zod";
17
+ import { CortexRunRowSchema } from "./schema.js";
14
18
  export class RunIdentityCollisionError extends Error {
15
19
  runId;
16
20
  constructor(runId) {
@@ -50,8 +54,8 @@ export function insertRun(pool, input) {
50
54
  await pool.query({
51
55
  text: `INSERT INTO cortex_runs
52
56
  (run_id, analysis_id, thread_id, workflow_name,
53
- status, started_at, plan_id, mandate_jti, mandate_expires_at) -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
54
- VALUES ($1, $2, $3, $4, 'running', $5, $6, $7, $8)`,
57
+ status, started_at, plan_id, mandate_id) -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
58
+ VALUES ($1, $2, $3, $4, 'running', $5, $6, $7)`,
55
59
  values: [
56
60
  input.runId,
57
61
  input.analysisId,
@@ -59,8 +63,7 @@ export function insertRun(pool, input) {
59
63
  input.workflowName,
60
64
  now,
61
65
  input.planId ?? null,
62
- input.mandateJti ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
63
- input.mandateExpiresAt ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
66
+ input.mandateId ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
64
67
  ],
65
68
  });
66
69
  }).mapErr((e) => {
@@ -81,27 +84,18 @@ export function reserveRunById(pool, input) {
81
84
  const result = await pool.query({
82
85
  text: `INSERT INTO cortex_runs
83
86
  (run_id, analysis_id, thread_id, workflow_name,
84
- status, started_at, plan_id, mandate_jti, mandate_expires_at)
85
- VALUES ($1, $2, $3, $4, 'running', $5, $6, $7, $8)
87
+ status, started_at, plan_id, mandate_id)
88
+ VALUES ($1, $2, $3, $4, 'running', $5, $6, $7)
86
89
  ON CONFLICT (run_id) DO NOTHING
87
90
  RETURNING run_id`,
88
- values: [
89
- input.runId,
90
- input.analysisId,
91
- input.threadId ?? null,
92
- input.workflowName,
93
- now,
94
- input.planId ?? null,
95
- input.mandateJti ?? null,
96
- input.mandateExpiresAt ?? null,
97
- ],
91
+ values: [input.runId, input.analysisId, input.threadId ?? null, input.workflowName, now, input.planId ?? null, input.mandateId ?? null],
98
92
  });
99
93
  return (result.rowCount ?? 0) > 0;
100
94
  }).andThen((inserted) => tryQuery("runs.reserveRunById.reload", async () => {
101
95
  const result = await pool.query({
102
96
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
103
97
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
104
- mandate_jti, mandate_expires_at, plan_id
98
+ mandate_id, plan_id
105
99
  FROM cortex_runs
106
100
  WHERE run_id = $1`,
107
101
  values: [input.runId],
@@ -113,11 +107,11 @@ export function reserveRunById(pool, input) {
113
107
  return { row: mapRunRow(row), inserted };
114
108
  }));
115
109
  }
110
+ /** The two pg error fields a dedup collision is read from; a driver error is an `Error` carrying them as own fields. */
111
+ const PgErrorIdentitySchema = z.object({ code: z.string(), constraint: z.string() });
116
112
  function isPartialUniqueViolation(err) {
117
- if (err === null || typeof err !== "object")
118
- return false;
119
- const e = err;
120
- return e.code === "23505" && e.constraint === "idx_cortex_runs_active_plan";
113
+ const parsed = PgErrorIdentitySchema.safeParse(err);
114
+ return parsed.success && parsed.data.code === "23505" && parsed.data.constraint === "idx_cortex_runs_active_plan";
121
115
  }
122
116
  /**
123
117
  * Recover the active run row for `(analysisId, planId)` after `insertRun`
@@ -129,7 +123,7 @@ export function queryActiveRun(pool, analysisId, planId) {
129
123
  const result = await pool.query({
130
124
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
131
125
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
132
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
126
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
133
127
  FROM cortex_runs
134
128
  WHERE analysis_id = $1
135
129
  AND plan_id IS NOT DISTINCT FROM $2
@@ -180,7 +174,7 @@ export function queryActiveRunsByAnalysis(pool, analysisId, { q } = {}) {
180
174
  const result = await pool.query({
181
175
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
182
176
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
183
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
177
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
184
178
  FROM cortex_runs
185
179
  WHERE analysis_id = $1
186
180
  AND status = 'running'
@@ -234,7 +228,7 @@ export function reconcileOrphanedRuns(pool, opts = {}) {
234
228
  */
235
229
  export function updateRunStatus(pool, runId, status, error) {
236
230
  const now = new Date().toISOString();
237
- const isTerminal = status === "completed" || status === "partial" || status === "failed" || status === "canceled" || status === "suspended_insufficient_funds";
231
+ const isTerminal = status === "completed" || status === "partial" || status === "failed" || status === "canceled";
238
232
  return tryMutation("runs.updateRunStatus", async () => {
239
233
  const result = await pool.query({
240
234
  text: `UPDATE cortex_runs
@@ -280,7 +274,7 @@ export function queryRun(pool, runId) {
280
274
  const result = await pool.query({
281
275
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
282
276
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
283
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
277
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
284
278
  FROM cortex_runs
285
279
  WHERE run_id = $1`,
286
280
  values: [runId],
@@ -300,7 +294,7 @@ export function queryRunsByAnalysis(pool, analysisId, { limit = 50, offset = 0,
300
294
  const result = await pool.query({
301
295
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
302
296
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
303
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
297
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
304
298
  FROM cortex_runs
305
299
  WHERE analysis_id = $1
306
300
  ${text}
@@ -325,7 +319,7 @@ export function countRunsByAnalysis(pool, analysisId, { q } = {}) {
325
319
  ${text}`,
326
320
  values,
327
321
  });
328
- return Number(result.rows[0]?.total ?? 0);
322
+ return result.rows[0]?.total ?? 0;
329
323
  });
330
324
  }
331
325
  /**
@@ -379,7 +373,7 @@ export function queryNonTerminalRunsByAnalysis(pool, analysisId, limit = 20) {
379
373
  const rowsResult = await pool.query({
380
374
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
381
375
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
382
- mandate_jti, mandate_expires_at, plan_id
376
+ mandate_id, plan_id
383
377
  FROM cortex_runs
384
378
  WHERE analysis_id = $1
385
379
  AND status = 'running'
@@ -408,7 +402,7 @@ export function queryRunsForInspection(pool, analysisId, { limit = 50, offset =
408
402
  const rowsResult = await pool.query({
409
403
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
410
404
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
411
- mandate_jti, mandate_expires_at, plan_id
405
+ mandate_id, plan_id
412
406
  FROM cortex_runs
413
407
  WHERE analysis_id = $1
414
408
  ORDER BY CASE status
@@ -434,7 +428,7 @@ export function queryRunsByThread(pool, analysisId, threadId, { limit = 50, offs
434
428
  const result = await pool.query({
435
429
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
436
430
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
437
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
431
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
438
432
  FROM cortex_runs
439
433
  WHERE analysis_id = $1 AND thread_id = $2
440
434
  ${text}
@@ -445,20 +439,20 @@ export function queryRunsByThread(pool, analysisId, threadId, { limit = 50, offs
445
439
  });
446
440
  }
447
441
  /**
448
- * Persist the run mandate jti + expiry for a run. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
449
- * Called by `authorizeForRun` after a successful mint so the cancel
450
- * handler can revoke the mandate by `runId → jti` lookup. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
451
- * The JWT itself is NOT persisted — it rides in DBOS workflow input.
442
+ * Persist the run mandate reference for a run. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
443
+ * Called by the host authorizer after it authorizes the run, so the cancel
444
+ * handler can revoke the mandate by `runId → mandate id` lookup. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
445
+ * The reference has no expiry here: the run does not depend on a clock.
452
446
  */
453
- export function setRunMandate(pool, runId, jti, expiresAt) {
447
+ export function setRunMandate(pool, runId, mandateId) {
454
448
  // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
455
449
  return tryMutation("runs.setRunMandate", async () => {
456
450
  // oss-core-managed-ok: run-mandate ledger op label
457
451
  await pool.query({
458
452
  text: `UPDATE cortex_runs
459
- SET mandate_jti = $1, mandate_expires_at = $2 -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
460
- WHERE run_id = $3`,
461
- values: [jti, expiresAt, runId],
453
+ SET mandate_id = $1 -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
454
+ WHERE run_id = $2`,
455
+ values: [mandateId, runId],
462
456
  });
463
457
  });
464
458
  }
@@ -479,20 +473,19 @@ export function setRunSynthesisOutcome(pool, runId, synthesisStatus, synthesisRe
479
473
  }
480
474
  function mapRunRow(row) {
481
475
  // JSONB is parsed by `pg` into native arrays/objects. Treat legacy TEXT
482
- // rows (if anything slipped through) as strings and parse them.
483
- let parts = null;
484
- if (Array.isArray(row.parts)) {
485
- parts = row.parts;
486
- }
487
- else if (typeof row.parts === "string") {
476
+ // rows (if anything slipped through) as strings and parse them. A parts
477
+ // value that survives neither shape reads as null, like a row with no parts.
478
+ let parts = row.parts;
479
+ if (typeof parts === "string") {
488
480
  try {
489
- parts = JSON.parse(row.parts);
481
+ parts = parseJsonAs(parts, z.json());
490
482
  }
491
483
  catch {
492
- /* malformed — treat as null */
484
+ parts = null;
493
485
  }
494
486
  }
495
- return {
487
+ const parsedParts = UnknownArraySchema.safeParse(parts);
488
+ return CortexRunRowSchema.parse({
496
489
  runId: row.run_id,
497
490
  analysisId: row.analysis_id,
498
491
  threadId: row.thread_id ?? null,
@@ -503,9 +496,8 @@ function mapRunRow(row) {
503
496
  error: row.error ?? null,
504
497
  synthesisStatus: row.synthesis_status ?? null,
505
498
  synthesisReason: row.synthesis_reason ?? null,
506
- parts,
507
- mandateJti: row.mandate_jti ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
508
- mandateExpiresAt: row.mandate_expires_at ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
499
+ parts: parsedParts.success ? parsedParts.data : null,
500
+ mandateId: row.mandate_id ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
509
501
  planId: row.plan_id ?? null,
510
- };
502
+ });
511
503
  }
@@ -10,10 +10,10 @@ export declare const AnalysisStateRowSchema: z.ZodObject<{
10
10
  status: z.ZodString;
11
11
  context: z.ZodNullable<z.ZodString>;
12
12
  dataProfileStatus: z.ZodEnum<{
13
+ completed: "completed";
13
14
  failed: "failed";
14
15
  pending: "pending";
15
16
  running: "running";
16
- completed: "completed";
17
17
  }>;
18
18
  dataProfileError: z.ZodNullable<z.ZodString>;
19
19
  dataProfileStartedAt: z.ZodNullable<z.ZodString>;
@@ -46,31 +46,30 @@ export declare const ArtifactRowSchema: z.ZodObject<{
46
46
  }, z.core.$strip>;
47
47
  export type ArtifactRow = z.infer<typeof ArtifactRowSchema>;
48
48
  export declare const RunStatus: z.ZodEnum<{
49
- failed: "failed";
50
- running: "running";
49
+ canceled: "canceled";
51
50
  completed: "completed";
51
+ failed: "failed";
52
52
  partial: "partial";
53
- canceled: "canceled";
54
- suspended_insufficient_funds: "suspended_insufficient_funds";
53
+ running: "running";
55
54
  }>;
56
55
  export type RunStatus = z.infer<typeof RunStatus>;
57
56
  /** A status that a run keeps once it ended: every status but `running`. */
58
57
  export type TerminalRunStatus = Exclude<RunStatus, "running">;
59
58
  export declare const StepExecutionStatus: z.ZodEnum<{
59
+ blocked: "blocked";
60
+ canceled: "canceled";
61
+ completed: "completed";
60
62
  failed: "failed";
61
63
  pending: "pending";
62
64
  running: "running";
63
- completed: "completed";
64
- canceled: "canceled";
65
65
  skipped: "skipped";
66
- blocked: "blocked";
67
66
  }>;
68
67
  export type StepExecutionStatus = z.infer<typeof StepExecutionStatus>;
69
68
  export declare const SynthesisStatus: z.ZodEnum<{
70
69
  failed: "failed";
71
70
  produced: "produced";
72
- skipped_no_summaries: "skipped_no_summaries";
73
71
  skipped_blocker: "skipped_blocker";
72
+ skipped_no_summaries: "skipped_no_summaries";
74
73
  }>;
75
74
  export type SynthesisStatus = z.infer<typeof SynthesisStatus>;
76
75
  export declare const CortexRunRowSchema: z.ZodObject<{
@@ -79,12 +78,11 @@ export declare const CortexRunRowSchema: z.ZodObject<{
79
78
  threadId: z.ZodNullable<z.ZodString>;
80
79
  workflowName: z.ZodString;
81
80
  status: z.ZodEnum<{
82
- failed: "failed";
83
- running: "running";
81
+ canceled: "canceled";
84
82
  completed: "completed";
83
+ failed: "failed";
85
84
  partial: "partial";
86
- canceled: "canceled";
87
- suspended_insufficient_funds: "suspended_insufficient_funds";
85
+ running: "running";
88
86
  }>;
89
87
  startedAt: z.ZodString;
90
88
  completedAt: z.ZodNullable<z.ZodString>;
@@ -92,13 +90,12 @@ export declare const CortexRunRowSchema: z.ZodObject<{
92
90
  synthesisStatus: z.ZodNullable<z.ZodEnum<{
93
91
  failed: "failed";
94
92
  produced: "produced";
95
- skipped_no_summaries: "skipped_no_summaries";
96
93
  skipped_blocker: "skipped_blocker";
94
+ skipped_no_summaries: "skipped_no_summaries";
97
95
  }>>;
98
96
  synthesisReason: z.ZodNullable<z.ZodString>;
99
- parts: z.ZodNullable<z.ZodArray<z.ZodAny>>;
100
- mandateJti: z.ZodNullable<z.ZodString>;
101
- mandateExpiresAt: z.ZodNullable<z.ZodString>;
97
+ parts: z.ZodNullable<z.ZodArray<z.ZodJSONSchema>>;
98
+ mandateId: z.ZodNullable<z.ZodString>;
102
99
  planId: z.ZodNullable<z.ZodString>;
103
100
  }, z.core.$strip>;
104
101
  export type CortexRunRow = z.infer<typeof CortexRunRowSchema>;
@@ -123,13 +120,13 @@ export declare const StepExecutionRowSchema: z.ZodObject<{
123
120
  wave: z.ZodNumber;
124
121
  agentId: z.ZodString;
125
122
  status: z.ZodEnum<{
123
+ blocked: "blocked";
124
+ canceled: "canceled";
125
+ completed: "completed";
126
126
  failed: "failed";
127
127
  pending: "pending";
128
128
  running: "running";
129
- completed: "completed";
130
- canceled: "canceled";
131
129
  skipped: "skipped";
132
- blocked: "blocked";
133
130
  }>;
134
131
  startedAt: z.ZodNullable<z.ZodString>;
135
132
  completedAt: z.ZodNullable<z.ZodString>;
@@ -155,7 +152,7 @@ export type StepExecutionRow = z.infer<typeof StepExecutionRowSchema>;
155
152
  export declare const CortexPlanRowSchema: z.ZodObject<{
156
153
  planId: z.ZodString;
157
154
  analysisId: z.ZodString;
158
- plan: z.ZodRecord<z.ZodString, z.ZodUnknown>;
155
+ plan: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
159
156
  parentPlanId: z.ZodNullable<z.ZodString>;
160
157
  createdAt: z.ZodString;
161
158
  }, z.core.$strip>;
@@ -33,7 +33,7 @@ export const ArtifactRowSchema = z.object({
33
33
  fileType: z.string().nullable(),
34
34
  });
35
35
  // ── Run & Step Execution Schemas ─────────────────────────────────────
36
- export const RunStatus = z.enum(["running", "completed", "partial", "failed", "canceled", "suspended_insufficient_funds"]);
36
+ export const RunStatus = z.enum(["running", "completed", "partial", "failed", "canceled"]);
37
37
  export const StepExecutionStatus = z.enum(["pending", "running", "completed", "failed", "skipped", "canceled", "blocked"]);
38
38
  // Run-level synthesis outcome, distinct from RunStatus: a run can reach
39
39
  // status="completed" while synthesis produced nothing. "produced" is the only
@@ -53,9 +53,8 @@ export const CortexRunRowSchema = z.object({
53
53
  // synthesis never recorded an outcome.
54
54
  synthesisStatus: SynthesisStatus.nullable(),
55
55
  synthesisReason: z.string().nullable(),
56
- parts: z.array(z.any()).nullable(),
57
- mandateJti: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
58
- mandateExpiresAt: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
56
+ parts: z.array(z.json()).nullable(),
57
+ mandateId: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
59
58
  planId: z.string().nullable(),
60
59
  });
61
60
  /**
@@ -98,7 +97,7 @@ export const StepExecutionRowSchema = z.object({
98
97
  export const CortexPlanRowSchema = z.object({
99
98
  planId: z.string(),
100
99
  analysisId: z.string(),
101
- plan: z.record(z.string(), z.unknown()),
100
+ plan: z.record(z.string(), z.json()),
102
101
  parentPlanId: z.string().nullable(),
103
102
  createdAt: z.string(),
104
103
  });
@@ -14,10 +14,10 @@ import { type Result } from "neverthrow";
14
14
  import { z } from "zod";
15
15
  import type { ReportSnapshot } from "../report-model/reference-resolver.js";
16
16
  /** One reduced schema issue -- the dotted path and the message, without the rest. */
17
- export interface SchemaIssue {
17
+ export type SchemaIssue = {
18
18
  readonly path: string;
19
19
  readonly message: string;
20
- }
20
+ };
21
21
  /** Reduce a zod error to the dotted path and the message of each issue. */
22
22
  export declare function reduceIssues(error: z.ZodError): SchemaIssue[];
23
23
  /**
@@ -11,6 +11,7 @@
11
11
  * value on its own, thus the two stores agree on the key set.
12
12
  */
13
13
  import { err, ok } from "neverthrow";
14
+ import { nullProtoRecord } from "../lib/null-proto.js";
14
15
  import { z } from "zod";
15
16
  /**
16
17
  * One pinned artifact of a stored snapshot. The value carries the content hash, an
@@ -42,7 +43,13 @@ function prefixIssues(prefix, issues) {
42
43
  message: issue.message,
43
44
  }));
44
45
  }
45
- /** A stored map is a plain object. An array and a null carry no own key that a map read can use. */
46
+ /**
47
+ * A stored map is a plain object. An array and a null carry no own key that a map read can use.
48
+ *
49
+ * The check stays a hand predicate because the walk below must address the ORIGINAL object: a
50
+ * zod record parse rebuilds the value through string-keyed assignment, and a `__proto__` own key
51
+ * does not survive that rebuild — the pin contract this module keeps.
52
+ */
46
53
  function isPlainRecord(value) {
47
54
  return typeof value === "object" && value !== null && !Array.isArray(value);
48
55
  }
@@ -72,9 +79,7 @@ export function parseSnapshot(stored) {
72
79
  if (!citationRecords.success) {
73
80
  return err(prefixIssues("citationRecords", reduceIssues(citationRecords.error)));
74
81
  }
75
- // The map takes a null prototype, the same as the pin, thus a path such as
76
- // `__proto__` stays an ordinary entry and never reaches a prototype slot.
77
- const artifacts = Object.create(null);
82
+ const artifacts = nullProtoRecord();
78
83
  const issues = [];
79
84
  for (const [path, value] of Object.entries(stored.artifacts)) {
80
85
  const parsed = ArtifactSnapshotSchema.safeParse(value);
@@ -87,11 +92,12 @@ export function parseSnapshot(stored) {
87
92
  if (issues.length > 0) {
88
93
  return err(issues);
89
94
  }
90
- // An absent part stays absent in the parsed value. Thus a reload gives the same shape that the pin
91
- // wrote, and an equality test over a stored snapshot holds across the round trip.
95
+ // An absent part comes back as an own key that holds `undefined`, because the literal below always
96
+ // sets the three keys. An equality that ignores `undefined` members holds across the round trip; a
97
+ // check that counts the own keys does not.
92
98
  return ok({
93
99
  artifacts,
94
- ...(citations.data === undefined ? {} : { citations: citations.data }),
95
- ...(citationRecords.data === undefined ? {} : { citationRecords: citationRecords.data }),
100
+ citations: citations.data,
101
+ citationRecords: citationRecords.data,
96
102
  });
97
103
  }
@@ -4,16 +4,28 @@
4
4
  * module.
5
5
  */
6
6
  import type { ResultAsync } from "neverthrow";
7
+ import type { QueryConfig } from "pg";
7
8
  import { type DbError } from "../lib/db-result.js";
8
9
  import type { Querier } from "./db.js";
9
- import type { StepExecutionRow } from "./schema.js";
10
- export interface SeedStepExecutionRow {
10
+ import { type StepExecutionRow } from "./schema.js";
11
+ /**
12
+ * The row-reading surface of this module: one query over the text or config form, whose rows the
13
+ * mapStepExecutionRow parser types. A computed test fake satisfies this shape directly, where the
14
+ * row-generic of `Querier` cannot be implemented by a fake that computes its rows.
15
+ */
16
+ export type StepRowQuerier = {
17
+ query(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
18
+ rows: Record<string, unknown>[];
19
+ rowCount: number | null;
20
+ }>;
21
+ };
22
+ export type SeedStepExecutionRow = {
11
23
  runId: string;
12
24
  stepId: string;
13
25
  analysisId: string;
14
26
  wave: number;
15
27
  agentId: string;
16
- }
28
+ };
17
29
  /**
18
30
  * Seed one `pending` row per plan step at run start (`started_at` NULL — no
19
31
  * attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
@@ -25,7 +37,7 @@ export interface SeedStepExecutionRow {
25
37
  * honest done/total progress including not-yet-started steps.
26
38
  */
27
39
  export declare function seedStepExecutions(pool: Querier, rows: readonly SeedStepExecutionRow[]): ResultAsync<void, DbError>;
28
- export interface InsertStepExecutionInput {
40
+ export type InsertStepExecutionInput = {
29
41
  runId: string;
30
42
  stepId: string;
31
43
  analysisId: string;
@@ -33,14 +45,14 @@ export interface InsertStepExecutionInput {
33
45
  agentId: string;
34
46
  /** DBOS child workflow id (`"${parent}-${N}"`). Optional for legacy callers. */
35
47
  childWorkflowId?: string | null;
36
- }
48
+ };
37
49
  export declare function insertStepExecution(pool: Querier, input: InsertStepExecutionInput): ResultAsync<void, DbError>;
38
50
  /**
39
51
  * Look up a step execution by its DBOS child workflow id. The parent
40
52
  * scheduler uses this to find the step row corresponding to a CANCELLED
41
53
  * child without holding the runId/stepId map in memory across recovery.
42
54
  */
43
- export interface UpdateStepExecutionInput {
55
+ export type UpdateStepExecutionInput = {
44
56
  /** Step status — `running` is allowed for mid-flight telemetry updates (retries). */
45
57
  status: "running" | "completed" | "failed" | "skipped" | "canceled" | "blocked";
46
58
  durationMs?: number | null;
@@ -55,7 +67,7 @@ export interface UpdateStepExecutionInput {
55
67
  finishReason?: string | null;
56
68
  /** True when `stepsUsed === maxSteps`. Stored as 0/1 in SQLite. */
57
69
  hitMaxSteps?: boolean | null;
58
- }
70
+ };
59
71
  /**
60
72
  * Update a step execution row. Columns are written conditionally so callers
61
73
  * can bump `attempts` / `lastErrorClass` on retry without clobbering timing
@@ -83,4 +95,4 @@ export declare function sweepPendingStepExecutions(pool: Querier, runId: string)
83
95
  * the duration casts both; it is NULL when `started_at` is NULL.
84
96
  */
85
97
  export declare function cancelRunningStepExecutions(pool: Querier, runId: string, reason: string): ResultAsync<void, DbError>;
86
- export declare function queryStepsByRun(pool: Querier, runId: string): ResultAsync<StepExecutionRow[], DbError>;
98
+ export declare function queryStepsByRun(pool: StepRowQuerier, runId: string): ResultAsync<StepExecutionRow[], DbError>;
@@ -4,6 +4,7 @@
4
4
  * module.
5
5
  */
6
6
  import { tryMutation, tryQuery } from "../lib/db-result.js";
7
+ import { StepExecutionRowSchema } from "./schema.js";
7
8
  /**
8
9
  * Seed one `pending` row per plan step at run start (`started_at` NULL — no
9
10
  * attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
@@ -174,7 +175,7 @@ export function queryStepsByRun(pool, runId) {
174
175
  });
175
176
  }
176
177
  function mapStepExecutionRow(row) {
177
- return {
178
+ return StepExecutionRowSchema.parse({
178
179
  runId: row.run_id,
179
180
  stepId: row.step_id,
180
181
  analysisId: row.analysis_id,
@@ -183,14 +184,15 @@ function mapStepExecutionRow(row) {
183
184
  status: row.status,
184
185
  startedAt: row.started_at ?? null,
185
186
  completedAt: row.completed_at ?? null,
186
- durationMs: row.duration_ms === null || row.duration_ms === undefined ? null : Number(row.duration_ms),
187
+ // `duration_ms` is bigint, which `pg` delivers as a string; the schema wants the number.
188
+ durationMs: row.duration_ms === undefined || row.duration_ms === null ? null : Number(row.duration_ms),
187
189
  error: row.error ?? null,
188
- attempts: row.attempts ?? 1,
190
+ attempts: row.attempts === undefined || row.attempts === null ? undefined : Number(row.attempts),
189
191
  lastErrorClass: row.last_error_class ?? null,
190
192
  finishReason: row.finish_reason ?? null,
191
193
  hitMaxSteps: row.hit_max_steps === 1 || row.hit_max_steps === true,
192
194
  blockedReason: row.blocked_reason ?? null,
193
195
  sandboxRef: row.sandbox_ref ?? null,
194
196
  childWorkflowId: row.child_workflow_id ?? null,
195
- };
197
+ });
196
198
  }
@@ -1,4 +1,4 @@
1
1
  /** The Postgres realization of the tool output store of the loop, over `cortex_tool_outputs`. */
2
- import type { Pool } from "pg";
2
+ import type { Querier } from "./db.js";
3
3
  import type { ToolOutputStore } from "../loop/tool-output.js";
4
- export declare function createToolOutputStore(pool: Pool): ToolOutputStore;
4
+ export declare function createToolOutputStore(pool: Querier): ToolOutputStore;
@@ -1,14 +1,15 @@
1
1
  /** The Postgres realization of the tool output store of the loop, over `cortex_tool_outputs`. */
2
2
  import { tryMutation, tryQuery } from "../lib/db-result.js";
3
3
  function toKeptToolOutput(row) {
4
+ const threadIdField = row.thread_id === null ? undefined : { threadId: row.thread_id };
4
5
  return {
5
6
  analysisId: row.analysis_id,
6
7
  ref: row.ref,
7
8
  toolName: row.tool_name,
8
9
  toolCallId: row.tool_call_id,
9
- ...(row.thread_id === null ? {} : { threadId: row.thread_id }),
10
10
  content: row.content,
11
11
  totalLength: row.total_length,
12
+ ...threadIdField,
12
13
  };
13
14
  }
14
15
  export function createToolOutputStore(pool) {
@@ -13,7 +13,7 @@
13
13
  * `search_{snake}` shape we ever produce.
14
14
  */
15
15
  import { ResultAsync } from "neverthrow";
16
- import type { Pool } from "pg";
16
+ import type { Querier } from "./db.js";
17
17
  import { type DbError } from "../lib/db-result.js";
18
18
  /**
19
19
  * Whether `name` may be interpolated into a statement as an identifier. Shared
@@ -21,24 +21,24 @@ import { type DbError } from "../lib/db-result.js";
21
21
  * shape — one invariant, one place to read it.
22
22
  */
23
23
  export declare function isSqlIdentifier(name: string): boolean;
24
- export interface CreateIndexInput {
24
+ export type CreateIndexInput = {
25
25
  readonly indexName: string;
26
26
  readonly dimension: number;
27
27
  readonly metric?: "cosine" | "l2" | "ip";
28
- }
29
- export interface BuildIndexInput {
28
+ };
29
+ export type BuildIndexInput = {
30
30
  readonly indexName: string;
31
31
  readonly metric?: "cosine" | "l2" | "ip";
32
32
  readonly indexConfig: {
33
33
  readonly type: "hnsw";
34
34
  };
35
- }
36
- export interface UpsertInput {
35
+ };
36
+ export type UpsertInput = {
37
37
  readonly indexName: string;
38
38
  readonly vectors: readonly number[][];
39
39
  readonly metadata?: readonly Record<string, unknown>[];
40
40
  readonly ids?: readonly string[];
41
- }
41
+ };
42
42
  /**
43
43
  * A narrow delete surface: every entry of one index whose metadata `type` is named.
44
44
  *
@@ -47,26 +47,26 @@ export interface UpsertInput {
47
47
  * has to be unable to reach another's — a general predicate would make that a review
48
48
  * question rather than a type error.
49
49
  */
50
- export interface DeleteByTypeInput {
50
+ export type DeleteByTypeInput = {
51
51
  readonly indexName: string;
52
52
  readonly types: readonly string[];
53
- }
54
- export interface QueryInput {
53
+ };
54
+ export type QueryInput = {
55
55
  readonly indexName: string;
56
56
  readonly queryVector: readonly number[];
57
57
  readonly topK: number;
58
58
  readonly filter?: Record<string, unknown>;
59
- }
60
- export interface QueryResult {
59
+ };
60
+ export type QueryResult = {
61
61
  readonly id: string;
62
62
  readonly score: number;
63
63
  readonly metadata: Record<string, unknown>;
64
- }
65
- export interface VectorStore {
64
+ };
65
+ export type VectorStore = {
66
66
  createIndex(input: CreateIndexInput): ResultAsync<void, DbError>;
67
67
  buildIndex(input: BuildIndexInput): ResultAsync<void, DbError>;
68
68
  upsert(input: UpsertInput): ResultAsync<void, DbError>;
69
69
  deleteByType(input: DeleteByTypeInput): ResultAsync<void, DbError>;
70
70
  query(input: QueryInput): ResultAsync<QueryResult[], DbError>;
71
- }
72
- export declare function createVectorStore(pool: Pool): VectorStore;
71
+ };
72
+ export declare function createVectorStore(pool: Querier): VectorStore;