@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
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The turn that runs on a thread. The open of a turn claims the thread, and the
3
+ * end of the turn releases it. A claim whose turn no longer runs, for example
4
+ * after a cancel, gives way to the next turn.
5
+ */
6
+ import type { ResultAsync } from "neverthrow";
7
+ import { type DbError } from "../lib/db-result.js";
8
+ import type { Querier } from "./db.js";
9
+ /** The outcome of a claim: the thread is the turn's, another turn that still runs holds it, or no live thread exists. */
10
+ export type TurnClaim = {
11
+ readonly kind: "claimed";
12
+ } | {
13
+ readonly kind: "held";
14
+ readonly turnId: string;
15
+ } | {
16
+ readonly kind: "no_thread";
17
+ };
18
+ /**
19
+ * Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
20
+ * run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
21
+ */
22
+ export declare function claimThreadForTurn(pool: Querier, threadId: string, turnId: string, stillRuns: (turnId: string) => Promise<boolean>): ResultAsync<TurnClaim, DbError>;
23
+ /**
24
+ * Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
25
+ * code, thus the harness closes its record here. A record that is closed already does not change.
26
+ */
27
+ export declare function closeOpenTurnRecords(pool: Querier, threadId: string): ResultAsync<void, DbError>;
28
+ /** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
29
+ export declare function turnOfAsk(pool: Querier, askId: string): ResultAsync<string | undefined, DbError>;
30
+ /** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
31
+ export declare function queryTurnsOfAnalysis(pool: Querier, analysisId: string): ResultAsync<{
32
+ readonly threadId: string;
33
+ readonly turnId: string;
34
+ }[], DbError>;
35
+ /** Release the thread, when the turn still holds it. A second release changes nothing. */
36
+ export declare function releaseThreadOfTurn(pool: Querier, threadId: string, turnId: string): ResultAsync<void, DbError>;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The turn that runs on a thread. The open of a turn claims the thread, and the
3
+ * end of the turn releases it. A claim whose turn no longer runs, for example
4
+ * after a cancel, gives way to the next turn.
5
+ */
6
+ import { z } from "zod";
7
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
8
+ const HolderRowSchema = z.object({ active_turn_id: z.string().nullable() });
9
+ /** Each attempt reads the holder one time. A holder that changes between two reads takes one more attempt. */
10
+ const CLAIM_ATTEMPTS = 3;
11
+ /**
12
+ * Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
13
+ * run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
14
+ */
15
+ export function claimThreadForTurn(pool, threadId, turnId, stillRuns) {
16
+ return tryQuery("activeTurns.claim", async () => {
17
+ let holder = null;
18
+ for (let attempt = 0; attempt < CLAIM_ATTEMPTS; attempt++) {
19
+ const { rows } = await pool.query("SELECT active_turn_id FROM cortex_analysis_threads WHERE thread_id = $1 AND deleted_at IS NULL", [threadId]);
20
+ const row = rows[0];
21
+ if (row === undefined)
22
+ return { kind: "no_thread" };
23
+ holder = HolderRowSchema.parse(row).active_turn_id;
24
+ if (holder !== null && holder !== turnId && (await stillRuns(holder)))
25
+ return { kind: "held", turnId: holder };
26
+ const taken = await pool.query(`UPDATE cortex_analysis_threads SET active_turn_id = $2
27
+ WHERE thread_id = $1 AND active_turn_id IS NOT DISTINCT FROM $3`, [threadId, turnId, holder]);
28
+ if ((taken.rowCount ?? 0) > 0)
29
+ return { kind: "claimed" };
30
+ }
31
+ return { kind: "held", turnId: holder ?? "" };
32
+ });
33
+ }
34
+ /**
35
+ * Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
36
+ * code, thus the harness closes its record here. A record that is closed already does not change.
37
+ */
38
+ export function closeOpenTurnRecords(pool, threadId) {
39
+ return tryMutation("activeTurns.closeOpen", () => pool.query("UPDATE cortex_thread_turns SET status = 'aborted', closed_at = NOW() WHERE thread_id = $1 AND status = 'open'", [threadId])).map(() => undefined);
40
+ }
41
+ const AskTurnRowSchema = z.object({ active_turn_id: z.string().nullable() });
42
+ /** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
43
+ export function turnOfAsk(pool, askId) {
44
+ return tryQuery("activeTurns.turnOfAsk", async () => {
45
+ const { rows } = await pool.query(`SELECT threads.active_turn_id FROM cortex_asks asks
46
+ JOIN cortex_analysis_threads threads ON threads.thread_id = asks.thread_id
47
+ WHERE asks.id = $1`, [askId]);
48
+ const row = rows[0];
49
+ return row === undefined ? undefined : (AskTurnRowSchema.parse(row).active_turn_id ?? undefined);
50
+ });
51
+ }
52
+ const TurnOfThreadRowSchema = z.object({ thread_id: z.string(), active_turn_id: z.string() });
53
+ /** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
54
+ export function queryTurnsOfAnalysis(pool, analysisId) {
55
+ return tryQuery("activeTurns.ofAnalysis", async () => {
56
+ const { rows } = await pool.query(`SELECT thread_id, active_turn_id FROM cortex_analysis_threads
57
+ WHERE analysis_id = $1 AND active_turn_id IS NOT NULL AND deleted_at IS NULL`, [analysisId]);
58
+ return rows.map((row) => {
59
+ const parsed = TurnOfThreadRowSchema.parse(row);
60
+ return { threadId: parsed.thread_id, turnId: parsed.active_turn_id };
61
+ });
62
+ });
63
+ }
64
+ /** Release the thread, when the turn still holds it. A second release changes nothing. */
65
+ export function releaseThreadOfTurn(pool, threadId, turnId) {
66
+ return tryMutation("activeTurns.release", () => pool.query("UPDATE cortex_analysis_threads SET active_turn_id = NULL WHERE thread_id = $1 AND active_turn_id = $2", [threadId, turnId])).map(() => undefined);
67
+ }
@@ -10,7 +10,7 @@ import { type DbError } from "../lib/db-result.js";
10
10
  import type { Querier } from "./db.js";
