@inflexa-ai/harness 0.45.1 → 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 (789) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +307 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +23 -7
  174. package/dist/lib/hooks.js +17 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +161 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +34 -0
  256. package/dist/loop/turn-credentials.js +73 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/types.d.ts +55 -94
  304. package/dist/reference-data/catalog.d.ts +2 -15
  305. package/dist/reference-data/catalog.js +25 -8
  306. package/dist/reference-data/receipt.d.ts +2 -2
  307. package/dist/report-model/assert-rules.js +1 -1
  308. package/dist/report-model/authoring-grammar.d.ts +211 -233
  309. package/dist/report-model/block-walk.d.ts +10 -10
  310. package/dist/report-model/block-walk.js +2 -0
  311. package/dist/report-model/draft-finish.d.ts +8 -8
  312. package/dist/report-model/draft-finish.js +1 -1
  313. package/dist/report-model/draft-hash.js +8 -7
  314. package/dist/report-model/draft-operations.d.ts +22 -10
  315. package/dist/report-model/draft-operations.js +48 -30
  316. package/dist/report-model/draft-read.d.ts +19 -7
  317. package/dist/report-model/draft-read.js +16 -6
  318. package/dist/report-model/draft.d.ts +844 -2
  319. package/dist/report-model/draft.js +3 -1
  320. package/dist/report-model/fixture-resolver.js +39 -16
  321. package/dist/report-model/pin-snapshot.d.ts +2 -2
  322. package/dist/report-model/pin-snapshot.js +15 -15
  323. package/dist/report-model/production-resolver.d.ts +18 -18
  324. package/dist/report-model/production-resolver.js +50 -42
  325. package/dist/report-model/reference-resolver.d.ts +26 -10
  326. package/dist/report-model/reference-resolver.js +68 -5
  327. package/dist/report-model/reference-stamp.js +30 -38
  328. package/dist/report-model/structural-validation.js +12 -4
  329. package/dist/report-model/validate.d.ts +7 -7
  330. package/dist/report-model/validate.js +6 -6
  331. package/dist/report-render/assets.d.ts +2 -2
  332. package/dist/report-render/assets.js +27 -3
  333. package/dist/report-render/chart-export.d.ts +10 -2
  334. package/dist/report-render/chart-export.js +37 -11
  335. package/dist/report-render/chart-presets.d.ts +8 -8
  336. package/dist/report-render/chart-presets.js +3 -3
  337. package/dist/report-render/chart-renderers.d.ts +23 -16
  338. package/dist/report-render/chart-renderers.js +74 -53
  339. package/dist/report-render/chart-toolbox.d.ts +2 -2
  340. package/dist/report-render/chart-toolbox.js +7 -6
  341. package/dist/report-render/chart.d.ts +15 -16
  342. package/dist/report-render/chart.js +369 -252
  343. package/dist/report-render/design.d.ts +36 -297
  344. package/dist/report-render/design.js +0 -12
  345. package/dist/report-render/figures/common.d.ts +12 -12
  346. package/dist/report-render/figures/common.js +42 -31
  347. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  348. package/dist/report-render/figures/dendrogram.js +10 -10
  349. package/dist/report-render/figures/dense.js +15 -8
  350. package/dist/report-render/figures/dotplot.js +46 -33
  351. package/dist/report-render/figures/embedding.js +52 -43
  352. package/dist/report-render/figures/equal-units.d.ts +10 -10
  353. package/dist/report-render/figures/equal-units.js +27 -27
  354. package/dist/report-render/figures/forest.js +9 -7
  355. package/dist/report-render/figures/gsea.js +21 -11
  356. package/dist/report-render/figures/heatmap.js +13 -9
  357. package/dist/report-render/figures/index.d.ts +10 -10
  358. package/dist/report-render/figures/index.js +4 -2
  359. package/dist/report-render/figures/km.js +10 -9
  360. package/dist/report-render/figures/label-room.d.ts +12 -12
  361. package/dist/report-render/figures/label-room.js +7 -2
  362. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  363. package/dist/report-render/figures/locuszoom.js +59 -31
  364. package/dist/report-render/figures/lollipop.js +3 -2
  365. package/dist/report-render/figures/ma.js +8 -4
  366. package/dist/report-render/figures/manhattan.d.ts +1 -2
  367. package/dist/report-render/figures/manhattan.js +52 -34
  368. package/dist/report-render/figures/oncoprint.js +4 -5
  369. package/dist/report-render/figures/pca.js +25 -11
  370. package/dist/report-render/figures/qq.js +20 -9
  371. package/dist/report-render/figures/roc.js +1 -1
  372. package/dist/report-render/figures/sankey.d.ts +2 -2
  373. package/dist/report-render/figures/sankey.js +11 -10
  374. package/dist/report-render/figures/upset.d.ts +6 -6
  375. package/dist/report-render/figures/upset.js +7 -4
  376. package/dist/report-render/figures/volcano.js +12 -10
  377. package/dist/report-render/hybrid-svg.d.ts +4 -4
  378. package/dist/report-render/hybrid-svg.js +7 -5
  379. package/dist/report-render/number-format.d.ts +4 -4
  380. package/dist/report-render/number-format.js +62 -27
  381. package/dist/report-render/page.js +2 -1
  382. package/dist/report-render/provenance-data.d.ts +2 -2
  383. package/dist/report-render/references.d.ts +4 -4
  384. package/dist/report-render/render.d.ts +2 -2
  385. package/dist/report-render/render.js +10 -11
  386. package/dist/report-render/script-json.js +1 -1
  387. package/dist/report-render/table-data.d.ts +6 -6
  388. package/dist/report-render/test/options.d.ts +49 -0
  389. package/dist/report-render/test/options.js +143 -0
  390. package/dist/report-render/test/page-function.d.ts +19 -0
  391. package/dist/report-render/test/page-function.js +33 -0
  392. package/dist/report-render/types.d.ts +10 -10
  393. package/dist/report-render/value-bridge.d.ts +4 -4
  394. package/dist/report-render/value-bridge.js +27 -14
  395. package/dist/report-render/views/chart-view.d.ts +2 -2
  396. package/dist/report-render/views/chart-view.js +2 -2
  397. package/dist/report-render/views/lineage.d.ts +6 -6
  398. package/dist/report-render/views/lineage.js +2 -0
  399. package/dist/report-render/views/page-view.d.ts +2 -2
  400. package/dist/report-render/views/page-view.js +1 -0
  401. package/dist/report-render/views/prose.js +25 -8
  402. package/dist/report-render/views/references-view.js +12 -1
  403. package/dist/report-render/views/values.js +1 -1
  404. package/dist/runtime/assemble.d.ts +53 -26
  405. package/dist/runtime/assemble.js +103 -56
  406. package/dist/runtime/boot.d.ts +8 -7
  407. package/dist/runtime/boot.js +1 -1
  408. package/dist/runtime/connection-budget.d.ts +6 -6
  409. package/dist/runtime/connection-budget.js +1 -1
  410. package/dist/runtime/dbos.d.ts +29 -19
  411. package/dist/runtime/dbos.js +35 -20
  412. package/dist/runtime/result-serialization.js +18 -5
  413. package/dist/runtime/shutdown.d.ts +2 -2
  414. package/dist/sandbox/client.d.ts +7 -3
  415. package/dist/sandbox/cpu-files.d.ts +2 -2
  416. package/dist/sandbox/cpu-files.js +21 -4
  417. package/dist/sandbox/create-sandbox.d.ts +7 -8
  418. package/dist/sandbox/create-sandbox.js +6 -12
  419. package/dist/sandbox/docker-client.d.ts +48 -3
  420. package/dist/sandbox/docker-client.js +10 -6
  421. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  422. package/dist/sandbox/exec-outcome.d.ts +2 -2
  423. package/dist/sandbox/exec-outcome.js +1 -1
  424. package/dist/sandbox/exec.d.ts +10 -6
  425. package/dist/sandbox/exec.js +27 -12
  426. package/dist/sandbox/execution-id.js +14 -6
  427. package/dist/sandbox/farm.d.ts +2 -2
  428. package/dist/sandbox/farm.js +22 -27
  429. package/dist/sandbox/identity.d.ts +7 -0
  430. package/dist/sandbox/identity.js +14 -3
  431. package/dist/sandbox/image-packages.js +15 -27
  432. package/dist/sandbox/k8s-client.d.ts +35 -8
  433. package/dist/sandbox/k8s-client.js +6 -5
  434. package/dist/sandbox/labels.js +1 -0
  435. package/dist/sandbox/liveness.js +3 -1
  436. package/dist/sandbox/mount-plan.d.ts +10 -10
  437. package/dist/sandbox/mount-plan.js +13 -14
  438. package/dist/sandbox/notification-sweep.d.ts +4 -4
  439. package/dist/sandbox/notification-sweep.js +4 -7
  440. package/dist/sandbox/package-identity.d.ts +6 -13
  441. package/dist/sandbox/package-identity.js +46 -28
  442. package/dist/sandbox/reaper.d.ts +10 -10
  443. package/dist/sandbox/reaper.js +4 -6
  444. package/dist/sandbox/sandbox-error.d.ts +2 -9
  445. package/dist/sandbox/sandbox-error.js +21 -8
  446. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  447. package/dist/sandbox/sandbox-step-translate.js +22 -8
  448. package/dist/sandbox/step-sandbox.d.ts +47 -0
  449. package/dist/sandbox/step-sandbox.js +53 -0
  450. package/dist/sandbox/types.d.ts +18 -19
  451. package/dist/sandbox/types.js +1 -1
  452. package/dist/schemas/artifact-manifest.d.ts +4 -4
  453. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  454. package/dist/schemas/file-metadata.js +2 -4
  455. package/dist/schemas/plan-schemas.d.ts +31 -31
  456. package/dist/schemas/run-synthesis.d.ts +95 -26
  457. package/dist/schemas/run-synthesis.js +3 -1
  458. package/dist/schemas/validate-plan.d.ts +4 -4
  459. package/dist/schemas/validate-plan.js +17 -5
  460. package/dist/schemas/workflow-state.d.ts +19 -19
  461. package/dist/schemas/workflow-state.js +2 -2
  462. package/dist/state/active-turns.d.ts +36 -0
  463. package/dist/state/active-turns.js +67 -0
  464. package/dist/state/analyses-metrics.d.ts +8 -8
  465. package/dist/state/analyses-metrics.js +4 -4
  466. package/dist/state/analyses.d.ts +0 -14
  467. package/dist/state/analyses.js +0 -32
  468. package/dist/state/artifacts.d.ts +32 -19
  469. package/dist/state/artifacts.js +28 -5
  470. package/dist/state/data-profile.d.ts +2 -2
  471. package/dist/state/db.d.ts +12 -2
  472. package/dist/state/db.js +5 -0
  473. package/dist/state/edit-intents.d.ts +4 -0
  474. package/dist/state/edit-intents.js +71 -0
  475. package/dist/state/index.d.ts +4 -4
  476. package/dist/state/index.js +2 -2
  477. package/dist/state/init.d.ts +2 -1
  478. package/dist/state/init.js +5 -2
  479. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  480. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  482. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  484. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  486. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  488. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  490. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  492. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  494. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  496. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  498. package/dist/state/migrations/index.js +18 -0
  499. package/dist/state/paused-work.d.ts +52 -0
  500. package/dist/state/paused-work.js +105 -0
  501. package/dist/state/plans.d.ts +27 -8
  502. package/dist/state/plans.js +14 -11
  503. package/dist/state/purge-analysis.d.ts +6 -6
  504. package/dist/state/purge-analysis.js +10 -2
  505. package/dist/state/report-session-state.d.ts +43 -18
  506. package/dist/state/report-session-state.js +43 -4
  507. package/dist/state/report-versions.d.ts +16 -11
  508. package/dist/state/report-versions.js +5 -3
  509. package/dist/state/runs.d.ts +30 -19
  510. package/dist/state/runs.js +43 -51
  511. package/dist/state/schema.d.ts +18 -21
  512. package/dist/state/schema.js +4 -5
  513. package/dist/state/snapshot-parse.d.ts +2 -2
  514. package/dist/state/snapshot-parse.js +14 -8
  515. package/dist/state/step-executions.d.ts +20 -8
  516. package/dist/state/step-executions.js +6 -4
  517. package/dist/state/tool-outputs.d.ts +2 -2
  518. package/dist/state/tool-outputs.js +2 -1
  519. package/dist/state/vector-store.d.ts +16 -16
  520. package/dist/state/vector-store.js +11 -7
  521. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  522. package/dist/tasks/data-profile-absorb.js +21 -16
  523. package/dist/tasks/data-profile-activity.d.ts +5 -5
  524. package/dist/tasks/data-profile-activity.js +5 -5
  525. package/dist/tasks/data-profile-index.d.ts +4 -4
  526. package/dist/tasks/data-profile-index.js +32 -17
  527. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  528. package/dist/tasks/data-profile-resolve.js +88 -62
  529. package/dist/tasks/data-profile.d.ts +40 -31
  530. package/dist/tasks/data-profile.js +138 -95
  531. package/dist/tasks/extract-values.d.ts +26 -79
  532. package/dist/tasks/extract-values.js +48 -108
  533. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  534. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  535. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  536. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  537. package/dist/testing.d.ts +60 -0
  538. package/dist/testing.js +96 -0
  539. package/dist/tools/ad-hoc-router.d.ts +9 -9
  540. package/dist/tools/ad-hoc-router.js +65 -52
  541. package/dist/tools/analysis-invocation.d.ts +7 -0
  542. package/dist/tools/analysis-invocation.js +29 -5
  543. package/dist/tools/approval/contract.d.ts +8 -52
  544. package/dist/tools/approval/contract.js +7 -36
  545. package/dist/tools/approval/gateway.d.ts +27 -28
  546. package/dist/tools/approval/gateway.js +33 -130
  547. package/dist/tools/approval/queries.d.ts +6 -11
  548. package/dist/tools/approval/queries.js +43 -29
  549. package/dist/tools/approval/uuidv7.js +2 -2
  550. package/dist/tools/bio/chembl.d.ts +3 -3
  551. package/dist/tools/bio/chembl.js +10 -0
  552. package/dist/tools/bio/comptox.d.ts +25 -8
  553. package/dist/tools/bio/comptox.js +4 -2
  554. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  555. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  556. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  557. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  558. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  559. package/dist/tools/bio/keys.d.ts +2 -2
  560. package/dist/tools/bio/keys.js +3 -3
  561. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  562. package/dist/tools/bio/lookup-annotation.js +3 -0
  563. package/dist/tools/bio/opentargets.d.ts +1 -1
  564. package/dist/tools/bio/opentargets.js +6 -0
  565. package/dist/tools/bio/pubchem.d.ts +2 -2
  566. package/dist/tools/bio/pubchem.js +6 -0
  567. package/dist/tools/bio/pubmed.d.ts +26 -16
  568. package/dist/tools/bio/pubmed.js +9 -3
  569. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  570. package/dist/tools/bio/search-clinical-trials.js +5 -1
  571. package/dist/tools/bio/search-faers.d.ts +2 -2
  572. package/dist/tools/bio/search-faers.js +1 -1
  573. package/dist/tools/bio/search-gene.d.ts +2 -2
  574. package/dist/tools/bio/search-gene.js +1 -0
  575. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  576. package/dist/tools/bio/search-geo-datasets.js +5 -5
  577. package/dist/tools/bio/search-interactions.d.ts +1 -1
  578. package/dist/tools/bio/search-patents.d.ts +28 -22
  579. package/dist/tools/bio/search-patents.js +20 -17
  580. package/dist/tools/bio/search-protein.d.ts +2 -2
  581. package/dist/tools/bio/search-protein.js +1 -1
  582. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  583. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  584. package/dist/tools/bio/target-safety.d.ts +8 -8
  585. package/dist/tools/bio/target-safety.js +11 -6
  586. package/dist/tools/capability-data.d.ts +9 -5
  587. package/dist/tools/capability-data.js +2 -1
  588. package/dist/tools/define-tool.d.ts +55 -46
  589. package/dist/tools/define-tool.js +39 -27
  590. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  591. package/dist/tools/display/normalize-echart-spec.js +51 -27
  592. package/dist/tools/display/show-user.d.ts +2 -2
  593. package/dist/tools/display/show-user.js +1 -1
  594. package/dist/tools/execute-analysis.d.ts +19 -10
  595. package/dist/tools/execute-analysis.js +83 -62
  596. package/dist/tools/knowledge/check.d.ts +166 -44
  597. package/dist/tools/knowledge/check.js +5 -3
  598. package/dist/tools/knowledge/client.d.ts +31 -62
  599. package/dist/tools/knowledge/client.js +44 -27
  600. package/dist/tools/knowledge/environment.d.ts +6 -6
  601. package/dist/tools/knowledge/environment.js +18 -7
  602. package/dist/tools/knowledge/index.d.ts +2 -2
  603. package/dist/tools/knowledge/index.js +9 -9
  604. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  605. package/dist/tools/knowledge/local-slots.js +11 -4
  606. package/dist/tools/knowledge/pin.d.ts +2 -2
  607. package/dist/tools/knowledge/recommend.d.ts +20 -45
  608. package/dist/tools/knowledge/recommend.js +27 -19
  609. package/dist/tools/knowledge/situation.d.ts +40 -40
  610. package/dist/tools/knowledge/situation.js +2 -9
  611. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  612. package/dist/tools/knowledge/skeleton.js +10 -11
  613. package/dist/tools/knowledge/template.d.ts +20 -18
  614. package/dist/tools/knowledge/template.js +38 -32
  615. package/dist/tools/lib/alphafold-client.js +2 -1
  616. package/dist/tools/lib/amass-client.d.ts +28 -28
  617. package/dist/tools/lib/amass-client.js +20 -10
  618. package/dist/tools/lib/api-utils.d.ts +13 -3
  619. package/dist/tools/lib/api-utils.js +17 -3
  620. package/dist/tools/lib/bgee-client.d.ts +6 -6
  621. package/dist/tools/lib/bgee-client.js +16 -10
  622. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  623. package/dist/tools/lib/cbioportal-client.js +9 -8
  624. package/dist/tools/lib/chembl-client.d.ts +14 -14
  625. package/dist/tools/lib/chembl-client.js +11 -4
  626. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  628. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  629. package/dist/tools/lib/clinical-trials-client.js +10 -10
  630. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  631. package/dist/tools/lib/clinvar-client.js +6 -6
  632. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  633. package/dist/tools/lib/ctx-ops.js +13 -10
  634. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  635. package/dist/tools/lib/dgidb-client.js +10 -12
  636. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  637. package/dist/tools/lib/ema-client.d.ts +2 -2
  638. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  639. package/dist/tools/lib/ensembl-client.js +5 -4
  640. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  641. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  642. package/dist/tools/lib/html-text.d.ts +6 -0
  643. package/dist/tools/lib/html-text.js +9 -0
  644. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  645. package/dist/tools/lib/identifier-resolver.js +7 -3
  646. package/dist/tools/lib/impc-client.d.ts +8 -8
  647. package/dist/tools/lib/impc-client.js +46 -35
  648. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  649. package/dist/tools/lib/iuphar-client.js +7 -16
  650. package/dist/tools/lib/monarch-client.d.ts +4 -4
  651. package/dist/tools/lib/openfda-client.d.ts +22 -22
  652. package/dist/tools/lib/openfda-client.js +23 -22
  653. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  654. package/dist/tools/lib/pathway-client.d.ts +4 -4
  655. package/dist/tools/lib/pathway-client.js +15 -19
  656. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  657. package/dist/tools/lib/pharmgkb-client.js +1 -1
  658. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  659. package/dist/tools/lib/protein-family-modality.js +0 -2
  660. package/dist/tools/lib/protein-family-normalize.js +7 -0
  661. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  662. package/dist/tools/lib/pubchem-client.js +1 -0
  663. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  664. package/dist/tools/lib/pubchem-ops.js +8 -0
  665. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  666. package/dist/tools/lib/pubmed-client.js +1 -1
  667. package/dist/tools/lib/string-client.d.ts +6 -6
  668. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  669. package/dist/tools/lib/uniprot-client.js +5 -1
  670. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  671. package/dist/tools/memory/update-working-memory.js +21 -3
  672. package/dist/tools/read-tool-output.js +8 -2
  673. package/dist/tools/registry.d.ts +2 -2
  674. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  675. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  676. package/dist/tools/report-session/derive-table.d.ts +19 -59
  677. package/dist/tools/report-session/derive-table.js +120 -122
  678. package/dist/tools/report-session/examine-page.d.ts +6 -6
  679. package/dist/tools/report-session/examine-page.js +14 -12
  680. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  681. package/dist/tools/report-session/list-artifacts.js +5 -5
  682. package/dist/tools/report-session/page-faults.d.ts +6 -6
  683. package/dist/tools/report-session/page-faults.js +3 -1
  684. package/dist/tools/report-session/preview-report.d.ts +4 -3
  685. package/dist/tools/report-session/preview-report.js +26 -7
  686. package/dist/tools/report-session/record-version.d.ts +9 -4
  687. package/dist/tools/report-session/record-version.js +16 -9
  688. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  689. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  690. package/dist/tools/research/generate-analogy-report.js +80 -76
  691. package/dist/tools/research/generate-plan.d.ts +16 -16
  692. package/dist/tools/research/generate-plan.js +410 -374
  693. package/dist/tools/research/guarded-address.js +3 -2
  694. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  695. package/dist/tools/research/inspect-data-profile.js +26 -25
  696. package/dist/tools/research/inspect-run.d.ts +54 -27
  697. package/dist/tools/research/inspect-run.js +50 -40
  698. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  699. package/dist/tools/research/literature-reviewer.js +29 -28
  700. package/dist/tools/research/search-arxiv.d.ts +1 -1
  701. package/dist/tools/research/search-arxiv.js +1 -1
  702. package/dist/tools/research/search-github-repos.d.ts +10 -7
  703. package/dist/tools/research/search-github-repos.js +25 -22
  704. package/dist/tools/research/search-semantic-scholar.js +1 -1
  705. package/dist/tools/research/searxng-engine.d.ts +2 -2
  706. package/dist/tools/research/searxng-engine.js +6 -4
  707. package/dist/tools/research/web-fetch.d.ts +24 -21
  708. package/dist/tools/research/web-fetch.js +65 -74
  709. package/dist/tools/research/web-search.d.ts +26 -17
  710. package/dist/tools/research/web-search.js +26 -21
  711. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  712. package/dist/tools/sandbox/link-packages.js +11 -8
  713. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  714. package/dist/tools/sandbox/list-available-packages.js +31 -25
  715. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  716. package/dist/tools/sandbox/list-available-refs.js +61 -36
  717. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  718. package/dist/tools/sandbox/report-blocker.js +23 -73
  719. package/dist/tools/sandbox/skills.d.ts +16 -12
  720. package/dist/tools/sandbox/skills.js +16 -12
  721. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  722. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  723. package/dist/tools/start-report-session.d.ts +13 -5
  724. package/dist/tools/start-report-session.js +35 -8
  725. package/dist/tools/terminal-text.d.ts +5 -2
  726. package/dist/tools/terminal-text.js +35 -3
  727. package/dist/tools/workspace/decision-record.d.ts +4 -4
  728. package/dist/tools/workspace/decision-record.js +23 -13
  729. package/dist/tools/workspace/edit-file.d.ts +59 -20
  730. package/dist/tools/workspace/edit-file.js +81 -16
  731. package/dist/tools/workspace/execute-command.d.ts +15 -13
  732. package/dist/tools/workspace/execute-command.js +11 -9
  733. package/dist/tools/workspace/file-stat.d.ts +6 -3
  734. package/dist/tools/workspace/grep.d.ts +10 -7
  735. package/dist/tools/workspace/grep.js +9 -3
  736. package/dist/tools/workspace/list-files.d.ts +6 -3
  737. package/dist/tools/workspace/mutator.d.ts +28 -15
  738. package/dist/tools/workspace/mutator.js +107 -53
  739. package/dist/tools/workspace/read-file.d.ts +8 -5
  740. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  741. package/dist/tools/workspace/result-bounds.js +4 -2
  742. package/dist/tools/workspace/run-exec.d.ts +2 -2
  743. package/dist/tools/workspace/run-exec.js +3 -3
  744. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  745. package/dist/tools/workspace/scan-inputs.js +17 -5
  746. package/dist/tools/workspace/show-file.d.ts +1 -1
  747. package/dist/tools/workspace/show-file.js +2 -1
  748. package/dist/tools/workspace/show-plan.d.ts +8 -5
  749. package/dist/tools/workspace/show-plan.js +9 -8
  750. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  751. package/dist/tools/workspace/workspace-search.js +27 -14
  752. package/dist/tools/workspace/write-file.d.ts +9 -7
  753. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  754. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  755. package/dist/workflows/execute-analysis.d.ts +46 -62
  756. package/dist/workflows/execute-analysis.js +137 -219
  757. package/dist/workflows/pause.d.ts +71 -0
  758. package/dist/workflows/pause.js +173 -0
  759. package/dist/workflows/sandbox-step.d.ts +38 -61
  760. package/dist/workflows/sandbox-step.js +99 -106
  761. package/dist/workflows/test/sql-writes.d.ts +21 -0
  762. package/dist/workflows/test/sql-writes.js +36 -0
  763. package/dist/workspace/filesystem.d.ts +6 -6
  764. package/dist/workspace/filesystem.js +10 -8
  765. package/dist/workspace/paths.d.ts +1 -1
  766. package/dist/workspace/paths.js +15 -4
  767. package/dist/workspace/search-config.d.ts +2 -2
  768. package/dist/workspace/search-config.js +1 -1
  769. package/package.json +21 -22
  770. package/dist/loop/call-guard.d.ts +0 -50
  771. package/dist/loop/call-guard.js +0 -90
  772. package/dist/loop/continue-agent.d.ts +0 -40
  773. package/dist/loop/continue-agent.js +0 -38
  774. package/dist/loop/genai-spans.d.ts +0 -47
  775. package/dist/loop/genai-spans.js +0 -134
  776. package/dist/loop/run-agent.d.ts +0 -245
  777. package/dist/loop/run-agent.js +0 -1124
  778. package/dist/loop/run-step.d.ts +0 -29
  779. package/dist/loop/run-step.js +0 -34
  780. package/dist/loop/run-to-terminal.d.ts +0 -66
  781. package/dist/loop/run-to-terminal.js +0 -93
  782. package/dist/loop/tool-mask.d.ts +0 -23
  783. package/dist/loop/tool-mask.js +0 -46
  784. package/dist/providers/streaming-chat.d.ts +0 -32
  785. package/dist/providers/streaming-chat.js +0 -91
  786. package/dist/tasks/derive-table-exec.d.ts +0 -54
  787. package/dist/tasks/derive-table-exec.js +0 -86
  788. package/dist/workflows/suspension.d.ts +0 -32
  789. package/dist/workflows/suspension.js +0 -38
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { randomUUID } from "node:crypto";
6
6
  import { err, ok, okAsync, ResultAsync } from "neverthrow";
