@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
@@ -9,7 +9,12 @@
9
9
  * `DbError`. Every other write maps SQLSTATE 23505/23503/23502/23514 to
10
10
  * `err(constraint_violation)` via `tryMutation`.
11
11
  */
12
+ import { stripNulCharacters } from "../input-sanitization.js";
12
13
  import { tryMutation, tryQuery } from "../lib/db-result.js";
14
+ import { parseJsonAs } from "../lib/parse-json.js";
15
+ import { UnknownArraySchema } from "../lib/unknown-containers.js";
16
+ import { z } from "zod";
17
+ import { CortexRunRowSchema } from "./schema.js";
13
18
  export class RunIdentityCollisionError extends Error {
14
19
  runId;
15
20
  constructor(runId) {
@@ -44,13 +49,13 @@ export class RunDedupCollisionError extends Error {
44
49
  * the err channel as a `DbError`.
45
50
  */
46
51
  export function insertRun(pool, input) {
47
- const now = new Date().toISOString();
52
+ const now = input.startedAt ?? new Date().toISOString();
48
53
  return tryMutation("runs.insertRun", async () => {
49
54
  await pool.query({
50
55
  text: `INSERT INTO cortex_runs
51
56
  (run_id, analysis_id, thread_id, workflow_name,
52
- status, started_at, plan_id, mandate_jti, mandate_expires_at) -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
53
- VALUES ($1, $2, $3, $4, 'running', $5, $6, $7, $8)`,
57
+ status, started_at, plan_id, mandate_id) -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
58
+ VALUES ($1, $2, $3, $4, 'running', $5, $6, $7)`,
54
59
  values: [
55
60
  input.runId,
56
61
  input.analysisId,
@@ -58,8 +63,7 @@ export function insertRun(pool, input) {
58
63
  input.workflowName,
59
64
  now,
60
65
  input.planId ?? null,
61
- input.mandateJti ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
62
- input.mandateExpiresAt ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
66
+ input.mandateId ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
63
67
  ],
64
68
  });
65
69
  }).mapErr((e) => {
@@ -75,32 +79,23 @@ export function insertRun(pool, input) {
75
79
  }
76
80
  /** Reserve a deterministic run id, treating same-analysis PK conflict as redelivery. */
77
81
  export function reserveRunById(pool, input) {
78
- const now = new Date().toISOString();
82
+ const now = input.startedAt ?? new Date().toISOString();
79
83
  return tryMutation("runs.reserveRunById", async () => {
80
84
  const result = await pool.query({
81
85
  text: `INSERT INTO cortex_runs
82
86
  (run_id, analysis_id, thread_id, workflow_name,
83
- status, started_at, plan_id, mandate_jti, mandate_expires_at)
84
- VALUES ($1, $2, $3, $4, 'running', $5, $6, $7, $8)
87
+ status, started_at, plan_id, mandate_id)
88
+ VALUES ($1, $2, $3, $4, 'running', $5, $6, $7)
85
89
  ON CONFLICT (run_id) DO NOTHING
86
90
  RETURNING run_id`,
87
- values: [
88
- input.runId,
89
- input.analysisId,
90
- input.threadId ?? null,
91
- input.workflowName,
92
- now,
93
- input.planId ?? null,
94
- input.mandateJti ?? null,
95
- input.mandateExpiresAt ?? null,
96
- ],
91
+ values: [input.runId, input.analysisId, input.threadId ?? null, input.workflowName, now, input.planId ?? null, input.mandateId ?? null],
97
92
  });
98
93
  return (result.rowCount ?? 0) > 0;
99
94
  }).andThen((inserted) => tryQuery("runs.reserveRunById.reload", async () => {
100
95
  const result = await pool.query({
101
96
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
102
97
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
103
- mandate_jti, mandate_expires_at, plan_id
98
+ mandate_id, plan_id
104
99
  FROM cortex_runs
105
100
  WHERE run_id = $1`,
106
101
  values: [input.runId],
@@ -112,11 +107,11 @@ export function reserveRunById(pool, input) {
112
107
  return { row: mapRunRow(row), inserted };
113
108
  }));
114
109
  }
110
+ /** The two pg error fields a dedup collision is read from; a driver error is an `Error` carrying them as own fields. */
111
+ const PgErrorIdentitySchema = z.object({ code: z.string(), constraint: z.string() });
115
112
  function isPartialUniqueViolation(err) {
116
- if (err === null || typeof err !== "object")
117
- return false;
118
- const e = err;
119
- return e.code === "23505" && e.constraint === "idx_cortex_runs_active_plan";
113
+ const parsed = PgErrorIdentitySchema.safeParse(err);
114
+ return parsed.success && parsed.data.code === "23505" && parsed.data.constraint === "idx_cortex_runs_active_plan";
120
115
  }
121
116
  /**
122
117
  * Recover the active run row for `(analysisId, planId)` after `insertRun`
@@ -128,7 +123,7 @@ export function queryActiveRun(pool, analysisId, planId) {
128
123
  const result = await pool.query({
129
124
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
130
125
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
131
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
126
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
132
127
  FROM cortex_runs
133
128
  WHERE analysis_id = $1
134
129
  AND plan_id IS NOT DISTINCT FROM $2
@@ -139,6 +134,20 @@ export function queryActiveRun(pool, analysisId, planId) {
139
134
  return row ? mapRunRow(row) : null;
140
135
  });
141
136
  }
137
+ /**
138
+ * The SQL condition of the text filter `q` for the bound placeholder `placeholder`. A run matches when its id holds the
139
+ * text, or when the `title` of the plan of the same analysis holds it. `strpos` is the test, because `LIKE` would turn
140
+ * `%` and `_` of the input into wildcards. The `analysis_id` condition keeps the plan of a different analysis out, the
141
+ * same scope as `loadPlan`.
142
+ */
143
+ function runTextCondition(placeholder) {
144
+ return `(strpos(lower(run_id), lower(${placeholder}::text)) > 0
145
+ OR EXISTS (SELECT 1 FROM cortex_plans p
146
+ WHERE p.plan_id = cortex_runs.plan_id
147
+ AND p.analysis_id = cortex_runs.analysis_id
148
+ AND jsonb_typeof(p.plan -> 'title') = 'string'
149
+ AND strpos(lower(p.plan ->> 'title'), lower(${placeholder}::text)) > 0))`;
150
+ }
142
151
  /**
143
152
  * Every NON-TERMINAL run of an analysis, newest-first and deliberately unbounded.
144
153
  *
@@ -155,18 +164,23 @@ export function queryActiveRun(pool, analysisId, planId) {
155
164
  * The status set is the one {@link queryActiveRun} uses — non-terminal means `running`. Keep the two
156
165
  * in step: a new non-terminal status added to one and not the other makes a live run invisible to
157
166
  * exactly one of its readers.
167
+ *
168
+ * With `q`, only the runs that the text filter selects are members.
158
169
  */
159
- export function queryActiveRunsByAnalysis(pool, analysisId) {
170
+ export function queryActiveRunsByAnalysis(pool, analysisId, { q } = {}) {
160
171
  return tryQuery("runs.queryActiveRunsByAnalysis", async () => {
172
+ const values = [analysisId];
173
+ const text = q === undefined ? "" : `AND ${runTextCondition(`$${values.push(q)}`)}`;
161
174
  const result = await pool.query({
162
175
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
163
176
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
164
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
177
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
165
178
  FROM cortex_runs
166
179
  WHERE analysis_id = $1
167
180
  AND status = 'running'
181
+ ${text}
168
182
  ORDER BY started_at DESC`,
169
- values: [analysisId],
183
+ values,
170
184
  });
171
185
  return result.rows.map(mapRunRow);
172
186
  });
@@ -207,16 +221,22 @@ export function reconcileOrphanedRuns(pool, opts = {}) {
207
221
  return result.rows.map((row) => row.run_id);
208
222
  });
209
223
  }
224
+ /**
225
+ * Write a status to a run row that is still `running`, and report whether the row changed. The first terminal write
226
+ * of a run wins: a row that already holds a terminal status keeps its status, its `completed_at`, and its error.
227
+ * The error text loses each NUL character, because Postgres rejects a NUL in text and the write must not fail for its own value.
228
+ */
210
229
  export function updateRunStatus(pool, runId, status, error) {
211
230
  const now = new Date().toISOString();
212
- const isTerminal = status === "completed" || status === "partial" || status === "failed" || status === "canceled" || status === "suspended_insufficient_funds";
231
+ const isTerminal = status === "completed" || status === "partial" || status === "failed" || status === "canceled";
213
232
  return tryMutation("runs.updateRunStatus", async () => {
214
- await pool.query({
233
+ const result = await pool.query({
215
234
  text: `UPDATE cortex_runs
216
235
  SET status = $1, completed_at = $2, error = $3
217
- WHERE run_id = $4`,
218
- values: [status, isTerminal ? now : null, error ?? null, runId],
236
+ WHERE run_id = $4 AND status = 'running'`,
237
+ values: [status, isTerminal ? now : null, error === undefined || error === null ? null : stripNulCharacters(error), runId],
219
238
  });
239
+ return (result.rowCount ?? 0) > 0;
220
240
  });
221
241
  }
222
242
  /**
@@ -224,9 +244,8 @@ export function updateRunStatus(pool, runId, status, error) {
224
244
  * and recording `reason` in `error` (the same column `collectAndComplete`
225
245
  * stamps `external_cancel` into). Reports whether a row transitioned — false
226
246
  * means the run was already terminal (e.g. it completed concurrently with an
227
- * external cancel), and the caller MUST NOT fall back to `updateRunStatus`,
228
- * which would clobber that terminal status. The guarded set is the active set
229
- * `queryActiveRun` deduplicates on.
247
+ * external cancel). The guarded set is the active set `queryActiveRun`
248
+ * deduplicates on.
230
249
  */
231
250
  export function markRunCanceledIfActive(pool, runId, reason) {
232
251
  const now = new Date().toISOString();
@@ -255,7 +274,7 @@ export function queryRun(pool, runId) {
255
274
  const result = await pool.query({
256
275
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
257
276
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
258
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
277
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
259
278
  FROM cortex_runs
260
279
  WHERE run_id = $1`,
261
280
  values: [runId],
@@ -264,20 +283,45 @@ export function queryRun(pool, runId) {
264
283
  return row ? mapRunRow(row) : null;
265
284
  });
266
285
  }
267
- export function queryRunsByAnalysis(pool, analysisId, { limit = 50, offset = 0 } = {}) {
286
+ /**
287
+ * One window of the runs of an analysis, newest start first. With `q`, the window holds only the runs that the text
288
+ * filter selects: the filter applies before `limit` and `offset`, and it does not change the order.
289
+ */
290
+ export function queryRunsByAnalysis(pool, analysisId, { limit = 50, offset = 0, q } = {}) {
268
291
  return tryQuery("runs.queryRunsByAnalysis", async () => {
292
+ const values = [analysisId, limit, offset];
293
+ const text = q === undefined ? "" : `AND ${runTextCondition(`$${values.push(q)}`)}`;
269
294
  const result = await pool.query({
270
295
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
271
296
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
272
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
297
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
273
298
  FROM cortex_runs
274
299
  WHERE analysis_id = $1
300
+ ${text}
275
301
  ORDER BY started_at DESC LIMIT $2 OFFSET $3`,
276
- values: [analysisId, limit, offset],
302
+ values,
277
303
  });
278
304
  return result.rows.map(mapRunRow);
279
305
  });
280
306
  }
307
+ /**
308
+ * The count of the runs of an analysis, in one statement. With `q`, the count holds only the runs that the text filter
309
+ * selects, thus it agrees with the windows of {@link queryRunsByAnalysis} for the same `q`.
310
+ */
311
+ export function countRunsByAnalysis(pool, analysisId, { q } = {}) {
312
+ return tryQuery("runs.countRunsByAnalysis", async () => {
313
+ const values = [analysisId];
314
+ const text = q === undefined ? "" : `AND ${runTextCondition(`$${values.push(q)}`)}`;
315
+ const result = await pool.query({
316
+ text: `SELECT COUNT(*)::int AS total
317
+ FROM cortex_runs
318
+ WHERE analysis_id = $1
319
+ ${text}`,
320
+ values,
321
+ });
322
+ return result.rows[0]?.total ?? 0;
323
+ });
324
+ }
281
325
  /**
282
326
  * The run ids of one plan of one analysis, newest start first, at most `limit`.
283
327
  * The run id breaks a tie of start times, highest first. A plan with no run gives
@@ -295,6 +339,23 @@ export function queryRunIdsByPlan(pool, opts) {
295
339
  return result.rows.map((row) => row.run_id);
296
340
  });
297
341
  }
342
+ /**
343
+ * The newest run of one plan of one analysis, or `null` for a plan with no run. The order is the one of
344
+ * {@link queryRunIdsByPlan}: the latest start first, and the highest run id on a tie of start times.
345
+ */
346
+ export function queryNewestPlanRun(pool, opts) {
347
+ return tryQuery("runs.queryNewestPlanRun", async () => {
348
+ const result = await pool.query({
349
+ text: `SELECT run_id, started_at FROM cortex_runs
350
+ WHERE analysis_id = $1 AND plan_id = $2
351
+ ORDER BY started_at DESC, run_id DESC
352
+ LIMIT 1`,
353
+ values: [opts.analysisId, opts.planId],
354
+ });
355
+ const row = result.rows[0];
356
+ return row ? { runId: row.run_id, startedAt: row.started_at } : null;
357
+ });
358
+ }
298
359
  /**
299
360
  * Read the analysis's non-terminal run activity without coupling it to a
300
361
  * conversation thread. The total is counted before the detail limit so a
@@ -312,7 +373,7 @@ export function queryNonTerminalRunsByAnalysis(pool, analysisId, limit = 20) {
312
373
  const rowsResult = await pool.query({
313
374
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
314
375
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
315
- mandate_jti, mandate_expires_at, plan_id
376
+ mandate_id, plan_id
316
377
  FROM cortex_runs
317
378
  WHERE analysis_id = $1
318
379
  AND status = 'running'
@@ -341,7 +402,7 @@ export function queryRunsForInspection(pool, analysisId, { limit = 50, offset =
341
402
  const rowsResult = await pool.query({
342
403
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
343
404
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
344
- mandate_jti, mandate_expires_at, plan_id
405
+ mandate_id, plan_id
345
406
  FROM cortex_runs
346
407
  WHERE analysis_id = $1
347
408
  ORDER BY CASE status
@@ -359,35 +420,39 @@ export function queryRunsForInspection(pool, analysisId, { limit = 50, offset =
359
420
  };
360
421
  });
361
422
  }
362
- export function queryRunsByThread(pool, analysisId, threadId, { limit = 50, offset = 0 } = {}) {
423
+ /** The runs of one thread of an analysis, newest start first. With `q`, the text filter applies before the window. */
424
+ export function queryRunsByThread(pool, analysisId, threadId, { limit = 50, offset = 0, q } = {}) {
363
425
  return tryQuery("runs.queryRunsByThread", async () => {
426
+ const values = [analysisId, threadId, limit, offset];
427
+ const text = q === undefined ? "" : `AND ${runTextCondition(`$${values.push(q)}`)}`;
364
428
  const result = await pool.query({
365
429
  text: `SELECT run_id, analysis_id, thread_id, workflow_name,
366
430
  status, started_at, completed_at, error, synthesis_status, synthesis_reason, parts,
367
- mandate_jti, mandate_expires_at, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
431
+ mandate_id, plan_id -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
368
432
  FROM cortex_runs
369
433
  WHERE analysis_id = $1 AND thread_id = $2
434
+ ${text}
370
435
  ORDER BY started_at DESC LIMIT $3 OFFSET $4`,
371
- values: [analysisId, threadId, limit, offset],
436
+ values,
372
437
  });
373
438
  return result.rows.map(mapRunRow);
374
439
  });
375
440
  }
376
441
  /**
377
- * Persist the run mandate jti + expiry for a run. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
378
- * Called by `authorizeForRun` after a successful mint so the cancel
379
- * handler can revoke the mandate by `runId → jti` lookup. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
380
- * The JWT itself is NOT persisted — it rides in DBOS workflow input.
442
+ * Persist the run mandate reference for a run. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
443
+ * Called by the host authorizer after it authorizes the run, so the cancel
444
+ * handler can revoke the mandate by `runId → mandate id` lookup. oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
445
+ * The reference has no expiry here: the run does not depend on a clock.
381
446
  */
382
- export function setRunMandate(pool, runId, jti, expiresAt) {
447
+ export function setRunMandate(pool, runId, mandateId) {
383
448
  // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
384
449
  return tryMutation("runs.setRunMandate", async () => {
385
450
  // oss-core-managed-ok: run-mandate ledger op label
386
451
  await pool.query({
387
452
  text: `UPDATE cortex_runs
388
- SET mandate_jti = $1, mandate_expires_at = $2 -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
389
- WHERE run_id = $3`,
390
- values: [jti, expiresAt, runId],
453
+ SET mandate_id = $1 -- oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
454
+ WHERE run_id = $2`,
455
+ values: [mandateId, runId],
391
456
  });
392
457
  });
393
458
  }
@@ -408,20 +473,19 @@ export function setRunSynthesisOutcome(pool, runId, synthesisStatus, synthesisRe
408
473
  }
409
474
  function mapRunRow(row) {
410
475
  // JSONB is parsed by `pg` into native arrays/objects. Treat legacy TEXT
411
- // rows (if anything slipped through) as strings and parse them.
412
- let parts = null;
413
- if (Array.isArray(row.parts)) {
414
- parts = row.parts;
415
- }
416
- else if (typeof row.parts === "string") {
476
+ // rows (if anything slipped through) as strings and parse them. A parts
477
+ // value that survives neither shape reads as null, like a row with no parts.
478
+ let parts = row.parts;
479
+ if (typeof parts === "string") {
417
480
  try {
418
- parts = JSON.parse(row.parts);
481
+ parts = parseJsonAs(parts, z.json());
419
482
  }
420
483
  catch {
421
- /* malformed — treat as null */
484
+ parts = null;
422
485
  }
423
486
  }
424
- return {
487
+ const parsedParts = UnknownArraySchema.safeParse(parts);
488
+ return CortexRunRowSchema.parse({
425
489
  runId: row.run_id,
426
490
  analysisId: row.analysis_id,
427
491
  threadId: row.thread_id ?? null,
@@ -432,9 +496,8 @@ function mapRunRow(row) {
432
496
  error: row.error ?? null,
433
497
  synthesisStatus: row.synthesis_status ?? null,
434
498
  synthesisReason: row.synthesis_reason ?? null,
435
- parts,
436
- mandateJti: row.mandate_jti ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
437
- mandateExpiresAt: row.mandate_expires_at ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
499
+ parts: parsedParts.success ? parsedParts.data : null,
500
+ mandateId: row.mandate_id ?? null, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
438
501
  planId: row.plan_id ?? null,
439
- };
502
+ });
440
503
  }
@@ -10,10 +10,10 @@ export declare const AnalysisStateRowSchema: z.ZodObject<{
10
10
  status: z.ZodString;
11
11
  context: z.ZodNullable<z.ZodString>;
12
12
  dataProfileStatus: z.ZodEnum<{
13
+ completed: "completed";
13
14
  failed: "failed";
14
15
  pending: "pending";
15
16
  running: "running";
16
- completed: "completed";
17
17
  }>;
18
18
  dataProfileError: z.ZodNullable<z.ZodString>;
19
19
  dataProfileStartedAt: z.ZodNullable<z.ZodString>;
@@ -46,31 +46,30 @@ export declare const ArtifactRowSchema: z.ZodObject<{
46
46
  }, z.core.$strip>;
47
47
  export type ArtifactRow = z.infer<typeof ArtifactRowSchema>;
48
48
  export declare const RunStatus: z.ZodEnum<{
49
- failed: "failed";
50
- running: "running";
49
+ canceled: "canceled";
51
50
  completed: "completed";
51
+ failed: "failed";
52
52
  partial: "partial";
53
- canceled: "canceled";
54
- suspended_insufficient_funds: "suspended_insufficient_funds";
53
+ running: "running";
55
54
  }>;
56
55
  export type RunStatus = z.infer<typeof RunStatus>;
57
56
  /** A status that a run keeps once it ended: every status but `running`. */
58
57
  export type TerminalRunStatus = Exclude<RunStatus, "running">;
59
58
  export declare const StepExecutionStatus: z.ZodEnum<{
59
+ blocked: "blocked";
60
+ canceled: "canceled";
61
+ completed: "completed";
60
62
  failed: "failed";
61
63
  pending: "pending";
62
64
  running: "running";
63
- completed: "completed";
64
- canceled: "canceled";
65
65
  skipped: "skipped";
66
- blocked: "blocked";
67
66
  }>;
68
67
  export type StepExecutionStatus = z.infer<typeof StepExecutionStatus>;
69
68
  export declare const SynthesisStatus: z.ZodEnum<{
70
69
  failed: "failed";
71
70
  produced: "produced";
72
- skipped_no_summaries: "skipped_no_summaries";
73
71
  skipped_blocker: "skipped_blocker";
72
+ skipped_no_summaries: "skipped_no_summaries";
74
73
  }>;
75
74
  export type SynthesisStatus = z.infer<typeof SynthesisStatus>;
76
75
  export declare const CortexRunRowSchema: z.ZodObject<{
@@ -79,12 +78,11 @@ export declare const CortexRunRowSchema: z.ZodObject<{
79
78
  threadId: z.ZodNullable<z.ZodString>;
80
79
  workflowName: z.ZodString;
81
80
  status: z.ZodEnum<{
82
- failed: "failed";
83
- running: "running";
81
+ canceled: "canceled";
84
82
  completed: "completed";
83
+ failed: "failed";
85
84
  partial: "partial";
86
- canceled: "canceled";
87
- suspended_insufficient_funds: "suspended_insufficient_funds";
85
+ running: "running";
88
86
  }>;
89
87
  startedAt: z.ZodString;
90
88
  completedAt: z.ZodNullable<z.ZodString>;
@@ -92,13 +90,12 @@ export declare const CortexRunRowSchema: z.ZodObject<{
92
90
  synthesisStatus: z.ZodNullable<z.ZodEnum<{
93
91
  failed: "failed";
94
92
  produced: "produced";
95
- skipped_no_summaries: "skipped_no_summaries";
96
93
  skipped_blocker: "skipped_blocker";
94
+ skipped_no_summaries: "skipped_no_summaries";
97
95
  }>>;
98
96
  synthesisReason: z.ZodNullable<z.ZodString>;
99
- parts: z.ZodNullable<z.ZodArray<z.ZodAny>>;
100
- mandateJti: z.ZodNullable<z.ZodString>;
101
- mandateExpiresAt: z.ZodNullable<z.ZodString>;
97
+ parts: z.ZodNullable<z.ZodArray<z.ZodJSONSchema>>;
98
+ mandateId: z.ZodNullable<z.ZodString>;
102
99
  planId: z.ZodNullable<z.ZodString>;
103
100
  }, z.core.$strip>;
104
101
  export type CortexRunRow = z.infer<typeof CortexRunRowSchema>;
@@ -123,13 +120,13 @@ export declare const StepExecutionRowSchema: z.ZodObject<{
123
120
  wave: z.ZodNumber;
124
121
  agentId: z.ZodString;
125
122
  status: z.ZodEnum<{
123
+ blocked: "blocked";
124
+ canceled: "canceled";
125
+ completed: "completed";
126
126
  failed: "failed";
127
127
  pending: "pending";
128
128
  running: "running";
129
- completed: "completed";
130
- canceled: "canceled";
131
129
  skipped: "skipped";
132
- blocked: "blocked";
133
130
  }>;
134
131
  startedAt: z.ZodNullable<z.ZodString>;
135
132
  completedAt: z.ZodNullable<z.ZodString>;
@@ -155,7 +152,7 @@ export type StepExecutionRow = z.infer<typeof StepExecutionRowSchema>;
155
152
  export declare const CortexPlanRowSchema: z.ZodObject<{
156
153
  planId: z.ZodString;
157
154
  analysisId: z.ZodString;
158
- plan: z.ZodRecord<z.ZodString, z.ZodUnknown>;
155
+ plan: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
159
156
  parentPlanId: z.ZodNullable<z.ZodString>;
160
157
  createdAt: z.ZodString;
161
158
  }, z.core.$strip>;
@@ -33,7 +33,7 @@ export const ArtifactRowSchema = z.object({
33
33
  fileType: z.string().nullable(),
34
34
  });
35
35
  // ── Run & Step Execution Schemas ─────────────────────────────────────
36
- export const RunStatus = z.enum(["running", "completed", "partial", "failed", "canceled", "suspended_insufficient_funds"]);
36
+ export const RunStatus = z.enum(["running", "completed", "partial", "failed", "canceled"]);
37
37
  export const StepExecutionStatus = z.enum(["pending", "running", "completed", "failed", "skipped", "canceled", "blocked"]);
38
38
  // Run-level synthesis outcome, distinct from RunStatus: a run can reach
39
39
  // status="completed" while synthesis produced nothing. "produced" is the only
@@ -53,9 +53,8 @@ export const CortexRunRowSchema = z.object({
53
53
  // synthesis never recorded an outcome.
54
54
  synthesisStatus: SynthesisStatus.nullable(),
55
55
  synthesisReason: z.string().nullable(),
56
- parts: z.array(z.any()).nullable(),
57
- mandateJti: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
58
- mandateExpiresAt: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
56
+ parts: z.array(z.json()).nullable(),
57
+ mandateId: z.string().nullable(), // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
59
58
  planId: z.string().nullable(),
60
59
  });
61
60
  /**
@@ -98,7 +97,7 @@ export const StepExecutionRowSchema = z.object({
98
97
  export const CortexPlanRowSchema = z.object({
99
98
  planId: z.string(),
100
99
  analysisId: z.string(),
101
- plan: z.record(z.string(), z.unknown()),
100
+ plan: z.record(z.string(), z.json()),
102
101
  parentPlanId: z.string().nullable(),
103
102
  createdAt: z.string(),
104
103
  });
@@ -14,10 +14,10 @@ import { type Result } from "neverthrow";
14
14
  import { z } from "zod";
15
15
  import type { ReportSnapshot } from "../report-model/reference-resolver.js";
16
16
  /** One reduced schema issue -- the dotted path and the message, without the rest. */
17
- export interface SchemaIssue {
17
+ export type SchemaIssue = {
18
18
  readonly path: string;
19
19
  readonly message: string;
20
- }
20
+ };
21
21
  /** Reduce a zod error to the dotted path and the message of each issue. */
22
22
  export declare function reduceIssues(error: z.ZodError): SchemaIssue[];
23
23
  /**
@@ -11,6 +11,7 @@
11
11
  * value on its own, thus the two stores agree on the key set.
12
12
  */
13
13
  import { err, ok } from "neverthrow";
14
+ import { nullProtoRecord } from "../lib/null-proto.js";
14
15
  import { z } from "zod";
15
16
  /**
16
17
  * One pinned artifact of a stored snapshot. The value carries the content hash, an
@@ -42,7 +43,13 @@ function prefixIssues(prefix, issues) {
42
43
  message: issue.message,
43
44
  }));
44
45
  }
45
- /** A stored map is a plain object. An array and a null carry no own key that a map read can use. */
46
+ /**
47
+ * A stored map is a plain object. An array and a null carry no own key that a map read can use.
48
+ *
49
+ * The check stays a hand predicate because the walk below must address the ORIGINAL object: a
50
+ * zod record parse rebuilds the value through string-keyed assignment, and a `__proto__` own key
51
+ * does not survive that rebuild — the pin contract this module keeps.
52
+ */
46
53
  function isPlainRecord(value) {
47
54
  return typeof value === "object" && value !== null && !Array.isArray(value);
48
55
  }
@@ -72,9 +79,7 @@ export function parseSnapshot(stored) {
72
79
  if (!citationRecords.success) {
73
80
  return err(prefixIssues("citationRecords", reduceIssues(citationRecords.error)));
74
81
  }
75
- // The map takes a null prototype, the same as the pin, thus a path such as
76
- // `__proto__` stays an ordinary entry and never reaches a prototype slot.
77
- const artifacts = Object.create(null);
82
+ const artifacts = nullProtoRecord();
78
83
  const issues = [];
79
84
  for (const [path, value] of Object.entries(stored.artifacts)) {
80
85
  const parsed = ArtifactSnapshotSchema.safeParse(value);
@@ -87,11 +92,12 @@ export function parseSnapshot(stored) {
87
92
  if (issues.length > 0) {
88
93
  return err(issues);
89
94
  }
90
- // An absent part stays absent in the parsed value. Thus a reload gives the same shape that the pin
91
- // wrote, and an equality test over a stored snapshot holds across the round trip.
95
+ // An absent part comes back as an own key that holds `undefined`, because the literal below always
96
+ // sets the three keys. An equality that ignores `undefined` members holds across the round trip; a
97
+ // check that counts the own keys does not.
92
98
  return ok({
93
99
  artifacts,
94
- ...(citations.data === undefined ? {} : { citations: citations.data }),
95
- ...(citationRecords.data === undefined ? {} : { citationRecords: citationRecords.data }),
100
+ citations: citations.data,
101
+ citationRecords: citationRecords.data,
96
102
  });
97
103
  }