@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
@@ -1,82 +1,44 @@
1
1
  /**
2
- * The poll-based tool-approval gateway — the constructed `Ask` seam realization
3
- * an embedder wires over its Postgres pool, plus the outward `answer` / `pending`
4
- * API it drives and the boot-time `sweepExpired`.
5
- *
6
- * `ask` is the per-turn seam an embedder binds: a conversation tool's `ctx.ask`
7
- * pauses on it. The database is the single source of truth for ask state — `ask`
8
- * inserts a `pending` ledger row, emits the `data-ask` part, and polls that row to
9
- * a terminal status; there is no in-memory resolver map. `answer` is one guarded
10
- * write. See the poll site below for why.
2
+ * The tool-approval gateway: the ask ledger over the Postgres pool of an
3
+ * embedder. A turn workflow raises an ask under a known id and waits for the
4
+ * answer itself. `answer` is one guarded write, and `pending` and the boot-time
5
+ * `sweepExpired` read and expire the ledger.
11
6
  */
12
7
  import { unwrapOrThrow } from "../../lib/result.js";
13
- import { AskRejectedError } from "./contract.js";
14
- import { answerAsk, insertGrantedAsk, insertPendingAsk, markAborted, selectAskResolution, selectGrant, selectPending, sweepExpired as sweepExpiredRows, } from "./queries.js";
15
- import { uuidv7 } from "./uuidv7.js";
16
- /** Fixed poll cadence — imperceptible against human decision speed, low chatter. */
17
- const POLL_INTERVAL_MS = 200;
8
+ import { answerAsk, insertGrantedAsk, insertPendingAsk, markAborted, markExpired, selectGrant, selectPending, sweepExpired as sweepExpiredRows, } from "./queries.js";
18
9
  /**
19
10
  * Pending rows older than this are treated as orphans of a dead process. Far
20
11
  * beyond any plausible live turn, so a boot sweep during a rolling deployment
21
- * cannot expire an ask another pod is still polling.
12
+ * cannot expire an ask another pod is still waiting on.
22
13
  */
23
14
  export const DEFAULT_SWEEP_MAX_AGE_MS = 24 * 60 * 60 * 1000;
