@inflexa-ai/harness 0.1.1

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 (823) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +58 -0
  4. package/dist/agents/conversation-agent.d.ts +105 -0
  5. package/dist/agents/conversation-agent.js +140 -0
  6. package/dist/agents/report-builder.d.ts +32 -0
  7. package/dist/agents/report-builder.js +31 -0
  8. package/dist/agents/sandbox/__fixtures__/deps.d.ts +23 -0
  9. package/dist/agents/sandbox/__fixtures__/deps.js +96 -0
  10. package/dist/agents/sandbox/bulk-transcriptomics-agent.d.ts +8 -0
  11. package/dist/agents/sandbox/bulk-transcriptomics-agent.js +22 -0
  12. package/dist/agents/sandbox/cheminformatics-agent.d.ts +9 -0
  13. package/dist/agents/sandbox/cheminformatics-agent.js +62 -0
  14. package/dist/agents/sandbox/chromatin-agent.d.ts +8 -0
  15. package/dist/agents/sandbox/chromatin-agent.js +24 -0
  16. package/dist/agents/sandbox/data-profiler.d.ts +10 -0
  17. package/dist/agents/sandbox/data-profiler.js +24 -0
  18. package/dist/agents/sandbox/dna-methylation-agent.d.ts +8 -0
  19. package/dist/agents/sandbox/dna-methylation-agent.js +24 -0
  20. package/dist/agents/sandbox/drug-repurposing-agent.d.ts +8 -0
  21. package/dist/agents/sandbox/drug-repurposing-agent.js +54 -0
  22. package/dist/agents/sandbox/enrichment-agent.d.ts +8 -0
  23. package/dist/agents/sandbox/enrichment-agent.js +24 -0
  24. package/dist/agents/sandbox/ephemeral-executor.d.ts +9 -0
  25. package/dist/agents/sandbox/ephemeral-executor.js +29 -0
  26. package/dist/agents/sandbox/genomic-variant-agent.d.ts +8 -0
  27. package/dist/agents/sandbox/genomic-variant-agent.js +27 -0
  28. package/dist/agents/sandbox/immune-profiling-agent.d.ts +8 -0
  29. package/dist/agents/sandbox/immune-profiling-agent.js +43 -0
  30. package/dist/agents/sandbox/index.d.ts +31 -0
  31. package/dist/agents/sandbox/index.js +96 -0
  32. package/dist/agents/sandbox/metabolomics-agent.d.ts +8 -0
  33. package/dist/agents/sandbox/metabolomics-agent.js +15 -0
  34. package/dist/agents/sandbox/microbiome-agent.d.ts +8 -0
  35. package/dist/agents/sandbox/microbiome-agent.js +15 -0
  36. package/dist/agents/sandbox/multi-omics-integration-agent.d.ts +8 -0
  37. package/dist/agents/sandbox/multi-omics-integration-agent.js +33 -0
  38. package/dist/agents/sandbox/multimodal-sc-agent.d.ts +8 -0
  39. package/dist/agents/sandbox/multimodal-sc-agent.js +15 -0
  40. package/dist/agents/sandbox/network-agent.d.ts +8 -0
  41. package/dist/agents/sandbox/network-agent.js +25 -0
  42. package/dist/agents/sandbox/pkpd-clinical-response-agent.d.ts +8 -0
  43. package/dist/agents/sandbox/pkpd-clinical-response-agent.js +59 -0
  44. package/dist/agents/sandbox/proteomics-agent.d.ts +8 -0
  45. package/dist/agents/sandbox/proteomics-agent.js +15 -0
  46. package/dist/agents/sandbox/scientific-executor.d.ts +9 -0
  47. package/dist/agents/sandbox/scientific-executor.js +56 -0
  48. package/dist/agents/sandbox/shared.d.ts +100 -0
  49. package/dist/agents/sandbox/shared.js +195 -0
  50. package/dist/agents/sandbox/single-cell-agent.d.ts +8 -0
  51. package/dist/agents/sandbox/single-cell-agent.js +25 -0
  52. package/dist/agents/sandbox/spatial-omics-agent.d.ts +8 -0
  53. package/dist/agents/sandbox/spatial-omics-agent.js +15 -0
  54. package/dist/agents/sandbox/statistical-modeling-agent.d.ts +8 -0
  55. package/dist/agents/sandbox/statistical-modeling-agent.js +37 -0
  56. package/dist/agents/sandbox/translational-safety-agent.d.ts +8 -0
  57. package/dist/agents/sandbox/translational-safety-agent.js +59 -0
  58. package/dist/agents/sandbox/types.d.ts +34 -0
  59. package/dist/agents/sandbox/types.js +15 -0
  60. package/dist/agents/sandbox/validate-skills.d.ts +18 -0
  61. package/dist/agents/sandbox/validate-skills.js +40 -0
  62. package/dist/agents/sandbox-catalog.d.ts +33 -0
  63. package/dist/agents/sandbox-catalog.js +44 -0
  64. package/dist/agents/system-prompt.d.ts +25 -0
  65. package/dist/agents/system-prompt.js +23 -0
  66. package/dist/app/chat-turn.d.ts +35 -0
  67. package/dist/app/chat-turn.js +64 -0
  68. package/dist/app/data-profile-policy.d.ts +36 -0
  69. package/dist/app/data-profile-policy.js +37 -0
  70. package/dist/app/message-assembly.d.ts +65 -0
  71. package/dist/app/message-assembly.js +61 -0
  72. package/dist/app/synthesize-run.d.ts +57 -0
  73. package/dist/app/synthesize-run.js +103 -0
  74. package/dist/auth/local-auth-context.d.ts +19 -0
  75. package/dist/auth/local-auth-context.js +20 -0
  76. package/dist/auth/local-run-authorizer.d.ts +10 -0
  77. package/dist/auth/local-run-authorizer.js +23 -0
  78. package/dist/auth/types.d.ts +166 -0
  79. package/dist/auth/types.js +61 -0
  80. package/dist/billing/cached-resolver.d.ts +23 -0
  81. package/dist/billing/cached-resolver.js +61 -0
  82. package/dist/billing/noop-resolver.d.ts +6 -0
  83. package/dist/billing/noop-resolver.js +7 -0
  84. package/dist/billing/noop-run-charge.d.ts +6 -0
  85. package/dist/billing/noop-run-charge.js +10 -0
  86. package/dist/billing/resolver.d.ts +64 -0
  87. package/dist/billing/resolver.js +24 -0
  88. package/dist/billing/run-charge.d.ts +24 -0
  89. package/dist/billing/run-charge.js +9 -0
  90. package/dist/config/resource-limits.d.ts +76 -0
  91. package/dist/config/resource-limits.js +116 -0
  92. package/dist/contracts/analogy-report.d.ts +120 -0
  93. package/dist/contracts/analogy-report.js +50 -0
  94. package/dist/contracts/chat-events.d.ts +61 -0
  95. package/dist/contracts/chat-events.js +13 -0
  96. package/dist/contracts/chat-parts.d.ts +308 -0
  97. package/dist/contracts/chat-parts.js +13 -0
  98. package/dist/contracts/content-url.d.ts +49 -0
  99. package/dist/contracts/content-url.js +56 -0
  100. package/dist/contracts/index.d.ts +12 -0
  101. package/dist/contracts/index.js +5 -0
  102. package/dist/contracts/message.d.ts +36 -0
  103. package/dist/contracts/message.js +9 -0
  104. package/dist/contracts/part-registry.d.ts +18 -0
  105. package/dist/contracts/part-registry.js +28 -0
  106. package/dist/contracts/schemas/chat-events.d.ts +90 -0
  107. package/dist/contracts/schemas/chat-events.js +43 -0
  108. package/dist/contracts/schemas/chat-parts.d.ts +683 -0
  109. package/dist/contracts/schemas/chat-parts.js +295 -0
  110. package/dist/contracts/schemas/index.d.ts +2 -0
  111. package/dist/contracts/schemas/index.js +2 -0
  112. package/dist/contracts/target-assessment-row.d.ts +85 -0
  113. package/dist/contracts/target-assessment-row.js +37 -0
  114. package/dist/contracts/target-dossier.d.ts +16720 -0
  115. package/dist/contracts/target-dossier.js +1339 -0
  116. package/dist/data/clinical-benchmarks.json +108 -0
  117. package/dist/data/protein-family-modality.json +101 -0
  118. package/dist/data/safety-panel-schema.d.ts +64 -0
  119. package/dist/data/safety-panel-schema.js +34 -0
  120. package/dist/data/safety-panel.json +436 -0
  121. package/dist/execution/artifact-metadata.d.ts +74 -0
  122. package/dist/execution/artifact-metadata.js +203 -0
  123. package/dist/execution/artifact-record.d.ts +19 -0
  124. package/dist/execution/artifact-record.js +7 -0
  125. package/dist/execution/artifact-registration.d.ts +36 -0
  126. package/dist/execution/artifact-registration.js +61 -0
  127. package/dist/execution/artifact-registry.d.ts +82 -0
  128. package/dist/execution/artifact-registry.js +17 -0
  129. package/dist/execution/dbos-run-launcher.d.ts +7 -0
  130. package/dist/execution/dbos-run-launcher.js +38 -0
  131. package/dist/execution/ephemeral-runner.d.ts +81 -0
  132. package/dist/execution/ephemeral-runner.js +161 -0
  133. package/dist/execution/filesystem-artifact-registry.d.ts +57 -0
  134. package/dist/execution/filesystem-artifact-registry.js +92 -0
  135. package/dist/execution/noop-artifact-registry.d.ts +11 -0
  136. package/dist/execution/noop-artifact-registry.js +17 -0
  137. package/dist/execution/post-step-pipeline.d.ts +70 -0
  138. package/dist/execution/post-step-pipeline.js +207 -0
  139. package/dist/execution/post-step.d.ts +20 -0
  140. package/dist/execution/post-step.js +65 -0
  141. package/dist/execution/reconcile-manifest.d.ts +25 -0
  142. package/dist/execution/reconcile-manifest.js +132 -0
  143. package/dist/execution/report-render.d.ts +39 -0
  144. package/dist/execution/report-render.js +98 -0
  145. package/dist/execution/report-runner.d.ts +87 -0
  146. package/dist/execution/report-runner.js +227 -0
  147. package/dist/execution/run-authorizer.d.ts +43 -0
  148. package/dist/execution/run-authorizer.js +17 -0
  149. package/dist/execution/run-launcher.d.ts +36 -0
  150. package/dist/execution/run-launcher.js +15 -0
  151. package/dist/execution/run-synthesis.d.ts +107 -0
  152. package/dist/execution/run-synthesis.js +329 -0
  153. package/dist/execution/staged-input.d.ts +41 -0
  154. package/dist/execution/staged-input.js +15 -0
  155. package/dist/execution/step-summary-metrics.d.ts +10 -0
  156. package/dist/execution/step-summary-metrics.js +22 -0
  157. package/dist/execution/step-summary.d.ts +55 -0
  158. package/dist/execution/step-summary.js +106 -0
  159. package/dist/execution/topo-sort.d.ts +33 -0
  160. package/dist/execution/topo-sort.js +99 -0
  161. package/dist/index.d.ts +112 -0
  162. package/dist/index.js +157 -0
  163. package/dist/input-sanitization.d.ts +22 -0
  164. package/dist/input-sanitization.js +64 -0
  165. package/dist/lib/async-utils.d.ts +10 -0
  166. package/dist/lib/async-utils.js +24 -0
  167. package/dist/lib/chrome.d.ts +15 -0
  168. package/dist/lib/chrome.js +95 -0
  169. package/dist/lib/db-result.d.ts +93 -0
  170. package/dist/lib/db-result.js +197 -0
  171. package/dist/lib/fs-helpers.d.ts +74 -0
  172. package/dist/lib/fs-helpers.js +119 -0
  173. package/dist/lib/fs-result.d.ts +98 -0
  174. package/dist/lib/fs-result.js +137 -0
  175. package/dist/lib/host-concurrency.d.ts +16 -0
  176. package/dist/lib/host-concurrency.js +60 -0
  177. package/dist/lib/identifiers.d.ts +8 -0
  178. package/dist/lib/identifiers.js +10 -0
  179. package/dist/lib/metrics.d.ts +7 -0
  180. package/dist/lib/metrics.js +12 -0
  181. package/dist/lib/mime-detect.d.ts +17 -0
  182. package/dist/lib/mime-detect.js +29 -0
  183. package/dist/lib/otel.d.ts +30 -0
  184. package/dist/lib/otel.js +102 -0
  185. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +35 -0
  186. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +107 -0
  187. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +46 -0
  188. package/dist/lib/regulatory-corpus/fetch-ich.js +173 -0
  189. package/dist/lib/regulatory-corpus.d.ts +88 -0
  190. package/dist/lib/regulatory-corpus.js +141 -0
  191. package/dist/lib/result.d.ts +87 -0
  192. package/dist/lib/result.js +103 -0
  193. package/dist/lib/storage.d.ts +29 -0
  194. package/dist/lib/storage.js +37 -0
  195. package/dist/lib/streamed-download.d.ts +28 -0
  196. package/dist/lib/streamed-download.js +111 -0
  197. package/dist/lib/trace-context.d.ts +11 -0
  198. package/dist/lib/trace-context.js +49 -0
  199. package/dist/loop/__fixtures__/scripted-provider.d.ts +31 -0
  200. package/dist/loop/__fixtures__/scripted-provider.js +57 -0
  201. package/dist/loop/budget-exceeded.d.ts +22 -0
  202. package/dist/loop/budget-exceeded.js +41 -0
  203. package/dist/loop/metrics.d.ts +25 -0
  204. package/dist/loop/metrics.js +46 -0
  205. package/dist/loop/run-agent.d.ts +28 -0
  206. package/dist/loop/run-agent.js +204 -0
  207. package/dist/loop/run-step.d.ts +29 -0
  208. package/dist/loop/run-step.js +34 -0
  209. package/dist/loop/run-to-terminal.d.ts +46 -0
  210. package/dist/loop/run-to-terminal.js +51 -0
  211. package/dist/loop/types.d.ts +95 -0
  212. package/dist/loop/types.js +10 -0
  213. package/dist/memory/ai-sdk-message-storage.d.ts +20 -0
  214. package/dist/memory/ai-sdk-message-storage.js +114 -0
  215. package/dist/memory/card-builders.d.ts +114 -0
  216. package/dist/memory/card-builders.js +231 -0
  217. package/dist/memory/content-to-cortex.d.ts +42 -0
  218. package/dist/memory/content-to-cortex.js +85 -0
  219. package/dist/memory/count-tokens.d.ts +18 -0
  220. package/dist/memory/count-tokens.js +64 -0
  221. package/dist/memory/derive-thread-title.d.ts +14 -0
  222. package/dist/memory/derive-thread-title.js +26 -0
  223. package/dist/memory/message-backfill.d.ts +2 -0
  224. package/dist/memory/message-backfill.js +38 -0
  225. package/dist/memory/reconstruct-cards.d.ts +23 -0
  226. package/dist/memory/reconstruct-cards.js +64 -0
  227. package/dist/memory/thread-history.d.ts +80 -0
  228. package/dist/memory/thread-history.js +187 -0
  229. package/dist/memory/thread-store.d.ts +66 -0
  230. package/dist/memory/thread-store.js +88 -0
  231. package/dist/memory/working-memory.d.ts +135 -0
  232. package/dist/memory/working-memory.js +185 -0
  233. package/dist/prompts/SOUL.d.ts +17 -0
  234. package/dist/prompts/SOUL.js +173 -0
  235. package/dist/prompts/analogical-reasoner.d.ts +1 -0
  236. package/dist/prompts/analogical-reasoner.js +170 -0
  237. package/dist/prompts/conversation.d.ts +1 -0
  238. package/dist/prompts/conversation.js +697 -0
  239. package/dist/prompts/execute-analysis/step-summary.d.ts +1 -0
  240. package/dist/prompts/execute-analysis/step-summary.js +38 -0
  241. package/dist/prompts/literature-reviewer.d.ts +1 -0
  242. package/dist/prompts/literature-reviewer.js +107 -0
  243. package/dist/prompts/planner.d.ts +2 -0
  244. package/dist/prompts/planner.js +259 -0
  245. package/dist/prompts/report-builder.d.ts +1 -0
  246. package/dist/prompts/report-builder.js +127 -0
  247. package/dist/prompts/sandbox/bulk-transcriptomics-agent.d.ts +1 -0
  248. package/dist/prompts/sandbox/bulk-transcriptomics-agent.js +78 -0
  249. package/dist/prompts/sandbox/cheminformatics-agent.d.ts +1 -0
  250. package/dist/prompts/sandbox/cheminformatics-agent.js +224 -0
  251. package/dist/prompts/sandbox/chromatin-agent.d.ts +1 -0
  252. package/dist/prompts/sandbox/chromatin-agent.js +100 -0
  253. package/dist/prompts/sandbox/data-profiler.d.ts +1 -0
  254. package/dist/prompts/sandbox/data-profiler.js +291 -0
  255. package/dist/prompts/sandbox/dna-methylation-agent.d.ts +1 -0
  256. package/dist/prompts/sandbox/dna-methylation-agent.js +96 -0
  257. package/dist/prompts/sandbox/drug-repurposing-agent.d.ts +1 -0
  258. package/dist/prompts/sandbox/drug-repurposing-agent.js +144 -0
  259. package/dist/prompts/sandbox/enrichment-agent.d.ts +1 -0
  260. package/dist/prompts/sandbox/enrichment-agent.js +89 -0
  261. package/dist/prompts/sandbox/ephemeral-executor.d.ts +1 -0
  262. package/dist/prompts/sandbox/ephemeral-executor.js +66 -0
  263. package/dist/prompts/sandbox/genomic-variant-agent.d.ts +1 -0
  264. package/dist/prompts/sandbox/genomic-variant-agent.js +83 -0
  265. package/dist/prompts/sandbox/immune-profiling-agent.d.ts +1 -0
  266. package/dist/prompts/sandbox/immune-profiling-agent.js +101 -0
  267. package/dist/prompts/sandbox/metabolomics-agent.d.ts +1 -0
  268. package/dist/prompts/sandbox/metabolomics-agent.js +89 -0
  269. package/dist/prompts/sandbox/microbiome-agent.d.ts +1 -0
  270. package/dist/prompts/sandbox/microbiome-agent.js +109 -0
  271. package/dist/prompts/sandbox/multi-omics-integration-agent.d.ts +1 -0
  272. package/dist/prompts/sandbox/multi-omics-integration-agent.js +122 -0
  273. package/dist/prompts/sandbox/multimodal-sc-agent.d.ts +1 -0
  274. package/dist/prompts/sandbox/multimodal-sc-agent.js +90 -0
  275. package/dist/prompts/sandbox/network-agent.d.ts +1 -0
  276. package/dist/prompts/sandbox/network-agent.js +95 -0
  277. package/dist/prompts/sandbox/pkpd-clinical-response-agent.d.ts +1 -0
  278. package/dist/prompts/sandbox/pkpd-clinical-response-agent.js +71 -0
  279. package/dist/prompts/sandbox/proteomics-agent.d.ts +1 -0
  280. package/dist/prompts/sandbox/proteomics-agent.js +93 -0
  281. package/dist/prompts/sandbox/scientific-executor.d.ts +1 -0
  282. package/dist/prompts/sandbox/scientific-executor.js +68 -0
  283. package/dist/prompts/sandbox/single-cell-agent.d.ts +1 -0
  284. package/dist/prompts/sandbox/single-cell-agent.js +129 -0
  285. package/dist/prompts/sandbox/spatial-omics-agent.d.ts +1 -0
  286. package/dist/prompts/sandbox/spatial-omics-agent.js +94 -0
  287. package/dist/prompts/sandbox/statistical-modeling-agent.d.ts +1 -0
  288. package/dist/prompts/sandbox/statistical-modeling-agent.js +112 -0
  289. package/dist/prompts/sandbox/translational-safety-agent.d.ts +1 -0
  290. package/dist/prompts/sandbox/translational-safety-agent.js +105 -0
  291. package/dist/prompts/sandbox-standards.d.ts +18 -0
  292. package/dist/prompts/sandbox-standards.js +358 -0
  293. package/dist/prompts/synthesis-agent.d.ts +1 -0
  294. package/dist/prompts/synthesis-agent.js +289 -0
  295. package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +1 -0
  296. package/dist/prompts/target-assessment/briefs/executive-recommendation.js +85 -0
  297. package/dist/prompts/target-assessment/briefs/index.d.ts +4 -0
  298. package/dist/prompts/target-assessment/briefs/index.js +4 -0
  299. package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +1 -0
  300. package/dist/prompts/target-assessment/briefs/liability-bullets.js +114 -0
  301. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +1 -0
  302. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +29 -0
  303. package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +1 -0
  304. package/dist/prompts/target-assessment/briefs/translational-commentary.js +23 -0
  305. package/dist/prompts/target-assessment/drugs-in-class.d.ts +1 -0
  306. package/dist/prompts/target-assessment/drugs-in-class.js +29 -0
  307. package/dist/prompts/target-assessment/modulator-triage.d.ts +1 -0
  308. package/dist/prompts/target-assessment/modulator-triage.js +31 -0
  309. package/dist/prompts/target-assessment/off-target-annotator.d.ts +1 -0
  310. package/dist/prompts/target-assessment/off-target-annotator.js +28 -0
  311. package/dist/prompts/target-assessment/tox-voice/core.d.ts +1 -0
  312. package/dist/prompts/target-assessment/tox-voice/core.js +74 -0
  313. package/dist/prompts/target-assessment/tox-voice/critique.d.ts +7 -0
  314. package/dist/prompts/target-assessment/tox-voice/critique.js +109 -0
  315. package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +8 -0
  316. package/dist/prompts/target-assessment/tox-voice/exemplars.js +24 -0
  317. package/dist/prompts/target-assessment/tox-voice/index.d.ts +4 -0
  318. package/dist/prompts/target-assessment/tox-voice/index.js +4 -0
  319. package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +15 -0
  320. package/dist/prompts/target-assessment/tox-voice/vocabulary.js +72 -0
  321. package/dist/provenance/collector.d.ts +148 -0
  322. package/dist/provenance/collector.js +296 -0
  323. package/dist/provenance/exec-frame.d.ts +36 -0
  324. package/dist/provenance/exec-frame.js +49 -0
  325. package/dist/provenance/types.d.ts +95 -0
  326. package/dist/provenance/types.js +64 -0
  327. package/dist/providers/__fixtures__/session.d.ts +16 -0
  328. package/dist/providers/__fixtures__/session.js +20 -0
  329. package/dist/providers/ai-sdk.d.ts +47 -0
  330. package/dist/providers/ai-sdk.js +142 -0
  331. package/dist/providers/anthropic.d.ts +22 -0
  332. package/dist/providers/anthropic.js +26 -0
  333. package/dist/providers/embedding.d.ts +32 -0
  334. package/dist/providers/embedding.js +42 -0
  335. package/dist/providers/errors.d.ts +80 -0
  336. package/dist/providers/errors.js +137 -0
  337. package/dist/providers/llm-capabilities.d.ts +33 -0
  338. package/dist/providers/llm-capabilities.js +58 -0
  339. package/dist/providers/streaming-chat.d.ts +23 -0
  340. package/dist/providers/streaming-chat.js +61 -0
  341. package/dist/providers/types.d.ts +59 -0
  342. package/dist/providers/types.js +8 -0
  343. package/dist/runtime/assemble.d.ts +68 -0
  344. package/dist/runtime/assemble.js +46 -0
  345. package/dist/runtime/boot.d.ts +73 -0
  346. package/dist/runtime/boot.js +65 -0
  347. package/dist/runtime/connection-budget.d.ts +48 -0
  348. package/dist/runtime/connection-budget.js +57 -0
  349. package/dist/runtime/dbos.d.ts +94 -0
  350. package/dist/runtime/dbos.js +160 -0
  351. package/dist/runtime/lifecycle.d.ts +12 -0
  352. package/dist/runtime/lifecycle.js +19 -0
  353. package/dist/runtime/pools.d.ts +25 -0
  354. package/dist/runtime/pools.js +30 -0
  355. package/dist/runtime/shutdown.d.ts +33 -0
  356. package/dist/runtime/shutdown.js +39 -0
  357. package/dist/sandbox/await-exec.d.ts +143 -0
  358. package/dist/sandbox/await-exec.js +406 -0
  359. package/dist/sandbox/client.d.ts +82 -0
  360. package/dist/sandbox/client.js +23 -0
  361. package/dist/sandbox/create-sandbox.d.ts +105 -0
  362. package/dist/sandbox/create-sandbox.js +132 -0
  363. package/dist/sandbox/deliver-exec-event.d.ts +25 -0
  364. package/dist/sandbox/deliver-exec-event.js +29 -0
  365. package/dist/sandbox/docker-client.d.ts +75 -0
  366. package/dist/sandbox/docker-client.js +315 -0
  367. package/dist/sandbox/estimate-data-profile-resources.d.ts +5 -0
  368. package/dist/sandbox/estimate-data-profile-resources.js +73 -0
  369. package/dist/sandbox/exec-id.d.ts +12 -0
  370. package/dist/sandbox/exec-id.js +20 -0
  371. package/dist/sandbox/execution-id.d.ts +30 -0
  372. package/dist/sandbox/execution-id.js +47 -0
  373. package/dist/sandbox/hmac.d.ts +54 -0
  374. package/dist/sandbox/hmac.js +67 -0
  375. package/dist/sandbox/identity.d.ts +15 -0
  376. package/dist/sandbox/identity.js +22 -0
  377. package/dist/sandbox/ignored-dirs.d.ts +7 -0
  378. package/dist/sandbox/ignored-dirs.js +7 -0
  379. package/dist/sandbox/k8s-client.d.ts +71 -0
  380. package/dist/sandbox/k8s-client.js +488 -0
  381. package/dist/sandbox/liveness.d.ts +60 -0
  382. package/dist/sandbox/liveness.js +82 -0
  383. package/dist/sandbox/mount-plan.d.ts +77 -0
  384. package/dist/sandbox/mount-plan.js +84 -0
  385. package/dist/sandbox/notification-sweep.d.ts +42 -0
  386. package/dist/sandbox/notification-sweep.js +74 -0
  387. package/dist/sandbox/reaper.d.ts +70 -0
  388. package/dist/sandbox/reaper.js +124 -0
  389. package/dist/sandbox/sandbox-error.d.ts +105 -0
  390. package/dist/sandbox/sandbox-error.js +92 -0
  391. package/dist/sandbox/sandbox-step-translate.d.ts +35 -0
  392. package/dist/sandbox/sandbox-step-translate.js +76 -0
  393. package/dist/sandbox/submit-exec.d.ts +33 -0
  394. package/dist/sandbox/submit-exec.js +68 -0
  395. package/dist/sandbox/types.d.ts +277 -0
  396. package/dist/sandbox/types.js +147 -0
  397. package/dist/sandbox/watchdog.d.ts +71 -0
  398. package/dist/sandbox/watchdog.js +150 -0
  399. package/dist/schemas/artifact-manifest.d.ts +34 -0
  400. package/dist/schemas/artifact-manifest.js +36 -0
  401. package/dist/schemas/data-profile-schemas.d.ts +92 -0
  402. package/dist/schemas/data-profile-schemas.js +89 -0
  403. package/dist/schemas/file-metadata.d.ts +51 -0
  404. package/dist/schemas/file-metadata.js +39 -0
  405. package/dist/schemas/plan-schemas.d.ts +110 -0
  406. package/dist/schemas/plan-schemas.js +50 -0
  407. package/dist/schemas/render-step-prompt.d.ts +32 -0
  408. package/dist/schemas/render-step-prompt.js +76 -0
  409. package/dist/schemas/run-synthesis.d.ts +148 -0
  410. package/dist/schemas/run-synthesis.js +87 -0
  411. package/dist/schemas/step-summary.d.ts +18 -0
  412. package/dist/schemas/step-summary.js +20 -0
  413. package/dist/schemas/validate-plan.d.ts +39 -0
  414. package/dist/schemas/validate-plan.js +120 -0
  415. package/dist/schemas/workflow-state.d.ts +314 -0
  416. package/dist/schemas/workflow-state.js +139 -0
  417. package/dist/state/active-sandboxes.d.ts +58 -0
  418. package/dist/state/active-sandboxes.js +100 -0
  419. package/dist/state/analyses-metrics.d.ts +21 -0
  420. package/dist/state/analyses-metrics.js +59 -0
  421. package/dist/state/analyses.d.ts +58 -0
  422. package/dist/state/analyses.js +132 -0
  423. package/dist/state/artifacts.d.ts +53 -0
  424. package/dist/state/artifacts.js +175 -0
  425. package/dist/state/data-profile.d.ts +176 -0
  426. package/dist/state/data-profile.js +284 -0
  427. package/dist/state/db.d.ts +10 -0
  428. package/dist/state/db.js +9 -0
  429. package/dist/state/index.d.ts +29 -0
  430. package/dist/state/index.js +20 -0
  431. package/dist/state/init.d.ts +14 -0
  432. package/dist/state/init.js +406 -0
  433. package/dist/state/plans.d.ts +56 -0
  434. package/dist/state/plans.js +117 -0
  435. package/dist/state/runs.d.ts +69 -0
  436. package/dist/state/runs.js +206 -0
  437. package/dist/state/schema.d.ts +150 -0
  438. package/dist/state/schema.js +100 -0
  439. package/dist/state/step-executions.d.ts +77 -0
  440. package/dist/state/step-executions.js +175 -0
  441. package/dist/state/target-assessments.d.ts +68 -0
  442. package/dist/state/target-assessments.js +222 -0
  443. package/dist/state/vector-store.d.ts +53 -0
  444. package/dist/state/vector-store.js +89 -0
  445. package/dist/tasks/data-profile.d.ts +171 -0
  446. package/dist/tasks/data-profile.js +461 -0
  447. package/dist/tasks/refresh-regulatory-corpus.d.ts +59 -0
  448. package/dist/tasks/refresh-regulatory-corpus.js +146 -0
  449. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +55 -0
  450. package/dist/tasks/regulatory-corpus-boot-refresh.js +149 -0
  451. package/dist/tools/__fixtures__/tool-context.d.ts +13 -0
  452. package/dist/tools/__fixtures__/tool-context.js +18 -0
  453. package/dist/tools/bio/check-safety-panel.d.ts +35 -0
  454. package/dist/tools/bio/check-safety-panel.js +76 -0
  455. package/dist/tools/bio/find-approval-precedent.d.ts +32 -0
  456. package/dist/tools/bio/find-approval-precedent.js +72 -0
  457. package/dist/tools/bio/get-article-details.d.ts +11 -0
  458. package/dist/tools/bio/get-article-details.js +20 -0
  459. package/dist/tools/bio/get-article-full-text.d.ts +19 -0
  460. package/dist/tools/bio/get-article-full-text.js +32 -0
  461. package/dist/tools/bio/get-bioactivity.d.ts +11 -0
  462. package/dist/tools/bio/get-bioactivity.js +23 -0
  463. package/dist/tools/bio/get-drug-info.d.ts +9 -0
  464. package/dist/tools/bio/get-drug-info.js +22 -0
  465. package/dist/tools/bio/get-impc-ko-profile.d.ts +9 -0
  466. package/dist/tools/bio/get-impc-ko-profile.js +20 -0
  467. package/dist/tools/bio/get-mechanism.d.ts +8 -0
  468. package/dist/tools/bio/get-mechanism.js +18 -0
  469. package/dist/tools/bio/get-pubchem-assays.d.ts +22 -0
  470. package/dist/tools/bio/get-pubchem-assays.js +107 -0
  471. package/dist/tools/bio/get-pubchem-cross-refs.d.ts +15 -0
  472. package/dist/tools/bio/get-pubchem-cross-refs.js +68 -0
  473. package/dist/tools/bio/get-target-safety.d.ts +18 -0
  474. package/dist/tools/bio/get-target-safety.js +26 -0
  475. package/dist/tools/bio/index.d.ts +41 -0
  476. package/dist/tools/bio/index.js +48 -0
  477. package/dist/tools/bio/keys.d.ts +31 -0
  478. package/dist/tools/bio/keys.js +30 -0
  479. package/dist/tools/bio/lookup-go-term.d.ts +31 -0
  480. package/dist/tools/bio/lookup-go-term.js +116 -0
  481. package/dist/tools/bio/search-bgee-expression.d.ts +10 -0
  482. package/dist/tools/bio/search-bgee-expression.js +24 -0
  483. package/dist/tools/bio/search-clinical-trials.d.ts +12 -0
  484. package/dist/tools/bio/search-clinical-trials.js +21 -0
  485. package/dist/tools/bio/search-clinvar.d.ts +13 -0
  486. package/dist/tools/bio/search-clinvar.js +28 -0
  487. package/dist/tools/bio/search-compounds.d.ts +22 -0
  488. package/dist/tools/bio/search-compounds.js +160 -0
  489. package/dist/tools/bio/search-ctx-chemical.d.ts +50 -0
  490. package/dist/tools/bio/search-ctx-chemical.js +130 -0
  491. package/dist/tools/bio/search-ctx-exposure.d.ts +55 -0
  492. package/dist/tools/bio/search-ctx-exposure.js +176 -0
  493. package/dist/tools/bio/search-ctx-hazard.d.ts +111 -0
  494. package/dist/tools/bio/search-ctx-hazard.js +178 -0
  495. package/dist/tools/bio/search-dgidb.d.ts +43 -0
  496. package/dist/tools/bio/search-dgidb.js +199 -0
  497. package/dist/tools/bio/search-disgenet.d.ts +30 -0
  498. package/dist/tools/bio/search-disgenet.js +84 -0
  499. package/dist/tools/bio/search-drugbank.d.ts +38 -0
  500. package/dist/tools/bio/search-drugbank.js +109 -0
  501. package/dist/tools/bio/search-faers.d.ts +11 -0
  502. package/dist/tools/bio/search-faers.js +23 -0
  503. package/dist/tools/bio/search-gene.d.ts +11 -0
  504. package/dist/tools/bio/search-gene.js +19 -0
  505. package/dist/tools/bio/search-geo-datasets.d.ts +20 -0
  506. package/dist/tools/bio/search-geo-datasets.js +86 -0
  507. package/dist/tools/bio/search-gwas-catalog.d.ts +33 -0
  508. package/dist/tools/bio/search-gwas-catalog.js +172 -0
  509. package/dist/tools/bio/search-interactions.d.ts +17 -0
  510. package/dist/tools/bio/search-interactions.js +31 -0
  511. package/dist/tools/bio/search-opentargets.d.ts +11 -0
  512. package/dist/tools/bio/search-opentargets.js +25 -0
  513. package/dist/tools/bio/search-pathway.d.ts +12 -0
  514. package/dist/tools/bio/search-pathway.js +32 -0
  515. package/dist/tools/bio/search-pharmgkb.d.ts +17 -0
  516. package/dist/tools/bio/search-pharmgkb.js +46 -0
  517. package/dist/tools/bio/search-pubchem-compound.d.ts +26 -0
  518. package/dist/tools/bio/search-pubchem-compound.js +110 -0
  519. package/dist/tools/bio/search-pubmed.d.ts +17 -0
  520. package/dist/tools/bio/search-pubmed.js +31 -0
  521. package/dist/tools/bio/search-targets.d.ts +9 -0
  522. package/dist/tools/bio/search-targets.js +20 -0
  523. package/dist/tools/bio/search-toxcast.d.ts +36 -0
  524. package/dist/tools/bio/search-toxcast.js +141 -0
  525. package/dist/tools/define-tool.d.ts +80 -0
  526. package/dist/tools/define-tool.js +48 -0
  527. package/dist/tools/display/index.d.ts +4 -0
  528. package/dist/tools/display/index.js +4 -0
  529. package/dist/tools/display/show-user.d.ts +33 -0
  530. package/dist/tools/display/show-user.js +67 -0
  531. package/dist/tools/execute-plan.d.ts +64 -0
  532. package/dist/tools/execute-plan.js +208 -0
  533. package/dist/tools/iterate-report.d.ts +172 -0
  534. package/dist/tools/iterate-report.js +521 -0
  535. package/dist/tools/lib/api-utils.d.ts +80 -0
  536. package/dist/tools/lib/api-utils.js +128 -0
  537. package/dist/tools/lib/bgee-client.d.ts +36 -0
  538. package/dist/tools/lib/bgee-client.js +150 -0
  539. package/dist/tools/lib/cbioportal-client.d.ts +34 -0
  540. package/dist/tools/lib/cbioportal-client.js +159 -0
  541. package/dist/tools/lib/chembl-client.d.ts +123 -0
  542. package/dist/tools/lib/chembl-client.js +458 -0
  543. package/dist/tools/lib/chembl-config.d.ts +5 -0
  544. package/dist/tools/lib/chembl-config.js +3 -0
  545. package/dist/tools/lib/clinical-benchmarks-client.d.ts +33 -0
  546. package/dist/tools/lib/clinical-benchmarks-client.js +54 -0
  547. package/dist/tools/lib/clinical-trials-client.d.ts +216 -0
  548. package/dist/tools/lib/clinical-trials-client.js +339 -0
  549. package/dist/tools/lib/clinicaltrials-config.d.ts +4 -0
  550. package/dist/tools/lib/clinicaltrials-config.js +2 -0
  551. package/dist/tools/lib/clinvar-client.d.ts +25 -0
  552. package/dist/tools/lib/clinvar-client.js +126 -0
  553. package/dist/tools/lib/disgenet-config.d.ts +2 -0
  554. package/dist/tools/lib/disgenet-config.js +11 -0
  555. package/dist/tools/lib/drugbank-config.d.ts +2 -0
  556. package/dist/tools/lib/drugbank-config.js +12 -0
  557. package/dist/tools/lib/ema-client.d.ts +45 -0
  558. package/dist/tools/lib/ema-client.js +127 -0
  559. package/dist/tools/lib/ema-config.d.ts +7 -0
  560. package/dist/tools/lib/ema-config.js +7 -0
  561. package/dist/tools/lib/ensembl-client.d.ts +27 -0
  562. package/dist/tools/lib/ensembl-client.js +82 -0
  563. package/dist/tools/lib/gwas-catalog-config.d.ts +4 -0
  564. package/dist/tools/lib/gwas-catalog-config.js +2 -0
  565. package/dist/tools/lib/identifier-resolver.d.ts +85 -0
  566. package/dist/tools/lib/identifier-resolver.js +333 -0
  567. package/dist/tools/lib/impc-client.d.ts +44 -0
  568. package/dist/tools/lib/impc-client.js +239 -0
  569. package/dist/tools/lib/iuphar-client.d.ts +75 -0
  570. package/dist/tools/lib/iuphar-client.js +230 -0
  571. package/dist/tools/lib/iuphar-config.d.ts +5 -0
  572. package/dist/tools/lib/iuphar-config.js +3 -0
  573. package/dist/tools/lib/ncbi-utils.d.ts +58 -0
  574. package/dist/tools/lib/ncbi-utils.js +286 -0
  575. package/dist/tools/lib/openfda-client.d.ts +53 -0
  576. package/dist/tools/lib/openfda-client.js +192 -0
  577. package/dist/tools/lib/openfda-config.d.ts +2 -0
  578. package/dist/tools/lib/openfda-config.js +2 -0
  579. package/dist/tools/lib/opentargets-client.d.ts +64 -0
  580. package/dist/tools/lib/opentargets-client.js +290 -0
  581. package/dist/tools/lib/opentargets-config.d.ts +5 -0
  582. package/dist/tools/lib/opentargets-config.js +5 -0
  583. package/dist/tools/lib/path-validation.d.ts +14 -0
  584. package/dist/tools/lib/path-validation.js +26 -0
  585. package/dist/tools/lib/pathway-client.d.ts +27 -0
  586. package/dist/tools/lib/pathway-client.js +149 -0
  587. package/dist/tools/lib/pharmgkb-config.d.ts +4 -0
  588. package/dist/tools/lib/pharmgkb-config.js +2 -0
  589. package/dist/tools/lib/preview-lock.d.ts +20 -0
  590. package/dist/tools/lib/preview-lock.js +35 -0
  591. package/dist/tools/lib/protein-family-modality.d.ts +16 -0
  592. package/dist/tools/lib/protein-family-modality.js +42 -0
  593. package/dist/tools/lib/protein-family-normalize.d.ts +12 -0
  594. package/dist/tools/lib/protein-family-normalize.js +46 -0
  595. package/dist/tools/lib/pubchem-client.d.ts +40 -0
  596. package/dist/tools/lib/pubchem-client.js +128 -0
  597. package/dist/tools/lib/pubchem-config.d.ts +5 -0
  598. package/dist/tools/lib/pubchem-config.js +3 -0
  599. package/dist/tools/lib/pubmed-client.d.ts +28 -0
  600. package/dist/tools/lib/pubmed-client.js +91 -0
  601. package/dist/tools/lib/report-preflight.d.ts +39 -0
  602. package/dist/tools/lib/report-preflight.js +283 -0
  603. package/dist/tools/lib/string-client.d.ts +33 -0
  604. package/dist/tools/lib/string-client.js +93 -0
  605. package/dist/tools/lib/toxcast-config.d.ts +2 -0
  606. package/dist/tools/lib/toxcast-config.js +11 -0
  607. package/dist/tools/lib/uniprot-client.d.ts +28 -0
  608. package/dist/tools/lib/uniprot-client.js +103 -0
  609. package/dist/tools/lib/uniprot-config.d.ts +5 -0
  610. package/dist/tools/lib/uniprot-config.js +3 -0
  611. package/dist/tools/memory/index.d.ts +4 -0
  612. package/dist/tools/memory/index.js +4 -0
  613. package/dist/tools/memory/update-working-memory.d.ts +25 -0
  614. package/dist/tools/memory/update-working-memory.js +112 -0
  615. package/dist/tools/registry.d.ts +15 -0
  616. package/dist/tools/registry.js +26 -0
  617. package/dist/tools/report/build-report.d.ts +13 -0
  618. package/dist/tools/report/build-report.js +26 -0
  619. package/dist/tools/report/index.d.ts +14 -0
  620. package/dist/tools/report/index.js +14 -0
  621. package/dist/tools/report/mint-preview-url.d.ts +26 -0
  622. package/dist/tools/report/mint-preview-url.js +44 -0
  623. package/dist/tools/report/preview-publisher.d.ts +37 -0
  624. package/dist/tools/report/preview-publisher.js +25 -0
  625. package/dist/tools/report/preview-snapshot.d.ts +26 -0
  626. package/dist/tools/report/preview-snapshot.js +121 -0
  627. package/dist/tools/report/submit-report.d.ts +25 -0
  628. package/dist/tools/report/submit-report.js +126 -0
  629. package/dist/tools/report/version-fs.d.ts +15 -0
  630. package/dist/tools/report/version-fs.js +154 -0
  631. package/dist/tools/research/context7-docs.d.ts +31 -0
  632. package/dist/tools/research/context7-docs.js +61 -0
  633. package/dist/tools/research/generate-analogy-report.d.ts +60 -0
  634. package/dist/tools/research/generate-analogy-report.js +288 -0
  635. package/dist/tools/research/generate-plan.d.ts +39 -0
  636. package/dist/tools/research/generate-plan.js +393 -0
  637. package/dist/tools/research/index.d.ts +15 -0
  638. package/dist/tools/research/index.js +15 -0
  639. package/dist/tools/research/inspect-run.d.ts +54 -0
  640. package/dist/tools/research/inspect-run.js +85 -0
  641. package/dist/tools/research/literature-reviewer.d.ts +29 -0
  642. package/dist/tools/research/literature-reviewer.js +84 -0
  643. package/dist/tools/research/search-arxiv.d.ts +32 -0
  644. package/dist/tools/research/search-arxiv.js +123 -0
  645. package/dist/tools/research/search-github-repos.d.ts +32 -0
  646. package/dist/tools/research/search-github-repos.js +86 -0
  647. package/dist/tools/research/search-semantic-scholar.d.ts +33 -0
  648. package/dist/tools/research/search-semantic-scholar.js +93 -0
  649. package/dist/tools/run-ephemeral.d.ts +33 -0
  650. package/dist/tools/run-ephemeral.js +65 -0
  651. package/dist/tools/sandbox/index.d.ts +7 -0
  652. package/dist/tools/sandbox/index.js +7 -0
  653. package/dist/tools/sandbox/list-available-packages.d.ts +7 -0
  654. package/dist/tools/sandbox/list-available-packages.js +27 -0
  655. package/dist/tools/sandbox/list-available-refs.d.ts +7 -0
  656. package/dist/tools/sandbox/list-available-refs.js +147 -0
  657. package/dist/tools/sandbox/report-blocker.d.ts +23 -0
  658. package/dist/tools/sandbox/report-blocker.js +39 -0
  659. package/dist/tools/sandbox/skills.d.ts +72 -0
  660. package/dist/tools/sandbox/skills.js +144 -0
  661. package/dist/tools/workspace/edit-file.d.ts +46 -0
  662. package/dist/tools/workspace/edit-file.js +100 -0
  663. package/dist/tools/workspace/execute-command.d.ts +80 -0
  664. package/dist/tools/workspace/execute-command.js +95 -0
  665. package/dist/tools/workspace/file-stat.d.ts +24 -0
  666. package/dist/tools/workspace/file-stat.js +37 -0
  667. package/dist/tools/workspace/grep.d.ts +57 -0
  668. package/dist/tools/workspace/grep.js +154 -0
  669. package/dist/tools/workspace/index.d.ts +26 -0
  670. package/dist/tools/workspace/index.js +27 -0
  671. package/dist/tools/workspace/list-files.d.ts +24 -0
  672. package/dist/tools/workspace/list-files.js +38 -0
  673. package/dist/tools/workspace/mutator.d.ts +83 -0
  674. package/dist/tools/workspace/mutator.js +81 -0
  675. package/dist/tools/workspace/read-file.d.ts +39 -0
  676. package/dist/tools/workspace/read-file.js +93 -0
  677. package/dist/tools/workspace/result-bounds.d.ts +42 -0
  678. package/dist/tools/workspace/result-bounds.js +50 -0
  679. package/dist/tools/workspace/run-exec.d.ts +32 -0
  680. package/dist/tools/workspace/run-exec.js +34 -0
  681. package/dist/tools/workspace/show-file.d.ts +37 -0
  682. package/dist/tools/workspace/show-file.js +54 -0
  683. package/dist/tools/workspace/show-plan.d.ts +23 -0
  684. package/dist/tools/workspace/show-plan.js +44 -0
  685. package/dist/tools/workspace/workspace-search.d.ts +25 -0
  686. package/dist/tools/workspace/workspace-search.js +78 -0
  687. package/dist/tools/workspace/write-file.d.ts +16 -0
  688. package/dist/tools/workspace/write-file.js +33 -0
  689. package/dist/workflows/execute-analysis-scheduler.d.ts +94 -0
  690. package/dist/workflows/execute-analysis-scheduler.js +186 -0
  691. package/dist/workflows/execute-analysis.d.ts +271 -0
  692. package/dist/workflows/execute-analysis.js +746 -0
  693. package/dist/workflows/execute-target-assessment.d.ts +101 -0
  694. package/dist/workflows/execute-target-assessment.js +528 -0
  695. package/dist/workflows/metrics.d.ts +37 -0
  696. package/dist/workflows/metrics.js +55 -0
  697. package/dist/workflows/plan/level.d.ts +12 -0
  698. package/dist/workflows/plan/level.js +12 -0
  699. package/dist/workflows/register-workflows.d.ts +51 -0
  700. package/dist/workflows/register-workflows.js +48 -0
  701. package/dist/workflows/resume-execute-analysis.d.ts +70 -0
  702. package/dist/workflows/resume-execute-analysis.js +80 -0
  703. package/dist/workflows/sandbox-step.d.ts +243 -0
  704. package/dist/workflows/sandbox-step.js +573 -0
  705. package/dist/workflows/target-assessment/assemblers/index.d.ts +5 -0
  706. package/dist/workflows/target-assessment/assemblers/index.js +4 -0
  707. package/dist/workflows/target-assessment/assemblers/literature.d.ts +299 -0
  708. package/dist/workflows/target-assessment/assemblers/literature.js +987 -0
  709. package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +109 -0
  710. package/dist/workflows/target-assessment/assemblers/orchestrator.js +835 -0
  711. package/dist/workflows/target-assessment/assemblers/safety.d.ts +352 -0
  712. package/dist/workflows/target-assessment/assemblers/safety.js +985 -0
  713. package/dist/workflows/target-assessment/assemblers/trials.d.ts +30 -0
  714. package/dist/workflows/target-assessment/assemblers/trials.js +75 -0
  715. package/dist/workflows/target-assessment/collectors/index.d.ts +105 -0
  716. package/dist/workflows/target-assessment/collectors/index.js +468 -0
  717. package/dist/workflows/target-assessment/correction-loop.d.ts +45 -0
  718. package/dist/workflows/target-assessment/correction-loop.js +62 -0
  719. package/dist/workflows/target-assessment/coverage.d.ts +81 -0
  720. package/dist/workflows/target-assessment/coverage.js +82 -0
  721. package/dist/workflows/target-assessment/decisions/index.d.ts +86 -0
  722. package/dist/workflows/target-assessment/decisions/index.js +127 -0
  723. package/dist/workflows/target-assessment/fanout/index.d.ts +31 -0
  724. package/dist/workflows/target-assessment/fanout/index.js +155 -0
  725. package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +52 -0
  726. package/dist/workflows/target-assessment/lib/approval-precedents.js +119 -0
  727. package/dist/workflows/target-assessment/lib/citation-validator.d.ts +46 -0
  728. package/dist/workflows/target-assessment/lib/citation-validator.js +316 -0
  729. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +62 -0
  730. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +172 -0
  731. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +45 -0
  732. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +156 -0
  733. package/dist/workflows/target-assessment/lib/compute-derived.d.ts +19 -0
  734. package/dist/workflows/target-assessment/lib/compute-derived.js +252 -0
  735. package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +15 -0
  736. package/dist/workflows/target-assessment/lib/compute-selectivity.js +18 -0
  737. package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +37 -0
  738. package/dist/workflows/target-assessment/lib/dedup-modulators.js +157 -0
  739. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +17 -0
  740. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +100 -0
  741. package/dist/workflows/target-assessment/lib/expression-constants.d.ts +21 -0
  742. package/dist/workflows/target-assessment/lib/expression-constants.js +21 -0
  743. package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +21 -0
  744. package/dist/workflows/target-assessment/lib/family-complex-supplement.js +37 -0
  745. package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +39 -0
  746. package/dist/workflows/target-assessment/lib/heterodimer-filter.js +54 -0
  747. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +4 -0
  748. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +24 -0
  749. package/dist/workflows/target-assessment/lib/llm-step.d.ts +77 -0
  750. package/dist/workflows/target-assessment/lib/llm-step.js +99 -0
  751. package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +30 -0
  752. package/dist/workflows/target-assessment/lib/meddra-organ-map.js +126 -0
  753. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +17 -0
  754. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +99 -0
  755. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +2 -0
  756. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +51 -0
  757. package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +26 -0
  758. package/dist/workflows/target-assessment/lib/regulatory-actions.js +147 -0
  759. package/dist/workflows/target-assessment/lib/structured-llm.d.ts +58 -0
  760. package/dist/workflows/target-assessment/lib/structured-llm.js +101 -0
  761. package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +60 -0
  762. package/dist/workflows/target-assessment/lib/target-identity-filter.js +86 -0
  763. package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +20 -0
  764. package/dist/workflows/target-assessment/lib/therapeutic-programs.js +68 -0
  765. package/dist/workflows/target-assessment/metrics.d.ts +21 -0
  766. package/dist/workflows/target-assessment/metrics.js +42 -0
  767. package/dist/workflows/target-assessment/phase4-assemble.d.ts +1841 -0
  768. package/dist/workflows/target-assessment/phase4-assemble.js +39 -0
  769. package/dist/workflows/target-assessment/phase5-persist.d.ts +57 -0
  770. package/dist/workflows/target-assessment/phase5-persist.js +461 -0
  771. package/dist/workflows/target-assessment/progress.d.ts +38 -0
  772. package/dist/workflows/target-assessment/progress.js +76 -0
  773. package/dist/workflows/target-assessment/schemas.d.ts +931 -0
  774. package/dist/workflows/target-assessment/schemas.js +293 -0
  775. package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +15 -0
  776. package/dist/workflows/target-assessment/steps/collectors/pathways.js +58 -0
  777. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +34 -0
  778. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +31 -0
  779. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +57 -0
  780. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +54 -0
  781. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +35 -0
  782. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +32 -0
  783. package/dist/workflows/target-assessment/steps/fanout/index.d.ts +14 -0
  784. package/dist/workflows/target-assessment/steps/fanout/index.js +10 -0
  785. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +28 -0
  786. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +27 -0
  787. package/dist/workflows/target-assessment/steps/phase0-resolve.d.ts +71 -0
  788. package/dist/workflows/target-assessment/steps/phase0-resolve.js +21 -0
  789. package/dist/workflows/target-assessment/steps/phase1-aggregate.d.ts +1018 -0
  790. package/dist/workflows/target-assessment/steps/phase1-aggregate.js +25 -0
  791. package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +696 -0
  792. package/dist/workflows/target-assessment/steps/phase2-aggregate.js +38 -0
  793. package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +936 -0
  794. package/dist/workflows/target-assessment/steps/phase3-aggregate.js +22 -0
  795. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +34 -0
  796. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +45 -0
  797. package/dist/workflows/target-assessment/sub-workflows/index.d.ts +15 -0
  798. package/dist/workflows/target-assessment/sub-workflows/index.js +11 -0
  799. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +41 -0
  800. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +12 -0
  801. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +41 -0
  802. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +12 -0
  803. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +36 -0
  804. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +12 -0
  805. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +66 -0
  806. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +12 -0
  807. package/dist/workflows/target-assessment/synthesis/index.d.ts +560 -0
  808. package/dist/workflows/target-assessment/synthesis/index.js +351 -0
  809. package/dist/workflows/target-assessment/synthesis-probes.d.ts +56 -0
  810. package/dist/workflows/target-assessment/synthesis-probes.js +320 -0
  811. package/dist/workspace/filesystem.d.ts +117 -0
  812. package/dist/workspace/filesystem.js +304 -0
  813. package/dist/workspace/mount-strategy.d.ts +50 -0
  814. package/dist/workspace/mount-strategy.js +67 -0
  815. package/dist/workspace/paths.d.ts +185 -0
  816. package/dist/workspace/paths.js +219 -0
  817. package/dist/workspace/provenance-collector.d.ts +34 -0
  818. package/dist/workspace/provenance-collector.js +16 -0
  819. package/dist/workspace/search-config.d.ts +23 -0
  820. package/dist/workspace/search-config.js +43 -0
  821. package/dist/workspace/workspace-paths.d.ts +26 -0
  822. package/dist/workspace/workspace-paths.js +31 -0
  823. package/package.json +101 -0
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Shared HTTP fetch helper for bioinformatics API tools.
3
+ *
4
+ * Provides retry-with-backoff for rate-limited APIs (429/503), request
5
+ * timeouts, and tab-delimited text parsing. `apiFetch` is the external-call
6
+ * boundary, so it is where a throw becomes a `Result`: it returns a
7
+ * `ResultAsync<T, ApiError>` rather than throwing — callers branch on
8
+ * `isErr()` and read `value` / `error` (see `result.ts` for the house rules).
9
+ */
10
+ import { ResultAsync, err, ok } from "neverthrow";
11
+ import { sleep } from "../../lib/async-utils.js";
12
+ const RETRYABLE_STATUSES = new Set([429, 503]);
13
+ /**
14
+ * Fetch a URL with retry on 429/503, exponential backoff, and timeout.
15
+ * `err` carries the structured failure; a non-ok HTTP status is reported as
16
+ * `http_status` so callers can branch on a concrete code (a 404 is usually an
17
+ * expected "not found" → a data variant; see `isUnexpectedApiError`).
18
+ */
19
+ export function apiFetch(url, options = {}) {
20
+ return new ResultAsync(runFetch(url, options));
21
+ }
22
+ /**
23
+ * `apiFetch` that validates the JSON response against a Zod `schema` before
24
+ * returning it. The success value is the schema's parsed output, so callers
25
+ * receive a payload whose shape has been checked rather than an unchecked
26
+ * `apiFetch<T>` cast that trusts the wire.
27
+ *
28
+ * A response the schema rejects — the upstream API changed its contract, or
29
+ * returned an error envelope where data was expected — resolves to an
30
+ * `invalid_response` err. That is deliberately an *unexpected* `ApiError`
31
+ * (`isUnexpectedApiError` returns true for it): a contract break should
32
+ * surface, not silently become empty/garbage results downstream. To keep a
33
+ * tool's graceful degradation, model genuinely-optional fields as
34
+ * `.optional()`/`.nullable()` in the schema so a partial-but-valid response
35
+ * still parses; reserve rejection for real type/shape drift.
36
+ *
37
+ * JSON only — `parseAs` is forced to `"json"`, since a schema over raw text is
38
+ * just `z.string()`, which `apiFetch<string>` already covers.
39
+ */
40
+ export function apiFetchValidated(url, schema, options = {}) {
41
+ return apiFetch(url, { ...options, parseAs: "json" }).andThen((data) => {
42
+ const parsed = schema.safeParse(data);
43
+ if (parsed.success)
44
+ return ok(parsed.data);
45
+ return err({ type: "invalid_response", issues: summarizeZodIssues(parsed.error) });
46
+ });
47
+ }
48
+ /** Compact one-line rendering of a Zod validation failure (first few issues). */
49
+ function summarizeZodIssues(error) {
50
+ const issues = error.issues.slice(0, 5).map((issue) => {
51
+ const path = issue.path.map((segment) => String(segment)).join(".");
52
+ return path ? `${path}: ${issue.message}` : issue.message;
53
+ });
54
+ const remaining = error.issues.length - issues.length;
55
+ return remaining > 0 ? `${issues.join("; ")} (+${remaining} more)` : issues.join("; ");
56
+ }
57
+ async function runFetch(url, options) {
58
+ const { method = "GET", headers = {}, body, maxRetries = 3, retryDelayMs = 1000, timeoutMs = 90_000, parseAs = "json" } = options;
59
+ let lastError = "";
60
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
61
+ try {
62
+ const res = await fetch(url, {
63
+ method,
64
+ headers,
65
+ body,
66
+ signal: AbortSignal.timeout(timeoutMs),
67
+ });
68
+ if (RETRYABLE_STATUSES.has(res.status) && attempt < maxRetries) {
69
+ await sleep(retryDelayMs * 2 ** attempt);
70
+ lastError = `HTTP ${res.status}`;
71
+ continue;
72
+ }
73
+ if (!res.ok) {
74
+ const text = await res.text().catch(() => "");
75
+ return err({ type: "http_status", status: res.status, body: text.trim() });
76
+ }
77
+ const data = parseAs === "text" ? (await res.text()) : (await res.json());
78
+ return ok(data);
79
+ }
80
+ catch (e) {
81
+ if (e instanceof DOMException && e.name === "TimeoutError") {
82
+ return err({ type: "timeout", timeoutMs });
83
+ }
84
+ lastError = e instanceof Error ? e.message : String(e);
85
+ if (attempt < maxRetries) {
86
+ await sleep(retryDelayMs * 2 ** attempt);
87
+ continue;
88
+ }
89
+ }
90
+ }
91
+ return err({ type: "exhausted", attempts: maxRetries + 1, lastError });
92
+ }
93
+ /** Render an `ApiError` as a one-line message (for a rethrow or log). */
94
+ export function describeApiError(e) {
95
+ switch (e.type) {
96
+ case "http_status":
97
+ return e.body ? `HTTP ${e.status}: ${e.body}` : `HTTP ${e.status}`;
98
+ case "timeout":
99
+ return `Request timed out after ${e.timeoutMs}ms`;
100
+ case "exhausted":
101
+ return `Failed after ${e.attempts} attempts: ${e.lastError}`;
102
+ case "invalid_response":
103
+ return `Response did not match the expected schema: ${e.issues}`;
104
+ }
105
+ }
106
+ /**
107
+ * Is an `ApiError` an unexpected failure?
108
+ *
109
+ * A concrete 4xx means the request itself was wrong — a bad identifier, a
110
+ * resource that does not exist — an expected outcome the caller models as
111
+ * data (an empty result, a `notFound` entry). Everything else — 5xx, a
112
+ * timeout, retry exhaustion, a transport failure, or a schema mismatch
113
+ * (`invalid_response`) — is unexpected and the caller should surface it by
114
+ * throwing (or returning `err`).
115
+ */
116
+ export function isUnexpectedApiError(e) {
117
+ return !(e.type === "http_status" && e.status >= 400 && e.status < 500);
118
+ }
119
+ /**
120
+ * Parse tab-separated text into rows of columns (e.g., KEGG responses).
121
+ * Filters out empty lines.
122
+ */
123
+ export function parseTSV(text) {
124
+ return text
125
+ .split("\n")
126
+ .filter((line) => line.trim() !== "")
127
+ .map((line) => line.split("\t"));
128
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Pure async client functions for the Bgee multi-species expression API.
3
+ *
4
+ * Resolves a human gene symbol to its Ensembl ID, fans out to ortholog
5
+ * lookups for the configured non-human species (Ensembl REST), then
6
+ * queries Bgee per (species, ortholog ENSG) for tissue-level expression
7
+ * calls. Returns a per-species table of tissue × expression-rank.
8
+ */
9
+ export declare const SUPPORTED_SPECIES: readonly ["homo_sapiens", "mus_musculus", "rattus_norvegicus", "canis_lupus_familiaris", "macaca_mulatta"];
10
+ export type SupportedSpecies = (typeof SUPPORTED_SPECIES)[number];
11
+ export declare const SPECIES_TAXON: Record<SupportedSpecies, number>;
12
+ export type ExpressionRank = "absent" | "low" | "medium" | "high";
13
+ export interface TissueRow {
14
+ tissue: string;
15
+ cellType: string | null;
16
+ expressionScore: number | null;
17
+ confidence: "gold" | "silver" | null;
18
+ expressionState: "expressed" | "not expressed";
19
+ rank: ExpressionRank;
20
+ }
21
+ export interface SpeciesEntry {
22
+ species: SupportedSpecies;
23
+ taxonId: number;
24
+ ensemblId: string;
25
+ tissues: TissueRow[];
26
+ }
27
+ export interface MultiSpeciesExpression {
28
+ geneSymbol: string;
29
+ humanEnsemblId: string | null;
30
+ bySpecies: SpeciesEntry[];
31
+ notFound: string[];
32
+ }
33
+ export declare function bucketRank(expressionState: string, score: number | null): ExpressionRank;
34
+ export declare function parseExpressionResponse(raw: unknown): TissueRow[];
35
+ /** Fetch multi-species expression for a human gene symbol. */
36
+ export declare function getMultiSpeciesExpression(geneSymbol: string, species?: SupportedSpecies[]): Promise<MultiSpeciesExpression>;
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Pure async client functions for the Bgee multi-species expression API.
3
+ *
4
+ * Resolves a human gene symbol to its Ensembl ID, fans out to ortholog
5
+ * lookups for the configured non-human species (Ensembl REST), then
6
+ * queries Bgee per (species, ortholog ENSG) for tissue-level expression
7
+ * calls. Returns a per-species table of tissue × expression-rank.
8
+ */
9
+ import { z } from "zod";
10
+ import { apiFetchValidated, describeApiError, isUnexpectedApiError } from "./api-utils.js";
11
+ const ENSEMBL_BASE = "https://rest.ensembl.org";
12
+ const BGEE_BASE = "https://www.bgee.org/api";
13
+ export const SUPPORTED_SPECIES = ["homo_sapiens", "mus_musculus", "rattus_norvegicus", "canis_lupus_familiaris", "macaca_mulatta"];
14
+ export const SPECIES_TAXON = {
15
+ homo_sapiens: 9606,
16
+ mus_musculus: 10090,
17
+ rattus_norvegicus: 10116,
18
+ canis_lupus_familiaris: 9615,
19
+ macaca_mulatta: 9544,
20
+ };
21
+ const ENSEMBL_HEADERS = {
22
+ Accept: "application/json",
23
+ "Content-Type": "application/json",
24
+ };
25
+ export function bucketRank(expressionState, score) {
26
+ if (expressionState === "not expressed")
27
+ return "absent";
28
+ if (score === null)
29
+ return "low";
30
+ if (score >= 75)
31
+ return "high";
32
+ if (score >= 25)
33
+ return "medium";
34
+ return "low";
35
+ }
36
+ // A single expression call from the Bgee API `data.calls` array, plus the envelope that
37
+ // wraps them. Validated at the fetch boundary; `parseExpressionResponse` reads the fields
38
+ // defensively. Every field optional — the API omits absent values.
39
+ const BgeeCallSchema = z.object({
40
+ condition: z
41
+ .object({
42
+ anatEntity: z.object({ name: z.string().optional() }).optional(),
43
+ cellType: z.object({ name: z.string().optional() }).optional(),
44
+ })
45
+ .optional(),
46
+ expressionScore: z.object({ expressionScore: z.union([z.string(), z.number()]).optional() }).optional(),
47
+ expressionQuality: z.string().optional(),
48
+ expressionState: z.string().optional(),
49
+ });
50
+ const BgeeExpressionResponseSchema = z.object({
51
+ data: z.object({ calls: z.array(BgeeCallSchema).optional() }).optional(),
52
+ });
53
+ // Ensembl REST response shapes consumed by the ortholog-resolution path.
54
+ const EnsemblLookupSchema = z.object({ id: z.string().optional() });
55
+ const EnsemblHomologyResponseSchema = z.object({
56
+ data: z.array(z.object({ homologies: z.array(z.object({ id: z.string().optional(), type: z.string().optional() })).optional() })).optional(),
57
+ });
58
+ export function parseExpressionResponse(raw) {
59
+ // `raw` is the untyped Bgee API payload; `.data.calls` is reached defensively and
60
+ // the `Array.isArray` guard below means a shape mismatch degrades to an empty list.
61
+ const calls = raw?.data?.calls;
62
+ if (!Array.isArray(calls))
63
+ return [];
64
+ const out = [];
65
+ for (const call of calls) {
66
+ const anatName = call?.condition?.anatEntity?.name ?? "";
67
+ const tissue = anatName.trim().toLowerCase();
68
+ if (!tissue)
69
+ continue;
70
+ const cellTypeName = call?.condition?.cellType?.name;
71
+ const cellType = typeof cellTypeName === "string" && cellTypeName.trim() !== "" ? cellTypeName.trim().toLowerCase() : null;
72
+ const rawScore = call?.expressionScore?.expressionScore;
73
+ let expressionScore = null;
74
+ if (typeof rawScore === "string" || typeof rawScore === "number") {
75
+ const n = typeof rawScore === "number" ? rawScore : parseFloat(rawScore);
76
+ expressionScore = Number.isFinite(n) ? n : null;
77
+ }
78
+ const quality = call?.expressionQuality;
79
+ const confidence = quality === "gold" || quality === "silver" ? quality : null;
80
+ const stateRaw = call?.expressionState;
81
+ const expressionState = stateRaw === "not expressed" ? "not expressed" : "expressed";
82
+ out.push({
83
+ tissue,
84
+ cellType,
85
+ expressionScore,
86
+ confidence,
87
+ expressionState,
88
+ rank: bucketRank(expressionState, expressionScore),
89
+ });
90
+ }
91
+ return out;
92
+ }
93
+ async function resolveHumanEnsembl(symbol) {
94
+ const url = `${ENSEMBL_BASE}/lookup/symbol/homo_sapiens/${encodeURIComponent(symbol)}`;
95
+ const res = await apiFetchValidated(url, EnsemblLookupSchema, { headers: ENSEMBL_HEADERS });
96
+ if (res.isErr()) {
97
+ if (isUnexpectedApiError(res.error))
98
+ throw new Error(describeApiError(res.error));
99
+ return null;
100
+ }
101
+ if (typeof res.value.id !== "string" || !res.value.id.startsWith("ENSG"))
102
+ return null;
103
+ return res.value.id;
104
+ }
105
+ async function resolveOrtholog(symbol, targetSpecies) {
106
+ const url = `${ENSEMBL_BASE}/homology/symbol/homo_sapiens/${encodeURIComponent(symbol)}` + `?type=orthologues;target_species=${targetSpecies};format=condensed`;
107
+ const res = await apiFetchValidated(url, EnsemblHomologyResponseSchema, { headers: ENSEMBL_HEADERS });
108
+ if (res.isErr()) {
109
+ if (isUnexpectedApiError(res.error))
110
+ throw new Error(describeApiError(res.error));
111
+ return null;
112
+ }
113
+ const homologies = res.value.data?.[0]?.homologies ?? [];
114
+ const onetoone = homologies.find((h) => h.type === "ortholog_one2one");
115
+ return (onetoone?.id ?? homologies[0]?.id ?? null) || null;
116
+ }
117
+ async function fetchBgeeForSpecies(ensemblId, taxonId) {
118
+ const url = `${BGEE_BASE}/?page=gene&action=expression&display_type=json` + `&gene_id=${encodeURIComponent(ensemblId)}&species_id=${taxonId}`;
119
+ const res = await apiFetchValidated(url, BgeeExpressionResponseSchema);
120
+ if (res.isErr()) {
121
+ if (isUnexpectedApiError(res.error))
122
+ throw new Error(describeApiError(res.error));
123
+ return [];
124
+ }
125
+ return parseExpressionResponse(res.value);
126
+ }
127
+ /** Fetch multi-species expression for a human gene symbol. */
128
+ export async function getMultiSpeciesExpression(geneSymbol, species = [...SUPPORTED_SPECIES]) {
129
+ const humanEnsemblId = await resolveHumanEnsembl(geneSymbol);
130
+ if (!humanEnsemblId) {
131
+ return { geneSymbol, humanEnsemblId: null, bySpecies: [], notFound: [] };
132
+ }
133
+ const idEntries = await Promise.all(species.map(async (sp) => {
134
+ if (sp === "homo_sapiens")
135
+ return { sp, id: humanEnsemblId };
136
+ const id = await resolveOrtholog(geneSymbol, sp);
137
+ return { sp, id };
138
+ }));
139
+ const bySpecies = [];
140
+ const notFound = [];
141
+ await Promise.all(idEntries.map(async ({ sp, id }) => {
142
+ if (!id) {
143
+ notFound.push(sp);
144
+ return;
145
+ }
146
+ const tissues = await fetchBgeeForSpecies(id, SPECIES_TAXON[sp]);
147
+ bySpecies.push({ species: sp, taxonId: SPECIES_TAXON[sp], ensemblId: id, tissues });
148
+ }));
149
+ return { geneSymbol, humanEnsemblId, bySpecies, notFound };
150
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Pure async client for cBioPortal somatic mutation frequencies.
3
+ *
4
+ * Used by §3.4 (Genetic Alterations — somatic mutation frequencies). Queries
5
+ * the public cBioPortal REST API for mutation occurrence across all curated
6
+ * cancer studies, then aggregates by cancer type to produce the spec's
7
+ * "where is the target broken in human disease, and how often" view.
8
+ */
9
+ export interface CancerStudy {
10
+ studyId: string;
11
+ cancerType: string;
12
+ cancerTypeName: string;
13
+ }
14
+ export interface MutationFrequency {
15
+ cancerTypeId: string;
16
+ cancerTypeName: string;
17
+ totalSamples: number;
18
+ mutatedSamples: number;
19
+ frequency: number;
20
+ studies: string[];
21
+ }
22
+ /**
23
+ * Compute somatic mutation frequencies for a target across all curated
24
+ * cancer studies in cBioPortal, grouped by cancer type. Returns one row
25
+ * per cancer type containing total samples checked, samples with at
26
+ * least one mutation in the gene, and the contributing studies.
27
+ */
28
+ export declare function getSomaticMutationFrequencies(geneSymbol: string, options?: {
29
+ minSamplesPerCancerType?: number;
30
+ maxStudies?: number;
31
+ }): Promise<{
32
+ entrezGeneId: number | null;
33
+ rows: MutationFrequency[];
34
+ }>;
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Pure async client for cBioPortal somatic mutation frequencies.
3
+ *
4
+ * Used by §3.4 (Genetic Alterations — somatic mutation frequencies). Queries
5
+ * the public cBioPortal REST API for mutation occurrence across all curated
6
+ * cancer studies, then aggregates by cancer type to produce the spec's
7
+ * "where is the target broken in human disease, and how often" view.
8
+ */
9
+ import { z } from "zod";
10
+ import { apiFetchValidated, describeApiError } from "./api-utils.js";
11
+ const CBIOPORTAL_BASE = "https://www.cbioportal.org/api";
12
+ const HEADERS = { Accept: "application/json" };
13
+ // Raw cBioPortal wire shapes, validated at the fetch boundary. Fields the code
14
+ // reads as map keys or feeds into `string[]` params stay required — a missing
15
+ // value there is a contract break we surface as `invalid_response`, not a silent
16
+ // `undefined`; every other field is optional because the API omits absent values.
17
+ const RawMolecularProfileSchema = z.object({
18
+ molecularProfileId: z.string(),
19
+ studyId: z.string(),
20
+ molecularAlterationType: z.string().optional(),
21
+ });
22
+ const RawMutationCountSchema = z.object({
23
+ studyId: z.string(),
24
+ sampleId: z.string(),
25
+ mutationCount: z.number().optional(),
26
+ });
27
+ const RawSampleListSchema = z.object({
28
+ sampleListId: z.string().optional(),
29
+ studyId: z.string(),
30
+ category: z.string().optional(),
31
+ sampleCount: z.number().optional(),
32
+ });
33
+ const RawCancerStudySchema = z.object({
34
+ studyId: z.string(),
35
+ cancerTypeId: z.string().optional(),
36
+ cancerType: z.object({ name: z.string().optional(), cancerTypeId: z.string().optional() }).optional(),
37
+ name: z.string().optional(),
38
+ description: z.string().optional(),
39
+ });
40
+ async function listStudies() {
41
+ const url = `${CBIOPORTAL_BASE}/studies?projection=SUMMARY&pageSize=10000`;
42
+ const res = await apiFetchValidated(url, z.array(RawCancerStudySchema), { headers: HEADERS });
43
+ if (res.isErr())
44
+ throw new Error(describeApiError(res.error));
45
+ return res.value ?? [];
46
+ }
47
+ async function listAllSampleLists() {
48
+ const url = `${CBIOPORTAL_BASE}/sample-lists?projection=SUMMARY&pageSize=10000`;
49
+ const res = await apiFetchValidated(url, z.array(RawSampleListSchema), { headers: HEADERS });
50
+ if (res.isErr())
51
+ throw new Error(describeApiError(res.error));
52
+ return res.value ?? [];
53
+ }
54
+ async function listMutationProfiles() {
55
+ const url = `${CBIOPORTAL_BASE}/molecular-profiles?projection=SUMMARY&pageSize=10000`;
56
+ const res = await apiFetchValidated(url, z.array(RawMolecularProfileSchema), { headers: HEADERS });
57
+ if (res.isErr())
58
+ throw new Error(describeApiError(res.error));
59
+ return (res.value ?? []).filter((p) => p.molecularAlterationType === "MUTATION_EXTENDED");
60
+ }
61
+ async function fetchMutationCountsForGene(entrezGeneId, profileIds) {
62
+ if (profileIds.length === 0)
63
+ return [];
64
+ const url = `${CBIOPORTAL_BASE}/mutations/fetch?projection=SUMMARY`;
65
+ const res = await apiFetchValidated(url, z.array(RawMutationCountSchema), {
66
+ method: "POST",
67
+ headers: { ...HEADERS, "Content-Type": "application/json" },
68
+ body: JSON.stringify({
69
+ molecularProfileIds: profileIds,
70
+ entrezGeneIds: [entrezGeneId],
71
+ }),
72
+ });
73
+ if (res.isErr())
74
+ throw new Error(describeApiError(res.error));
75
+ return res.value ?? [];
76
+ }
77
+ /**
78
+ * Resolve a gene symbol to its NCBI Entrez Gene ID via cBioPortal's gene
79
+ * search endpoint. cBioPortal's mutation API requires entrezGeneId, not
80
+ * symbol.
81
+ */
82
+ async function resolveEntrezId(symbol) {
83
+ const url = `${CBIOPORTAL_BASE}/genes/${encodeURIComponent(symbol)}`;
84
+ const res = await apiFetchValidated(url, z.object({ entrezGeneId: z.number().optional() }), { headers: HEADERS });
85
+ if (res.isErr())
86
+ return null;
87
+ return res.value?.entrezGeneId ?? null;
88
+ }
89
+ /**
90
+ * Compute somatic mutation frequencies for a target across all curated
91
+ * cancer studies in cBioPortal, grouped by cancer type. Returns one row
92
+ * per cancer type containing total samples checked, samples with at
93
+ * least one mutation in the gene, and the contributing studies.
94
+ */
95
+ export async function getSomaticMutationFrequencies(geneSymbol, options = {}) {
96
+ const minSamples = options.minSamplesPerCancerType ?? 50;
97
+ const maxStudies = options.maxStudies ?? 500;
98
+ const entrezGeneId = await resolveEntrezId(geneSymbol);
99
+ if (entrezGeneId == null)
100
+ return { entrezGeneId: null, rows: [] };
101
+ const [studies, profiles, sampleLists] = await Promise.all([listStudies(), listMutationProfiles(), listAllSampleLists()]);
102
+ const allSampleListByStudy = new Map();
103
+ for (const sl of sampleLists) {
104
+ if (sl.category === "all_cases_in_study") {
105
+ allSampleListByStudy.set(sl.studyId, sl);
106
+ }
107
+ }
108
+ const studiesWithMutations = profiles
109
+ .map((p) => p.studyId)
110
+ .filter((sid) => allSampleListByStudy.has(sid))
111
+ .slice(0, maxStudies);
112
+ const profileIds = profiles.filter((p) => studiesWithMutations.includes(p.studyId)).map((p) => p.molecularProfileId);
113
+ const studyById = new Map();
114
+ for (const s of studies)
115
+ studyById.set(s.studyId, s);
116
+ const mutations = await fetchMutationCountsForGene(entrezGeneId, profileIds);
117
+ const mutatedStudySamples = new Map();
118
+ for (const m of mutations) {
119
+ if (!mutatedStudySamples.has(m.studyId))
120
+ mutatedStudySamples.set(m.studyId, new Set());
121
+ mutatedStudySamples.get(m.studyId).add(m.sampleId);
122
+ }
123
+ const byCancerType = new Map();
124
+ for (const studyId of studiesWithMutations) {
125
+ const sl = allSampleListByStudy.get(studyId);
126
+ if (!sl?.sampleCount)
127
+ continue;
128
+ const study = studyById.get(studyId);
129
+ const cancerTypeId = study?.cancerType?.cancerTypeId ?? study?.cancerTypeId ?? "unknown";
130
+ const cancerTypeName = study?.cancerType?.name ?? cancerTypeId;
131
+ if (!byCancerType.has(cancerTypeId)) {
132
+ byCancerType.set(cancerTypeId, {
133
+ name: cancerTypeName,
134
+ total: 0,
135
+ mutated: 0,
136
+ studies: new Set(),
137
+ });
138
+ }
139
+ const bucket = byCancerType.get(cancerTypeId);
140
+ bucket.total += sl.sampleCount;
141
+ bucket.mutated += mutatedStudySamples.get(studyId)?.size ?? 0;
142
+ bucket.studies.add(studyId);
143
+ }
144
+ const rows = [];
145
+ for (const [cancerTypeId, agg] of byCancerType.entries()) {
146
+ if (agg.total < minSamples)
147
+ continue;
148
+ rows.push({
149
+ cancerTypeId,
150
+ cancerTypeName: agg.name,
151
+ totalSamples: agg.total,
152
+ mutatedSamples: agg.mutated,
153
+ frequency: agg.total === 0 ? 0 : agg.mutated / agg.total,
154
+ studies: [...agg.studies].sort(),
155
+ });
156
+ }
157
+ rows.sort((a, b) => b.frequency - a.frequency);
158
+ return { entrezGeneId, rows };
159
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Pure async client functions for the ChEMBL REST API.
3
+ *
4
+ * Used directly by target-assessment workflow steps and by tool wrappers.
5
+ */
6
+ export interface ChemblTarget {
7
+ targetChemblId: string;
8
+ preferredName: string | null;
9
+ targetType: string | null;
10
+ organism: string | null;
11
+ geneNames: string[];
12
+ }
13
+ export interface ChemblActivity {
14
+ activityId: number | null;
15
+ compoundChemblId: string;
16
+ targetChemblId: string | null;
17
+ standardType: string | null;
18
+ standardValue: number | null;
19
+ standardUnits: string | null;
20
+ assayChemblId: string | null;
21
+ assayType: string | null;
22
+ pchemblValue: number | null;
23
+ }
24
+ export interface ChemblMechanism {
25
+ mechanismOfAction: string | null;
26
+ actionType: string | null;
27
+ targetChemblId: string | null;
28
+ targetName: string | null;
29
+ moleculeChemblId: string;
30
+ }
31
+ export interface ChemblDrug {
32
+ moleculeChemblId: string;
33
+ preferredName: string | null;
34
+ maxPhase: number | null;
35
+ moleculeType: string | null;
36
+ firstApproval: number | null;
37
+ indication: string | null;
38
+ }
39
+ export interface ChemblModulator {
40
+ moleculeChemblId: string;
41
+ parentChemblId: string | null;
42
+ preferredName: string | null;
43
+ maxPhase: number | null;
44
+ moleculeType: string | null;
45
+ firstApproval: number | null;
46
+ }
47
+ export interface ChemblPolypharmHit {
48
+ moleculeChemblId: string;
49
+ targetChemblId: string;
50
+ targetName: string | null;
51
+ standardType: string | null;
52
+ standardValue: number | null;
53
+ standardUnits: string | null;
54
+ pchemblValue: number | null;
55
+ }
56
+ export declare function searchTargets(query: string, limit?: number): Promise<ChemblTarget[]>;
57
+ export declare function getBioactivity(chemblId: string, type: "compound" | "target", options?: {
58
+ activityType?: string;
59
+ limit?: number;
60
+ }): Promise<ChemblActivity[]>;
61
+ export declare function getMechanism(chemblId: string): Promise<ChemblMechanism[]>;
62
+ export declare function getDrugInfo(query: string, limit?: number): Promise<ChemblDrug[]>;
63
+ /**
64
+ * Fetch all clinical-stage modulators (max_phase ≥ 2 by default) for a target.
65
+ * Used for §2.6.6 (class precedent) and as the input to §2.6.4 (off-target panel).
66
+ */
67
+ export declare function getTargetModulators(targetChemblId: string, options?: {
68
+ minPhase?: number;
69
+ limit?: number;
70
+ }): Promise<ChemblModulator[]>;
71
+ /**
72
+ * Fetch off-target binding hits for a modulator: every target the molecule
73
+ * has been measured against (excluding the primary target), with potency.
74
+ * Used for §2.6.4 / §2.8 off-target panel.
75
+ */
76
+ export declare function getModulatorPolypharmacology(moleculeChemblId: string, options?: {
77
+ minPchembl?: number;
78
+ limit?: number;
79
+ excludeTargetChemblId?: string;
80
+ }): Promise<ChemblPolypharmHit[]>;
81
+ /**
82
+ * Fetch the median pChEMBL value for a modulator measured against its primary
83
+ * on-target. Filters to activities with non-null pchembl_value against the
84
+ * specified target ChEMBL ID. Returns null when no activities are found.
85
+ *
86
+ * Used by the polypharm fanout step so the assembler's computeSelectivity
87
+ * can produce real fold values instead of selectivity_unknown.
88
+ */
89
+ export declare function getModulatorOnTargetPchembl(modulatorChemblId: string, targetChemblId: string): Promise<number | null>;
90
+ /**
91
+ * Secondary path: fetch clinical-stage small molecules via the activity table.
92
+ *
93
+ * ChEMBL's mechanism table can lag behind for newer programmes (e.g.,
94
+ * orforglipron for GLP1R). Querying the activity table with
95
+ * `max_phase__gte` catches these molecules earlier. The activity table
96
+ * carries `molecule_chembl_id` but not `max_phase` or `molecule_type` —
97
+ * those require a follow-up molecule lookup. We batch unique molecule IDs
98
+ * and fetch molecule records in slices of 5.
99
+ *
100
+ * Returns one `ChemblModulator` per unique molecule that passes the
101
+ * min-phase and molecule-type filters.
102
+ */
103
+ export declare function getModulatorsViaActivity(args: {
104
+ target_chembl_id: string;
105
+ max_phase_min?: number;
106
+ molecule_type?: string;
107
+ limit?: number;
108
+ }): Promise<ChemblModulator[]>;
109
+ /**
110
+ * Fetch the canonical InChI key for a ChEMBL molecule. Returns null when
111
+ * ChEMBL has no recorded structure (typical for peptide/protein entries
112
+ * with `molecule_type: "Unknown"`).
113
+ */
114
+ export declare function getMoleculeInChIKey(moleculeChemblId: string): Promise<string | null>;
115
+ /**
116
+ * Resolve a drug's mechanism-of-action targets to UniProt accessions.
117
+ * Returns deduplicated accessions across all mechanism rows.
118
+ * Empty array on no mechanism, missing target, or non-protein target.
119
+ *
120
+ * Used by target-identity-filter to detect off-target trials (e.g., a
121
+ * trial of a CALCRL drug being surfaced under a CALCR assessment).
122
+ */
123
+ export declare function getDrugPrimaryTargetUniprots(moleculeChemblId: string): Promise<string[]>;