@inflexa-ai/harness 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -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,18 +78,25 @@ 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;
85
85
  /** A part of the path, with no regard to case. Each character matches only itself. */
86
86
  q?: string;
87
+ /** The whole path, with case. It selects the one row of that path. */
88
+ path?: string;
89
+ /**
90
+ * Extensions in lower case, with no dot. A row is selected when the extension of its path is a member. A row with
91
+ * no extension never matches, and an empty list selects each row. The read compares the members as they are.
92
+ */
93
+ extensions?: readonly string[];
87
94
  sort: ArtifactPageSort;
88
95
  limit: number;
89
96
  offset: number;
90
- }
97
+ };
91
98
  /** One ledger row of {@link queryArtifactPage}. */
92
- export interface ArtifactPageEntry {
99
+ export type ArtifactPageEntry = {
93
100
  /** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
94
101
  path: string;
95
102
  /** Bytes. */
@@ -99,25 +106,47 @@ export interface ArtifactPageEntry {
99
106
  runId: string | null;
100
107
  stepId: string | null;
101
108
  createdAt: string;
102
- }
109
+ };
110
+ /** The count of the selected rows that have one extension. */
111
+ export type ArtifactExtensionCount = {
112
+ /** The extension in lower case with no dot, or `null` for the rows that have no extension. */
113
+ extension: string | null;
114
+ count: number;
115
+ };
103
116
  /** One page of the ledger, and the count of the rows that the filters select. */
104
- export interface ArtifactPage {
117
+ export type ArtifactPage = {
105
118
  entries: ArtifactPageEntry[];
106
119
  total: number;
107
- }
120
+ /** The selected rows by extension, in the order of the extension with `null` last. The counts sum to `total`. */
121
+ extensionCounts: ArtifactExtensionCount[];
122
+ };
108
123
  /**
109
124
  * One page of the artifact ledger of an analysis, in two statements: the count of the rows that the filters
110
- * select, and the page. The count is a separate statement because a page past the end has no row to carry it.
125
+ * select, grouped by extension, and the page. The count is a separate statement because a page past the end has no
126
+ * row to carry it. `total` is the sum of the groups.
111
127
  *
112
128
  * Every row of the analysis is a member, an `input` row and a row with `unrecoverable_at` included. The cost
113
129
  * grows with the ledger of the one analysis, because the count reads each filtered row.
114
130
  */
115
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>;
116
145
  /** The step-output count of one run, from {@link countArtifactsByRuns}. */
117
- export interface RunArtifactCount {
146
+ export type RunArtifactCount = {
118
147
  runId: string;
119
148
  count: number;
120
- }
149
+ };
121
150
  /**
122
151
  * The step-output count of each run of a list, in one statement. A run with no step output has no entry,
123
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
  }));
@@ -179,9 +182,16 @@ export function queryAnalysisArtifacts(pool, analysisId) {
179
182
  return result.rows.map((r) => ({ path: r.path, hash: r.hash, fileType: r.file_type ?? null }));
180
183
  });
181
184
  }
185
+ /**
186
+ * The extension of `path` in lower case: the text after the last dot of the file name, which is the part after the
187
+ * last `/`. The pattern needs one character or more before that dot and one or more after it, thus a name with no dot,
188
+ * a name whose only dot is its first character, and a name that ends with a dot give `NULL`.
189
+ */
190
+ const EXTENSION_SQL = `lower(substring(regexp_replace(path, '^.*/', '') from '^.+\\.([^.]+)$'))`;
182
191
  /**
183
192
  * One page of the artifact ledger of an analysis, in two statements: the count of the rows that the filters
184
- * select, and the page. The count is a separate statement because a page past the end has no row to carry it.
193
+ * select, grouped by extension, and the page. The count is a separate statement because a page past the end has no
194
+ * row to carry it. `total` is the sum of the groups.
185
195
  *
186
196
  * Every row of the analysis is a member, an `input` row and a row with `unrecoverable_at` included. The cost
187
197
  * grows with the ledger of the one analysis, because the count reads each filtered row.
@@ -203,11 +213,21 @@ export function queryArtifactPage(pool, analysisId, query) {
203
213
  // `LIKE` would turn `%` and `_` of the input into wildcards.
204
214
  if (query.q !== undefined)
205
215
  conditions.push(`strpos(lower(path), lower(${bind(query.q)}::text)) > 0`);
216
+ if (query.path !== undefined)
217
+ conditions.push(`path = ${bind(query.path)}`);
218
+ if (query.extensions !== undefined && query.extensions.length > 0) {
219
+ conditions.push(`${EXTENSION_SQL} = ANY(${bind([...query.extensions])}::text[])`);
220
+ }
206
221
  const where = conditions.join(" AND ");
207
222
  const countResult = await pool.query({
208
- text: `SELECT COUNT(*)::int AS total FROM cortex_artifacts WHERE ${where}`,
223
+ text: `SELECT ${EXTENSION_SQL} AS extension, COUNT(*)::int AS n
224
+ FROM cortex_artifacts
225
+ WHERE ${where}
226
+ GROUP BY 1
227
+ ORDER BY 1 ASC NULLS LAST`,
209
228
  values,
210
229
  });
230
+ const extensionCounts = countResult.rows.map((r) => ({ extension: r.extension ?? null, count: r.n }));
211
231
  // `path` is unique in one analysis, thus it breaks each tie and two pages never overlap.
212
232
  const order = query.sort === "recent" ? "created_at DESC, path ASC" : "path ASC";
213
233
  const rowsResult = await pool.query({
@@ -228,10 +248,29 @@ export function queryArtifactPage(pool, analysisId, query) {
228
248
  stepId: r.source_step ?? null,
229
249
  createdAt: r.created_at,
230
250
  })),
231
- total: Number(countResult.rows[0]?.total ?? 0),
251
+ total: extensionCounts.reduce((sum, e) => sum + e.count, 0),
252
+ extensionCounts,
232
253
  };
233
254
  });
234
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
+ }
235
274
  /**
236
275
  * The step-output count of each run of a list, in one statement. A run with no step output has no entry,
237
276
  * and a caller reads it as 0. An `input` row never counts. The run-completed card and a list of runs use
@@ -248,7 +287,7 @@ export function countArtifactsByRuns(pool, analysisId, runIds) {
248
287
  GROUP BY source_run`,
249
288
  values: [analysisId, [...runIds]],
250
289
  });
251
- 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 }));
252
291
  });
253
292
  }
254
293
  export function updateArtifactId(pool, resourceId, path, artifactId, fileType) {
@@ -269,8 +308,9 @@ export function updateFileIds(pool, pairs) {
269
308
  const tuples = [];
270
309
  for (let i = 0; i < pairs.length; i++) {
271
310
  const base = i * 2;
311
+ const pair = presentAt(pairs, i, "the artifact/file pair at the index");
272
312
  tuples.push(`($${base + 1}::text, $${base + 2}::text)`);
273
- values.push(pairs[i].artifactId, pairs[i].fileId);
313
+ values.push(pair.artifactId, pair.fileId);
274
314
  }
275
315
  await pool.query({
276
316
  text: `UPDATE cortex_artifacts AS a
@@ -282,12 +322,13 @@ export function updateFileIds(pool, pairs) {
282
322
  });
283
323
  }
284
324
  function mapArtifactRow(row) {
285
- return {
325
+ return ArtifactRowSchema.parse({
286
326
  resourceId: row.analysis_id,
287
327
  path: row.path,
288
328
  artifactId: row.artifact_id ?? null,
289
329
  fileId: row.file_id ?? null,
290
330
  hash: row.hash,
331
+ // `size` is bigint, which `pg` delivers as a string; the schema wants the number.
291
332
  size: Number(row.size),
292
333
  role: row.role,
293
334
  sourceStep: row.source_step ?? null,
@@ -295,5 +336,5 @@ function mapArtifactRow(row) {
295
336
  createdAt: row.created_at,
296
337
  unrecoverableAt: row.unrecoverable_at ?? null,
297
338
  fileType: row.file_type ?? null,
298
- };
339
+ });
299
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,17 +8,17 @@
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, 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
- setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, } from "./runs.js";
15
+ setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, countRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, queryNewestPlanRun, } from "./runs.js";
16
16
  export type { InsertRunInput, RunPage, RunReservation } from "./runs.js";
17
17
  export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, updateStepExecution, queryStepsByRun } from "./step-executions.js";
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,10 +7,10 @@
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
- setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, } from "./runs.js";
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";
15
15
  export { setSandboxRef, clearSandboxRef, reconcileReapedSandbox } from "./active-sandboxes.js";
16
16
  export { insertPlan, upsertPlan, loadPlan, loadPlanRecord } from "./plans.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>;
@@ -7,9 +7,12 @@
7
7
  * Postgres advisory lock. A run with no pending migration runs no DDL, thus it
8
8
  * takes no lock on a Cortex table.
9
9
  */
10
+ import { errorOf } from "../lib/thrown.js";
11
+ import { textOf } from "../lib/unknown-text.js";
10
12
  import { Kysely, PostgresDialect, sql } from "kysely";
11
13
  import { Migrator } from "kysely/migration";
12
14
  import { createNoopLogger } from "../lib/console-logger.js";
15
+ import { presentFirst } from "../lib/present.js";
13
16
  import { cortexMigrations } from "./migrations/index.js";
14
17
  /**
15
18
  * The longest time that a migration statement waits for a lock. An `ALTER TABLE`
@@ -37,7 +40,7 @@ export async function initCortexState(pool, injected) {
37
40
  migrationLockTableName: "cortex_migration_lock",
38
41
  // Without a schema, the migrator finds its tables in any schema, thus a
39
42
  // test schema would see the tables of the other test schemas.
40
- migrationTableSchema: rows[0].schema,
43
+ migrationTableSchema: presentFirst(rows, "the current schema row").schema,
41
44
  });
42
45
  const { error, results } = await migrator.migrateToLatest();
43
46
  for (const result of results ?? []) {
@@ -45,7 +48,7 @@ export async function initCortexState(pool, injected) {
45
48
  logger.info("migration applied", { migration: result.migrationName });
46
49
  }
47
50
  if (error !== undefined) {
48
- throw error instanceof Error ? error : new Error(`cortex state migration failed: ${String(error)}`);
51
+ throw errorOf(error) ?? new Error(`cortex state migration failed: ${textOf(error)}`);
49
52
  }
50
53
  }
51
54
  finally {
@@ -6,6 +6,8 @@
6
6
  * that an earlier harness created with its boot-time DDL: it brings that
7
7
  * database to this schema, and the migrator records it.
8
8
  */
9
+ import { errorMessageOf } from "../../lib/thrown.js";
10
+ import { textOf } from "../../lib/unknown-text.js";
9
11
  import { CompiledQuery, sql } from "kysely";
10
12
  import { backfillAiSdkMessageEnvelopes } from "../../memory/message-backfill.js";
11
13
  // No ';' may appear anywhere in this text, comments included: it is executed by
@@ -635,7 +637,7 @@ export function baseline(logger) {
635
637
  await sql.raw("CREATE EXTENSION IF NOT EXISTS vector").execute(db);
636
638
  }
637
639
  catch (err) {
638
- const msg = err instanceof Error ? err.message : String(err);
640
+ const msg = errorMessageOf(err) ?? textOf(err);
639
641
  throw new Error(`Cortex requires the pgvector extension. ` +
640
642
  `CREATE EXTENSION IF NOT EXISTS vector failed: ${msg}. ` +
641
643
  `Ask platform-infra to enable pgvector on the RDS parameter group, ` +
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Record the intent of each `edit_file` call inside a durable step, keyed by
3
+ * the step. A rerun of the step after the write, before its checkpoint, then
4
+ * gives back the result of the edit and does not apply it a second time.
5
+ */
6
+ import type { Migration } from "kysely/migration";
7
+ export declare const addTheEditIntents: Migration;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Record the intent of each `edit_file` call inside a durable step, keyed by
3
+ * the step. A rerun of the step after the write, before its checkpoint, then
4
+ * gives back the result of the edit and does not apply it a second time.
5
+ */
6
+ import { sql } from "kysely";
7
+ export const addTheEditIntents = {
8
+ async up(db) {
9
+ await sql `CREATE TABLE IF NOT EXISTS cortex_edit_intents (
10
+ step_key TEXT PRIMARY KEY,
11
+ analysis_id TEXT NOT NULL,
12
+ path TEXT NOT NULL,
13
+ hash_before TEXT NOT NULL,
14
+ hash_after TEXT NOT NULL,
15
+ result JSONB NOT NULL,
16
+ call_record JSONB NOT NULL,
17
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
18
+ )`.execute(db);
19
+ await sql `CREATE INDEX IF NOT EXISTS idx_cortex_edit_intents_analysis ON cortex_edit_intents (analysis_id)`.execute(db);
20
+ },
21
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Record the key of each `update_working_memory` call that a durable step
3
+ * applied, in the transaction of the edit. A rerun of the step after the edit,
4
+ * before its checkpoint, then finds its key and changes nothing.
5
+ */
6
+ import type { Migration } from "kysely/migration";
7
+ export declare const recordTheAppliedMemoryEdits: Migration;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Record the key of each `update_working_memory` call that a durable step
3
+ * applied, in the transaction of the edit. A rerun of the step after the edit,
4
+ * before its checkpoint, then finds its key and changes nothing.
5
+ */
6
+ import { sql } from "kysely";
7
+ export const recordTheAppliedMemoryEdits = {
8
+ async up(db) {
9
+ await sql `CREATE TABLE IF NOT EXISTS cortex_applied_memory_edits (
10
+ call_key TEXT PRIMARY KEY,
11
+ analysis_id TEXT NOT NULL,
12
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
13
+ )`.execute(db);
14
+ await sql `CREATE INDEX IF NOT EXISTS idx_cortex_applied_memory_edits_analysis ON cortex_applied_memory_edits (analysis_id)`.execute(db);
15
+ },
16
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Store the result of each authoring call that a durable step landed, keyed by
3
+ * the report thread and the step. The result lands in the transaction of the
4
+ * document. A rerun of the step after the landing, before its checkpoint, then
5
+ * gives the stored result and does not apply the operation a second time.
6
+ */
7
+ import type { Migration } from "kysely/migration";
8
+ export declare const storeTheAuthoringResults: Migration;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Store the result of each authoring call that a durable step landed, keyed by
3
+ * the report thread and the step. The result lands in the transaction of the
4
+ * document. A rerun of the step after the landing, before its checkpoint, then
5
+ * gives the stored result and does not apply the operation a second time.
6
+ */
7
+ import { sql } from "kysely";
8
+ export const storeTheAuthoringResults = {
9
+ async up(db) {
10
+ await sql `CREATE TABLE IF NOT EXISTS cortex_authoring_results (
11
+ thread_id TEXT NOT NULL,
12
+ call_key TEXT NOT NULL,
13
+ analysis_id TEXT NOT NULL,
14
+ result JSONB NOT NULL,
15
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
16
+ PRIMARY KEY (thread_id, call_key)
17
+ )`.execute(db);
18
+ await sql `CREATE INDEX IF NOT EXISTS idx_cortex_authoring_results_analysis ON cortex_authoring_results (analysis_id)`.execute(db);
19
+ },
20
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Key each group of a chat turn on its first row. A turn workflow writes each
3
+ * round in a step, and a step that runs again after its commit finds the key
4
+ * and stores nothing, thus no row of a turn lands two times.
5
+ */
6
+ import type { Migration } from "kysely/migration";
7
+ export declare const keyTheGroupsOfATurn: Migration;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Key each group of a chat turn on its first row. A turn workflow writes each
3
+ * round in a step, and a step that runs again after its commit finds the key
4
+ * and stores nothing, thus no row of a turn lands two times.
5
+ */
6
+ import { sql } from "kysely";
7
+ export const keyTheGroupsOfATurn = {
8
+ async up(db) {
9
+ await sql `ALTER TABLE messages ADD COLUMN IF NOT EXISTS round_key TEXT`.execute(db);
10
+ await sql `CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_round_key ON messages(thread_id, round_key) WHERE round_key IS NOT NULL`.execute(db);
11
+ },
12
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Mark the turn that runs on a thread. The open of a turn claims the thread,
3
+ * and the end of the turn releases it, thus a second turn on the same thread
4
+ * is refused before it writes a row.
5
+ */
6
+ import type { Migration } from "kysely/migration";
7
+ export declare const markTheActiveTurnOfAThread: Migration;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Mark the turn that runs on a thread. The open of a turn claims the thread,
3
+ * and the end of the turn releases it, thus a second turn on the same thread
4
+ * is refused before it writes a row.
5
+ */
6
+ import { sql } from "kysely";
7
+ export const markTheActiveTurnOfAThread = {
8
+ async up(db) {
9
+ await sql `ALTER TABLE cortex_analysis_threads ADD COLUMN IF NOT EXISTS active_turn_id TEXT`.execute(db);
10
+ },
11
+ };