11
11
  import type { RunStatus, TerminalRunStatus } from "./schema.js";
12
12
  /** The newest run of one analysis, with the title of its plan and the counts of its step rows. */
13
- export interface LatestRunSummary {
13
+ export type LatestRunSummary = {
14
14
  readonly analysisId: string;
15
15
  readonly runId: string;
16
16
  readonly status: RunStatus;
@@ -19,26 +19,26 @@ export interface LatestRunSummary {
19
19
  readonly totalSteps: number;
20
20
  readonly startedAt: string;
21
21
  readonly completedAt: string | null;
22
- }
22
+ };
23
23
  /** A run of a list of run ids, with the fields of the newest-run read and the thread of the run. */
24
- export interface RunProgressSummary extends LatestRunSummary {
24
+ export type RunProgressSummary = LatestRunSummary & {
25
25
  /** The thread of the run as the ledger stores it, or `null`. */
26
26
  readonly threadId: string | null;
27
- }
27
+ };
28
28
  /** A terminal run that ended at or after a time. */
29
- export interface EndedRunSummary {
29
+ export type EndedRunSummary = {
30
30
  readonly analysisId: string;
31
31
  readonly runId: string;
32
32
  readonly status: TerminalRunStatus;
33
33
  readonly completedAt: string;
34
- }
34
+ };
35
35
  /** The data profile state of one analysis that has a profile status. */
36
- export interface DataProfileSummary {
36
+ export type DataProfileSummary = {
37
37
  readonly analysisId: string;
38
38
  readonly status: DataProfileLifecycleStatus;
39
39
  readonly completedAt: string | null;
40
40
  readonly profiledFiles: number | null;
41
- }
41
+ };
42
42
  export declare function queryRunCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
43
43
  analysisId: string;
44
44
  status: string;
@@ -146,7 +146,7 @@ export function queryRunsEndedSince(pool, input) {
146
146
  const result = await pool.query({
147
147
  text: `SELECT analysis_id, run_id, status, completed_at
148
148
  FROM cortex_runs
149
- WHERE status IN ('completed', 'partial', 'failed', 'canceled', 'suspended_insufficient_funds')
149
+ WHERE status IN ('completed', 'partial', 'failed', 'canceled')
150
150
  AND completed_at >= $1
151
151
  ORDER BY completed_at DESC, run_id DESC
152
152
  LIMIT $2`,
@@ -185,9 +185,9 @@ export function queryDataProfileStatusByAnalyses(pool, analysisIds) {
185
185
  status: r.data_profile_status,
186
186
  completedAt: r.data_profile_completed_at ?? null,
187
187
  profiledFiles: profileDatasetFileCount({
188
- ...(r.partition === null ? {} : { partition: r.partition }),
189
- ...(r.coverage === null ? {} : { coverage: r.coverage }),
190
- ...(r.kinds === null ? {} : { kinds: r.kinds }),
188
+ partition: r.partition ?? undefined,
189
+ coverage: r.coverage ?? undefined,
190
+ kinds: r.kinds ?? undefined,
191
191
  }),
192
192
  }));
193
193
  });
