@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,149 @@
1
+ /**
2
+ * Pure async client functions for biological pathway lookups via KEGG and Reactome.
3
+ *
4
+ * Used by §3.7 (Pathway Context).
5
+ */
6
+ import { z } from "zod";
7
+ import { apiFetch, apiFetchValidated, parseTSV } from "./api-utils.js";
8
+ const KEGG_BASE = "https://rest.kegg.jp";
9
+ const REACTOME_BASE = "https://reactome.org/ContentService";
10
+ export function stripHtmlAndCollapseWs(s) {
11
+ return s
12
+ .replace(/<[^>]+>/g, "")
13
+ .replace(/\s+/g, " ")
14
+ .trim();
15
+ }
16
+ const ORGANISM_MAP = {
17
+ hsa: "Homo sapiens",
18
+ mmu: "Mus musculus",
19
+ rno: "Rattus norvegicus",
20
+ dre: "Danio rerio",
21
+ dme: "Drosophila melanogaster",
22
+ cel: "Caenorhabditis elegans",
23
+ sce: "Saccharomyces cerevisiae",
24
+ };
25
+ // Reactome ContentService raw wire shapes, validated at the fetch boundary.
26
+ // Every field is optional because the API omits absent values.
27
+ /** A single hit from the Reactome ContentService search response. */
28
+ const ReactomeSearchEntrySchema = z.object({
29
+ stId: z.string().optional(),
30
+ name: z.string().optional(),
31
+ });
32
+ const ReactomeSearchResponseSchema = z.object({
33
+ results: z.array(z.object({ entries: z.array(ReactomeSearchEntrySchema).optional() })).optional(),
34
+ });
35
+ /** Participant list — `searchReactome` reads `displayName` per participant. */
36
+ const ReactomeParticipantsSchema = z.array(z.object({ displayName: z.string().optional() }));
37
+ /** Participant list — `getPathwayMemberships` reads `refEntities` per participant. */
38
+ const ReactomeParticipantEntitiesSchema = z.array(z.object({
39
+ refEntities: z.array(z.object({ schemaClass: z.string().optional(), identifier: z.string().optional() })).optional(),
40
+ }));
41
+ export async function searchKegg(query, organism, maxResults, includeGenes) {
42
+ const searchRes = await apiFetch(`${KEGG_BASE}/find/pathway/${encodeURIComponent(query)}`, { parseAs: "text" });
43
+ if (searchRes.isErr())
44
+ return [];
45
+ const rows = parseTSV(searchRes.value);
46
+ const pathways = rows.slice(0, maxResults).map((cols) => {
47
+ const rawId = (cols[0] ?? "").replace("path:", "").replace("map", organism);
48
+ return {
49
+ id: rawId,
50
+ name: (cols[1] ?? "").trim(),
51
+ source: "kegg",
52
+ url: `https://www.kegg.jp/pathway/${rawId}`,
53
+ };
54
+ });
55
+ if (includeGenes) {
56
+ for (const pw of pathways) {
57
+ const geneRes = await apiFetch(`${KEGG_BASE}/link/${organism}/${pw.id}`, { parseAs: "text" });
58
+ if (geneRes.isOk()) {
59
+ const geneRows = parseTSV(geneRes.value);
60
+ pw.genes = geneRows.map((r) => (r[1] ?? "").replace(`${organism}:`, ""));
61
+ }
62
+ }
63
+ }
64
+ return pathways;
65
+ }
66
+ export async function searchReactome(query, species, maxResults, includeGenes) {
67
+ const params = new URLSearchParams({
68
+ query,
69
+ species,
70
+ types: "Pathway",
71
+ cluster: "true",
72
+ rows: String(maxResults),
73
+ });
74
+ const searchRes = await apiFetchValidated(`${REACTOME_BASE}/search/query?${params}`, ReactomeSearchResponseSchema, {
75
+ headers: { Accept: "application/json" },
76
+ });
77
+ if (searchRes.isErr())
78
+ return [];
79
+ const entries = [];
80
+ for (const group of searchRes.value.results ?? []) {
81
+ for (const entry of group.entries ?? [])
82
+ entries.push(entry);
83
+ }
84
+ const pathways = entries.slice(0, maxResults).map((e) => ({
85
+ id: e.stId ?? "",
86
+ name: stripHtmlAndCollapseWs(e.name ?? ""),
87
+ source: "reactome",
88
+ url: `https://reactome.org/content/detail/${e.stId ?? ""}`,
89
+ }));
90
+ if (includeGenes) {
91
+ for (const pw of pathways) {
92
+ const partRes = await apiFetchValidated(`${REACTOME_BASE}/data/participants/${pw.id}`, ReactomeParticipantsSchema, {
93
+ headers: { Accept: "application/json" },
94
+ });
95
+ if (partRes.isOk()) {
96
+ const names = new Set();
97
+ for (const p of partRes.value) {
98
+ if (p.displayName)
99
+ names.add(p.displayName);
100
+ }
101
+ pw.genes = [...names].sort();
102
+ }
103
+ }
104
+ }
105
+ return pathways;
106
+ }
107
+ export async function searchPathways(query, options = {}) {
108
+ const source = options.source ?? "both";
109
+ const organism = options.organism ?? "hsa";
110
+ const includeGenes = options.includeGenes ?? false;
111
+ const maxResults = options.maxResults ?? 10;
112
+ const reactomeSpecies = ORGANISM_MAP[organism] ?? organism;
113
+ const tasks = [];
114
+ if (source === "kegg" || source === "both") {
115
+ tasks.push(searchKegg(query, organism, maxResults, includeGenes));
116
+ }
117
+ if (source === "reactome" || source === "both") {
118
+ tasks.push(searchReactome(query, reactomeSpecies, maxResults, includeGenes));
119
+ }
120
+ const results = await Promise.all(tasks);
121
+ return results.flat();
122
+ }
123
+ /** Pathway memberships for a gene symbol — used directly by §3.7 collector. */
124
+ export async function getPathwayMemberships(geneSymbol) {
125
+ const [kegg, reactome] = await Promise.all([searchKegg(geneSymbol, "hsa", 25, false), searchReactome(geneSymbol, "Homo sapiens", 25, false)]);
126
+ // For Reactome pathways, fetch participant UniProts (bounded to avoid rate limits).
127
+ await Promise.all(reactome.slice(0, 50).map(async (pw) => {
128
+ try {
129
+ const partRes = await apiFetchValidated(`${REACTOME_BASE}/data/participants/${pw.id}`, ReactomeParticipantEntitiesSchema, {
130
+ headers: { Accept: "application/json" },
131
+ });
132
+ if (partRes.isErr())
133
+ return;
134
+ const accs = new Set();
135
+ for (const entity of partRes.value) {
136
+ for (const ref of entity.refEntities ?? []) {
137
+ if (ref.schemaClass === "ReferenceGeneProduct" && ref.identifier) {
138
+ accs.add(ref.identifier);
139
+ }
140
+ }
141
+ }
142
+ pw.entity_uniprots = [...accs].sort();
143
+ }
144
+ catch {
145
+ // Leave entity_uniprots undefined on fetch failure — graceful fallback in dedup
146
+ }
147
+ }));
148
+ return [...kegg, ...reactome];
149
+ }
@@ -0,0 +1,4 @@
1
+ export declare const PHARMGKB_BASE = "https://api.pharmgkb.org/v1/data";
2
+ export declare const PHARMGKB_HEADERS: {
3
+ readonly Accept: "application/json";
4
+ };
@@ -0,0 +1,2 @@
1
+ export const PHARMGKB_BASE = "https://api.pharmgkb.org/v1/data";
2
+ export const PHARMGKB_HEADERS = { Accept: "application/json" };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Per-previewId serialization for report iterations.
3
+ *
4
+ * Two iterations on the same preview must not race on its shared
5
+ * `assets/` directory or version-dir creation. This lock ensures
6
+ * sequential execution per previewId; iterations on different previewIds
7
+ * remain fully parallel.
8
+ *
9
+ * SCOPE — in-process only. This Map is process-local: it serializes
10
+ * iterations within one replica but gives NO cross-pod guarantee, and it
11
+ * does not survive a DBOS replay. That is acceptable today because
12
+ * `runReportIteration` runs in the in-process chat path (`passthroughStep`),
13
+ * not as a durable workflow. When `iterateReport` is ported to a DBOS
14
+ * workflow, replace this with a durable mechanism (a DBOS queue keyed by
15
+ * previewId, or a Postgres advisory lock) — an in-process lock would then be
16
+ * both a replay and a cross-replica correctness bug.
17
+ */
18
+ /** @internal — exposed for tests to assert no leak after settlement. */
19
+ export declare const __previewLocksForTest: Map<string, Promise<unknown>>;
20
+ export declare function withPreviewLock<T>(previewId: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Per-previewId serialization for report iterations.
3
+ *
4
+ * Two iterations on the same preview must not race on its shared
5
+ * `assets/` directory or version-dir creation. This lock ensures
6
+ * sequential execution per previewId; iterations on different previewIds
7
+ * remain fully parallel.
8
+ *
9
+ * SCOPE — in-process only. This Map is process-local: it serializes
10
+ * iterations within one replica but gives NO cross-pod guarantee, and it
11
+ * does not survive a DBOS replay. That is acceptable today because
12
+ * `runReportIteration` runs in the in-process chat path (`passthroughStep`),
13
+ * not as a durable workflow. When `iterateReport` is ported to a DBOS
14
+ * workflow, replace this with a durable mechanism (a DBOS queue keyed by
15
+ * previewId, or a Postgres advisory lock) — an in-process lock would then be
16
+ * both a replay and a cross-replica correctness bug.
17
+ */
18
+ const previewLocks = new Map();
19
+ /** @internal — exposed for tests to assert no leak after settlement. */
20
+ export const __previewLocksForTest = previewLocks;
21
+ export async function withPreviewLock(previewId, fn) {
22
+ const prior = previewLocks.get(previewId) ?? Promise.resolve();
23
+ const next = prior.then(fn, fn);
24
+ // The stored promise must not surface as an unhandled rejection — callers
25
+ // only see/handle `next`. Swallow on the stored chain after running the
26
+ // cleanup hook.
27
+ const stored = next
28
+ .finally(() => {
29
+ if (previewLocks.get(previewId) === stored)
30
+ previewLocks.delete(previewId);
31
+ })
32
+ .catch(() => undefined);
33
+ previewLocks.set(previewId, stored);
34
+ return next;
35
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Protein-family → preferred modality lookup, used by §2.2 Tractability
3
+ * fallback when Open Targets has no tractability assessment for the target.
4
+ */
5
+ export interface ModalityFallback {
6
+ family: string | null;
7
+ preferred_modality: string;
8
+ rationale: string;
9
+ source: "family-match" | "default";
10
+ }
11
+ /**
12
+ * Infer a preferred modality from a free-text protein-family description
13
+ * (typically the UniProt family/keyword). Returns the dataset default when
14
+ * no family pattern matches.
15
+ */
16
+ export declare function inferModalityFromFamily(familyText: string | null): ModalityFallback;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Protein-family → preferred modality lookup, used by §2.2 Tractability
3
+ * fallback when Open Targets has no tractability assessment for the target.
4
+ */
5
+ import familyMappingData from "../../data/protein-family-modality.json" with { type: "json" };
6
+ import { normalizeProteinFamily } from "./protein-family-normalize.js";
7
+ // The JSON import yields an untyped/structurally-wide value; cast to the declared
8
+ // shape, which the bundled data file is authored to satisfy.
9
+ const dataset = familyMappingData;
10
+ function loadDataset() {
11
+ return dataset;
12
+ }
13
+ /**
14
+ * Infer a preferred modality from a free-text protein-family description
15
+ * (typically the UniProt family/keyword). Returns the dataset default when
16
+ * no family pattern matches.
17
+ */
18
+ export function inferModalityFromFamily(familyText) {
19
+ const ds = loadDataset();
20
+ const normalized = normalizeProteinFamily(familyText);
21
+ if (normalized) {
22
+ for (const entry of ds.families) {
23
+ for (const pattern of entry.patterns) {
24
+ const normPattern = normalizeProteinFamily(pattern);
25
+ if (normPattern && normalized.includes(normPattern)) {
26
+ return {
27
+ family: entry.family,
28
+ preferred_modality: entry.preferred_modality,
29
+ rationale: entry.rationale,
30
+ source: "family-match",
31
+ };
32
+ }
33
+ }
34
+ }
35
+ }
36
+ return {
37
+ family: null,
38
+ preferred_modality: ds.default.preferred_modality,
39
+ rationale: ds.default.rationale,
40
+ source: "default",
41
+ };
42
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Map free-text protein-family descriptors (UniProt keywords, HGNC names,
3
+ * GraphQL labels) to a single canonical lowercase form so the modality lookup
4
+ * in `protein-family-modality.json` has one pattern set to match against.
5
+ *
6
+ * Why this exists: UniProt keyword text and the modality-JSON patterns
7
+ * disagreed on hyphenation ("G-protein coupled receptor" vs
8
+ * "G protein-coupled receptor"), causing every GPCR target whose UniProt
9
+ * keyword used the hyphenated variant to fall through to the dataset default
10
+ * modality. See review of dossier 9ad29ba5 (GLP1R) — 2026-05-13.
11
+ */
12
+ export declare function normalizeProteinFamily(input: string | null): string | null;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Map free-text protein-family descriptors (UniProt keywords, HGNC names,
3
+ * GraphQL labels) to a single canonical lowercase form so the modality lookup
4
+ * in `protein-family-modality.json` has one pattern set to match against.
5
+ *
6
+ * Why this exists: UniProt keyword text and the modality-JSON patterns
7
+ * disagreed on hyphenation ("G-protein coupled receptor" vs
8
+ * "G protein-coupled receptor"), causing every GPCR target whose UniProt
9
+ * keyword used the hyphenated variant to fall through to the dataset default
10
+ * modality. See review of dossier 9ad29ba5 (GLP1R) — 2026-05-13.
11
+ */
12
+ const FAMILIES = [
13
+ {
14
+ canonical: "g protein-coupled receptor",
15
+ patterns: [
16
+ /\bg[-\s]?protein[-\s]?coupled\s+receptor\b/i,
17
+ /\bgpcr\b/i,
18
+ /\b7tm\s+receptor\b/i,
19
+ /\brhodopsin-like\s+receptor\b/i,
20
+ /\bsecretin-like\s+receptor\b/i,
21
+ ],
22
+ },
23
+ {
24
+ canonical: "serine/threonine-protein kinase",
25
+ patterns: [/\bserine\/threonine[-\s]?protein\s+kinase\b/i],
26
+ },
27
+ {
28
+ canonical: "tyrosine-protein kinase",
29
+ patterns: [/\btyrosine[-\s]?protein\s+kinase\b/i],
30
+ },
31
+ // Extend as additional hyphen-style mismatches surface. The default branch
32
+ // below preserves the lowercased input so callers can still pattern-match
33
+ // unknown families.
34
+ ];
35
+ export function normalizeProteinFamily(input) {
36
+ if (!input)
37
+ return null;
38
+ const trimmed = input.trim();
39
+ if (!trimmed)
40
+ return null;
41
+ for (const fam of FAMILIES) {
42
+ if (fam.patterns.some((rx) => rx.test(trimmed)))
43
+ return fam.canonical;
44
+ }
45
+ return trimmed.toLowerCase();
46
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Pure async client functions for the PubChem PUG-REST API
3
+ * (https://pubchem.ncbi.nlm.nih.gov/rest/pug/).
4
+ *
5
+ * Used by the modulator-metadata enrichment step to refine ChEMBL's
6
+ * `molecule_type` annotation when ChEMBL itself returns "Unknown" — PubChem
7
+ * exposes molecular weight + SMILES + InChI properties that let us
8
+ * heuristically classify peptides, small molecules, and proteins without a
9
+ * hand-curated override table.
10
+ */
11
+ export interface PubChemCompoundProperties {
12
+ cid: number;
13
+ molecularWeight: number | null;
14
+ inchiKey: string | null;
15
+ canonicalSmiles: string | null;
16
+ hBondDonorCount: number | null;
17
+ hBondAcceptorCount: number | null;
18
+ }
19
+ export declare function getCompoundPropertiesByCID(cid: number): Promise<PubChemCompoundProperties | null>;
20
+ /**
21
+ * Look up a PubChem compound by InChI key (the canonical hash of the 3-D
22
+ * structure that we can lift from ChEMBL's molecule_structures payload).
23
+ * Returns null when the key is unknown to PubChem.
24
+ */
25
+ export declare function getCompoundPropertiesByInChIKey(inchiKey: string): Promise<PubChemCompoundProperties | null>;
26
+ /**
27
+ * Heuristic molecule-type classifier driven by PubChem properties.
28
+ *
29
+ * MW < 1500 → "Small molecule"
30
+ * MW 1500–100,000 → "Peptide" when the SMILES carries ≥5 amide bonds, else "Unknown"
31
+ * MW > 100,000 → "Protein"
32
+ * No MW available → "Unknown"
33
+ *
34
+ * The amide-bond floor (≥5) is a tractable check that catches insulin-class,
35
+ * calcitonin-class, and other small/medium peptide drugs while rejecting
36
+ * polyketides and macrocyclic small molecules of similar MW. We don't try to
37
+ * distinguish antibody/oligonucleotide modalities here — ChEMBL annotates
38
+ * those reliably; this heuristic only fires on its "Unknown" rows.
39
+ */
40
+ export declare function classifyMoleculeType(props: PubChemCompoundProperties): string;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Pure async client functions for the PubChem PUG-REST API
3
+ * (https://pubchem.ncbi.nlm.nih.gov/rest/pug/).
4
+ *
5
+ * Used by the modulator-metadata enrichment step to refine ChEMBL's
6
+ * `molecule_type` annotation when ChEMBL itself returns "Unknown" — PubChem
7
+ * exposes molecular weight + SMILES + InChI properties that let us
8
+ * heuristically classify peptides, small molecules, and proteins without a
9
+ * hand-curated override table.
10
+ */
11
+ import { z } from "zod";
12
+ import { apiFetchValidated, describeApiError } from "./api-utils.js";
13
+ import { PUBCHEM_BASE, PUBCHEM_HEADERS } from "./pubchem-config.js";
14
+ const PROPERTY_FIELDS = [
15
+ "MolecularWeight",
16
+ "InChIKey",
17
+ // The PUG-REST schema renamed the small-molecule SMILES field to
18
+ // ConnectivitySMILES in late 2024; CanonicalSMILES still works but is
19
+ // deprecated. We request both and fall back through them.
20
+ "ConnectivitySMILES",
21
+ "CanonicalSMILES",
22
+ "HBondDonorCount",
23
+ "HBondAcceptorCount",
24
+ ].join(",");
25
+ // A single record from the PUG-REST `PropertyTable.Properties` array, validated
26
+ // at the fetch boundary. Every field is optional — PubChem omits absent
27
+ // properties, and a row missing `CID` is handled gracefully by the caller's
28
+ // guard (returns null) rather than being a contract break.
29
+ const RawPubChemPropertySchema = z.object({
30
+ CID: z.number().optional(),
31
+ MolecularWeight: z.unknown(),
32
+ InChIKey: z.unknown(),
33
+ ConnectivitySMILES: z.unknown(),
34
+ CanonicalSMILES: z.unknown(),
35
+ HBondDonorCount: z.unknown(),
36
+ HBondAcceptorCount: z.unknown(),
37
+ });
38
+ const PubChemPropertyResponseSchema = z.object({
39
+ PropertyTable: z.object({ Properties: z.array(RawPubChemPropertySchema).optional() }).optional(),
40
+ });
41
+ const PubChemCidListResponseSchema = z.object({
42
+ IdentifierList: z.object({ CID: z.array(z.number()).optional() }).optional(),
43
+ });
44
+ function parseNumber(value) {
45
+ if (value == null)
46
+ return null;
47
+ if (typeof value === "number")
48
+ return Number.isFinite(value) ? value : null;
49
+ if (typeof value === "string") {
50
+ const n = parseFloat(value);
51
+ return Number.isFinite(n) ? n : null;
52
+ }
53
+ return null;
54
+ }
55
+ function mapProps(raw) {
56
+ return {
57
+ cid: raw.CID ?? 0,
58
+ molecularWeight: parseNumber(raw.MolecularWeight),
59
+ inchiKey: typeof raw.InChIKey === "string" ? raw.InChIKey : null,
60
+ canonicalSmiles: typeof raw.ConnectivitySMILES === "string" ? raw.ConnectivitySMILES : typeof raw.CanonicalSMILES === "string" ? raw.CanonicalSMILES : null,
61
+ hBondDonorCount: typeof raw.HBondDonorCount === "number" ? raw.HBondDonorCount : parseNumber(raw.HBondDonorCount),
62
+ hBondAcceptorCount: typeof raw.HBondAcceptorCount === "number" ? raw.HBondAcceptorCount : parseNumber(raw.HBondAcceptorCount),
63
+ };
64
+ }
65
+ export async function getCompoundPropertiesByCID(cid) {
66
+ const url = `${PUBCHEM_BASE}/compound/cid/${cid}/property/${PROPERTY_FIELDS}/JSON`;
67
+ const res = await apiFetchValidated(url, PubChemPropertyResponseSchema, {
68
+ headers: PUBCHEM_HEADERS,
69
+ });
70
+ if (res.isErr()) {
71
+ if (res.error.type === "http_status" && res.error.status === 404)
72
+ return null;
73
+ throw new Error(describeApiError(res.error));
74
+ }
75
+ const props = res.value.PropertyTable?.Properties?.[0];
76
+ if (!props || typeof props.CID !== "number")
77
+ return null;
78
+ return mapProps(props);
79
+ }
80
+ /**
81
+ * Look up a PubChem compound by InChI key (the canonical hash of the 3-D
82
+ * structure that we can lift from ChEMBL's molecule_structures payload).
83
+ * Returns null when the key is unknown to PubChem.
84
+ */
85
+ export async function getCompoundPropertiesByInChIKey(inchiKey) {
86
+ const cidUrl = `${PUBCHEM_BASE}/compound/inchikey/${encodeURIComponent(inchiKey)}/cids/JSON`;
87
+ const cidRes = await apiFetchValidated(cidUrl, PubChemCidListResponseSchema, {
88
+ headers: PUBCHEM_HEADERS,
89
+ });
90
+ if (cidRes.isErr()) {
91
+ if (cidRes.error.type === "http_status" && cidRes.error.status === 404)
92
+ return null;
93
+ throw new Error(describeApiError(cidRes.error));
94
+ }
95
+ const cid = cidRes.value.IdentifierList?.CID?.[0];
96
+ if (cid == null)
97
+ return null;
98
+ return getCompoundPropertiesByCID(cid);
99
+ }
100
+ const AMIDE_BOND_RE = /C\(=O\)N/g;
101
+ /**
102
+ * Heuristic molecule-type classifier driven by PubChem properties.
103
+ *
104
+ * MW < 1500 → "Small molecule"
105
+ * MW 1500–100,000 → "Peptide" when the SMILES carries ≥5 amide bonds, else "Unknown"
106
+ * MW > 100,000 → "Protein"
107
+ * No MW available → "Unknown"
108
+ *
109
+ * The amide-bond floor (≥5) is a tractable check that catches insulin-class,
110
+ * calcitonin-class, and other small/medium peptide drugs while rejecting
111
+ * polyketides and macrocyclic small molecules of similar MW. We don't try to
112
+ * distinguish antibody/oligonucleotide modalities here — ChEMBL annotates
113
+ * those reliably; this heuristic only fires on its "Unknown" rows.
114
+ */
115
+ export function classifyMoleculeType(props) {
116
+ const mw = props.molecularWeight;
117
+ if (mw == null || mw <= 0)
118
+ return "Unknown";
119
+ if (mw > 100_000)
120
+ return "Protein";
121
+ if (mw >= 1500) {
122
+ const amideCount = (props.canonicalSmiles ?? "").match(AMIDE_BOND_RE)?.length ?? 0;
123
+ if (amideCount >= 5)
124
+ return "Peptide";
125
+ return "Unknown";
126
+ }
127
+ return "Small molecule";
128
+ }
@@ -0,0 +1,5 @@
1
+ /** Shared constants for PubChem PUG-REST API tools. */
2
+ export declare const PUBCHEM_BASE = "https://pubchem.ncbi.nlm.nih.gov/rest/pug";
3
+ export declare const PUBCHEM_HEADERS: {
4
+ readonly Accept: "application/json";
5
+ };
@@ -0,0 +1,3 @@
1
+ /** Shared constants for PubChem PUG-REST API tools. */
2
+ export const PUBCHEM_BASE = "https://pubchem.ncbi.nlm.nih.gov/rest/pug";
3
+ export const PUBCHEM_HEADERS = { Accept: "application/json" };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pure async client functions for PubMed and PubMed Central via NCBI E-utilities.
3
+ *
4
+ * Used by §3.11 (Key Papers), §3.10.4 (Preclinical literature), and the
5
+ * pubmed-index Phase-1 collector.
6
+ */
7
+ import { type ArticleDetail, type PubMedSummary, type FullTextResult } from "./ncbi-utils.js";
8
+ export type { PubMedSummary, ArticleDetail, FullTextResult };
9
+ export interface SearchOptions {
10
+ maxResults?: number;
11
+ sort?: "relevance" | "date";
12
+ dateRange?: {
13
+ from: string;
14
+ to: string;
15
+ };
16
+ }
17
+ /** PubMed search via esearch + esummary. */
18
+ export declare function searchPubmed(ncbiApiKey: string | undefined, query: string, options?: SearchOptions): Promise<{
19
+ totalFound: number;
20
+ results: PubMedSummary[];
21
+ }>;
22
+ /** Fetch full PubMed article details (efetch + ID Converter for PMC). */
23
+ export declare function getArticleDetails(ncbiApiKey: string | undefined, pmids: string[]): Promise<{
24
+ articles: ArticleDetail[];
25
+ notFound: string[];
26
+ }>;
27
+ /** Fetch open-access full text from PMC. Returns null when unavailable. */
28
+ export declare function getArticleFullText(ncbiApiKey: string | undefined, pmcId: string): Promise<FullTextResult | null>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Pure async client functions for PubMed and PubMed Central via NCBI E-utilities.
3
+ *
4
+ * Used by §3.11 (Key Papers), §3.10.4 (Preclinical literature), and the
5
+ * pubmed-index Phase-1 collector.
6
+ */
7
+ import { z } from "zod";
8
+ import { apiFetch, apiFetchValidated, describeApiError } from "./api-utils.js";
9
+ import { NCBI_BASE, NCBI_IDCONV, ncbiUrl, parseEsummary, parseEfetch, parseIdConvResponse, parsePmcFullText, } from "./ncbi-utils.js";
10
+ // NCBI E-utilities JSON payloads, validated at the fetch boundary. Every field
11
+ // is optional because the API omits absent values.
12
+ const EsearchResponseSchema = z.object({
13
+ esearchresult: z.object({ idlist: z.array(z.string()).optional(), count: z.string().optional() }).optional(),
14
+ });
15
+ const IdConvResponseSchema = z.object({
16
+ records: z.array(z.object({ pmid: z.string().optional(), pmcid: z.string().optional() })).optional(),
17
+ });
18
+ /** PubMed search via esearch + esummary. */
19
+ export async function searchPubmed(ncbiApiKey, query, options = {}) {
20
+ const maxResults = options.maxResults ?? 10;
21
+ const sort = options.sort ?? "relevance";
22
+ const esearchParams = {
23
+ db: "pubmed",
24
+ term: query,
25
+ retmax: maxResults,
26
+ retmode: "json",
27
+ sort: sort === "date" ? "pub+date" : "relevance",
28
+ };
29
+ if (options.dateRange) {
30
+ esearchParams.mindate = options.dateRange.from;
31
+ esearchParams.maxdate = options.dateRange.to;
32
+ esearchParams.datetype = "pdat";
33
+ }
34
+ const searchUrl = ncbiUrl(ncbiApiKey, `${NCBI_BASE}/esearch.fcgi`, esearchParams);
35
+ const searchResult = await apiFetchValidated(searchUrl, EsearchResponseSchema);
36
+ if (searchResult.isErr())
37
+ throw new Error(describeApiError(searchResult.error));
38
+ const idList = searchResult.value.esearchresult?.idlist ?? [];
39
+ const totalFound = parseInt(searchResult.value.esearchresult?.count ?? "0", 10);
40
+ if (idList.length === 0)
41
+ return { totalFound, results: [] };
42
+ const summaryUrl = ncbiUrl(ncbiApiKey, `${NCBI_BASE}/esummary.fcgi`, {
43
+ db: "pubmed",
44
+ id: idList.join(","),
45
+ retmode: "xml",
46
+ });
47
+ const summaryResult = await apiFetch(summaryUrl, { parseAs: "text" });
48
+ if (summaryResult.isErr())
49
+ throw new Error(describeApiError(summaryResult.error));
50
+ return { totalFound, results: parseEsummary(summaryResult.value) };
51
+ }
52
+ /** Fetch full PubMed article details (efetch + ID Converter for PMC). */
53
+ export async function getArticleDetails(ncbiApiKey, pmids) {
54
+ const idString = pmids.join(",");
55
+ const efetchAsync = apiFetch(ncbiUrl(ncbiApiKey, `${NCBI_BASE}/efetch.fcgi`, {
56
+ db: "pubmed",
57
+ id: idString,
58
+ rettype: "xml",
59
+ retmode: "xml",
60
+ }), { parseAs: "text" });
61
+ const idConvAsync = apiFetchValidated(ncbiUrl(ncbiApiKey, NCBI_IDCONV, { ids: idString, format: "json" }), IdConvResponseSchema);
62
+ // Both requests run concurrently; each Result is awaited and handled below.
63
+ const efetchResult = await efetchAsync;
64
+ const idConvResult = await idConvAsync;
65
+ if (efetchResult.isErr())
66
+ throw new Error(describeApiError(efetchResult.error));
67
+ const articles = parseEfetch(efetchResult.value);
68
+ if (idConvResult.isOk()) {
69
+ const pmcMap = parseIdConvResponse(idConvResult.value);
70
+ for (const article of articles) {
71
+ article.pmcId = pmcMap.get(article.pmid) ?? null;
72
+ }
73
+ }
74
+ const foundPmids = new Set(articles.map((a) => a.pmid));
75
+ const notFound = pmids.filter((id) => !foundPmids.has(id));
76
+ return { articles, notFound };
77
+ }
78
+ /** Fetch open-access full text from PMC. Returns null when unavailable. */
79
+ export async function getArticleFullText(ncbiApiKey, pmcId) {
80
+ const numericId = pmcId.replace(/^PMC/i, "");
81
+ const url = ncbiUrl(ncbiApiKey, `${NCBI_BASE}/efetch.fcgi`, {
82
+ db: "pmc",
83
+ id: numericId,
84
+ rettype: "xml",
85
+ retmode: "xml",
86
+ });
87
+ const result = await apiFetch(url, { parseAs: "text" });
88
+ if (result.isErr())
89
+ throw new Error(describeApiError(result.error));
90
+ return parsePmcFullText(result.value);
91
+ }