7
+ import { errorNameOf } from "../lib/thrown.js";
7
8
  import { z } from "zod";
8
9
  import { capabilityDataRequirement } from "../agents/sandbox-catalog.js";
9
10
  import { SANDBOX_AGENT_META } from "../agents/sandbox/index.js";
@@ -17,13 +18,15 @@ import { buildRunCardData } from "../memory/card-builders.js";
17
18
  import { formatQuery, parseQuery } from "../sandbox/package-identity.js";
18
19
  import { AnalysisPlanSchema } from "../schemas/workflow-state.js";
19
20
  import { validatePlan } from "../schemas/validate-plan.js";
20
- import { RunDedupCollisionError, insertRun, loadPlan, queryActiveRun, queryNewestPlanRun, reserveRunById, suspendAnalysis, updateRunStatus, upsertPlan, } from "../state/index.js";
21
+ import { RunDedupCollisionError, insertRun, loadPlan, queryActiveRun, queryNewestPlanRun, queryRun, reserveRunById, updateRunStatus, upsertPlan, } from "../state/index.js";
21
22
  import { routeAdHocRequest } from "./ad-hoc-router.js";
22
- import { adHocPlanId, adHocRunId } from "./analysis-invocation.js";
23
+ import { adHocPlanId, adHocRunId, callRunId, durableCallKey } from "./analysis-invocation.js";
23
24
  import { defineTool } from "./define-tool.js";
