@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
@@ -7,7 +7,34 @@
7
7
  * `z.discriminatedUnion`, which `defineTool` rejects (model tool calling needs a
8
8
  * top-level `"type":"object"`).
9
9
  */
10
+ import { z } from "zod";
11
+ import { type Tool } from "../define-tool.js";
10
12
  import { type PatentRecord, type PatentSummary } from "../lib/amass-client.js";
13
+ declare const inputSchema: z.ZodObject<{
14
+ action: z.ZodDefault<z.ZodEnum<{
15
+ details: "details";
16
+ search: "search";
17
+ }>>;
18
+ query: z.ZodOptional<z.ZodString>;
19
+ assignee: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ inventor: z.ZodOptional<z.ZodString>;
21
+ cpcCodes: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ countryCode: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ minPublicationDate: z.ZodOptional<z.ZodString>;
24
+ maxPublicationDate: z.ZodOptional<z.ZodString>;
25
+ minFilingDate: z.ZodOptional<z.ZodString>;
26
+ maxFilingDate: z.ZodOptional<z.ZodString>;
27
+ minPriorityDate: z.ZodOptional<z.ZodString>;
28
+ maxPriorityDate: z.ZodOptional<z.ZodString>;
29
+ minGrantDate: z.ZodOptional<z.ZodString>;
30
+ maxGrantDate: z.ZodOptional<z.ZodString>;
31
+ limit: z.ZodDefault<z.ZodNumber>;
32
+ amassId: z.ZodOptional<z.ZodString>;
33
+ publicationNumber: z.ZodOptional<z.ZodString>;
34
+ applicationNumber: z.ZodOptional<z.ZodString>;
35
+ includeClaims: z.ZodDefault<z.ZodBoolean>;
36
+ includeDescription: z.ZodDefault<z.ZodBoolean>;
37
+ }, z.core.$strip>;
11
38
  type PatentsOutput = {
12
39
  patents: PatentSummary[];
13
40
  } | {
@@ -21,26 +48,5 @@ type PatentsOutput = {
21
48
  };
22
49
  export declare function createSearchPatentsTool(deps: {
23
50
  apiKey: string;
24
- }): import("../define-tool.js").Tool<{
25
- action: "search" | "details";
26
- limit: number;
27
- includeClaims: boolean;
28
- includeDescription: boolean;
29
- query?: string | undefined;
30
- assignee?: string[] | undefined;
31
- inventor?: string | undefined;
32
- cpcCodes?: string[] | undefined;
33
- countryCode?: string[] | undefined;
34
- minPublicationDate?: string | undefined;
35
- maxPublicationDate?: string | undefined;
36
- minFilingDate?: string | undefined;
37
- maxFilingDate?: string | undefined;
38
- minPriorityDate?: string | undefined;
39
- maxPriorityDate?: string | undefined;
40
- minGrantDate?: string | undefined;
41
- maxGrantDate?: string | undefined;
42
- amassId?: string | undefined;
43
- publicationNumber?: string | undefined;
44
- applicationNumber?: string | undefined;
45
- }, PatentsOutput>;
51
+ }): Tool<z.infer<typeof inputSchema>, PatentsOutput>;
46
52
  export {};
@@ -8,16 +8,17 @@
8
8
  * top-level `"type":"object"`).
9
9
  */
10
10
  import { err, ok } from "neverthrow";
11
+ import { presentFirst } from "../../lib/present.js";
11
12
  import { z } from "zod";
12
13
  import { defineTool } from "../define-tool.js";
13
14
  import { describeAmassError, getPatentRecord, lookupPatentIds, searchPatentRecords, } from "../lib/amass-client.js";
14
15
  import { getAmassHeaders } from "../lib/amass-config.js";
16
+ import { ISO_DATE_PATTERN } from "../../lib/text.js";
15
17
  /** The largest `limit` that still costs one search price (5 credits for each 20 records). */
16
18
  const MAX_LIMIT = 20;
17
- const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
18
19
  const IDENTIFIER_FIELDS = ["amassId", "publicationNumber", "applicationNumber"];
19
20
  function dateField(description) {
20
- return z.string().regex(ISO_DATE).optional().describe(`'search' only. ${description}, YYYY-MM-DD.`);
21
+ return z.string().regex(ISO_DATE_PATTERN).optional().describe(`'search' only. ${description}, YYYY-MM-DD.`);
21
22
  }
22
23
  const inputSchema = z