24
15
  export function createAskGateway(deps) {
25
16
  const { pool } = deps;
26
- async function ask(request, ctx) {
27
- const id = uuidv7();
17
+ async function raise(id, request, scope) {
28
18
  const now = new Date().toISOString();
29
19
  const row = {
30
20
  id,
31
- analysisId: ctx.analysisId,
32
- userId: ctx.userId,
33
- threadId: ctx.threadId ?? null,
21
+ analysisId: scope.analysisId,
22
+ userId: scope.userId,
23
+ threadId: scope.threadId ?? null,
34
24
  title: request.title,
35
25
  command: request.command,
36
26
  detail: request.detail ?? null,
37
27
  grantKey: request.grantKey ?? null,
38
28
  createdAt: now,
39
29
  };
40
- // A standing grant this user holds for this ask's grant key — the command
41
- // unless the tool supplied a broader key — short-circuits the prompt: record
42
- // the invocation as `resolved` for the audit trail and return without pausing.
43
- // The one part it emits is already settled, so no surface prompts, and the
44
- // transcript still shows that a standing grant approved the call.
45
- if (unwrapOrThrow(await selectGrant(pool, ctx.analysisId, ctx.userId, request.grantKey ?? request.command))) {
30
+ if (unwrapOrThrow(await selectGrant(pool, scope.analysisId, scope.userId, request.grantKey ?? request.command))) {
46
31
  unwrapOrThrow(await insertGrantedAsk(pool, row, now));
47
- await emitAskPart(ctx.emit, id, request, "resolved", "always");
48
- return { kind: "always" };
32
+ return "granted";
49
33
  }
50
34
  unwrapOrThrow(await insertPendingAsk(pool, row));
51
- await emitAskPart(ctx.emit, id, request, "pending");
52
- // DESIGN(WHY): we poll the ask ledger instead of holding an in-memory
53
- // resolver map. The DB is the single source of truth, so answering is a pure
54
- // UPDATE, a crash-orphaned pending row just ends the poll, and an answer that
55
- // arrives in a different process than the loop (a hosted deployment) still
56
- // lands. A resolver map would be a second state to reconcile and cannot be
57
- // resolved once its process dies. Latency is invisible at human decision speed
58
- // and can be erased later with LISTEN/NOTIFY.
59
- // TODO(refine): these ask records might move into provenance later.
60
- for (;;) {
61
- if (ctx.signal.aborted) {
62
- unwrapOrThrow(await markAborted(pool, id, new Date().toISOString()));
63
- await emitAskPart(ctx.emit, id, request, "aborted");
64
- throwAbort(ctx.signal);
65
- }
66
- const resolution = unwrapOrThrow(await selectAskResolution(pool, id));
67
- if (resolution === null) {
68
- // The row vanished out from under the poll — nothing can answer it
69
- // now, so deny rather than spin forever. Not reachable through the
70
- // ordinary status machine (rows are only ever updated, never deleted).
71
- await emitAskPart(ctx.emit, id, request, "expired");
72
- throw new AskRejectedError("approval request is no longer available");
73
- }
74
- if (resolution.status !== "pending") {
75
- await emitAskPart(ctx.emit, id, request, resolution.status, replyKindOf(resolution.status, resolution.reply));
76
- return settle(resolution.status, resolution.reply, ctx.signal);
77
- }
78
- await sleepUntil(POLL_INTERVAL_MS, ctx.signal);
79
- }
35
+ return "pending";
36
+ }
37
+ async function expire(id) {
38
+ unwrapOrThrow(await markExpired(pool, id, new Date().toISOString()));
39
+ }
40
+ async function abort(id) {
41
+ unwrapOrThrow(await markAborted(pool, id, new Date().toISOString()));
80
42
  }
81
43
  async function answer(id, reply) {
82
44
  return unwrapOrThrow(await answerAsk(pool, id, reply, new Date().toISOString()));
@@ -88,79 +50,20 @@ export function createAskGateway(deps) {
88
50
  const now = Date.now();
89
51
  return unwrapOrThrow(await sweepExpiredRows(pool, new Date(now).toISOString(), new Date(now - maxAgeMs).toISOString()));
90
52
  }
91
- return { ask, answer, pending, sweepExpired };
53
+ return { raise, expire, abort, answer, pending, sweepExpired };
92
54
  }
93
- /** Emit (or reconcile, under the same id) the ask's `data-ask` chat part. */
94
- function emitAskPart(emit, id, request, status, reply) {
95
- return emit({
55
+ /** The `data-ask` part of an ask in one status. Each status of one ask reconciles under the same id. */
56
+ export function askPartOf(id, request, status, reply) {
57
+ const part = {
96
58
  type: "data-ask",
97
- data: {
98
- id,
99
- title: request.title,
100
- command: request.command,
101
- ...(request.detail !== undefined ? { detail: request.detail } : {}),
102
- status,
103
- ...(reply !== undefined ? { reply } : {}),
104
- },
105
- });
106
- }
107
- /**
108
- * The kind of reply the terminal part shows: the kind that `settle` acts on for a `resolved` or `rejected` row,
109
- * and none for any other status. It never reads the feedback of a rejection, which is for the model.
110
- */
111
- function replyKindOf(status, reply) {
112
- switch (status) {
113
- case "resolved":
114
- return approvalOf(reply).kind;
115
- case "rejected":
116
- return "reject";
117
- case "expired":
118
- case "aborted":
119
- return undefined;
120
- }
121
- }
122
- /** The approval that a `resolved` row grants. */
123
- function approvalOf(reply) {
124
- // Only `once` / `always` reach `resolved`; guard the JSONB round-trip and
125
- // default to the narrowest approval if a malformed reply ever slipped in.
126
- return reply && (reply.kind === "once" || reply.kind === "always") ? reply : { kind: "once" };
127
- }
128
- /** Resolve an approval or throw the terminal denial the ledger recorded. */
129
- function settle(status, reply, signal) {
130
- switch (status) {
131
- case "resolved":
132
- return approvalOf(reply);
133
- case "rejected":
134
- throw new AskRejectedError(reply && reply.kind === "reject" ? reply.feedback : undefined);
135
- case "expired":
136
- throw new AskRejectedError("approval request expired unanswered");
137
- case "aborted":
138
- throwAbort(signal);
139
- }
140
- }
141
- /**
142
- * Re-raise the turn's cancellation verbatim — `signal.reason` IS the loop's own
143
- * cancellation, so its existing turn-abort path recognizes it unchanged. The
144
- * fallback covers a signal aborted with no explicit reason.
145
- */
146
- function throwAbort(signal) {
147
- throw signal.reason ?? new DOMException("The operation was aborted", "AbortError");
148
- }
149
- /** Delay `ms`, resolving early if `signal` aborts, leaving no dangling timer. */
150
- function sleepUntil(ms, signal) {
151
- return new Promise((resolve) => {
152
- if (signal.aborted) {
153
- resolve();
154
- return;
155
- }
156
- const onAbort = () => {
157
- clearTimeout(timer);
158
- resolve();
159
- };
160
- const timer = setTimeout(() => {
161
- signal.removeEventListener("abort", onAbort);
162
- resolve();
163
- }, ms);
164
- signal.addEventListener("abort", onAbort, { once: true });
165
- });
59
+ id,
60
+ title: request.title,
61
+ command: request.command,
62
+ status,
63
+ };
64
+ if (request.detail !== undefined)
65
+ part.detail = request.detail;
66
+ if (reply !== undefined)
67
+ part.reply = reply;
68
+ return part;
166
69
  }
@@ -18,7 +18,7 @@ export type AskStatus = "pending" | "resolved" | "rejected" | "aborted" | "expir
18
18
  /** The discriminated outcome of an out-of-band `answer` against a ledger row. */
19
19
  export type AnswerOutcome = "applied" | "not_found" | "already_terminal";
20
20
  /** An unresolved ask, as enumerated by `pending()`. */
21
- export interface PendingAsk {
21
+ export type PendingAsk = {
22
22
  readonly id: string;
23
23
  readonly analysisId: string;
24
24
  readonly userId: string;
@@ -27,14 +27,9 @@ export interface PendingAsk {
27
27
  readonly command: string;
28
28
  readonly detail: string | null;
29
29
  readonly createdAt: string;
30
- }
31
- /** The status + recorded reply a poll reads to observe a decision. */
32
- export interface AskResolution {
33
- readonly status: AskStatus;
34
- readonly reply: AskReply | null;
35
- }
30
+ };
36
31
  /** Column payload shared by the pending insert and the grant short-circuit insert. */
37
- export interface AskRow {
32
+ export type AskRow = {
38
33
  readonly id: string;
39
34
  readonly analysisId: string;
40
35
  readonly userId: string;
@@ -45,7 +40,7 @@ export interface AskRow {
45
40
  /** Grant key an `always` keys its standing grant under; `null` falls back to `command`. */
46
41
  readonly grantKey: string | null;
47
42
  readonly createdAt: string;
48
- }
43
+ };
49
44
  /** Insert a fresh `pending` ask before its decision is awaited. */
50
45
  export declare function insertPendingAsk(querier: Querier, row: AskRow): ResultAsync<void, DbError>;
51
46
  /**
@@ -56,8 +51,8 @@ export declare function insertPendingAsk(querier: Querier, row: AskRow): ResultA
56
51
  export declare function insertGrantedAsk(querier: Querier, row: AskRow, resolvedAt: string): ResultAsync<void, DbError>;
57
52
  /** Does a standing grant cover `(analysisId, userId, grantKey)` for this person? */
58
53
  export declare function selectGrant(querier: Querier, analysisId: string, userId: string, grantKey: string): ResultAsync<boolean, DbError>;
59
- /** Read a row's current status + recorded reply. `null` when no such row exists. */
60
- export declare function selectAskResolution(querier: Querier, id: string): ResultAsync<AskResolution | null, DbError>;
54
+ /** Mark a still-`pending` row `expired`. A row that an answer settled does not change. */
55
+ export declare function markExpired(querier: Querier, id: string, resolvedAt: string): ResultAsync<void, DbError>;
61
56
  /**
62
57
  * Mark a still-`pending` row `aborted`. Guarded by `WHERE status = 'pending'`, so
63
58
  * a row already answered out of band is left untouched.
@@ -9,14 +9,29 @@
9
9
  * seam boundary.
10
10
  */
11
11
  import { okAsync } from "neverthrow";
12
+ import { z } from "zod";
12
13
  import { tryMutation, tryQuery, withTransaction } from "../../lib/db-result.js";
14
+ /** The columns of the pending enumeration, as the SELECT spells them. */
15
+ const PendingAskRowSchema = z.object({
16
+ id: z.string(),
17
+ analysis_id: z.string(),
18
+ user_id: z.string(),
19
+ thread_id: z.string().nullable(),
20
+ title: z.string(),
21
+ command: z.string(),
22
+ detail: z.string().nullable(),
23
+ created_at: z.string(),
24
+ });
25
+ /** The columns the guarded UPDATE returns for the standing-grant insert. */
26
+ const GrantedRowSchema = z.object({ analysis_id: z.string(), user_id: z.string(), grant_key: z.string() });
13
27
  /** Insert a fresh `pending` ask before its decision is awaited. */
14
28
  export function insertPendingAsk(querier, row) {
15
29
  return tryMutation("asks.insertPending", async () => {
16
30
  await querier.query({
17
31
  text: `INSERT INTO cortex_asks
18
32
  (id, analysis_id, user_id, thread_id, title, command, detail, grant_key, status, created_at)
19
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'pending', $9)`,
33
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'pending', $9)
34
+ ON CONFLICT (id) DO NOTHING`,
20
35
  values: [row.id, row.analysisId, row.userId, row.threadId, row.title, row.command, row.detail, row.grantKey ?? row.command, row.createdAt],
21
36
  });
22
37
  });
@@ -31,7 +46,8 @@ export function insertGrantedAsk(querier, row, resolvedAt) {
31
46
  await querier.query({
32
47
  text: `INSERT INTO cortex_asks
33
48
  (id, analysis_id, user_id, thread_id, title, command, detail, grant_key, status, reply, created_at, resolved_at)
34
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'resolved', $9::jsonb, $10, $11)`,
49
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'resolved', $9::jsonb, $10, $11)
50
+ ON CONFLICT (id) DO NOTHING`,
35
51
  values: [
36
52
  row.id,
37
53
  row.analysisId,
@@ -58,17 +74,13 @@ export function selectGrant(querier, analysisId, userId, grantKey) {
58
74
  return (result.rowCount ?? 0) > 0;
59
75
  });
60
76
  }
61
- /** Read a row's current status + recorded reply. `null` when no such row exists. */
62
- export function selectAskResolution(querier, id) {
63
- return tryQuery("asks.selectResolution", async () => {
64
- const result = await querier.query({
65
- text: `SELECT status, reply FROM cortex_asks WHERE id = $1`,
66
- values: [id],
77
+ /** Mark a still-`pending` row `expired`. A row that an answer settled does not change. */
78
+ export function markExpired(querier, id, resolvedAt) {
79
+ return tryMutation("asks.markExpired", async () => {
80
+ await querier.query({
81
+ text: `UPDATE cortex_asks SET status = 'expired', resolved_at = $2 WHERE id = $1 AND status = 'pending'`,
82
+ values: [id, resolvedAt],
67
83
  });
68
- const row = result.rows[0];
69
- if (!row)
70
- return null;
71
- return { status: row.status, reply: row.reply ?? null };
72
84
  });
73
85
  }
74
86
  /**
@@ -90,16 +102,19 @@ export function selectPending(querier) {
90
102
  text: `SELECT id, analysis_id, COALESCE(user_id, '') AS user_id, thread_id, title, command, detail, created_at
91
103
  FROM cortex_asks WHERE status = 'pending' ORDER BY created_at ASC`,
92
104
  });
93
- return result.rows.map((row) => ({
94
- id: row.id,
95
- analysisId: row.analysis_id,
96
- userId: row.user_id,
97
- threadId: row.thread_id ?? null,
98
- title: row.title,
99
- command: row.command,
100
- detail: row.detail ?? null,
101
- createdAt: row.created_at,
102
- }));
105
+ return result.rows.map((row) => {
106
+ const parsed = PendingAskRowSchema.parse(row);
107
+ return {
108
+ id: parsed.id,
109
+ analysisId: parsed.analysis_id,
110
+ userId: parsed.user_id,
111
+ threadId: parsed.thread_id ?? null,
112
+ title: parsed.title,
113
+ command: parsed.command,
114
+ detail: parsed.detail ?? null,
115
+ createdAt: parsed.created_at,
116
+ };
117
+ });
103
118
  });
104
119
  }
105
120
  /**
@@ -142,14 +157,13 @@ export function answerAsk(pool, id, reply, now) {
142
157
  return discriminateMiss(client, id);
143
158
  if (reply.kind !== "always")
144
159
  return okAsync("applied");
145
- // The cast's non-null `grant_key` is sound without any boot-order
146
- // caveat: every insert writes grant_key (command when the tool supplied
147
- // none), and the COALESCE above covers any pending row that predates
148
- // the column — `command` is NOT NULL, so the key can never be null.
149
- // `user_id` reads the same way: its COALESCE gives the empty string for a
150
- // row that predates the column, and that identity matches no real user.
151
- const granted = updated.rows[0];
160
+ // The COALESCEs make every returned field non-null: each insert writes
161
+ // grant_key (command when the tool supplied none) and user_id (empty
162
+ // string when the row predates the column), so the row schema below can
163
+ // demand all three strings; a row that misses one is refused through the
164
+ // transaction's `DbError` channel.
152
165
  return tryMutation("asks.answer:grant", async () => {
166
+ const granted = GrantedRowSchema.parse(updated.rows[0]);
153
167
  await client.query({
154
168
  text: `INSERT INTO cortex_ask_grants (analysis_id, user_id, grant_key, created_at)
155
169
  VALUES ($1, $2, $3, $4) ON CONFLICT (analysis_id, user_id, grant_key) DO NOTHING`,
@@ -18,8 +18,8 @@ export function uuidv7() {
18
18
  // in 48 bits well past the year 10000, so writeUIntBE never overflows.
19
19
  bytes.writeUIntBE(Date.now(), 0, 6);
20
20
  // Version 7 in the high nibble of byte 6; variant 0b10 in the top bits of byte 8.
21
- bytes[6] = (bytes[6] & 0x0f) | 0x70;
22
- bytes[8] = (bytes[8] & 0x3f) | 0x80;
21
+ bytes.writeUInt8((bytes.readUInt8(6) & 0x0f) | 0x70, 6);
22
+ bytes.writeUInt8((bytes.readUInt8(8) & 0x3f) | 0x80, 8);
23
23
  const hex = bytes.toString("hex");
24
24
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
25
25
  }
@@ -28,11 +28,11 @@ export type ChemblOutput = {
28
28
  readonly targets: ChemblTarget[];
29
29
  };
30
30
  export declare const chemblTool: import("../define-tool.js").Tool<{
31
- action: "drug" | "targets" | "compounds" | "mechanism" | "bioactivity";
31
+ action: "bioactivity" | "compounds" | "drug" | "mechanism" | "targets";
32
32
  query?: string | undefined;
33
- searchType?: "target" | "smiles" | "compound" | undefined;
33
+ searchType?: "compound" | "smiles" | "target" | undefined;
34
34
  chemblId?: string | undefined;
35
- idType?: "target" | "compound" | "assay" | undefined;
35
+ idType?: "assay" | "compound" | "target" | undefined;
36
36
  activityType?: string | undefined;
37
37
  limit?: number | undefined;
38
38
  }, ChemblOutput>;
@@ -131,14 +131,24 @@ export const chemblTool = defineTool({
131
131
  execute: async ({ action, query, searchType, chemblId, idType, activityType, limit }) => {
132
132
  switch (action) {
133
133
  case "compounds":
134
+ if (query === undefined || searchType === undefined)
135
+ throw new Error("compounds requires query and searchType");
134
136
  return ok({ compounds: await searchCompounds(query, searchType, limit ?? LIMITS.wideDefault) });
135
137
  case "drug":
138
+ if (query === undefined)
139
+ throw new Error("drug requires query");
136
140
  return ok({ drugs: await getDrugInfo(query, limit ?? LIMITS.narrowDefault) });
137
141
  case "mechanism":
142
+ if (chemblId === undefined)
143
+ throw new Error("mechanism requires chemblId");
138
144
  return ok({ mechanisms: await getMechanism(chemblId) });
139
145
  case "bioactivity":
146
+ if (chemblId === undefined || idType === undefined)
147
+ throw new Error("bioactivity requires chemblId and idType");
140
148
  return ok({ activities: await getBioactivity(chemblId, idType, { activityType, limit: limit ?? LIMITS.wideDefault }) });
141
149
  case "targets":
150
+ if (query === undefined)
151
+ throw new Error("targets requires query");
142
152
  return ok({ targets: await searchTargets(query, limit ?? LIMITS.narrowDefault) });
143
153
  }
144
154
  },
@@ -14,7 +14,31 @@
14
14
  * dataset (a 'toxval' under dataset 'exposure' would otherwise silently fetch
15
15
  * nothing) and a limit above the dataset's own ceiling.
16
16
  */
17
+ import { z } from "zod";
18
+ import { type Tool } from "../define-tool.js";
17
19
  import { type ChemicalDetail, type CtxExposureData, type CtxHazardData, type PropertySummary, type ToxcastBioactivity } from "../lib/ctx-ops.js";
20
+ declare const inputSchema: z.ZodObject<{
21
+ dataset: z.ZodEnum<{
22
+ chemical: "chemical";
23
+ exposure: "exposure";
24
+ hazard: "hazard";
25
+ toxcast: "toxcast";
26
+ }>;
27
+ query: z.ZodString;
28
+ dataType: z.ZodOptional<z.ZodEnum<{
29
+ all: "all";
30
+ cancer: "cancer";
31
+ "functional-use": "functional-use";
32
+ genetox: "genetox";
33
+ httk: "httk";
34
+ "product-data": "product-data";
35
+ seem: "seem";
36
+ toxval: "toxval";
37
+ }>>;
38
+ activeOnly: z.ZodOptional<z.ZodBoolean>;
39
+ includeProperties: z.ZodOptional<z.ZodBoolean>;
40
+ limit: z.ZodOptional<z.ZodNumber>;
41
+ }, z.core.$strip>;
18
42
  type ComptoxOutput = {
19
43
  found: false;
20
44
  query: string;
@@ -39,12 +63,5 @@ type ComptoxOutput = {
39
63
  } & CtxExposureData);
40
64
  export declare function createComptoxTool(deps: {
41
65
  apiKey: string;
42
- }): import("../define-tool.js").Tool<{
43
- dataset: "toxcast" | "hazard" | "chemical" | "exposure";
44
- query: string;
45
- dataType?: "toxval" | "genetox" | "cancer" | "all" | "seem" | "httk" | "functional-use" | "product-data" | undefined;
46
- activeOnly?: boolean | undefined;
47
- includeProperties?: boolean | undefined;
48
- limit?: number | undefined;
49
- }, ComptoxOutput>;
66
+ }): Tool<z.infer<typeof inputSchema>, ComptoxOutput>;
50
67
  export {};
@@ -21,11 +21,13 @@ import { fetchCtxChemicalDetail, fetchCtxChemicalProperties, fetchCtxExposureDat
21
21
  import { getEpaCcteHeaders } from "../lib/toxcast-config.js";
22
22
  const HAZARD_DATA_TYPES = ["toxval", "genetox", "cancer", "all"];
23
23
  const EXPOSURE_DATA_TYPES = ["seem", "httk", "functional-use", "product-data", "all"];
24
+ const HAZARD_DATA_TYPE_IDS = new Set(HAZARD_DATA_TYPES);
25
+ const EXPOSURE_DATA_TYPE_IDS = new Set(EXPOSURE_DATA_TYPES);
24
26
  function isHazardDataType(value) {
25
- return value !== undefined && HAZARD_DATA_TYPES.includes(value);
27
+ return value !== undefined && HAZARD_DATA_TYPE_IDS.has(value);
26
28
  }
27
29
  function isExposureDataType(value) {
28
- return value !== undefined && EXPOSURE_DATA_TYPES.includes(value);
30
+ return value !== undefined && EXPOSURE_DATA_TYPE_IDS.has(value);
29
31
  }
30
32
  const inputSchema = z
31
33
  .object({
@@ -16,49 +16,59 @@
16
16
  * Each source runs independently and reports its own outcome in `perSource`, so
17
17
  * a missing DrugBank key degrades that corpus rather than the whole call.
18
18
  */
19
+ import { z } from "zod";
19
20
  import type { Logger } from "../../lib/logger.js";
21
+ import { type Tool } from "../define-tool.js";
20
22
  import { type DgidbResult } from "../lib/dgidb-client.js";
21
23
  import { type PharmgkbAnnotation } from "../lib/pharmgkb-client.js";
22
24
  declare const SOURCES: readonly ["dgidb", "drugbank", "pharmgkb"];
23
25
  type Source = (typeof SOURCES)[number];
24
- interface SourceOutcome {
26
+ type SourceOutcome = {
25
27
  source: Source;
26
28
  status: "ok" | "no_data" | "unavailable";
27
29
  returned: number;
28
30
  detail?: string;
29
- }
31
+ };
30
32
  /**
31
33
  * A DrugBank record projected for context. `includeDrugRecord` decides whether
32
34
  * the description arrives whole or as a preview — a 500-character field across
33
35
  * ten records is narrative that a drug-vs-gene question rarely needs.
34
36
  */
35
- interface ProjectedDrug {
37
+ type ProjectedDrug = {
36
38
  drugbankId: string;
37
39
  name: string;
38
40
  type: string;
39
41
  groups: string[];
40
42
  description: string;
41
43
  proseTruncated: boolean;
42
- }
43
- interface DrugGeneOutput {
44
+ };
45
+ declare const inputSchema: z.ZodObject<{
46
+ query: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
47
+ direction: z.ZodEnum<{
48
+ drug_to_genes: "drug_to_genes";
49
+ gene_to_drugs: "gene_to_drugs";
50
+ }>;
51
+ sources: z.ZodOptional<z.ZodArray<z.ZodEnum<{
52
+ dgidb: "dgidb";
53
+ drugbank: "drugbank";
54
+ pharmgkb: "pharmgkb";
55
+ }>>>;
56
+ limit: z.ZodOptional<z.ZodNumber>;
57
+ interactionTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ sourceDbs: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
+ minSources: z.ZodOptional<z.ZodNumber>;
60
+ includeAttributes: z.ZodOptional<z.ZodBoolean>;
61
+ includeDrugRecord: z.ZodOptional<z.ZodBoolean>;
62
+ }, z.core.$strip>;
63
+ type DrugGeneOutput = {
44
64
  direction: "gene_to_drugs" | "drug_to_genes";
45
65
  perSource: SourceOutcome[];
46
66
  dgidb?: DgidbResult[];
47
67
  drugbank?: ProjectedDrug[];
48
68
  pharmgkb?: PharmgkbAnnotation[];
49
- }
69
+ };
50
70
  export declare function createDrugGeneInteractionsTool(deps: {
51
71
  drugbankApiKey: string;
52
72
  logger?: Logger;
53
- }): import("../define-tool.js").Tool<{
54
- query: string | string[];
55
- direction: "gene_to_drugs" | "drug_to_genes";
56
- sources?: ("dgidb" | "drugbank" | "pharmgkb")[] | undefined;
57
- limit?: number | undefined;
58
- interactionTypes?: string[] | undefined;
59
- sourceDbs?: string[] | undefined;
60
- minSources?: number | undefined;
61
- includeAttributes?: boolean | undefined;
62
- includeDrugRecord?: boolean | undefined;
63
- }, DrugGeneOutput>;
73
+ }): Tool<z.infer<typeof inputSchema>, DrugGeneOutput>;
64
74
  export {};
@@ -16,7 +16,10 @@
16
16
  * Each source runs independently and reports its own outcome in `perSource`, so
17
17
  * a missing DrugBank key degrades that corpus rather than the whole call.
18
18
  */
19
+ import { errorMessageOf } from "../../lib/thrown.js";
20
+ import { textOf } from "../../lib/unknown-text.js";
19
21
  import { ok } from "neverthrow";
22
+ import { presentFirst } from "../../lib/present.js";
20
23
  import { z } from "zod";
21
24
  import { createNoopLogger } from "../../lib/console-logger.js";
22
25
  import { defineTool } from "../define-tool.js";
@@ -94,7 +97,7 @@ async function runSource(source, fetch) {
94
97
  }
95
98
  catch (error) {
96
99
  return {
97
- outcome: { source, status: "unavailable", returned: 0, detail: error instanceof Error ? error.message : String(error) },
100
+ outcome: { source, status: "unavailable", returned: 0, detail: errorMessageOf(error) ?? textOf(error) },
98
101
  records: [],
99
102
  };
100
103
  }
@@ -126,30 +129,30 @@ export function createDrugGeneInteractionsTool(deps) {
126
129
  selected.includes("dgidb")
127
130
  ? runSource("dgidb", () => searchDgidb(inputs, isGeneSide ? "gene" : "drug", {
128
131
  limit,
129
- ...(input.interactionTypes ? { interactionTypes: input.interactionTypes } : {}),
130
- ...(input.sourceDbs ? { sourceDbs: input.sourceDbs } : {}),
131
- ...(input.minSources !== undefined ? { minSources: input.minSources } : {}),
132
- ...(input.includeAttributes !== undefined ? { includeAttributes: input.includeAttributes } : {}),
132
+ interactionTypes: input.interactionTypes ? input.interactionTypes : undefined,
133
+ sourceDbs: input.sourceDbs ? input.sourceDbs : undefined,
134
+ minSources: input.minSources,
135
+ includeAttributes: input.includeAttributes,
133
136
  }, (errors) => logger.warn("dgidb partial errors alongside data", { errors })))
134
137
  : null,
135
138
  selected.includes("drugbank")
136
139
  ? runSource("drugbank", async () => {
137
140
  if (!deps.drugbankApiKey)
138
141
  throw new Error("DRUGBANK_API_KEY is not configured");
139
- const drugs = await searchDrugbank(deps.drugbankApiKey, inputs[0], isGeneSide ? "target" : "drug", limit);
142
+ const drugs = await searchDrugbank(deps.drugbankApiKey, presentFirst(inputs, "the first input"), isGeneSide ? "target" : "drug", limit);
140
143
  return drugs.map((d) => projectDrug(d, input.includeDrugRecord ?? false));
141
144
  })
142
145
  : null,
143
146
  selected.includes("pharmgkb")
144
147
  ? runSource("pharmgkb", async () => {
145
- const res = await searchPharmgkb(inputs[0], isGeneSide ? "gene" : "drug", limit);
148
+ const res = await searchPharmgkb(presentFirst(inputs, "the first input"), isGeneSide ? "gene" : "drug", limit);
146
149
  return res.annotations;
147
150
  })
148
151
  : null,
149
152
  ]);
150
153
  // DrugBank and PharmGKB take one identifier per call; say so on the
151
154
  // outcome rather than letting the extra inputs vanish silently.
152
- const skipped = inputs.length > 1 ? `read only '${inputs[0]}' — this source takes one identifier per call` : "";
155
+ const skipped = inputs.length > 1 ? `read only '${String(inputs[0])}' — this source takes one identifier per call` : "";
153
156
  const noteSkipped = (outcome) => {
154
157
  const detail = [outcome.detail, skipped].filter(Boolean).join("; ");
155
158
  return detail ? { ...outcome, detail } : outcome;