24
25
  import { queryPackages, readInventorySections } from "./sandbox/list-available-packages.js";
25
26
  import { callExtendAnalysisFarm } from "./sandbox/link-packages.js";
26
- const planIdSchema = z.string().regex(/^pln-[a-f0-9]{8}$/, "planId must be a pln-<8hex> value");
27
+ import { PLAN_ID_RE } from "../contracts/schemas/chat-parts.js";
28
+ import { collapseWhitespace } from "../lib/text.js";
29
+ const planIdSchema = z.string().regex(PLAN_ID_RE, "planId must be a pln-<8hex> value");
27
30
  const inputSchema = z
28
31
  .object({
29
32
  mode: z
@@ -67,7 +70,7 @@ export class PlanValidationError extends Error {
67
70
  }
68
71
  }
69
72
  function isDedupCollision(err) {
70
- return err instanceof RunDedupCollisionError || (err instanceof Error && err.name === "RunDedupCollisionError");
73
+ return err instanceof RunDedupCollisionError || errorNameOf(err) === "RunDedupCollisionError";
71
74
  }
72
75
  /**
73
76
  * A pool miss at the pre-launch link pass. The message names the missing
@@ -229,7 +232,7 @@ async function linkPlanPackages(extendAnalysisFarm, analysisId, planId, plan) {
229
232
  const collisions = outcomes
230
233
  .filter((o) => o.kind === "collision")
231
234
  .map((o) => `${o.spelling} — two store directories claim it, ${o.storeDirs[0]} and ${o.storeDirs[1]}` +
232
- `${o.detail === undefined ? "" : ` (${o.detail})`}` +
235
+ (o.detail === undefined ? "" : ` (${o.detail})`) +
233
236
  `; when the two directories are one spelling in two tracks, name the track in the plan, as ` +
234
237
  `${formatQuery({ spelling: o.spelling, track: "python" })} or ${formatQuery({ spelling: o.spelling, track: "r" })}`);
235
238
  if (missing.length > 0 || collisions.length > 0) {
@@ -265,14 +268,13 @@ function workflowInput(planId, plan, args) {
265
268
  planId,
266
269
  planSummary: planSummary(plan),
267
270
  threadId: args.threadId,
268
- steps: plan.steps.map((step) => ({ id: step.id, depends_on: step.depends_on ?? [] })),
271
+ steps: plan.steps.map((step) => ({ id: step.id, depends_on: step.depends_on })),
269
272
  planStepById: Object.fromEntries(plan.steps.map((step) => [step.id, step])),
270
273
  agentByStepId: Object.fromEntries(plan.steps.map((step) => [step.id, step.agent ?? "unknown"])),
271
274
  resourcesByStepId: args.resourcesByStepId,
272
- timeoutByStepId: Object.fromEntries(plan.steps.filter((step) => step.timeout !== undefined).map((step) => [step.id, step.timeout])),
275
+ timeoutByStepId: Object.fromEntries(plan.steps.flatMap((step) => (step.timeout === undefined ? [] : [[step.id, step.timeout]]))),
273
276
  budget: args.budget,
274
277
  runSession: args.runSession,
275
- ownsMandate: args.ownsMandate,
276
278
  synthesisEnabled: args.synthesisEnabled,
277
279
  };
278
280
  }
@@ -293,7 +295,7 @@ function validateStoredPlan(raw, planId) {
293
295
  return parsed.value;
294
296
  }
295
297
  function adHocTitle(request) {
296
- const compact = request.trim().replace(/\s+/g, " ");
298
+ const compact = collapseWhitespace(request);
297
299
  return compact.length <= 80 ? compact : `${compact.slice(0, 77)}…`;
298
300
  }
299
301
  /** How a dropped entry reads to the step agent, in the terms of its own reason. */
@@ -349,7 +351,7 @@ export function buildAdHocPlan(request, route, createdAt = new Date().toISOStrin
349
351
  status: "pending",
350
352
  resources: route.resources,
351
353
  agent: route.agentId,
352
- ...(route.capability ? { capability: route.capability } : {}),
354
+ capability: route.capability,
353
355
  maxSteps: meta?.defaultMaxSteps ?? DEFAULT_SANDBOX_MAX_STEPS,
354
356
  },
355
357
  ],