@@ -19,17 +19,3 @@ export declare function loadAnalysisStatus(pool: Querier, resourceId: string): R
19
19
  status: string;
20
20
  context: string | null;
21
21
  } | null, DbError>;
22
- /**
23
- * Mark an analysis as suspended.
24
- * Idempotent — no-op if already suspended.
25
- *
26
- * `suspended_insufficient_funds` is the name of the one suspended state, for
27
- * each reason of the host, thus no reason is persisted. A chat turn never calls
28
- * it.
29
- */
30
- export declare function suspendAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
31
- /**
32
- * Resume a suspended analysis after the user tops up.
33
- * Only transitions from `suspended_insufficient_funds` → `active`.
34
- */
35
- export declare function resumeAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
@@ -40,35 +40,3 @@ export function loadAnalysisStatus(pool, resourceId) {
40
40
  return { status: row.status, context: row.context ?? null };
41
41
  });
42
42
  }
43
- /**
44
- * Mark an analysis as suspended.
45
- * Idempotent — no-op if already suspended.
46
- *
47
- * `suspended_insufficient_funds` is the name of the one suspended state, for
48
- * each reason of the host, thus no reason is persisted. A chat turn never calls
49
- * it.
50
- */
51
- export function suspendAnalysis(pool, analysisId) {
52
- return tryMutation("analyses.suspendAnalysis", async () => {
53
- await pool.query({
54
- text: `UPDATE cortex_analysis_state
55
- SET status = 'suspended_insufficient_funds', updated_at = $1
56
- WHERE analysis_id = $2 AND status != 'suspended_insufficient_funds'`,
57
- values: [new Date().toISOString(), analysisId],
58
- });
59
- });
60
- }
61
- /**
62
- * Resume a suspended analysis after the user tops up.
63
- * Only transitions from `suspended_insufficient_funds` → `active`.
64
- */
65
- export function resumeAnalysis(pool, analysisId) {
66
- return tryMutation("analyses.resumeAnalysis", async () => {
67
- await pool.query({
68
- text: `UPDATE cortex_analysis_state
69
- SET status = 'active', updated_at = $1
70
- WHERE analysis_id = $2 AND status = 'suspended_insufficient_funds'`,
71
- values: [new Date().toISOString(), analysisId],
72
- });
73
- });
74
- }
@@ -5,8 +5,8 @@
5
5
  import type { ResultAsync } from "neverthrow";
6
6
  import { type DbError } from "../lib/db-result.js";
7
7
  import type { Querier } from "./db.js";
8
- import type { ArtifactRole, ArtifactRow } from "./schema.js";
9
- export interface RegisterArtifactInput {
8
+ import { ArtifactRole, type ArtifactRow } from "./schema.js";
9
+ export type RegisterArtifactInput = {
10
10
  resourceId: string;
11
11
  path: string;
12
12
  hash: string;
@@ -21,7 +21,7 @@ export interface RegisterArtifactInput {
21
21
  * `step_output` rows (their `file_id` is assigned after upload-sync).
22
22
  */
23
23
  fileId?: string | null;
24
- }
24
+ };
25
25
  export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInput): ResultAsync<void, DbError>;
26
26
  /**
27
27
  * Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
@@ -34,12 +34,12 @@ export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInp
34
34
  */
35
35
  export declare function upsertArtifacts(pool: Querier, entries: RegisterArtifactInput[]): ResultAsync<void, DbError>;
36
36
  /** Result type for input artifact metadata lookups. */
