@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,230 @@
1
+ /**
2
+ * Pure async client functions for the IUPHAR Guide to Pharmacology
3
+ * (https://www.guidetopharmacology.org/services/) REST API.
4
+ *
5
+ * Used to discover, for any HGNC target or UniProt accession, the obligate
6
+ * heterodimer complexes that share the same primary protein (e.g., AMY1/
7
+ * AMY2/AMY3 amylin receptors share the CT receptor protein with the
8
+ * calcitonin receptor and differ only by their RAMP accessory). Powers
9
+ * data-driven heterodimer filtering in target-assessment so off-target
10
+ * panels never list a sibling receptor-complex as a developable hit.
11
+ */
12
+ import { z } from "zod";
13
+ import { apiFetchValidated, describeApiError } from "./api-utils.js";
14
+ import { IUPHAR_BASE, IUPHAR_HEADERS as HEADERS } from "./iuphar-config.js";
15
+ // Validated at the fetch boundary. GtoPdb returns familyIds/complexIds as
16
+ // arrays on every target, and the resolver reads `.length` / iterates them
17
+ // without a guard, so they stay required — a missing value surfaces as
18
+ // `invalid_response` rather than a runtime TypeError. subunitIds and type are
19
+ // only read behind a guard, so they may be absent.
20
+ const IupharTargetSchema = z.object({
21
+ targetId: z.number(),
22
+ name: z.string(),
23
+ type: z.string().nullable().optional(),
24
+ familyIds: z.array(z.number()),
25
+ subunitIds: z.array(z.number()).optional(),
26
+ complexIds: z.array(z.number()),
27
+ subunitType: z.string().optional(),
28
+ });
29
+ const UNIPROT_ACCESSION_RE = /^[A-Z][0-9][A-Z0-9]{3}[0-9]$/;
30
+ function stripHtml(name) {
31
+ return name.replace(/<[^>]+>/g, "");
32
+ }
33
+ function notFound(error) {
34
+ return error.type === "http_status" && (error.status === 404 || error.status === 204);
35
+ }
36
+ async function fetchTargets(query) {
37
+ const url = `${IUPHAR_BASE}/targets?${query}`;
38
+ const res = await apiFetchValidated(url, z.array(IupharTargetSchema), { headers: HEADERS });
39
+ if (res.isErr()) {
40
+ if (notFound(res.error))
41
+ return [];
42
+ throw new Error(describeApiError(res.error));
43
+ }
44
+ return Array.isArray(res.value) ? res.value : [];
45
+ }
46
+ export async function findTargetByGeneSymbol(geneSymbol) {
47
+ const targets = await fetchTargets(`geneSymbol=${encodeURIComponent(geneSymbol)}`);
48
+ return targets[0] ?? null;
49
+ }
50
+ export async function findTargetByUniprot(accession) {
51
+ const targets = await fetchTargets(`accession=${encodeURIComponent(accession)}&database=UniProt`);
52
+ return targets[0] ?? null;
53
+ }
54
+ /**
55
+ * Resolve a target by either a UniProt accession or HGNC gene symbol.
56
+ * Tries the format that matches the input shape first, then falls back.
57
+ */
58
+ export async function resolveTarget(uniprotOrGeneSymbol) {
59
+ const input = uniprotOrGeneSymbol.trim();
60
+ if (!input)
61
+ return null;
62
+ if (UNIPROT_ACCESSION_RE.test(input)) {
63
+ return (await findTargetByUniprot(input)) ?? (await findTargetByGeneSymbol(input));
64
+ }
65
+ return (await findTargetByGeneSymbol(input)) ?? (await findTargetByUniprot(input));
66
+ }
67
+ export async function getSubunits(complexId) {
68
+ const url = `${IUPHAR_BASE}/targets/${complexId}/subunits`;
69
+ const res = await apiFetchValidated(url, z.array(IupharTargetSchema), { headers: HEADERS });
70
+ if (res.isErr()) {
71
+ if (notFound(res.error))
72
+ return [];
73
+ throw new Error(describeApiError(res.error));
74
+ }
75
+ return Array.isArray(res.value) ? res.value : [];
76
+ }
77
+ /**
78
+ * Get the heterodimer / family complexes that contain the primary target
79
+ * (e.g., for CALCR → the AMY1/AMY2/AMY3 amylin receptors, each carrying a
80
+ * RAMP1/2/3 accessory). Names are stripped of IUPHAR's HTML subscript markup.
81
+ *
82
+ * Returns [] when the target isn't resolvable in GtoPdb or has no
83
+ * registered complexes.
84
+ */
85
+ export async function getFamilyHeterodimers(uniprotOrGeneSymbol) {
86
+ const target = await resolveTarget(uniprotOrGeneSymbol);
87
+ if (!target || target.complexIds.length === 0)
88
+ return [];
89
+ const url = `${IUPHAR_BASE}/targets/${target.targetId}/complexes`;
90
+ const res = await apiFetchValidated(url, z.array(IupharTargetSchema), { headers: HEADERS });
91
+ if (res.isErr()) {
92
+ if (notFound(res.error))
93
+ return [];
94
+ throw new Error(describeApiError(res.error));
95
+ }
96
+ const complexes = Array.isArray(res.value) ? res.value : [];
97
+ const results = [];
98
+ const concurrency = 5;
99
+ for (let i = 0; i < complexes.length; i += concurrency) {
100
+ const batch = complexes.slice(i, i + concurrency);
101
+ const subunitLists = await Promise.all(batch.map((c) => getSubunits(c.targetId)));
102
+ for (let j = 0; j < batch.length; j++) {
103
+ const complex = batch[j];
104
+ const subunits = subunitLists[j];
105
+ const cleanedSubunits = subunits.map((s) => ({ ...s, name: stripHtml(s.name) }));
106
+ const accessories = cleanedSubunits.filter((s) => (s.type ?? "").toLowerCase() === "accessoryprotein");
107
+ results.push({
108
+ complex: { ...complex, name: stripHtml(complex.name) },
109
+ subunits: cleanedSubunits,
110
+ accessories,
111
+ });
112
+ }
113
+ }
114
+ return results;
115
+ }
116
+ /**
117
+ * Distinct accessory-protein gene symbols across all heterodimer complexes
118
+ * containing the primary target. Used to build a runtime regex alternation
119
+ * for heterodimer-name filtering instead of hardcoding RAMP/MRAP/RGS.
120
+ *
121
+ * Example: getAccessoryProteinNames("CALCR") → ["RAMP1", "RAMP2", "RAMP3"].
122
+ */
123
+ export async function getAccessoryProteinNames(uniprotOrGeneSymbol) {
124
+ const heterodimers = await getFamilyHeterodimers(uniprotOrGeneSymbol);
125
+ const names = new Set();
126
+ for (const h of heterodimers) {
127
+ for (const acc of h.accessories) {
128
+ const cleaned = acc.name.trim();
129
+ if (cleaned)
130
+ names.add(cleaned);
131
+ }
132
+ }
133
+ return [...names].sort();
134
+ }
135
+ // getFamilySiblingUniprots iterates `targetIds` without a guard, so it stays
136
+ // required; the other fields are not read, so they may be absent.
137
+ const IupharFamilySchema = z.object({
138
+ familyId: z.number().optional(),
139
+ name: z.string().optional(),
140
+ targetIds: z.array(z.number()),
141
+ parentFamilyIds: z.array(z.number()).optional(),
142
+ subFamilyIds: z.array(z.number()).optional(),
143
+ });
144
+ export async function getFamily(familyId) {
145
+ const url = `${IUPHAR_BASE}/targets/families/${familyId}`;
146
+ const res = await apiFetchValidated(url, IupharFamilySchema, { headers: HEADERS });
147
+ if (res.isErr()) {
148
+ if (notFound(res.error))
149
+ return null;
150
+ throw new Error(describeApiError(res.error));
151
+ }
152
+ return res.value;
153
+ }
154
+ const IupharDatabaseLinkSchema = z.object({
155
+ accession: z.string().optional(),
156
+ database: z.string().optional(),
157
+ species: z.string().optional(),
158
+ });
159
+ /** Fetch the UniProtKB cross-references (human only) for an IUPHAR target. */
160
+ export async function getTargetHumanUniprots(targetId) {
161
+ const url = `${IUPHAR_BASE}/targets/${targetId}/databaseLinks`;
162
+ const res = await apiFetchValidated(url, z.array(IupharDatabaseLinkSchema), { headers: HEADERS });
163
+ if (res.isErr()) {
164
+ if (notFound(res.error))
165
+ return [];
166
+ throw new Error(describeApiError(res.error));
167
+ }
168
+ const links = Array.isArray(res.value) ? res.value : [];
169
+ const out = [];
170
+ for (const l of links) {
171
+ if (l.database !== "UniProtKB")
172
+ continue;
173
+ if ((l.species ?? "").toLowerCase() !== "human")
174
+ continue;
175
+ if (l.accession)
176
+ out.push(l.accession);
177
+ }
178
+ return out;
179
+ }
180
+ /**
181
+ * UniProt accessions of sibling primary-GPCR targets in the same IUPHAR
182
+ * family as the input (excludes the input target itself and any target
183
+ * registered as a complex with subunits). For CALCR this returns the
184
+ * CALCRL accession; the AMY1/2/3 complexes are excluded because they are
185
+ * heterodimers, not separate primary proteins.
186
+ */
187
+ export async function getFamilySiblingUniprots(uniprotOrGeneSymbol) {
188
+ const self = await resolveTarget(uniprotOrGeneSymbol);
189
+ if (!self)
190
+ return [];
191
+ const selfUniprots = new Set(await getTargetHumanUniprots(self.targetId));
192
+ const siblingIds = new Set();
193
+ for (const familyId of self.familyIds) {
194
+ const family = await getFamily(familyId);
195
+ if (!family)
196
+ continue;
197
+ for (const tid of family.targetIds) {
198
+ if (tid !== self.targetId)
199
+ siblingIds.add(tid);
200
+ }
201
+ }
202
+ if (siblingIds.size === 0)
203
+ return [];
204
+ const out = new Set();
205
+ const ids = [...siblingIds];
206
+ const concurrency = 5;
207
+ for (let i = 0; i < ids.length; i += concurrency) {
208
+ const batch = ids.slice(i, i + concurrency);
209
+ // Fetch target details and their UniProt cross-references in parallel.
210
+ // Complexes (non-empty subunitIds) are skipped — those are covered by
211
+ // the family-complexes collector, not the family-sibling resolver.
212
+ const uniprotLists = await Promise.all(batch.map(async (tid) => {
213
+ const url = `${IUPHAR_BASE}/targets/${tid}`;
214
+ const res = await apiFetchValidated(url, IupharTargetSchema, { headers: HEADERS });
215
+ if (res.isErr())
216
+ return [];
217
+ const t = res.value;
218
+ if (t.subunitIds && t.subunitIds.length > 0)
219
+ return [];
220
+ return getTargetHumanUniprots(t.targetId);
221
+ }));
222
+ for (const accs of uniprotLists) {
223
+ for (const a of accs) {
224
+ if (!selfUniprots.has(a))
225
+ out.add(a);
226
+ }
227
+ }
228
+ }
229
+ return [...out].sort();
230
+ }
@@ -0,0 +1,5 @@
1
+ /** Shared constants for the IUPHAR Guide to Pharmacology REST API. */
2
+ export declare const IUPHAR_BASE = "https://www.guidetopharmacology.org/services";
3
+ export declare const IUPHAR_HEADERS: {
4
+ readonly Accept: "application/json";
5
+ };
@@ -0,0 +1,3 @@
1
+ /** Shared constants for the IUPHAR Guide to Pharmacology REST API. */
2
+ export const IUPHAR_BASE = "https://www.guidetopharmacology.org/services";
3
+ export const IUPHAR_HEADERS = { Accept: "application/json" };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Shared NCBI E-utilities helpers for PubMed/PMC tools.
3
+ *
4
+ * Provides base URL constants, API key injection, and XML-to-article
5
+ * mapping functions for PubMed and PMC DTD structures.
6
+ */
7
+ export declare const NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils";
8
+ export declare const NCBI_IDCONV = "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0";
9
+ /**
10
+ * Append `api_key` and optional extra params to a base URL.
11
+ * Omits the key when `apiKey` is undefined.
12
+ */
13
+ export declare function ncbiUrl(apiKey: string | undefined, base: string, params: Record<string, string | number | undefined>): string;
14
+ export interface PubMedSummary {
15
+ pmid: string;
16
+ title: string;
17
+ journal: string;
18
+ year: string;
19
+ authors: string;
20
+ }
21
+ /**
22
+ * Parse esummary XML into PubMedSummary records.
23
+ */
24
+ export declare function parseEsummary(xml: string): PubMedSummary[];
25
+ export interface ArticleDetail {
26
+ pmid: string;
27
+ title: string;
28
+ abstract: string;
29
+ authors: string[];
30
+ journal: string;
31
+ year: string;
32
+ doi: string;
33
+ meshTerms: string[];
34
+ pmcId: string | null;
35
+ }
36
+ /**
37
+ * Parse efetch PubMed XML into ArticleDetail records.
38
+ * `pmcId` is left null here — resolved separately via ID Converter.
39
+ */
40
+ export declare function parseEfetch(xml: string): ArticleDetail[];
41
+ /**
42
+ * Parse ID Converter JSON response into a PMID → PMC ID map.
43
+ * Returns only entries that have a PMC ID.
44
+ */
45
+ export declare function parseIdConvResponse(data: unknown): Map<string, string>;
46
+ export interface ArticleSection {
47
+ heading: string;
48
+ text: string;
49
+ }
50
+ export interface FullTextResult {
51
+ fullText: string;
52
+ sections: ArticleSection[];
53
+ }
54
+ /**
55
+ * Parse PMC efetch XML into plain text with section structure.
56
+ * Omits figures, tables, and supplementary material markup.
57
+ */
58
+ export declare function parsePmcFullText(xml: string): FullTextResult | null;
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Shared NCBI E-utilities helpers for PubMed/PMC tools.
3
+ *
4
+ * Provides base URL constants, API key injection, and XML-to-article
5
+ * mapping functions for PubMed and PMC DTD structures.
6
+ */
7
+ import { XMLParser } from "fast-xml-parser";
8
+ // ── NCBI E-utilities base URLs ──────────────────────────────────────
9
+ export const NCBI_BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils";
10
+ export const NCBI_IDCONV = "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0";
11
+ // ── API key injection ───────────────────────────────────────────────
12
+ /**
13
+ * Append `api_key` and optional extra params to a base URL.
14
+ * Omits the key when `apiKey` is undefined.
15
+ */
16
+ export function ncbiUrl(apiKey, base, params) {
17
+ const url = new URL(base);
18
+ if (apiKey) {
19
+ url.searchParams.set("api_key", apiKey);
20
+ }
21
+ for (const [k, v] of Object.entries(params)) {
22
+ if (v !== undefined) {
23
+ url.searchParams.set(k, String(v));
24
+ }
25
+ }
26
+ return url.toString();
27
+ }
28
+ // ── XML parser (shared, configured once) ────────────────────────────
29
+ const xmlParser = new XMLParser({
30
+ ignoreAttributes: false,
31
+ attributeNamePrefix: "@_",
32
+ isArray: (name) => ["PubmedArticle", "Author", "MeshHeading", "AbstractText", "sec", "p", "record"].includes(name),
33
+ textNodeName: "#text",
34
+ });
35
+ function getItemValue(items, name) {
36
+ if (!items)
37
+ return "";
38
+ const arr = Array.isArray(items) ? items : [items];
39
+ const item = arr.find((i) => i["@_Name"] === name);
40
+ return item?.["#text"] ?? "";
41
+ }
42
+ function getAuthorsFromDocSum(items) {
43
+ if (!items)
44
+ return "";
45
+ const arr = Array.isArray(items) ? items : [items];
46
+ const authorList = arr.find((i) => i["@_Name"] === "AuthorList");
47
+ if (!authorList?.Item)
48
+ return "";
49
+ const authors = Array.isArray(authorList.Item) ? authorList.Item : [authorList.Item];
50
+ const names = authors.map((a) => a["#text"] ?? "").filter(Boolean);
51
+ if (names.length === 0)
52
+ return "";
53
+ if (names.length <= 3)
54
+ return names.join(", ");
55
+ return `${names[0]} et al.`;
56
+ }
57
+ /**
58
+ * Parse esummary XML into PubMedSummary records.
59
+ */
60
+ export function parseEsummary(xml) {
61
+ const parsed = xmlParser.parse(xml);
62
+ const result = parsed?.eSummaryResult ?? parsed;
63
+ const docSums = result?.DocSum;
64
+ if (!docSums)
65
+ return [];
66
+ const docs = Array.isArray(docSums) ? docSums : [docSums];
67
+ return docs.map((doc) => {
68
+ const items = doc.Item;
69
+ const pubDate = getItemValue(items, "PubDate");
70
+ return {
71
+ pmid: String(doc.Id ?? ""),
72
+ title: getItemValue(items, "Title"),
73
+ journal: getItemValue(items, "FullJournalName") || getItemValue(items, "Source"),
74
+ year: pubDate ? String(pubDate).slice(0, 4) : "",
75
+ authors: getAuthorsFromDocSum(items),
76
+ };
77
+ });
78
+ }
79
+ /**
80
+ * Parse efetch PubMed XML into ArticleDetail records.
81
+ * `pmcId` is left null here — resolved separately via ID Converter.
82
+ */
83
+ export function parseEfetch(xml) {
84
+ const parsed = xmlParser.parse(xml);
85
+ const articleSet = parsed?.PubmedArticleSet;
86
+ if (!articleSet)
87
+ return [];
88
+ const articles = Array.isArray(articleSet.PubmedArticle) ? articleSet.PubmedArticle : articleSet.PubmedArticle ? [articleSet.PubmedArticle] : [];
89
+ return articles.map((entry) => {
90
+ const article = entry;
91
+ const medlineCitation = article.MedlineCitation;
92
+ const articleData = medlineCitation?.Article;
93
+ // PMID
94
+ const pmidObj = medlineCitation?.PMID;
95
+ const pmid = typeof pmidObj === "object" && pmidObj !== null ? String(pmidObj["#text"] ?? "") : String(pmidObj ?? "");
96
+ // Title
97
+ const title = String(articleData?.ArticleTitle ?? "");
98
+ // Abstract
99
+ const abstractObj = articleData?.Abstract;
100
+ let abstract = "";
101
+ if (abstractObj?.AbstractText) {
102
+ const texts = Array.isArray(abstractObj.AbstractText) ? abstractObj.AbstractText : [abstractObj.AbstractText];
103
+ abstract = texts
104
+ .map((t) => {
105
+ if (typeof t === "string")
106
+ return t;
107
+ if (typeof t === "object" && t !== null) {
108
+ const label = t["@_Label"];
109
+ const text = t["#text"] ?? "";
110
+ return label ? `${label}: ${text}` : String(text);
111
+ }
112
+ return String(t);
113
+ })
114
+ .join("\n\n");
115
+ }
116
+ // Authors
117
+ const authorListObj = articleData?.AuthorList;
118
+ const rawAuthors = authorListObj?.Author;
119
+ const authorArr = Array.isArray(rawAuthors) ? rawAuthors : rawAuthors ? [rawAuthors] : [];
120
+ const authors = authorArr.map((a) => {
121
+ if (a.CollectiveName)
122
+ return a.CollectiveName;
123
+ return [a.ForeName ?? a.Initials, a.LastName].filter(Boolean).join(" ");
124
+ });
125
+ // Journal + year
126
+ const journalObj = articleData?.Journal;
127
+ const journal = String(journalObj?.Title ?? journalObj?.ISOAbbreviation ?? "");
128
+ const journalIssue = journalObj?.JournalIssue;
129
+ const pubDate = journalIssue?.PubDate;
130
+ const year = String(pubDate?.Year ?? "");
131
+ // DOI
132
+ let doi = "";
133
+ const articleIdList = article.PubmedData?.ArticleIdList;
134
+ if (articleIdList?.ArticleId) {
135
+ const ids = Array.isArray(articleIdList.ArticleId) ? articleIdList.ArticleId : [articleIdList.ArticleId];
136
+ for (const idObj of ids) {
137
+ if (typeof idObj === "object" && idObj !== null) {
138
+ const typed = idObj;
139
+ if (typed["@_IdType"] === "doi") {
140
+ doi = String(typed["#text"] ?? "");
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // MeSH terms
146
+ const meshList = medlineCitation?.MeshHeadingList;
147
+ const meshHeadings = meshList?.MeshHeading
148
+ ? Array.isArray(meshList.MeshHeading)
149
+ ? meshList.MeshHeading
150
+ : [meshList.MeshHeading]
151
+ : [];
152
+ const meshTerms = meshHeadings
153
+ .map((h) => {
154
+ const desc = h.DescriptorName;
155
+ if (typeof desc === "string")
156
+ return desc;
157
+ if (typeof desc === "object" && desc !== null)
158
+ return desc["#text"] ?? "";
159
+ return "";
160
+ })
161
+ .filter(Boolean);
162
+ return {
163
+ pmid,
164
+ title,
165
+ abstract,
166
+ authors,
167
+ journal,
168
+ year,
169
+ doi,
170
+ meshTerms,
171
+ pmcId: null, // resolved separately via ID Converter
172
+ };
173
+ });
174
+ }
175
+ // ── NCBI ID Converter mapping ───────────────────────────────────────
176
+ /**
177
+ * Parse ID Converter JSON response into a PMID → PMC ID map.
178
+ * Returns only entries that have a PMC ID.
179
+ */
180
+ export function parseIdConvResponse(data) {
181
+ const map = new Map();
182
+ const typed = data;
183
+ if (!typed?.records)
184
+ return map;
185
+ for (const rec of typed.records) {
186
+ if (rec.pmid && rec.pmcid) {
187
+ map.set(rec.pmid, rec.pmcid);
188
+ }
189
+ }
190
+ return map;
191
+ }
192
+ /**
193
+ * Parse PMC efetch XML into plain text with section structure.
194
+ * Omits figures, tables, and supplementary material markup.
195
+ */
196
+ export function parsePmcFullText(xml) {
197
+ const parsed = xmlParser.parse(xml);
198
+ const articleSet = parsed?.["pmc-articleset"];
199
+ const article = articleSet?.article;
200
+ if (!article)
201
+ return null;
202
+ const body = article.body;
203
+ if (!body)
204
+ return null;
205
+ const sections = [];
206
+ const rawSecs = body.sec ? (Array.isArray(body.sec) ? body.sec : [body.sec]) : [];
207
+ for (const sec of rawSecs) {
208
+ extractSection(sec, sections);
209
+ }
210
+ // If no sections found, try to extract body text directly
211
+ if (sections.length === 0) {
212
+ const bodyText = extractParagraphs(body);
213
+ if (bodyText) {
214
+ sections.push({ heading: "", text: bodyText });
215
+ }
216
+ }
217
+ const fullText = sections.map((s) => (s.heading ? `## ${s.heading}\n\n${s.text}` : s.text)).join("\n\n");
218
+ return { fullText, sections };
219
+ }
220
+ function extractSection(sec, out) {
221
+ if (!sec || typeof sec !== "object")
222
+ return;
223
+ const s = sec;
224
+ const heading = typeof s.title === "string" ? s.title : "";
225
+ const text = extractParagraphs(s);
226
+ if (text) {
227
+ out.push({ heading, text });
228
+ }
229
+ // Recurse into nested sections
230
+ if (s.sec) {
231
+ const nested = Array.isArray(s.sec) ? s.sec : [s.sec];
232
+ for (const sub of nested) {
233
+ extractSection(sub, out);
234
+ }
235
+ }
236
+ }
237
+ function extractParagraphs(container) {
238
+ const paragraphs = container.p;
239
+ if (!paragraphs)
240
+ return "";
241
+ const pArr = Array.isArray(paragraphs) ? paragraphs : [paragraphs];
242
+ return pArr
243
+ .map((p) => {
244
+ if (typeof p === "string")
245
+ return p;
246
+ if (typeof p === "object" && p !== null) {
247
+ return flattenTextContent(p);
248
+ }
249
+ return String(p);
250
+ })
251
+ .filter(Boolean)
252
+ .join("\n\n");
253
+ }
254
+ /**
255
+ * Recursively extract text content from a parsed XML node,
256
+ * ignoring markup like <fig>, <table-wrap>, <xref>, etc.
257
+ */
258
+ function flattenTextContent(node) {
259
+ if (typeof node === "string")
260
+ return node;
261
+ if (typeof node === "number")
262
+ return String(node);
263
+ if (!node || typeof node !== "object")
264
+ return "";
265
+ const obj = node;
266
+ const parts = [];
267
+ for (const [key, value] of Object.entries(obj)) {
268
+ // Skip attributes and figure/table elements
269
+ if (key.startsWith("@_"))
270
+ continue;
271
+ if (key === "fig" || key === "table-wrap" || key === "supplementary-material")
272
+ continue;
273
+ if (key === "#text") {
274
+ parts.push(String(value));
275
+ }
276
+ else if (Array.isArray(value)) {
277
+ for (const item of value) {
278
+ parts.push(flattenTextContent(item));
279
+ }
280
+ }
281
+ else {
282
+ parts.push(flattenTextContent(value));
283
+ }
284
+ }
285
+ return parts.filter(Boolean).join("");
286
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Pure async client functions for the openFDA FAERS adverse-event API.
3
+ *
4
+ * Used by §2.6.2 (FAERS summary) and §2.6.6 (class precedent — drugs-in-class
5
+ * AEs).
6
+ */
7
+ export interface AdverseEventCount {
8
+ reaction: string;
9
+ count: number;
10
+ }
11
+ export interface DrugLabelAction {
12
+ applicationNumber: string | null;
13
+ brandName: string | null;
14
+ genericName: string | null;
15
+ /** YYYYMMDD on the openFDA payload; we surface the raw token unchanged. */
16
+ effectiveTime: string | null;
17
+ boxedWarning: string | null;
18
+ warningsAndCautions: string | null;
19
+ hasRems: boolean;
20
+ sourceUrl: string;
21
+ }
22
+ export interface SeriousnessProfile {
23
+ totalReports: number;
24
+ fatalCount: number;
25
+ hospitalizationCount: number;
26
+ lifeThreateningCount: number;
27
+ disablingCount: number;
28
+ congenitalAnomalyCount: number;
29
+ otherSeriousCount: number;
30
+ }
31
+ /** Top adverse-reaction terms by count for a generic drug name. */
32
+ export declare function getFaersByDrug(drugName: string, options?: {
33
+ limit?: number;
34
+ serious?: boolean;
35
+ }): Promise<{
36
+ totalReports: number | undefined;
37
+ adverseEvents: AdverseEventCount[];
38
+ }>;
39
+ /**
40
+ * Seriousness breakdown for a drug. Aggregates the seriousness flags
41
+ * (death, hospitalization, life-threatening, disabling) used by §2.6.2 fatal
42
+ * and §2.6.8 risk summary.
43
+ */
44
+ export declare function getFaersSeriousness(drugName: string): Promise<SeriousnessProfile | null>;
45
+ /**
46
+ * Fetch FDA Structured Product Label entries by generic drug name. Returns
47
+ * the most recent N labels (sorted by effective_time desc); each row carries
48
+ * the boxed-warning text, the Section 5 warnings_and_cautions excerpt, and a
49
+ * REMS indicator. Returns [] on 404 / no match.
50
+ */
51
+ export declare function getDrugLabelActions(genericName: string, options?: {
52
+ limit?: number;
53
+ }): Promise<DrugLabelAction[]>;