@@ -369,9 +371,9 @@ function adHocPackageResolver(deps, analysisId) {
369
371
  if (!deps.farmLockFile && !deps.imagePackagesFile && !deps.readPoolInventory)
370
372
  return undefined;
371
373
  const inventory = {
372
- ...(deps.farmLockFile === undefined ? {} : { farmLockFile: deps.farmLockFile }),
373
- ...(deps.imagePackagesFile === undefined ? {} : { imagePackagesFile: deps.imagePackagesFile }),
374
- ...(deps.readPoolInventory === undefined ? {} : { readPoolInventory: deps.readPoolInventory }),
374
+ farmLockFile: deps.farmLockFile,
375
+ imagePackagesFile: deps.imagePackagesFile,
376
+ readPoolInventory: deps.readPoolInventory,
375
377
  };
376
378
  return async (names) => {
377
379
  const read = await readInventorySections(inventory, analysisId);
@@ -394,14 +396,14 @@ async function persistedAdHocPlan(deps, args) {
394
396
  pool: deps.pool,
395
397
  resourcePolicy: deps.resourcePolicy,
396
398
  logger: deps.logger,
397
- ...(resolvePackages ? { resolvePackages } : {}),
398
- ...(deps.usageRecorder ? { usageRecorder: deps.usageRecorder } : {}),
399
+ resolvePackages,
400
+ usageRecorder: deps.usageRecorder,
399
401
  }, {
400
402
  analysisId: args.analysisId,
401
403
  request: args.request,
402
404
  session: args.ctx.session,
403
405
  signal: args.ctx.signal,
404
- ...(args.ctx.turnUsage ? { turnUsage: args.ctx.turnUsage } : {}),
406
+ turnUsage: args.ctx.turnUsage,
405
407
  invocationId: args.ctx.invocationId,
406
408
  });
407
409
  const candidate = buildAdHocPlan(args.request, route);
@@ -414,6 +416,10 @@ async function persistedAdHocPlan(deps, args) {
414
416
  /**
415
417
  * The half of a launch that the plan mode and the ad hoc mode share: the link pass, the reservation,
416
418
  * the authorization, and the workflow start. It gives each outcome as a `Result`.
419
+ *
420
+ * A launch of the run of this call always authorizes and starts, also when its row exists. A rerun of
421
+ * the call can come after the reservation and before the start, and the launcher starts one workflow for
422
+ * each run id. A rerun after the start mints a second mandate that no run uses.
417
423
  */
418
424
  async function launchReservedRun(deps, args) {
419
425
  const logger = (deps.logger ?? createNoopLogger()).named("execute-analysis-tool");
@@ -438,9 +444,10 @@ async function launchReservedRun(deps, args) {
438
444
  const reservation = await args.reserve({ analysisId, threadId });
439
445
  if (reservation.isErr())
440
446
  return err(reservation.error);
441
- if (!reservation.value.started)
447
+ // A different run holds the slot of the plan, or the view of the caller is stale: this call starts nothing.
448
+ if (reservation.value.runId !== args.runId)
442
449
  return reservation;
443
- const runId = reservation.value.runId;
450
+ const runId = args.runId;
444
451
  const authorized = await passGate("RunAuthorizer.authorize", deps.runAuthorizer.authorize({
445
452
  auth: session.auth,
446
453
  scope: session.scope,
@@ -448,25 +455,17 @@ async function launchReservedRun(deps, args) {
448
455
  frame: { runId },
449
456
  }));
450
457
  if (authorized.isErr()) {
451
- // The refusal ends the run before a workflow exists, thus the
452
- // reserved row must not stay `running`.
458
+ // The refusal ends the run before a workflow exists, thus the reserved row must not stay `running`. No work
459
+ // exists yet, thus a refusal with the suspend flag does not pause, and it marks no analysis.
453
460
  const { kind, reason } = authorized.error;
454
- if (kind === "suspended") {
455
- await updateRunStatus(deps.pool, runId, "suspended_insufficient_funds", reason).match(() => { }, () => { });
456
- const suspension = await suspendAnalysis(deps.pool, analysisId);
457
- if (suspension.isErr())
458
- return err({ type: "store_failed", cause: suspension.error });
459
- return err({ type: "suspended", reason });
460
- }
461
461
  await updateRunStatus(deps.pool, runId, "failed", reason).match(() => { }, () => { });
462
- return err({ type: "not_authorized", reason });
462
+ return err(kind === "suspended" ? { type: "suspended", reason } : { type: "not_authorized", reason });
463
463
  }
464
- const authorization = authorized.value;
464
+ const runSession = authorized.value;
465
465
  const wfInput = workflowInput(planId, plan, {
466
466
  analysisId,
467
467
  threadId,
468
- runSession: authorization.runSession,
469
- ownsMandate: authorization.ownsMandate,
468
+ runSession,
470
469
  budget: deps.resourcePolicy?.budget,
471
470
  synthesisEnabled: args.mode === "plan",
472
471
  resourcesByStepId: resources.value,
@@ -475,7 +474,7 @@ async function launchReservedRun(deps, args) {
475
474
  await deps.runLauncher.launch(deps.executeAnalysisWorkflow, { workflowId: runId }, wfInput);
476
475
  }
477
476
  catch (cause) {
478
- await deliverNotice(logger, "RunAuthorizer.revoke", deps.runAuthorizer.revoke(authorization, "workflow-start-failed"));
477
+ await deliverNotice(logger, "RunAuthorizer.revoke", deps.runAuthorizer.revoke(runSession, "workflow-start-failed"));
479
478
  // A failed write leaves the row `running` with no workflow. The boot repair (`reconcileOrphanedRuns`) fails it.
480
479
  await updateRunStatus(deps.pool, runId, "failed", "workflow start failed").match(() => { }, (error) => logger.warn("the failed status of a run whose start failed was not written", { runId, ...logger.errorFields(error) }));
481
480
  return err({ type: "launch_failed", cause });
@@ -496,29 +495,34 @@ function lockPlanLaunch(client, planId) {
496
495
  return tryQuery("execute-analysis.lockPlanLaunch", () => client.query("SELECT pg_advisory_xact_lock(hashtext($1))", [`plan-launch:${planId}`])).map(() => undefined);
497
496
  }
498
497
  /**
499
- * Reserve a fresh run for a plan under the lock of the plan, thus the reservations of one plan occur one
500
- * after the other. A caller with a `newestRunId` reserves nothing when the newest run of the plan is a
501
- * different run. The new row starts after the newest start, thus it is the newest run of the plan. A
502
- * concurrent launch of the same plan can hold the active-plan slot, and its run is the answer.
498
+ * Reserve the run `runId` for a plan under the lock of the plan, thus the reservations of one plan occur
499
+ * one after the other. A row of `runId` that exists is the reservation of a first attempt of the same
500
+ * call. A caller with a `newestRunId` reserves nothing when the newest run of the plan is a different run.
501
+ * The new row starts after the newest start, thus it is the newest run of the plan. A concurrent launch of
502
+ * the same plan can hold the active-plan slot, and its run is the answer.
503
503
  */
504
504
  async function reservePlanRun(deps, args) {
505
- const runId = randomUUID();
505
+ const { runId } = args;
506
506
  try {
507
507
  const reserved = await withTransaction(deps.pool, "execute-analysis.reservePlanRun", (client) => lockPlanLaunch(client, args.planId)
508
- .andThen(() => queryNewestPlanRun(client, { analysisId: args.analysisId, planId: args.planId }))
509
- .andThen((newest) => {
510
- const stale = args.newestRunId === undefined ? null : staleViewOf(newest?.runId ?? null, args.newestRunId);
511
- if (stale)
512
- return okAsync({ type: "stale", view: stale });
513
- const startedAt = newest === null ? undefined : new Date(Math.max(Date.now(), Date.parse(newest.startedAt) + 1)).toISOString();
514
- return insertRun(client, {
515
- runId,
516
- analysisId: args.analysisId,
517
- threadId: args.threadId,
518
- workflowName: "executeAnalysis",
519
- planId: args.planId,
520
- ...(startedAt === undefined ? {} : { startedAt }),
521
- }).map(() => ({ type: "inserted" }));
508
+ .andThen(() => queryRun(client, runId))
509
+ .andThen((own) => {
510
+ if (own !== null)
511
+ return okAsync({ type: "reserved" });
512
+ return queryNewestPlanRun(client, { analysisId: args.analysisId, planId: args.planId }).andThen((newest) => {
513
+ const stale = args.newestRunId === undefined ? null : staleViewOf(newest?.runId ?? null, args.newestRunId);
514
+ if (stale)
515
+ return okAsync({ type: "stale", view: stale });
516
+ const startedAt = newest === null ? undefined : new Date(Math.max(Date.now(), Date.parse(newest.startedAt) + 1)).toISOString();
517
+ return insertRun(client, {
518
+ runId,
519
+ analysisId: args.analysisId,
520
+ threadId: args.threadId,
521
+ workflowName: "executeAnalysis",
522
+ planId: args.planId,
523
+ startedAt,
524
+ }).map(() => ({ type: "reserved" }));
525
+ });
522
526
  }));
523
527
  if (reserved.isErr())
524
528
  return err({ type: "store_failed", cause: reserved.error });
@@ -565,6 +569,7 @@ async function reserveAdHocRun(deps, args) {
565
569
  async function launchStoredPlan(deps, input) {
566
570
  const { session, planId, newestRunId } = input;
567
571
  const analysisId = session.scope.analysisId;
572
+ const runId = input.runId ?? randomUUID();
568
573
  const raw = await loadPlan(deps.pool, planId, { analysisId });
569
574
  if (raw.isErr())
570
575
  return err({ type: "store_failed", cause: raw.error });
@@ -584,14 +589,21 @@ async function launchStoredPlan(deps, input) {
584
589
  const active = await queryActiveRun(deps.pool, analysisId, planId);
585
590
  if (active.isErr())
586
591
  return err({ type: "store_failed", cause: active.error });
587
- if (active.value)
588
- return ok({ runId: active.value.runId, started: false });
592
+ if (active.value && active.value.runId !== runId) {
593
+ // A rerun of a call whose run ended keeps its run, also when a later launch holds the slot.
594
+ const own = await queryRun(deps.pool, runId);
595
+ if (own.isErr())
596
+ return err({ type: "store_failed", cause: own.error });
597
+ if (own.value === null)
598
+ return ok({ runId: active.value.runId, started: false });
599
+ }
589
600
  return launchReservedRun(deps, {
590
601
  session,
591
602
  planId,
592
603
  plan: plan.value,
593
604
  mode: "plan",
594
- reserve: (frame) => reservePlanRun(deps, { ...frame, planId, ...(newestRunId === undefined ? {} : { newestRunId }) }),
605
+ runId,
606
+ reserve: (frame) => reservePlanRun(deps, { ...frame, planId, runId, newestRunId }),
595
607
  });
596
608
  }
597
609
  /**
@@ -645,20 +657,28 @@ export function createExecuteAnalysisTool(deps) {
645
657
  // running is a different event from an ad hoc request being routed.
646
658
  describeCall: (input) => (input.mode === "plan" ? `plan ${input.planId ?? ""}` : `ad hoc: ${input.request ?? ""}`),
647
659
  execute: async (input, ctx) => {
648
- if (ctx.session.scope.kind !== "analysis")
649
- throw new Error("execute_analysis requires an analysis-scoped session");
650
- if (!ctx.session.auth)
651
- throw new Error("execute_analysis: session is missing its auth capability");
652
660
  const analysisId = ctx.session.scope.analysisId;
653
- const planId = input.mode === "plan" ? input.planId : adHocPlanId(analysisId, ctx.invocationId);
661
+ let planId;
662
+ if (input.mode === "plan") {
663
+ if (input.planId === undefined)
664
+ throw new Error("plan mode requires planId");
665
+ planId = input.planId;
666
+ }
667
+ else {
668
+ planId = adHocPlanId(analysisId, ctx.invocationId);
669
+ }
654
670
  const emitRunCard = async (runId) => {
655
671
  const card = await buildRunCardData(deps.pool, { planId, analysisId, runId }).unwrapOr(null);
656
672
  if (card)
657
673
  await ctx.emit({ type: "data-run-card", source: ctx.session.provenance, data: card });
658
674
  };
659
675
  const launch = async () => {
660
- if (input.mode === "plan")
661
- return launchPlanRun(deps, { session: ctx.session, planId });
676
+ if (input.mode === "plan") {
677
+ const callKey = durableCallKey(ctx.invocationId);
678
+ return launchPlanRun(deps, { session: ctx.session, planId, runId: callKey === undefined ? undefined : callRunId(callKey) });
679
+ }
680
+ if (input.request === undefined)
681
+ throw new Error("adhoc mode requires request");
662
682
  const plan = await persistedAdHocPlan(deps, { analysisId, request: input.request, ctx, planId });
663
683
  const runId = adHocRunId(analysisId, ctx.invocationId);
664
684
  return launchReservedRun(deps, {
@@ -666,6 +686,7 @@ export function createExecuteAnalysisTool(deps) {
666
686
  planId,
667
687
  plan,
668
688
  mode: "adhoc",
689
+ runId,
669
690
  reserve: (frame) => reserveAdHocRun(deps, { ...frame, planId, runId }),
670
691
  });
671
692
  };
@@ -673,7 +694,7 @@ export function createExecuteAnalysisTool(deps) {
673
694
  if (launched.isErr()) {
674
695
  const refusal = launched.error;
675
696
  if (refusal.type === "suspended")
676
- return err({ error: `The analysis is suspended: ${refusal.reason}`, retryable: false });
697
+ return err({ error: `The host refused the run: ${refusal.reason}`, retryable: false });
677
698
  if (refusal.type === "not_authorized")
678
699
  return err({ error: `The run was not authorized: ${refusal.reason}`, retryable: false });
679
700
  return throwLaunchRefusal(refusal, planId);
@@ -6,55 +6,177 @@
6
6
  * typed refusal and never reaches the service. A small model that cannot
7
7
  * satisfy a finding otherwise rephrases the step until the plan times out.
8
8
  */
9
+ import { z } from "zod";
10
+ import { type Tool } from "../define-tool.js";
9
11
  import type { CheckResponse, KnowledgeClient, KnowledgeRejected, KnowledgeSnapshotMismatch, KnowledgeUnavailable } from "./client.js";
10
12
  import type { SnapshotPin } from "./pin.js";
11
- export interface KnowledgeCheckDeps {
13
+ export type KnowledgeCheckDeps = {
12
14
  readonly client: KnowledgeClient;
13
15
  /** The release the plan pinned on its first recommend answer. The check sends it, thus another release refuses the call. */
14
16
  readonly pin?: SnapshotPin;
15
- }
17
+ };
16
18
  export type KnowledgeCheckOutput = CheckResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch;
17
19
  /** The checks one plan generation may run. Two is a draft and one revision; the third is slack. */
18
20
  export declare const CHECK_CALL_LIMIT = 3;
19
- export declare function createKnowledgeCheckTool(deps: KnowledgeCheckDeps): import("../define-tool.js").Tool<{
20
- question: "enrichment" | "differential_expression" | "qc" | "full_plan" | "tf_activity" | "deconvolution" | "coexpression" | "clustering" | "survival" | "signature_scoring";
21
- modality: "bulk_rna_seq";
22
- data_state: "fastq" | "counts" | "tpm_or_fpkm" | "log_normalized";
23
- organism: "other" | "human" | "mouse";
24
- n_groups: number;
25
- n_per_group_min: number;
26
- n_per_group_max: number;
27
- paired: boolean;
28
- batch: "none" | "known_balanced" | "known_confounded" | "known_unbalanced" | "suspected";
29
- steps: {
30
- step_type: "normalize" | "enrichment" | "differential_expression" | "report" | "tf_activity" | "deconvolution" | "coexpression" | "clustering" | "survival" | "signature_scoring" | "variance_partition" | "pathway_activity" | "transcript_level" | "annotation" | "cohort_assembly" | "qc_sample_structure" | "filter_low_counts" | "model_design" | "shrink_lfc" | "multiple_testing";
31
- method: string;
32
- method_id?: string | undefined;
33
- package?: string | undefined;
34
- parameters?: {
35
- name: string;
36
- value: string | number | boolean;
37
- }[] | undefined;
38
- outcome?: string | undefined;
39
- }[];
40
- count_source?: "unknown" | "salmon" | "kallisto" | "star_featurecounts" | "rsem" | undefined;
41
- import_state?: "unknown" | "quantifications" | "estimated_counts_with_lengths" | "corrected_counts" | "integer_counts" | undefined;
42
- n_samples?: number | undefined;
43
- n_events?: number | undefined;
44
- blocking_factor?: "other" | "individual" | "cell_line" | "litter" | "site" | "pair" | null | undefined;
45
- block_structure?: "crossed" | "nested" | undefined;
46
- covariates?: ("other" | "technical" | "sex" | "age" | "clinical")[] | undefined;
47
- n_timepoints?: number | null | undefined;
48
- continuous_predictor?: "other" | "score" | "time" | "age" | "dose" | null | undefined;
49
- technical_replicates?: boolean | undefined;
50
- sample_exclusions?: boolean | undefined;
51
- feature_level?: "gene" | "exon" | "transcript" | undefined;
52
- library_type?: "unknown" | "total" | "polyA" | "three_prime" | undefined;
53
- strandedness?: "unknown" | "verified" | "declared_unverified" | undefined;
54
- interaction?: boolean | undefined;
55
- classifier?: boolean | undefined;
56
- extra_analyses?: ("tf_activity" | "deconvolution" | "coexpression" | "clustering" | "survival" | "signature_scoring" | "variance_partition" | "pathway_activity" | "transcript_level" | "annotation")[] | undefined;
57
- preferred_language?: "R" | "python" | undefined;
58
- enrichment_input?: "ranked_list" | "gene_list" | "sample_scores" | undefined;
59
- quality_flags?: ("low_depth_sample" | "outlier_sample" | "sample_identity_doubt" | "high_duplication" | "degraded_rna")[] | undefined;
60
- }, KnowledgeCheckOutput>;
21
+ declare const KnowledgeCheckInputSchema: z.ZodObject<{
22
+ question: z.ZodEnum<{
23
+ clustering: "clustering";
24
+ coexpression: "coexpression";
25
+ deconvolution: "deconvolution";
26
+ differential_expression: "differential_expression";
27
+ enrichment: "enrichment";
28
+ full_plan: "full_plan";
29
+ qc: "qc";
30
+ signature_scoring: "signature_scoring";
31
+ survival: "survival";
32
+ tf_activity: "tf_activity";
33
+ }>;
34
+ modality: z.ZodLiteral<"bulk_rna_seq">;
35
+ data_state: z.ZodEnum<{
36
+ counts: "counts";
37
+ fastq: "fastq";
38
+ log_normalized: "log_normalized";
39
+ tpm_or_fpkm: "tpm_or_fpkm";
40
+ }>;
41
+ count_source: z.ZodOptional<z.ZodEnum<{
42
+ kallisto: "kallisto";
43
+ rsem: "rsem";
44
+ salmon: "salmon";
45
+ star_featurecounts: "star_featurecounts";
46
+ unknown: "unknown";
47
+ }>>;
48
+ import_state: z.ZodOptional<z.ZodEnum<{
49
+ corrected_counts: "corrected_counts";
50
+ estimated_counts_with_lengths: "estimated_counts_with_lengths";
51
+ integer_counts: "integer_counts";
52
+ quantifications: "quantifications";
53
+ unknown: "unknown";
54
+ }>>;
55
+ organism: z.ZodEnum<{
56
+ human: "human";
57
+ mouse: "mouse";
58
+ other: "other";
59
+ }>;
60
+ n_groups: z.ZodNumber;
61
+ n_per_group_min: z.ZodNumber;
62
+ n_per_group_max: z.ZodNumber;
63
+ n_samples: z.ZodOptional<z.ZodNumber>;
64
+ n_events: z.ZodOptional<z.ZodNumber>;
65
+ paired: z.ZodBoolean;
66
+ blocking_factor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
67
+ cell_line: "cell_line";
68
+ individual: "individual";
69
+ litter: "litter";
70
+ other: "other";
71
+ pair: "pair";
72
+ site: "site";
73
+ }>>>;
74
+ block_structure: z.ZodOptional<z.ZodEnum<{
75
+ crossed: "crossed";
76
+ nested: "nested";
77
+ }>>;
78
+ batch: z.ZodEnum<{
79
+ known_balanced: "known_balanced";
80
+ known_confounded: "known_confounded";
81
+ known_unbalanced: "known_unbalanced";
82
+ none: "none";
83
+ suspected: "suspected";
84
+ }>;
85
+ covariates: z.ZodOptional<z.ZodArray<z.ZodEnum<{
86
+ age: "age";
87
+ clinical: "clinical";
88
+ other: "other";
89
+ sex: "sex";
90
+ technical: "technical";
91
+ }>>>;
92
+ n_timepoints: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
93
+ continuous_predictor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
94
+ age: "age";
95
+ dose: "dose";
96
+ other: "other";
97
+ score: "score";
98
+ time: "time";
99
+ }>>>;
100
+ technical_replicates: z.ZodOptional<z.ZodBoolean>;
101
+ sample_exclusions: z.ZodOptional<z.ZodBoolean>;
102
+ feature_level: z.ZodOptional<z.ZodEnum<{
103
+ exon: "exon";
104
+ gene: "gene";
105
+ transcript: "transcript";
106
+ }>>;
107
+ library_type: z.ZodOptional<z.ZodEnum<{
108
+ polyA: "polyA";
109
+ three_prime: "three_prime";
110
+ total: "total";
111
+ unknown: "unknown";
112
+ }>>;
113
+ strandedness: z.ZodOptional<z.ZodEnum<{
114
+ declared_unverified: "declared_unverified";
115
+ unknown: "unknown";
116
+ verified: "verified";
117
+ }>>;
118
+ interaction: z.ZodOptional<z.ZodBoolean>;
119
+ classifier: z.ZodOptional<z.ZodBoolean>;
120
+ extra_analyses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
121
+ annotation: "annotation";
122
+ clustering: "clustering";
123
+ coexpression: "coexpression";
124
+ deconvolution: "deconvolution";
125
+ pathway_activity: "pathway_activity";
126
+ signature_scoring: "signature_scoring";
127
+ survival: "survival";
128
+ tf_activity: "tf_activity";
129
+ transcript_level: "transcript_level";
130
+ variance_partition: "variance_partition";
131
+ }>>>;
132
+ preferred_language: z.ZodOptional<z.ZodEnum<{
133
+ R: "R";
134
+ python: "python";
135
+ }>>;
136
+ enrichment_input: z.ZodOptional<z.ZodEnum<{
137
+ gene_list: "gene_list";
138
+ ranked_list: "ranked_list";
139
+ sample_scores: "sample_scores";
140
+ }>>;
141
+ quality_flags: z.ZodOptional<z.ZodArray<z.ZodEnum<{
142
+ degraded_rna: "degraded_rna";
143
+ high_duplication: "high_duplication";
144
+ low_depth_sample: "low_depth_sample";
145
+ outlier_sample: "outlier_sample";
146
+ sample_identity_doubt: "sample_identity_doubt";
147
+ }>>>;
148
+ steps: z.ZodArray<z.ZodObject<{
149
+ step_type: z.ZodEnum<{
150
+ annotation: "annotation";
151
+ clustering: "clustering";
152
+ coexpression: "coexpression";
153
+ cohort_assembly: "cohort_assembly";
154
+ deconvolution: "deconvolution";
155
+ differential_expression: "differential_expression";
156
+ enrichment: "enrichment";
157
+ filter_low_counts: "filter_low_counts";
158
+ model_design: "model_design";
159
+ multiple_testing: "multiple_testing";
160
+ normalize: "normalize";
161
+ pathway_activity: "pathway_activity";
162
+ qc_sample_structure: "qc_sample_structure";
163
+ report: "report";
164
+ shrink_lfc: "shrink_lfc";
165
+ signature_scoring: "signature_scoring";
166
+ survival: "survival";
167
+ tf_activity: "tf_activity";
168
+ transcript_level: "transcript_level";
169
+ variance_partition: "variance_partition";
170
+ }>;
171
+ method: z.ZodString;
172
+ method_id: z.ZodOptional<z.ZodString>;
173
+ package: z.ZodOptional<z.ZodString>;
174
+ parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
175
+ name: z.ZodString;
176
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
177
+ }, z.core.$strip>>>;
178
+ outcome: z.ZodOptional<z.ZodString>;
179
+ }, z.core.$strip>>;
180
+ }, z.core.$strip>;
181
+ export declare function createKnowledgeCheckTool(deps: KnowledgeCheckDeps): Tool<z.infer<typeof KnowledgeCheckInputSchema>, KnowledgeCheckOutput>;
182
+ export {};
@@ -40,6 +40,7 @@ const DraftedStepSchema = z.object({
40
40
  method: z.string().min(1).describe("The method as the step names it, for example `DESeq2 Wald test` or `edgeR quasi-likelihood`."),
41
41
  method_id: z
42
42
  .string()
43
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- the recommend-answer method id shape: M- plus four digits.
43
44
  .regex(/^M-\d{4}$/)
44
45
  .optional()
45
46
  .describe("The `method.id` of the step in the `knowledge_recommend` answer (for example `M-0001`), copied when the step uses that method. With it the check matches the method exactly and ignores the wording."),
@@ -59,6 +60,9 @@ function describeFindings(result) {
59
60
  const notAssessed = result.not_assessed?.length ?? 0;
60
61
  return notAssessed > 0 ? `${findings}, ${notAssessed} not assessed` : findings;
61
62
  }
63
+ const KnowledgeCheckInputSchema = SituationFieldsSchema.extend({
64
+ steps: z.array(DraftedStepSchema).min(1).describe("The drafted method steps, one entry per step type."),
65
+ });
62
66
  export function createKnowledgeCheckTool(deps) {
63
67
  let calls = 0;
64
68
  return defineTool({
@@ -70,9 +74,7 @@ export function createKnowledgeCheckTool(deps) {
70
74
  "`not_assessed` lists the steps that no rule covers; the check neither passed nor failed them, so submit them as drafted. " +
71
75
  "`match: unavailable` means the service did not answer, and `match: snapshot_mismatch` means the service moved to another release than the one your recommend answer came from; in both cases submit the draft as it is. " +
72
76
  `The host accepts ${CHECK_CALL_LIMIT} checks per plan; after that the tool refuses and you submit with the findings you have.`,
73
- inputSchema: SituationFieldsSchema.extend({
74
- steps: z.array(DraftedStepSchema).min(1).describe("The drafted method steps, one entry per step type."),
75
- }),
77
+ inputSchema: KnowledgeCheckInputSchema,
76
78
  describeCall: ({ steps }) => `${steps.length} drafted step(s)`,
77
79
  describeResult: (_input, result) => ("ok" in result ? describeFindings(result) : result.match),
78
80
  execute: async (input) => {