37
- export interface InputArtifactMeta {
37
+ export type InputArtifactMeta = {
38
38
  path: string;
39
39
  hash: string;
40
40
  size: number;
41
41
  fileId: string | null;
42
- }
42
+ };
43
43
  /**
44
44
  * Query cortex_artifacts for input-role rows matching the given paths.
45
45
  * Used at the registration boundary to resolve metadata for data-source inputs.
@@ -47,11 +47,11 @@ export interface InputArtifactMeta {
47
47
  export declare function queryInputArtifacts(pool: Querier, analysisId: string, paths: string[]): ResultAsync<InputArtifactMeta[], DbError>;
48
48
  export declare function queryUnsyncedStepArtifacts(pool: Querier, resourceId: string, runId: string, stepId: string): ResultAsync<ArtifactRow[], DbError>;
49
49
  /** One registered step output, as a downstream consumer needs to name it. */
50
- export interface StepArtifactRef {
50
+ export type StepArtifactRef = {
51
51
  /** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
52
52
  path: string;
53
53
  fileType: string | null;
54
- }
54
+ };
55
55
  /**
56
56
  * The artifacts a completed step registered, most consequential first. Ordered
57
57
  * by artifact kind (outputs, then figures, notebooks, scripts, logs) and then by
@@ -60,12 +60,12 @@ export interface StepArtifactRef {
60
60
  */
61
61
  export declare function queryStepArtifactPaths(pool: Querier, resourceId: string, runId: string, stepId: string, limit: number): ResultAsync<StepArtifactRef[], DbError>;
62
62
  /** One registered artifact of an analysis, as a reader of the full artifact set names it. */
63
- export interface AnalysisArtifactRef {
63
+ export type AnalysisArtifactRef = {
64
64
  /** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
65
65
  path: string;
66
66
  hash: string;
67
67
  fileType: string | null;
68
- }
68
+ };
69
69
  /**
70
70
  * Every artifact of one analysis, ordered by path so the same call gives the same rows.
71
71
  *
@@ -78,7 +78,7 @@ export declare function queryAnalysisArtifacts(pool: Querier, analysisId: string
78
78
  /** The sort of {@link queryArtifactPage}: `path` is path order, `recent` is newest registration first. */
79
79
  export type ArtifactPageSort = "path" | "recent";
80
80
  /** The filters, the sort, and the window of {@link queryArtifactPage}. A filter that is absent selects each row. */
81
- export interface ArtifactPageQuery {
81
+ export type ArtifactPageQuery = {
82
82
  runId?: string;
83
83
  stepId?: string;
84
84
  fileType?: string;
@@ -94,9 +94,9 @@ export interface ArtifactPageQuery {
94
94
  sort: ArtifactPageSort;
95
95
  limit: number;
96
96
  offset: number;
97
- }
97
+ };
98
98
  /** One ledger row of {@link queryArtifactPage}. */
99
- export interface ArtifactPageEntry {
99
+ export type ArtifactPageEntry = {
100
100
  /** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
101
101
  path: string;
102
102
  /** Bytes. */
@@ -106,20 +106,20 @@ export interface ArtifactPageEntry {
106
106
  runId: string | null;
107
107
  stepId: string | null;
108
108
  createdAt: string;
109
- }
109
+ };
110
110
  /** The count of the selected rows that have one extension. */
111
- export interface ArtifactExtensionCount {
111
+ export type ArtifactExtensionCount = {
112
112
  /** The extension in lower case with no dot, or `null` for the rows that have no extension. */
113
113
  extension: string | null;
114
114
  count: number;
115
- }
115
+ };
116
116
  /** One page of the ledger, and the count of the rows that the filters select. */
117
- export interface ArtifactPage {
117
+ export type ArtifactPage = {
118
118
  entries: ArtifactPageEntry[];
119
119
  total: number;
120
120
  /** The selected rows by extension, in the order of the extension with `null` last. The counts sum to `total`. */
121
121
  extensionCounts: ArtifactExtensionCount[];
122
- }
122
+ };
123
123
  /**
124
124
  * One page of the artifact ledger of an analysis, in two statements: the count of the rows that the filters
125
125
  * select, grouped by extension, and the page. The count is a separate statement because a page past the end has no
@@ -129,11 +129,24 @@ export interface ArtifactPage {
129
129
  * grows with the ledger of the one analysis, because the count reads each filtered row.
130
130
  */
131
131
  export declare function queryArtifactPage(pool: Querier, analysisId: string, query: ArtifactPageQuery): ResultAsync<ArtifactPage, DbError>;
132
+ /** The run and the step that wrote one path, from {@link queryArtifactOrigins}. Both are `null` for an `input` row. */
133
+ export type ArtifactOrigin = {
134
+ /** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
135
+ path: string;
136
+ runId: string | null;
137
+ stepId: string | null;
138
+ };
139
+ /**
140
+ * The run and the step of each path of a list that has a ledger row of the analysis, in one statement through the key
141
+ * `(analysis_id, path)`. A path with no row has no entry, and the order of the entries is not defined. An empty list
142
+ * gives `[]` and sends no statement. The cost grows with the length of the list, thus the caller bounds it.
143
+ */
144
+ export declare function queryArtifactOrigins(pool: Querier, analysisId: string, paths: readonly string[]): ResultAsync<ArtifactOrigin[], DbError>;
132
145
  /** The step-output count of one run, from {@link countArtifactsByRuns}. */
133
- export interface RunArtifactCount {
146
+ export type RunArtifactCount = {
134
147
  runId: string;
135
148
  count: number;
136
- }
149
+ };
137
150
  /**
138
151
  * The step-output count of each run of a list, in one statement. A run with no step output has no entry,
139
152
  * and a caller reads it as 0. An `input` row never counts. The run-completed card and a list of runs use
@@ -3,6 +3,8 @@
3
3
  * reconciliation.
4
4
  */
5
5
  import { tryMutation, tryQuery } from "../lib/db-result.js";
6
+ import { presentAt } from "../lib/present.js";
7
+ import { ArtifactRowSchema } from "./schema.js";
6
8
  export function upsertArtifact(pool, entry) {
7
9
  const now = new Date().toISOString();
8
10
  return tryMutation("artifacts.upsertArtifact", async () => {
@@ -110,6 +112,7 @@ export function queryInputArtifacts(pool, analysisId, paths) {
110
112
  return result.rows.map((r) => ({
111
113
  path: r.path,
112
114
  hash: r.hash,
115
+ // oxlint-disable-next-line typescript/no-unnecessary-type-conversion -- pg returns a bigint column as text; the row annotation says number, the driver gives a string, and the conversion is real.
113
116
  size: Number(r.size),
114
117
  fileId: r.file_id ?? null,
115
118
  }));
@@ -224,7 +227,7 @@ export function queryArtifactPage(pool, analysisId, query) {
224
227
  ORDER BY 1 ASC NULLS LAST`,
225
228
  values,
226
229
  });
227
- const extensionCounts = countResult.rows.map((r) => ({ extension: r.extension ?? null, count: Number(r.n) }));
230
+ const extensionCounts = countResult.rows.map((r) => ({ extension: r.extension ?? null, count: r.n }));
228
231
  // `path` is unique in one analysis, thus it breaks each tie and two pages never overlap.
229
232
  const order = query.sort === "recent" ? "created_at DESC, path ASC" : "path ASC";
230
233
  const rowsResult = await pool.query({
@@ -250,6 +253,24 @@ export function queryArtifactPage(pool, analysisId, query) {
250
253
  };
251
254
  });
252
255
  }
256
+ /**
257
+ * The run and the step of each path of a list that has a ledger row of the analysis, in one statement through the key
258
+ * `(analysis_id, path)`. A path with no row has no entry, and the order of the entries is not defined. An empty list
259
+ * gives `[]` and sends no statement. The cost grows with the length of the list, thus the caller bounds it.
260
+ */
261
+ export function queryArtifactOrigins(pool, analysisId, paths) {
262
+ return tryQuery("artifacts.queryArtifactOrigins", async () => {
263
+ if (paths.length === 0)
264
+ return [];
265
+ const result = await pool.query({
266
+ text: `SELECT path, source_run, source_step
267
+ FROM cortex_artifacts
268
+ WHERE analysis_id = $1 AND path = ANY($2::text[])`,
269
+ values: [analysisId, [...paths]],
270
+ });
271
+ return result.rows.map((r) => ({ path: r.path, runId: r.source_run ?? null, stepId: r.source_step ?? null }));
272
+ });
273
+ }
253
274
  /**
254
275
  * The step-output count of each run of a list, in one statement. A run with no step output has no entry,
255
276
  * and a caller reads it as 0. An `input` row never counts. The run-completed card and a list of runs use
@@ -266,7 +287,7 @@ export function countArtifactsByRuns(pool, analysisId, runIds) {
266
287
  GROUP BY source_run`,
267
288
  values: [analysisId, [...runIds]],
268
289
  });
269
- return result.rows.map((r) => ({ runId: r.source_run, count: Number(r.n) }));
290
+ return result.rows.map((r) => ({ runId: r.source_run, count: r.n }));
270
291
  });
271
292
  }
272
293
  export function updateArtifactId(pool, resourceId, path, artifactId, fileType) {
@@ -287,8 +308,9 @@ export function updateFileIds(pool, pairs) {
287
308
  const tuples = [];
288
309
  for (let i = 0; i < pairs.length; i++) {
289
310
  const base = i * 2;
311
+ const pair = presentAt(pairs, i, "the artifact/file pair at the index");
290
312
  tuples.push(`($${base + 1}::text, $${base + 2}::text)`);
291
- values.push(pairs[i].artifactId, pairs[i].fileId);
313
+ values.push(pair.artifactId, pair.fileId);
292
314
  }
293
315
  await pool.query({
294
316
  text: `UPDATE cortex_artifacts AS a
@@ -300,12 +322,13 @@ export function updateFileIds(pool, pairs) {
300
322
  });
301
323
  }
302
324
  function mapArtifactRow(row) {
303
- return {
325
+ return ArtifactRowSchema.parse({
304
326
  resourceId: row.analysis_id,
305
327
  path: row.path,
306
328
  artifactId: row.artifact_id ?? null,
307
329
  fileId: row.file_id ?? null,
308
330
  hash: row.hash,
331
+ // `size` is bigint, which `pg` delivers as a string; the schema wants the number.
309
332
  size: Number(row.size),
310
333
  role: row.role,
311
334
  sourceStep: row.source_step ?? null,
@@ -313,5 +336,5 @@ function mapArtifactRow(row) {
313
336
  createdAt: row.created_at,
314
337
  unrecoverableAt: row.unrecoverable_at ?? null,
315
338
  fileType: row.file_type ?? null,
316
- };
339
+ });
317
340
  }
@@ -14,7 +14,7 @@ import type { Querier } from "./db.js";
14
14
  * call sites keep one import.
15
15
  */
16
16
  export type { DataProfileAxis, DataProfileChecked, DataProfileCompanionCompleteness, DataProfileCoverage, DataProfileDimension, DataProfileFile, DataProfileGroup, DataProfileGroupSlot, DataProfileInputSignature, DataProfileKind, DataProfileMemberAnnotation, DataProfileObservation, DataProfileOrganism, DataProfilePartition, DataProfileProbeReport, DataProfileQualityAssessment, DataProfileQuarantine, DataProfileRecipeStep, DataProfileLifecycleStatus, DataProfileResult, DataProfileSubjectSource, } from "../contracts/data-profile.js";
17
- export interface DataProfileStatus {
17
+ export type DataProfileStatus = {
18
18
  status: DataProfileLifecycleStatus;
19
19
  error: string | null;
20
20
  startedAt: string | null;
@@ -28,7 +28,7 @@ export interface DataProfileStatus {
28
28
  */
29
29
  workflowId: string | null;
30
30
  seedInputFileIds: string[] | null;
31
- }
31
+ };
32
32
  /**
33
33
  * Try to claim a startable row into `running`. Startable means `'pending'` (seeded,
34
34
  * not yet run) or NULL (no profile: never profiled, or cleared by `clearDataProfile`).
@@ -5,6 +5,16 @@
5
5
  * same operation works against the harness's connection pool or a
6
6
  * single-transaction `PoolClient`. Lifted here to keep the type declared in
7
7
  * one place instead of redeclared per file.
8
+ *
9
+ * The type is structural and states exactly what the state modules read: one
10
+ * `query` over the text or config form, returning `rows` and `rowCount`. A
11
+ * real `Pool` and `PoolClient` satisfy it, and so does a test double that
12
+ * answers `query` alone; nothing else of `pg`'s surface is claimed here.
8
13
  */
9
- import type { Pool, PoolClient } from "pg";
10
- export type Querier = Pool | PoolClient;
14
+ import type { QueryConfig, QueryResultRow } from "pg";
15
+ export type Querier = {
16
+ query<R extends QueryResultRow = Record<string, unknown>>(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
17
+ rows: R[];
18
+ rowCount: number | null;
19
+ }>;
20
+ };
package/dist/state/db.js CHANGED
@@ -5,5 +5,10 @@
5
5
  * same operation works against the harness's connection pool or a
6
6
  * single-transaction `PoolClient`. Lifted here to keep the type declared in
7
7
  * one place instead of redeclared per file.
8
+ *
9
+ * The type is structural and states exactly what the state modules read: one
10
+ * `query` over the text or config form, returning `rows` and `rowCount`. A
11
+ * real `Pool` and `PoolClient` satisfy it, and so does a test double that
12
+ * answers `query` alone; nothing else of `pg`'s surface is claimed here.
8
13
  */
9
14
  export {};
@@ -0,0 +1,4 @@
1
+ /** The Postgres realization of the intent store of `edit_file`, over `cortex_edit_intents`. */
2
+ import type { Querier } from "./db.js";
3
+ import type { EditIntentStore } from "../tools/workspace/edit-file.js";
4
+ export declare function createEditIntentStore(pool: Querier): EditIntentStore;
@@ -0,0 +1,71 @@
1
+ /** The Postgres realization of the intent store of `edit_file`, over `cortex_edit_intents`. */
2
+ import { z } from "zod";
3
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
4
+ import { MUTATE_TOOL_NAMES } from "../tools/workspace/mutator.js";
5
+ const WriteRecordSchema = z.object({
6
+ analysisId: z.string(),
7
+ threadId: z.string().optional(),
8
+ path: z.string(),
9
+ hash: z.string(),
10
+ size: z.number(),
11
+ toolName: z.enum(MUTATE_TOOL_NAMES),
12
+ invocationId: z.string(),
13
+ });
14
+ const EditFileOkSchema = z.object({
15
+ status: z.literal("ok"),
16
+ path: z.string(),
17
+ replacements: z.number(),
18
+ bytesWritten: z.number(),
19
+ lines: z.array(z.number()).optional(),
20
+ decision_record_noted: z.literal(true).optional(),
21
+ });
22
+ const EditIntentRowSchema = z.object({
23
+ step_key: z.string(),
24
+ analysis_id: z.string(),
25
+ path: z.string(),
26
+ hash_before: z.string(),
27
+ hash_after: z.string(),
28
+ result: EditFileOkSchema,
29
+ call_record: z.array(WriteRecordSchema),
30
+ });
31
+ function toEditIntent(raw) {
32
+ const row = EditIntentRowSchema.parse(raw);
33
+ return {
34
+ key: row.step_key,
35
+ analysisId: row.analysis_id,
36
+ path: row.path,
37
+ hashBefore: row.hash_before,
38
+ hashAfter: row.hash_after,
39
+ result: row.result,
40
+ callRecord: row.call_record,
41
+ };
42
+ }
43
+ export function createEditIntentStore(pool) {
44
+ return {
45
+ put: (intent) => tryMutation("editIntents.put", () => pool.query(
46
+ // The update sets no `created_at`, thus the row keeps the time of its first put.
47
+ `INSERT INTO cortex_edit_intents (step_key, analysis_id, path, hash_before, hash_after, result, call_record)
48
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
49
+ ON CONFLICT (step_key) DO UPDATE SET
50
+ analysis_id = EXCLUDED.analysis_id,
51
+ path = EXCLUDED.path,
52
+ hash_before = EXCLUDED.hash_before,
53
+ hash_after = EXCLUDED.hash_after,
54
+ result = EXCLUDED.result,
55
+ call_record = EXCLUDED.call_record`, [
56
+ intent.key,
57
+ intent.analysisId,
58
+ intent.path,
59
+ intent.hashBefore,
60
+ intent.hashAfter,
61
+ JSON.stringify(intent.result),
62
+ JSON.stringify(intent.callRecord),
63
+ ])).map(() => undefined),
64
+ get: (key) => tryQuery("editIntents.get", async () => {
65
+ const { rows } = await pool.query(`SELECT step_key, analysis_id, path, hash_before, hash_after, result, call_record
66
+ FROM cortex_edit_intents
67
+ WHERE step_key = $1`, [key]);
68
+ return rows[0] === undefined ? null : toEditIntent(rows[0]);
69
+ }),
70
+ };
71
+ }
@@ -8,9 +8,9 @@
8
8
  */
9
9
  export { initCortexState } from "./init.js";
10
10
  export type { Querier } from "./db.js";
11
- export { upsertAnalysis, suspendAnalysis, resumeAnalysis, loadAnalysisStatus } from "./analyses.js";
12
- export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, countArtifactsByRuns, } from "./artifacts.js";
13
- export type { RegisterArtifactInput, InputArtifactMeta, StepArtifactRef, ArtifactExtensionCount, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount, } from "./artifacts.js";
11
+ export { upsertAnalysis, loadAnalysisStatus } from "./analyses.js";
12
+ export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns, } from "./artifacts.js";
13
+ export type { RegisterArtifactInput, ArtifactOrigin, InputArtifactMeta, StepArtifactRef, ArtifactExtensionCount, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount, } from "./artifacts.js";
14
14
  export { insertRun, reserveRunById, RunDedupCollisionError, RunIdentityCollisionError, updateRunStatus, reconcileOrphanedRuns, ORPHANED_RUN_GRACE_MS, markRunCanceledIfActive, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
15
15
  setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, countRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, queryNewestPlanRun, } from "./runs.js";
16
16
  export type { InsertRunInput, RunPage, RunReservation } from "./runs.js";
@@ -18,7 +18,7 @@ export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, up
18
18
  export type { InsertStepExecutionInput, SeedStepExecutionRow, UpdateStepExecutionInput } from "./step-executions.js";
19
19
  export { setSandboxRef, clearSandboxRef, reconcileReapedSandbox } from "./active-sandboxes.js";
20
20
  export { insertPlan, upsertPlan, loadPlan, loadPlanRecord } from "./plans.js";
21
- export type { InsertPlanInput, UpsertPlanInput, PlanRecord } from "./plans.js";
21
+ export type { InsertPlanInput, UpsertPlanInput, PlanRecord, PlanRowQuerier } from "./plans.js";
22
22
  export { tryStartDataProfile, tryRetryDataProfile, tryRerunDataProfile, completeDataProfile, failDataProfile, expireStaleDataProfile, reconcileOrphanedDataProfile, clearDataProfile, completeEmptyDataProfile, loadDataProfileStatus, loadSeedInputFileIds, recordDataProfileWorkflowId, } from "./data-profile.js";
23
23
  export type { DataProfileStatus, DataProfileTerminalWrite, DataProfileResult, DataProfileChecked, DataProfileCompanionCompleteness, DataProfileDimension, DataProfileGroup, DataProfileGroupSlot, DataProfileFile, DataProfileMemberAnnotation, DataProfileObservation, DataProfilePartition, DataProfileProbeReport, DataProfileQualityAssessment, DataProfileQuarantine, DataProfileRecipeStep, DataProfileKind, DataProfileAxis, DataProfileInputSignature, DataProfileCoverage, } from "./data-profile.js";
24
24
  export { queryRunCountsByAnalyses, queryThreadCountsByAnalyses, queryDataProfileStatusByAnalyses, queryLatestRunsByAnalyses, queryRunProgressByRuns, queryRunsEndedSince, } from "./analyses-metrics.js";
@@ -7,8 +7,8 @@
7
7
  * specific entity module (e.g. `./state/runs.js`) when narrow.
8
8
  */
9
9
  export { initCortexState } from "./init.js";
10
- export { upsertAnalysis, suspendAnalysis, resumeAnalysis, loadAnalysisStatus } from "./analyses.js";
11
- export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, countArtifactsByRuns, } from "./artifacts.js";
10
+ export { upsertAnalysis, loadAnalysisStatus } from "./analyses.js";
11
+ export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns, } from "./artifacts.js";
12
12
  export { insertRun, reserveRunById, RunDedupCollisionError, RunIdentityCollisionError, updateRunStatus, reconcileOrphanedRuns, ORPHANED_RUN_GRACE_MS, markRunCanceledIfActive, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
13
13
  setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, countRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, queryNewestPlanRun, } from "./runs.js";
14
14
  export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, updateStepExecution, queryStepsByRun } from "./step-executions.js";
@@ -8,9 +8,10 @@
8
8
  * takes no lock on a Cortex table.
9
9
  */
10
10
  import type { Pool } from "pg";
11
+ import type { Querier } from "./db.js";
11
12
  import type { Logger } from "../lib/logger.js";
12
13
  /**
13
14
  * Apply the pending migrations of the Cortex state tables. Safe to call on every
14
15
  * startup and across concurrent replicas.
15
16
  */
16
- export declare function initCortexState(pool: Pool, injected?: Logger): Promise<void>;
17
+ export declare function initCortexState(pool: Querier & Pick<Pool, "connect" | "options">, injected?: Logger): Promise<void>;