23
24
  .object({
@@ -91,21 +92,23 @@ export function createSearchPatentsTool(deps) {
91
92
  execute: async (input) => {
92
93
  const headers = getAmassHeaders(deps.apiKey);
93
94
  if (input.action === "search") {
95
+ if (input.query === undefined)
96
+ throw new Error("search requires query");
94
97
  const patents = await searchPatentRecords({
95
98
  query: input.query,
96
99
  limit: input.limit,
97
- ...(input.assignee ? { assignee: input.assignee } : {}),
98
- ...(input.inventor ? { inventor: input.inventor } : {}),
99
- ...(input.cpcCodes ? { cpcCodes: input.cpcCodes } : {}),
100
- ...(input.countryCode ? { countryCode: input.countryCode } : {}),
101
- ...(input.minPublicationDate ? { minPublicationDate: input.minPublicationDate } : {}),
102
- ...(input.maxPublicationDate ? { maxPublicationDate: input.maxPublicationDate } : {}),
103
- ...(input.minFilingDate ? { minFilingDate: input.minFilingDate } : {}),
104
- ...(input.maxFilingDate ? { maxFilingDate: input.maxFilingDate } : {}),
105
- ...(input.minPriorityDate ? { minPriorityDate: input.minPriorityDate } : {}),
106
- ...(input.maxPriorityDate ? { maxPriorityDate: input.maxPriorityDate } : {}),
107
- ...(input.minGrantDate ? { minGrantDate: input.minGrantDate } : {}),
108
- ...(input.maxGrantDate ? { maxGrantDate: input.maxGrantDate } : {}),
100
+ assignee: input.assignee ? input.assignee : undefined,
101
+ inventor: input.inventor ? input.inventor : undefined,
102
+ cpcCodes: input.cpcCodes ? input.cpcCodes : undefined,
103
+ countryCode: input.countryCode ? input.countryCode : undefined,
104
+ minPublicationDate: input.minPublicationDate,
105
+ maxPublicationDate: input.maxPublicationDate,
106
+ minFilingDate: input.minFilingDate,
107
+ maxFilingDate: input.maxFilingDate,
108
+ minPriorityDate: input.minPriorityDate,
109
+ maxPriorityDate: input.maxPriorityDate,
110
+ minGrantDate: input.minGrantDate,
111
+ maxGrantDate: input.maxGrantDate,
109
112
  }, headers);
110
113
  if (patents.isErr())
111
114
  return failure(patents.error);
@@ -114,8 +117,8 @@ export function createSearchPatentsTool(deps) {
114
117
  let amassId = input.amassId;
115
118
  if (amassId === undefined) {
116
119
  const ids = await lookupPatentIds({
117
- ...(input.publicationNumber === undefined ? {} : { publicationNumber: input.publicationNumber }),
118
- ...(input.applicationNumber === undefined ? {} : { applicationNumber: input.applicationNumber }),
120
+ publicationNumber: input.publicationNumber,
121
+ applicationNumber: input.applicationNumber,
119
122
  }, headers);
120
123
  if (ids.isErr())
121
124
  return failure(ids.error);
@@ -123,7 +126,7 @@ export function createSearchPatentsTool(deps) {
123
126
  return ok({ status: "not_found" });
124
127
  if (ids.value.length > 1)
125
128
  return ok({ status: "ambiguous", candidates: ids.value });
126
- amassId = ids.value[0];
129
+ amassId = presentFirst(ids.value, "the single patent id");
127
130
  }
128
131
  const patent = await getPatentRecord(amassId, { claims: input.includeClaims, description: input.includeDescription }, headers);
129
132
  if (patent.isErr())
@@ -7,11 +7,11 @@
7
7
  * and its accession is the key that the structural tools take.
8
8
  */
9
9
  import { type UniProtProtein } from "../lib/uniprot-client.js";
10
- export interface SearchProteinOutput {
10
+ export type SearchProteinOutput = {
11
11
  readonly proteins: UniProtProtein[];
12
12
  /** True when UniProt held at least one row beyond `limit`. */
13
13
  readonly hasMore: boolean;
14
- }
14
+ };
15
15
  export declare const searchProteinTool: import("../define-tool.js").Tool<{
16
16
  query: string;
17
17
  organismId: number | null;
@@ -52,7 +52,7 @@ export const searchProteinTool = defineTool({
52
52
  describeCall: ({ query }) => query,
53
53
  execute: async ({ query, organismId, reviewedOnly, limit }) => {
54
54
  const result = await searchProteins(query, {
55
- ...(organismId === null ? {} : { organismId }),
55
+ organismId: organismId ?? undefined,
56
56
  reviewedOnly,
57
57
  limit,
58
58
  });
@@ -11,7 +11,70 @@
11
11
  * `z.discriminatedUnion`, which `defineTool` rejects (model tool calling needs a
12
12
  * top-level `"type":"object"`).
13
13
  */
14
+ import { z } from "zod";
15
+ import { type Tool } from "../define-tool.js";
14
16
  import { type AuthorizationRecord, type AuthorizationSearchRow, type RegulatorySection } from "../lib/amass-client.js";
17
+ declare const inputSchema: z.ZodObject<{
18
+ action: z.ZodDefault<z.ZodEnum<{
19
+ details: "details";
20
+ search: "search";
21
+ section: "section";
22
+ }>>;
23
+ query: z.ZodOptional<z.ZodString>;
24
+ agency: z.ZodOptional<z.ZodArray<z.ZodEnum<{
25
+ EMA: "EMA";
26
+ FDA: "FDA";
27
+ }>>>;
28
+ authorizationStatus: z.ZodOptional<z.ZodArray<z.ZodEnum<{
29
+ ACTIVE: "ACTIVE";
30
+ APPROVED_NOT_MARKETED: "APPROVED_NOT_MARKETED";
31
+ CONDITIONAL: "CONDITIONAL";
32
+ EXPIRED: "EXPIRED";
33
+ LAPSED_SUNSET: "LAPSED_SUNSET";
34
+ REFUSED: "REFUSED";
35
+ REVOKED: "REVOKED";
36
+ SUSPENDED: "SUSPENDED";
37
+ UNKNOWN: "UNKNOWN";
38
+ WITHDRAWN_DURING_REVIEW: "WITHDRAWN_DURING_REVIEW";
39
+ WITHDRAWN_FORCED: "WITHDRAWN_FORCED";
40
+ WITHDRAWN_VOLUNTARY: "WITHDRAWN_VOLUNTARY";
41
+ }>>>;
42
+ moleculeType: z.ZodOptional<z.ZodArray<z.ZodEnum<{
43
+ ANTIBODY: "ANTIBODY";
44
+ ANTIBODY_DRUG_CONJUGATE: "ANTIBODY_DRUG_CONJUGATE";
45
+ CELL: "CELL";
46
+ ENZYME: "ENZYME";
47
+ GENE: "GENE";
48
+ OLIGONUCLEOTIDE: "OLIGONUCLEOTIDE";
49
+ OLIGOSACCHARIDE: "OLIGOSACCHARIDE";
50
+ PROTEIN: "PROTEIN";
51
+ SMALL_MOLECULE: "SMALL_MOLECULE";
52
+ UNKNOWN: "UNKNOWN";
53
+ VACCINE: "VACCINE";
54
+ VACCINE_COMPONENT: "VACCINE_COMPONENT";
55
+ }>>>;
56
+ hasDesignation: z.ZodOptional<z.ZodArray<z.ZodEnum<{
57
+ ACCELERATED_APPROVAL: "ACCELERATED_APPROVAL";
58
+ ACCELERATED_ASSESSMENT: "ACCELERATED_ASSESSMENT";
59
+ BREAKTHROUGH_THERAPY: "BREAKTHROUGH_THERAPY";
60
+ CONDITIONAL_MA: "CONDITIONAL_MA";
61
+ EXCEPTIONAL_CIRCUMSTANCES: "EXCEPTIONAL_CIRCUMSTANCES";
62
+ FAST_TRACK: "FAST_TRACK";
63
+ PRIME: "PRIME";
64
+ PRIORITY_REVIEW: "PRIORITY_REVIEW";
65
+ RMAT: "RMAT";
66
+ }>>>;
67
+ isOrphan: z.ZodOptional<z.ZodBoolean>;
68
+ minAuthorizationDate: z.ZodOptional<z.ZodString>;
69
+ maxAuthorizationDate: z.ZodOptional<z.ZodString>;
70
+ limit: z.ZodDefault<z.ZodNumber>;
71
+ amassId: z.ZodOptional<z.ZodString>;
72
+ fdaApplicationNumber: z.ZodOptional<z.ZodString>;
73
+ emaProductNumber: z.ZodOptional<z.ZodString>;
74
+ ndc: z.ZodOptional<z.ZodString>;
75
+ splSetId: z.ZodOptional<z.ZodString>;
76
+ documentSectionId: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strip>;
15
78
  type RegulatoryApprovalsOutput = {
16
79
  authorizations: AuthorizationSearchRow[];
17
80
  } | {
@@ -28,22 +91,5 @@ type RegulatoryApprovalsOutput = {
28
91
  };
29
92
  export declare function createSearchRegulatoryApprovalsTool(deps: {
30
93
  apiKey: string;
31
- }): import("../define-tool.js").Tool<{
32
- action: "search" | "details" | "section";
33
- limit: number;
34
- query?: string | undefined;
35
- agency?: ("FDA" | "EMA")[] | undefined;
36
- authorizationStatus?: ("UNKNOWN" | "ACTIVE" | "APPROVED_NOT_MARKETED" | "CONDITIONAL" | "SUSPENDED" | "WITHDRAWN_VOLUNTARY" | "WITHDRAWN_FORCED" | "REVOKED" | "LAPSED_SUNSET" | "REFUSED" | "WITHDRAWN_DURING_REVIEW" | "EXPIRED")[] | undefined;
37
- moleculeType?: ("UNKNOWN" | "SMALL_MOLECULE" | "ANTIBODY" | "PROTEIN" | "ENZYME" | "OLIGONUCLEOTIDE" | "GENE" | "CELL" | "ANTIBODY_DRUG_CONJUGATE" | "VACCINE_COMPONENT" | "VACCINE" | "OLIGOSACCHARIDE")[] | undefined;
38
- hasDesignation?: ("PRIORITY_REVIEW" | "BREAKTHROUGH_THERAPY" | "FAST_TRACK" | "RMAT" | "ACCELERATED_APPROVAL" | "ACCELERATED_ASSESSMENT" | "PRIME" | "CONDITIONAL_MA" | "EXCEPTIONAL_CIRCUMSTANCES")[] | undefined;
39
- isOrphan?: boolean | undefined;
40
- minAuthorizationDate?: string | undefined;
41
- maxAuthorizationDate?: string | undefined;
42
- amassId?: string | undefined;
43
- fdaApplicationNumber?: string | undefined;
44
- emaProductNumber?: string | undefined;
45
- ndc?: string | undefined;
46
- splSetId?: string | undefined;
47
- documentSectionId?: string | undefined;
48
- }, RegulatoryApprovalsOutput>;
94
+ }): Tool<z.infer<typeof inputSchema>, RegulatoryApprovalsOutput>;
49
95
  export {};
@@ -12,13 +12,14 @@
12
12
  * top-level `"type":"object"`).
13
13
  */
14
14
  import { err, ok } from "neverthrow";
15
+ import { presentFirst } from "../../lib/present.js";
15
16
  import { z } from "zod";
16
17
  import { defineTool } from "../define-tool.js";
17
18
  import { describeAmassError, getRegulatoryRecord, getRegulatorySection, lookupRegulatoryIds, MAX_MATCHED_SECTIONS, REGULATORY_AGENCIES, REGULATORY_AUTHORIZATION_STATUSES, REGULATORY_DESIGNATIONS, REGULATORY_MOLECULE_TYPES, searchRegulatoryRecords, } from "../lib/amass-client.js";
18
19
  import { getAmassHeaders } from "../lib/amass-config.js";
20
+ import { ISO_DATE_PATTERN } from "../../lib/text.js";
19
21
  /** The largest `limit` that still costs one search price (5 credits for each 20 records). */
20
22
  const MAX_LIMIT = 20;
21
- const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
22
23
  const IDENTIFIER_FIELDS = ["amassId", "fdaApplicationNumber", "emaProductNumber", "ndc", "splSetId"];
23
24
  const inputSchema = z
24
25
  .object({
@@ -43,8 +44,8 @@ const inputSchema = z
43
44
  .optional()
44
45
  .describe("'search' only. Keep the authorizations that carry any of these designations."),
45
46
  isOrphan: z.boolean().optional().describe("'search' only. true keeps the FDA Orphan Drug / EMA Orphan Medicine authorizations; false drops them."),
46
- minAuthorizationDate: z.string().regex(ISO_DATE).optional().describe("'search' only. Earliest authorization date, YYYY-MM-DD."),
47
- maxAuthorizationDate: z.string().regex(ISO_DATE).optional().describe("'search' only. Latest authorization date, YYYY-MM-DD."),
47
+ minAuthorizationDate: z.string().regex(ISO_DATE_PATTERN).optional().describe("'search' only. Earliest authorization date, YYYY-MM-DD."),
48
+ maxAuthorizationDate: z.string().regex(ISO_DATE_PATTERN).optional().describe("'search' only. Latest authorization date, YYYY-MM-DD."),
48
49
  limit: z
49
50
  .number()
50
51
  .int()
@@ -111,23 +112,27 @@ export function createSearchRegulatoryApprovalsTool(deps) {
111
112
  execute: async (input) => {
112
113
  const headers = getAmassHeaders(deps.apiKey);
113
114
  if (input.action === "search") {
115
+ if (input.query === undefined)
116
+ throw new Error("search requires query");
114
117
  const rows = await searchRegulatoryRecords({
115
118
  query: input.query,
116
119
  limit: input.limit,
117
- ...(input.agency ? { agency: input.agency } : {}),
118
- ...(input.authorizationStatus ? { authorizationStatus: input.authorizationStatus } : {}),
119
- ...(input.moleculeType ? { moleculeType: input.moleculeType } : {}),
120
- ...(input.hasDesignation ? { hasDesignation: input.hasDesignation } : {}),
121
- ...(input.isOrphan === undefined ? {} : { isOrphan: input.isOrphan }),
122
- ...(input.minAuthorizationDate ? { minAuthorizationDate: input.minAuthorizationDate } : {}),
123
- ...(input.maxAuthorizationDate ? { maxAuthorizationDate: input.maxAuthorizationDate } : {}),
124
- ...(input.amassId ? { amassId: input.amassId } : {}),
120
+ agency: input.agency ? input.agency : undefined,
121
+ authorizationStatus: input.authorizationStatus ? input.authorizationStatus : undefined,
122
+ moleculeType: input.moleculeType ? input.moleculeType : undefined,
123
+ hasDesignation: input.hasDesignation ? input.hasDesignation : undefined,
124
+ isOrphan: input.isOrphan,
125
+ minAuthorizationDate: input.minAuthorizationDate,
126
+ maxAuthorizationDate: input.maxAuthorizationDate,
127
+ amassId: input.amassId ? input.amassId : undefined,
125
128
  }, headers);
126
129
  if (rows.isErr())
127
130
  return failure(rows.error);
128
131
  return ok({ authorizations: rows.value });
129
132
  }
130
133
  if (input.action === "section") {
134
+ if (input.amassId === undefined || input.documentSectionId === undefined)
135
+ throw new Error("section requires amassId and documentSectionId");
131
136
  const section = await getRegulatorySection(input.amassId, input.documentSectionId, headers);
132
137
  if (section.isErr())
133
138
  return failure(section.error);
@@ -136,10 +141,10 @@ export function createSearchRegulatoryApprovalsTool(deps) {
136
141
  let amassId = input.amassId;
137
142
  if (amassId === undefined) {
138
143
  const ids = await lookupRegulatoryIds({
139
- ...(input.fdaApplicationNumber === undefined ? {} : { fdaApplicationNumber: input.fdaApplicationNumber }),
140
- ...(input.emaProductNumber === undefined ? {} : { emaProductNumber: input.emaProductNumber }),
141
- ...(input.ndc === undefined ? {} : { ndc: input.ndc }),
142
- ...(input.splSetId === undefined ? {} : { splSetId: input.splSetId }),
144
+ fdaApplicationNumber: input.fdaApplicationNumber,
145
+ emaProductNumber: input.emaProductNumber,
146
+ ndc: input.ndc,
147
+ splSetId: input.splSetId,
143
148
  }, headers);
144
149
  if (ids.isErr())
145
150
  return failure(ids.error);
@@ -147,7 +152,7 @@ export function createSearchRegulatoryApprovalsTool(deps) {
147
152
  return ok({ status: "not_found" });
148
153
  if (ids.value.length > 1)
149
154
  return ok({ status: "ambiguous", candidates: ids.value });
150
- amassId = ids.value[0];
155
+ amassId = presentFirst(ids.value, "the single regulatory id");
151
156
  }
152
157
  const record = await getRegulatoryRecord(amassId, headers);
153
158
  if (record.isErr())
@@ -16,7 +16,7 @@ import { type SafetyLiability } from "../lib/opentargets-client.js";
16
16
  declare const SOURCES: readonly ["panel", "opentargets"];
17
17
  type Source = (typeof SOURCES)[number];
18
18
  type ConcreteType = "chembl_id" | "gene_symbol" | "uniprot" | "ensembl_id";
19
- interface TargetRow {
19
+ type TargetRow = {
20
20
  input: string;
21
21
  identifierType: ConcreteType;
22
22
  /** The Ensembl id Open Targets was queried with, when one could be obtained. */
@@ -27,27 +27,27 @@ interface TargetRow {
27
27
  liabilityCount?: number;
28
28
  /** Why the Open Targets half is absent for this identifier, when it is. */
29
29
  opentargetsNote?: string;
30
- }
31
- interface SourceOutcome {
30
+ };
31
+ type SourceOutcome = {
32
32
  source: Source;
33
33
  status: "ok" | "no_data" | "unavailable";
34
34
  /** Identifiers this source returned something for. */
35
35
  matched: number;
36
36
  detail?: string;
37
- }
37
+ };
38
38
  export declare const targetSafetyTool: import("../define-tool.js").Tool<{
39
39
  identifiers: string[];
40
- identifierType?: "auto" | "gene_symbol" | "uniprot" | "chembl_id" | "ensembl_id" | undefined;
40
+ identifierType?: "auto" | "chembl_id" | "ensembl_id" | "gene_symbol" | "uniprot" | undefined;
41
41
  sources?: ("opentargets" | "panel")[] | undefined;
42
- filterOrgan?: "hematologic" | "metabolic" | "immune" | "hepatic" | "musculoskeletal" | "cns" | "renal" | "reproductive" | "respiratory" | "cardiac" | "vascular" | "pns" | "gi" | "pancreas" | "endocrine_thyroid" | "dermatologic" | "ocular" | "oncology" | undefined;
43
- minSeverity?: "low" | "medium" | "high" | undefined;
42
+ filterOrgan?: "cardiac" | "cns" | "dermatologic" | "endocrine_thyroid" | "gi" | "hematologic" | "hepatic" | "immune" | "metabolic" | "musculoskeletal" | "ocular" | "oncology" | "pancreas" | "pns" | "renal" | "reproductive" | "respiratory" | "vascular" | undefined;
43
+ minSeverity?: "high" | "low" | "medium" | undefined;
44
44
  liabilityLimit?: number | undefined;
45
45
  }, {
46
46
  perSource: SourceOutcome[];
47
47
  summary: {
48
48
  totalInput: number;
49
49
  panelMatched: number;
50
- bySeverity: Record<"low" | "medium" | "high", number>;
50
+ bySeverity: Record<"high" | "low" | "medium", number>;
51
51
  byOrgan: Record<string, number>;
52
52
  openTargetsWithLiabilities: number;
53
53
  };
@@ -11,6 +11,8 @@
11
11
  * accepts ONLY an Ensembl gene id, and it is taken from the panel entry when
12
12
  * there is one and resolved from the gene symbol when there is not.
13
13
  */
14
+ import { errorMessageOf } from "../../lib/thrown.js";
15
+ import { textOf } from "../../lib/unknown-text.js";
14
16
  import { ok } from "neverthrow";
15
17
  import { z } from "zod";
16
18
  import { ORGAN_SYSTEMS } from "../../contracts/organ-system.js";
@@ -19,12 +21,15 @@ import { CHEMBL_RE, SafetyPanelFileSchema, UNIPROT_RE } from "../../data/safety-
19
21
  import panelData from "../../data/safety-panel.json" with { type: "json" };
20
22
  import { defineTool } from "../define-tool.js";
21
23
  import { resolveSymbolToEnsemblId } from "../lib/ensembl-client.js";
24
+ import { isAllDigits } from "../../lib/text.js";
22
25
  import { getTargetSafetyLiabilities } from "../lib/opentargets-client.js";
23
26
  const PANEL = SafetyPanelFileSchema.parse(panelData);
24
27
  const BY_CHEMBL = new Map(PANEL.targets.map((t) => [t.chembl_id, t]));
25
28
  const BY_GENE = new Map(PANEL.targets.map((t) => [t.gene_symbol, t]));
26
29
  const BY_UNIPROT = new Map(PANEL.targets.map((t) => [t.uniprot, t]));
27
- const ENSG_RE = /^ENSG\d{11}$/;
30
+ function isEnsemblGeneId(id) {
31
+ return id.startsWith("ENSG") && id.length === 15 && isAllDigits(id.slice(4));
32
+ }
28
33
  /** Ordered weakest → strongest so `minSeverity` can be a numeric floor. */
29
34
  const SEVERITY_ORDER = { low: 0, medium: 1, high: 2 };
30
35
  const SOURCES = ["panel", "opentargets"];
@@ -35,7 +40,7 @@ const DEFAULT_LIABILITY_LIMIT = 10;
35
40
  function detectType(id) {
36
41
  if (CHEMBL_RE.test(id))
37
42
  return "chembl_id";
38
- if (ENSG_RE.test(id))
43
+ if (isEnsemblGeneId(id))
39
44
  return "ensembl_id";
40
45
  if (UNIPROT_RE.test(id))
41
46
  return "uniprot";
@@ -84,7 +89,7 @@ const inputSchema = z
84
89
  .optional()
85
90
  .describe(`'opentargets' only. Max liabilities per target (default ${DEFAULT_LIABILITY_LIMIT}, max 100); \`liabilityCount\` gives the true total.`),
86
91
  })
87
- .refine((d) => (d.sources ?? [...SOURCES]).includes("opentargets") === false || d.identifiers.length <= MAX_OPENTARGETS_IDENTIFIERS, {
92
+ .refine((d) => !(d.sources ?? [...SOURCES]).includes("opentargets") || d.identifiers.length <= MAX_OPENTARGETS_IDENTIFIERS, {
88
93
  message: `identifiers is capped at ${MAX_OPENTARGETS_IDENTIFIERS} when source 'opentargets' is included (one request per target). ` +
89
94
  `Either narrow the list, or pass sources: ['panel'] to sweep up to ${MAX_PANEL_IDENTIFIERS} against the local panel first and follow up on the hits.`,
90
95
  path: ["identifiers"],
@@ -150,7 +155,7 @@ export const targetSafetyTool = defineTool({
150
155
  row.liabilities = result.safetyLiabilities.slice(0, limit);
151
156
  }
152
157
  catch (error) {
153
- opentargetsError = error instanceof Error ? error.message : String(error);
158
+ opentargetsError = errorMessageOf(error) ?? textOf(error);
154
159
  row.opentargetsNote = "Open Targets could not be reached";
155
160
  }
156
161
  }));
@@ -175,7 +180,7 @@ export const targetSafetyTool = defineTool({
175
180
  source: "opentargets",
176
181
  status: opentargetsError ? "unavailable" : withLiabilities > 0 ? "ok" : "no_data",
177
182
  matched: withLiabilities,
178
- ...(opentargetsError ? { detail: opentargetsError } : {}),
183
+ detail: opentargetsError,
179
184
  });
180
185
  }
181
186
  return ok({
@@ -184,7 +189,7 @@ export const targetSafetyTool = defineTool({
184
189
  totalInput: identifiers.length,
185
190
  panelMatched,
186
191
  bySeverity,
187
- byOrgan: byOrgan,
192
+ byOrgan,
188
193
  openTargetsWithLiabilities: withLiabilities,
189
194
  },
190
195
  targets: rows,
@@ -0,0 +1,40 @@
1
+ /**
2
+ * inspectCapabilityData — the reference data a specialist capability cannot run without, and
3
+ * whether this store holds it.
4
+ *
5
+ * The method of a capability lives in a skill pack, and only a sandbox step agent reads a skill.
6
+ * Thus a conversation or planning surface knows a capability by its phrase alone, and it cannot
7
+ * name the datasets the method needs. It then does one of two wrong things: it calls the work
8
+ * impossible, or it designs a method around what it can see and substitutes for what it cannot.
9
+ *
10
+ * The declaration on the agent metadata is the one place a surface above the step can read, and
11
+ * this tool is how it reads it. The answer names an absent dataset by its CATALOG ID, because the
12
+ * id is what an install takes — a surface that can provision needs the identifier, not a
13
+ * description. Where the ids reach an agent matters: a prompt names no dataset, so the knowledge
14
+ * arrives through a tool, which carries its own description into the context at attach time.
15
+ */
16
+ import { z } from "zod";
17
+ import type { EnvironmentStorePaths } from "../config/environment-stores.js";
18
+ import { type Tool } from "./define-tool.js";
19
+ export type InspectCapabilityDataDeps = Pick<EnvironmentStorePaths, "refStorePath">;
20
+ /** One capability, its declared datasets, and what the store holds of them. */
21
+ export type CapabilityDataRow = {
22
+ readonly agentId: string;
23
+ readonly capability: string;
24
+ readonly installed: readonly string[];
25
+ readonly absent: readonly string[];
26
+ };
27
+ export type CapabilityDataResult = {
28
+ /** False when the store could not be answered for: every `absent` list is then unknown, not empty. */
29
+ readonly storeReadable: boolean;
30
+ readonly rows: readonly CapabilityDataRow[];
31
+ readonly content: string;
32
+ };
33
+ /**
34
+ * Build the tool. The store read happens per call, not at construction: a dataset installed during
35
+ * the conversation must show as installed on the next call, and a cached answer would have the
36
+ * agent offer a download the user already approved.
37
+ */
38
+ declare const CapabilityDataInputSchema: z.ZodObject<{}, z.core.$strip>;
39
+ export declare function createInspectCapabilityDataTool(deps?: InspectCapabilityDataDeps): Tool<z.infer<typeof CapabilityDataInputSchema>, CapabilityDataResult>;
40
+ export {};
@@ -0,0 +1,74 @@
1
+ /**
2
+ * inspectCapabilityData — the reference data a specialist capability cannot run without, and
3
+ * whether this store holds it.
4
+ *
5
+ * The method of a capability lives in a skill pack, and only a sandbox step agent reads a skill.
6
+ * Thus a conversation or planning surface knows a capability by its phrase alone, and it cannot
7
+ * name the datasets the method needs. It then does one of two wrong things: it calls the work
8
+ * impossible, or it designs a method around what it can see and substitutes for what it cannot.
9
+ *
10
+ * The declaration on the agent metadata is the one place a surface above the step can read, and
11
+ * this tool is how it reads it. The answer names an absent dataset by its CATALOG ID, because the
12
+ * id is what an install takes — a surface that can provision needs the identifier, not a
13
+ * description. Where the ids reach an agent matters: a prompt names no dataset, so the knowledge
14
+ * arrives through a tool, which carries its own description into the context at attach time.
15
+ */
16
+ import { ok } from "neverthrow";
17
+ import { z } from "zod";
18
+ import { declaredDataRequirements } from "../agents/sandbox-catalog.js";
19
+ import { defineTool } from "./define-tool.js";
20
+ import { readInstalledDatasetIds } from "./sandbox/list-available-refs.js";
21
+ const NO_DECLARATIONS = "No capability of this install declares reference data that it cannot run without.";
22
+ const STORE_UNREADABLE = "The reference store could not be read, so whether these datasets are installed is UNKNOWN — not absent. " +
23
+ "Say that, and do not offer to install a dataset on this answer alone.";
24
+ function renderRows(rows, storeReadable) {
25
+ if (rows.length === 0)
26
+ return NO_DECLARATIONS;
27
+ const lines = rows.map((row) => {
28
+ const state = storeReadable
29
+ ? [row.absent.length > 0 ? `absent: ${row.absent.join(", ")}` : null, row.installed.length > 0 ? `installed: ${row.installed.join(", ")}` : null]
30
+ .filter((part) => part !== null)
31
+ .join(" | ")
32
+ : `declared: ${[...row.installed, ...row.absent].sort().join(", ")}`;
33
+ return `- ${row.agentId} — "${row.capability}"\n ${state}`;
34
+ });
35
+ const header = storeReadable
36
+ ? "Reference data a capability cannot run without, and what this store holds. An absent id is what an install takes."
37
+ : `Reference data a capability cannot run without. ${STORE_UNREADABLE}`;
38
+ return [header, "", ...lines].join("\n");
39
+ }
40
+ /**
41
+ * Build the tool. The store read happens per call, not at construction: a dataset installed during
42
+ * the conversation must show as installed on the next call, and a cached answer would have the
43
+ * agent offer a download the user already approved.
44
+ */
45
+ const CapabilityDataInputSchema = z.object({});
46
+ export function createInspectCapabilityDataTool(deps = {}) {
47
+ return defineTool({
48
+ id: "inspect_capability_data",
49
+ description: "The reference data a specialist capability cannot run without, and whether this install holds it. " +
50
+ "Call it BEFORE you design a method yourself, and before you tell the user that something cannot be done — a capability whose data is absent is one install away, not impossible, and this is the only place that names WHICH datasets. " +
51
+ "Each entry names a catalog dataset id, which is exactly what an install takes; a surface with a way to provision can act on it directly. " +
52
+ "It takes no arguments and the whole set is small, so one call is the complete answer. " +
53
+ "An unreadable store answers UNKNOWN rather than absent, so a store that cannot be read never reads as a store that holds nothing.",
54
+ inputSchema: CapabilityDataInputSchema,
55
+ describeCall: () => "declared capability data",
56
+ execute: async () => {
57
+ const declared = declaredDataRequirements();
58
+ if (declared.length === 0)
59
+ return ok({ storeReadable: true, rows: [], content: NO_DECLARATIONS });
60
+ const installedIds = await readInstalledDatasetIds(deps);
61
+ const storeReadable = installedIds !== undefined;
62
+ const rows = declared.map((requirement) => {
63
+ const datasets = [...requirement.datasets].sort();
64
+ return {
65
+ agentId: requirement.agentId,
66
+ capability: requirement.capability,
67
+ installed: installedIds === undefined ? [] : datasets.filter((dataset) => installedIds.has(dataset)),
68
+ absent: installedIds === undefined ? datasets : datasets.filter((dataset) => !installedIds.has(dataset)),
69
+ };
70
+ });
71
+ return ok({ storeReadable, rows, content: renderRows(rows, storeReadable) });
72
+ },
73
+ });
74
+ }