@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.
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +58 -0
- package/dist/agents/conversation-agent.d.ts +105 -0
- package/dist/agents/conversation-agent.js +140 -0
- package/dist/agents/report-builder.d.ts +32 -0
- package/dist/agents/report-builder.js +31 -0
- package/dist/agents/sandbox/__fixtures__/deps.d.ts +23 -0
- package/dist/agents/sandbox/__fixtures__/deps.js +96 -0
- package/dist/agents/sandbox/bulk-transcriptomics-agent.d.ts +8 -0
- package/dist/agents/sandbox/bulk-transcriptomics-agent.js +22 -0
- package/dist/agents/sandbox/cheminformatics-agent.d.ts +9 -0
- package/dist/agents/sandbox/cheminformatics-agent.js +62 -0
- package/dist/agents/sandbox/chromatin-agent.d.ts +8 -0
- package/dist/agents/sandbox/chromatin-agent.js +24 -0
- package/dist/agents/sandbox/data-profiler.d.ts +10 -0
- package/dist/agents/sandbox/data-profiler.js +24 -0
- package/dist/agents/sandbox/dna-methylation-agent.d.ts +8 -0
- package/dist/agents/sandbox/dna-methylation-agent.js +24 -0
- package/dist/agents/sandbox/drug-repurposing-agent.d.ts +8 -0
- package/dist/agents/sandbox/drug-repurposing-agent.js +54 -0
- package/dist/agents/sandbox/enrichment-agent.d.ts +8 -0
- package/dist/agents/sandbox/enrichment-agent.js +24 -0
- package/dist/agents/sandbox/ephemeral-executor.d.ts +9 -0
- package/dist/agents/sandbox/ephemeral-executor.js +29 -0
- package/dist/agents/sandbox/genomic-variant-agent.d.ts +8 -0
- package/dist/agents/sandbox/genomic-variant-agent.js +27 -0
- package/dist/agents/sandbox/immune-profiling-agent.d.ts +8 -0
- package/dist/agents/sandbox/immune-profiling-agent.js +43 -0
- package/dist/agents/sandbox/index.d.ts +31 -0
- package/dist/agents/sandbox/index.js +96 -0
- package/dist/agents/sandbox/metabolomics-agent.d.ts +8 -0
- package/dist/agents/sandbox/metabolomics-agent.js +15 -0
- package/dist/agents/sandbox/microbiome-agent.d.ts +8 -0
- package/dist/agents/sandbox/microbiome-agent.js +15 -0
- package/dist/agents/sandbox/multi-omics-integration-agent.d.ts +8 -0
- package/dist/agents/sandbox/multi-omics-integration-agent.js +33 -0
- package/dist/agents/sandbox/multimodal-sc-agent.d.ts +8 -0
- package/dist/agents/sandbox/multimodal-sc-agent.js +15 -0
- package/dist/agents/sandbox/network-agent.d.ts +8 -0
- package/dist/agents/sandbox/network-agent.js +25 -0
- package/dist/agents/sandbox/pkpd-clinical-response-agent.d.ts +8 -0
- package/dist/agents/sandbox/pkpd-clinical-response-agent.js +59 -0
- package/dist/agents/sandbox/proteomics-agent.d.ts +8 -0
- package/dist/agents/sandbox/proteomics-agent.js +15 -0
- package/dist/agents/sandbox/scientific-executor.d.ts +9 -0
- package/dist/agents/sandbox/scientific-executor.js +56 -0
- package/dist/agents/sandbox/shared.d.ts +100 -0
- package/dist/agents/sandbox/shared.js +195 -0
- package/dist/agents/sandbox/single-cell-agent.d.ts +8 -0
- package/dist/agents/sandbox/single-cell-agent.js +25 -0
- package/dist/agents/sandbox/spatial-omics-agent.d.ts +8 -0
- package/dist/agents/sandbox/spatial-omics-agent.js +15 -0
- package/dist/agents/sandbox/statistical-modeling-agent.d.ts +8 -0
- package/dist/agents/sandbox/statistical-modeling-agent.js +37 -0
- package/dist/agents/sandbox/translational-safety-agent.d.ts +8 -0
- package/dist/agents/sandbox/translational-safety-agent.js +59 -0
- package/dist/agents/sandbox/types.d.ts +34 -0
- package/dist/agents/sandbox/types.js +15 -0
- package/dist/agents/sandbox/validate-skills.d.ts +18 -0
- package/dist/agents/sandbox/validate-skills.js +40 -0
- package/dist/agents/sandbox-catalog.d.ts +33 -0
- package/dist/agents/sandbox-catalog.js +44 -0
- package/dist/agents/system-prompt.d.ts +25 -0
- package/dist/agents/system-prompt.js +23 -0
- package/dist/app/chat-turn.d.ts +35 -0
- package/dist/app/chat-turn.js +64 -0
- package/dist/app/data-profile-policy.d.ts +36 -0
- package/dist/app/data-profile-policy.js +37 -0
- package/dist/app/message-assembly.d.ts +65 -0
- package/dist/app/message-assembly.js +61 -0
- package/dist/app/synthesize-run.d.ts +57 -0
- package/dist/app/synthesize-run.js +103 -0
- package/dist/auth/local-auth-context.d.ts +19 -0
- package/dist/auth/local-auth-context.js +20 -0
- package/dist/auth/local-run-authorizer.d.ts +10 -0
- package/dist/auth/local-run-authorizer.js +23 -0
- package/dist/auth/types.d.ts +166 -0
- package/dist/auth/types.js +61 -0
- package/dist/billing/cached-resolver.d.ts +23 -0
- package/dist/billing/cached-resolver.js +61 -0
- package/dist/billing/noop-resolver.d.ts +6 -0
- package/dist/billing/noop-resolver.js +7 -0
- package/dist/billing/noop-run-charge.d.ts +6 -0
- package/dist/billing/noop-run-charge.js +10 -0
- package/dist/billing/resolver.d.ts +64 -0
- package/dist/billing/resolver.js +24 -0
- package/dist/billing/run-charge.d.ts +24 -0
- package/dist/billing/run-charge.js +9 -0
- package/dist/config/resource-limits.d.ts +76 -0
- package/dist/config/resource-limits.js +116 -0
- package/dist/contracts/analogy-report.d.ts +120 -0
- package/dist/contracts/analogy-report.js +50 -0
- package/dist/contracts/chat-events.d.ts +61 -0
- package/dist/contracts/chat-events.js +13 -0
- package/dist/contracts/chat-parts.d.ts +308 -0
- package/dist/contracts/chat-parts.js +13 -0
- package/dist/contracts/content-url.d.ts +49 -0
- package/dist/contracts/content-url.js +56 -0
- package/dist/contracts/index.d.ts +12 -0
- package/dist/contracts/index.js +5 -0
- package/dist/contracts/message.d.ts +36 -0
- package/dist/contracts/message.js +9 -0
- package/dist/contracts/part-registry.d.ts +18 -0
- package/dist/contracts/part-registry.js +28 -0
- package/dist/contracts/schemas/chat-events.d.ts +90 -0
- package/dist/contracts/schemas/chat-events.js +43 -0
- package/dist/contracts/schemas/chat-parts.d.ts +683 -0
- package/dist/contracts/schemas/chat-parts.js +295 -0
- package/dist/contracts/schemas/index.d.ts +2 -0
- package/dist/contracts/schemas/index.js +2 -0
- package/dist/contracts/target-assessment-row.d.ts +85 -0
- package/dist/contracts/target-assessment-row.js +37 -0
- package/dist/contracts/target-dossier.d.ts +16720 -0
- package/dist/contracts/target-dossier.js +1339 -0
- package/dist/data/clinical-benchmarks.json +108 -0
- package/dist/data/protein-family-modality.json +101 -0
- package/dist/data/safety-panel-schema.d.ts +64 -0
- package/dist/data/safety-panel-schema.js +34 -0
- package/dist/data/safety-panel.json +436 -0
- package/dist/execution/artifact-metadata.d.ts +74 -0
- package/dist/execution/artifact-metadata.js +203 -0
- package/dist/execution/artifact-record.d.ts +19 -0
- package/dist/execution/artifact-record.js +7 -0
- package/dist/execution/artifact-registration.d.ts +36 -0
- package/dist/execution/artifact-registration.js +61 -0
- package/dist/execution/artifact-registry.d.ts +82 -0
- package/dist/execution/artifact-registry.js +17 -0
- package/dist/execution/dbos-run-launcher.d.ts +7 -0
- package/dist/execution/dbos-run-launcher.js +38 -0
- package/dist/execution/ephemeral-runner.d.ts +81 -0
- package/dist/execution/ephemeral-runner.js +161 -0
- package/dist/execution/filesystem-artifact-registry.d.ts +57 -0
- package/dist/execution/filesystem-artifact-registry.js +92 -0
- package/dist/execution/noop-artifact-registry.d.ts +11 -0
- package/dist/execution/noop-artifact-registry.js +17 -0
- package/dist/execution/post-step-pipeline.d.ts +70 -0
- package/dist/execution/post-step-pipeline.js +207 -0
- package/dist/execution/post-step.d.ts +20 -0
- package/dist/execution/post-step.js +65 -0
- package/dist/execution/reconcile-manifest.d.ts +25 -0
- package/dist/execution/reconcile-manifest.js +132 -0
- package/dist/execution/report-render.d.ts +39 -0
- package/dist/execution/report-render.js +98 -0
- package/dist/execution/report-runner.d.ts +87 -0
- package/dist/execution/report-runner.js +227 -0
- package/dist/execution/run-authorizer.d.ts +43 -0
- package/dist/execution/run-authorizer.js +17 -0
- package/dist/execution/run-launcher.d.ts +36 -0
- package/dist/execution/run-launcher.js +15 -0
- package/dist/execution/run-synthesis.d.ts +107 -0
- package/dist/execution/run-synthesis.js +329 -0
- package/dist/execution/staged-input.d.ts +41 -0
- package/dist/execution/staged-input.js +15 -0
- package/dist/execution/step-summary-metrics.d.ts +10 -0
- package/dist/execution/step-summary-metrics.js +22 -0
- package/dist/execution/step-summary.d.ts +55 -0
- package/dist/execution/step-summary.js +106 -0
- package/dist/execution/topo-sort.d.ts +33 -0
- package/dist/execution/topo-sort.js +99 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.js +157 -0
- package/dist/input-sanitization.d.ts +22 -0
- package/dist/input-sanitization.js +64 -0
- package/dist/lib/async-utils.d.ts +10 -0
- package/dist/lib/async-utils.js +24 -0
- package/dist/lib/chrome.d.ts +15 -0
- package/dist/lib/chrome.js +95 -0
- package/dist/lib/db-result.d.ts +93 -0
- package/dist/lib/db-result.js +197 -0
- package/dist/lib/fs-helpers.d.ts +74 -0
- package/dist/lib/fs-helpers.js +119 -0
- package/dist/lib/fs-result.d.ts +98 -0
- package/dist/lib/fs-result.js +137 -0
- package/dist/lib/host-concurrency.d.ts +16 -0
- package/dist/lib/host-concurrency.js +60 -0
- package/dist/lib/identifiers.d.ts +8 -0
- package/dist/lib/identifiers.js +10 -0
- package/dist/lib/metrics.d.ts +7 -0
- package/dist/lib/metrics.js +12 -0
- package/dist/lib/mime-detect.d.ts +17 -0
- package/dist/lib/mime-detect.js +29 -0
- package/dist/lib/otel.d.ts +30 -0
- package/dist/lib/otel.js +102 -0
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +35 -0
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +107 -0
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +46 -0
- package/dist/lib/regulatory-corpus/fetch-ich.js +173 -0
- package/dist/lib/regulatory-corpus.d.ts +88 -0
- package/dist/lib/regulatory-corpus.js +141 -0
- package/dist/lib/result.d.ts +87 -0
- package/dist/lib/result.js +103 -0
- package/dist/lib/storage.d.ts +29 -0
- package/dist/lib/storage.js +37 -0
- package/dist/lib/streamed-download.d.ts +28 -0
- package/dist/lib/streamed-download.js +111 -0
- package/dist/lib/trace-context.d.ts +11 -0
- package/dist/lib/trace-context.js +49 -0
- package/dist/loop/__fixtures__/scripted-provider.d.ts +31 -0
- package/dist/loop/__fixtures__/scripted-provider.js +57 -0
- package/dist/loop/budget-exceeded.d.ts +22 -0
- package/dist/loop/budget-exceeded.js +41 -0
- package/dist/loop/metrics.d.ts +25 -0
- package/dist/loop/metrics.js +46 -0
- package/dist/loop/run-agent.d.ts +28 -0
- package/dist/loop/run-agent.js +204 -0
- package/dist/loop/run-step.d.ts +29 -0
- package/dist/loop/run-step.js +34 -0
- package/dist/loop/run-to-terminal.d.ts +46 -0
- package/dist/loop/run-to-terminal.js +51 -0
- package/dist/loop/types.d.ts +95 -0
- package/dist/loop/types.js +10 -0
- package/dist/memory/ai-sdk-message-storage.d.ts +20 -0
- package/dist/memory/ai-sdk-message-storage.js +114 -0
- package/dist/memory/card-builders.d.ts +114 -0
- package/dist/memory/card-builders.js +231 -0
- package/dist/memory/content-to-cortex.d.ts +42 -0
- package/dist/memory/content-to-cortex.js +85 -0
- package/dist/memory/count-tokens.d.ts +18 -0
- package/dist/memory/count-tokens.js +64 -0
- package/dist/memory/derive-thread-title.d.ts +14 -0
- package/dist/memory/derive-thread-title.js +26 -0
- package/dist/memory/message-backfill.d.ts +2 -0
- package/dist/memory/message-backfill.js +38 -0
- package/dist/memory/reconstruct-cards.d.ts +23 -0
- package/dist/memory/reconstruct-cards.js +64 -0
- package/dist/memory/thread-history.d.ts +80 -0
- package/dist/memory/thread-history.js +187 -0
- package/dist/memory/thread-store.d.ts +66 -0
- package/dist/memory/thread-store.js +88 -0
- package/dist/memory/working-memory.d.ts +135 -0
- package/dist/memory/working-memory.js +185 -0
- package/dist/prompts/SOUL.d.ts +17 -0
- package/dist/prompts/SOUL.js +173 -0
- package/dist/prompts/analogical-reasoner.d.ts +1 -0
- package/dist/prompts/analogical-reasoner.js +170 -0
- package/dist/prompts/conversation.d.ts +1 -0
- package/dist/prompts/conversation.js +697 -0
- package/dist/prompts/execute-analysis/step-summary.d.ts +1 -0
- package/dist/prompts/execute-analysis/step-summary.js +38 -0
- package/dist/prompts/literature-reviewer.d.ts +1 -0
- package/dist/prompts/literature-reviewer.js +107 -0
- package/dist/prompts/planner.d.ts +2 -0
- package/dist/prompts/planner.js +259 -0
- package/dist/prompts/report-builder.d.ts +1 -0
- package/dist/prompts/report-builder.js +127 -0
- package/dist/prompts/sandbox/bulk-transcriptomics-agent.d.ts +1 -0
- package/dist/prompts/sandbox/bulk-transcriptomics-agent.js +78 -0
- package/dist/prompts/sandbox/cheminformatics-agent.d.ts +1 -0
- package/dist/prompts/sandbox/cheminformatics-agent.js +224 -0
- package/dist/prompts/sandbox/chromatin-agent.d.ts +1 -0
- package/dist/prompts/sandbox/chromatin-agent.js +100 -0
- package/dist/prompts/sandbox/data-profiler.d.ts +1 -0
- package/dist/prompts/sandbox/data-profiler.js +291 -0
- package/dist/prompts/sandbox/dna-methylation-agent.d.ts +1 -0
- package/dist/prompts/sandbox/dna-methylation-agent.js +96 -0
- package/dist/prompts/sandbox/drug-repurposing-agent.d.ts +1 -0
- package/dist/prompts/sandbox/drug-repurposing-agent.js +144 -0
- package/dist/prompts/sandbox/enrichment-agent.d.ts +1 -0
- package/dist/prompts/sandbox/enrichment-agent.js +89 -0
- package/dist/prompts/sandbox/ephemeral-executor.d.ts +1 -0
- package/dist/prompts/sandbox/ephemeral-executor.js +66 -0
- package/dist/prompts/sandbox/genomic-variant-agent.d.ts +1 -0
- package/dist/prompts/sandbox/genomic-variant-agent.js +83 -0
- package/dist/prompts/sandbox/immune-profiling-agent.d.ts +1 -0
- package/dist/prompts/sandbox/immune-profiling-agent.js +101 -0
- package/dist/prompts/sandbox/metabolomics-agent.d.ts +1 -0
- package/dist/prompts/sandbox/metabolomics-agent.js +89 -0
- package/dist/prompts/sandbox/microbiome-agent.d.ts +1 -0
- package/dist/prompts/sandbox/microbiome-agent.js +109 -0
- package/dist/prompts/sandbox/multi-omics-integration-agent.d.ts +1 -0
- package/dist/prompts/sandbox/multi-omics-integration-agent.js +122 -0
- package/dist/prompts/sandbox/multimodal-sc-agent.d.ts +1 -0
- package/dist/prompts/sandbox/multimodal-sc-agent.js +90 -0
- package/dist/prompts/sandbox/network-agent.d.ts +1 -0
- package/dist/prompts/sandbox/network-agent.js +95 -0
- package/dist/prompts/sandbox/pkpd-clinical-response-agent.d.ts +1 -0
- package/dist/prompts/sandbox/pkpd-clinical-response-agent.js +71 -0
- package/dist/prompts/sandbox/proteomics-agent.d.ts +1 -0
- package/dist/prompts/sandbox/proteomics-agent.js +93 -0
- package/dist/prompts/sandbox/scientific-executor.d.ts +1 -0
- package/dist/prompts/sandbox/scientific-executor.js +68 -0
- package/dist/prompts/sandbox/single-cell-agent.d.ts +1 -0
- package/dist/prompts/sandbox/single-cell-agent.js +129 -0
- package/dist/prompts/sandbox/spatial-omics-agent.d.ts +1 -0
- package/dist/prompts/sandbox/spatial-omics-agent.js +94 -0
- package/dist/prompts/sandbox/statistical-modeling-agent.d.ts +1 -0
- package/dist/prompts/sandbox/statistical-modeling-agent.js +112 -0
- package/dist/prompts/sandbox/translational-safety-agent.d.ts +1 -0
- package/dist/prompts/sandbox/translational-safety-agent.js +105 -0
- package/dist/prompts/sandbox-standards.d.ts +18 -0
- package/dist/prompts/sandbox-standards.js +358 -0
- package/dist/prompts/synthesis-agent.d.ts +1 -0
- package/dist/prompts/synthesis-agent.js +289 -0
- package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +1 -0
- package/dist/prompts/target-assessment/briefs/executive-recommendation.js +85 -0
- package/dist/prompts/target-assessment/briefs/index.d.ts +4 -0
- package/dist/prompts/target-assessment/briefs/index.js +4 -0
- package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +1 -0
- package/dist/prompts/target-assessment/briefs/liability-bullets.js +114 -0
- package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +1 -0
- package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +29 -0
- package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +1 -0
- package/dist/prompts/target-assessment/briefs/translational-commentary.js +23 -0
- package/dist/prompts/target-assessment/drugs-in-class.d.ts +1 -0
- package/dist/prompts/target-assessment/drugs-in-class.js +29 -0
- package/dist/prompts/target-assessment/modulator-triage.d.ts +1 -0
- package/dist/prompts/target-assessment/modulator-triage.js +31 -0
- package/dist/prompts/target-assessment/off-target-annotator.d.ts +1 -0
- package/dist/prompts/target-assessment/off-target-annotator.js +28 -0
- package/dist/prompts/target-assessment/tox-voice/core.d.ts +1 -0
- package/dist/prompts/target-assessment/tox-voice/core.js +74 -0
- package/dist/prompts/target-assessment/tox-voice/critique.d.ts +7 -0
- package/dist/prompts/target-assessment/tox-voice/critique.js +109 -0
- package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +8 -0
- package/dist/prompts/target-assessment/tox-voice/exemplars.js +24 -0
- package/dist/prompts/target-assessment/tox-voice/index.d.ts +4 -0
- package/dist/prompts/target-assessment/tox-voice/index.js +4 -0
- package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +15 -0
- package/dist/prompts/target-assessment/tox-voice/vocabulary.js +72 -0
- package/dist/provenance/collector.d.ts +148 -0
- package/dist/provenance/collector.js +296 -0
- package/dist/provenance/exec-frame.d.ts +36 -0
- package/dist/provenance/exec-frame.js +49 -0
- package/dist/provenance/types.d.ts +95 -0
- package/dist/provenance/types.js +64 -0
- package/dist/providers/__fixtures__/session.d.ts +16 -0
- package/dist/providers/__fixtures__/session.js +20 -0
- package/dist/providers/ai-sdk.d.ts +47 -0
- package/dist/providers/ai-sdk.js +142 -0
- package/dist/providers/anthropic.d.ts +22 -0
- package/dist/providers/anthropic.js +26 -0
- package/dist/providers/embedding.d.ts +32 -0
- package/dist/providers/embedding.js +42 -0
- package/dist/providers/errors.d.ts +80 -0
- package/dist/providers/errors.js +137 -0
- package/dist/providers/llm-capabilities.d.ts +33 -0
- package/dist/providers/llm-capabilities.js +58 -0
- package/dist/providers/streaming-chat.d.ts +23 -0
- package/dist/providers/streaming-chat.js +61 -0
- package/dist/providers/types.d.ts +59 -0
- package/dist/providers/types.js +8 -0
- package/dist/runtime/assemble.d.ts +68 -0
- package/dist/runtime/assemble.js +46 -0
- package/dist/runtime/boot.d.ts +73 -0
- package/dist/runtime/boot.js +65 -0
- package/dist/runtime/connection-budget.d.ts +48 -0
- package/dist/runtime/connection-budget.js +57 -0
- package/dist/runtime/dbos.d.ts +94 -0
- package/dist/runtime/dbos.js +160 -0
- package/dist/runtime/lifecycle.d.ts +12 -0
- package/dist/runtime/lifecycle.js +19 -0
- package/dist/runtime/pools.d.ts +25 -0
- package/dist/runtime/pools.js +30 -0
- package/dist/runtime/shutdown.d.ts +33 -0
- package/dist/runtime/shutdown.js +39 -0
- package/dist/sandbox/await-exec.d.ts +143 -0
- package/dist/sandbox/await-exec.js +406 -0
- package/dist/sandbox/client.d.ts +82 -0
- package/dist/sandbox/client.js +23 -0
- package/dist/sandbox/create-sandbox.d.ts +105 -0
- package/dist/sandbox/create-sandbox.js +132 -0
- package/dist/sandbox/deliver-exec-event.d.ts +25 -0
- package/dist/sandbox/deliver-exec-event.js +29 -0
- package/dist/sandbox/docker-client.d.ts +75 -0
- package/dist/sandbox/docker-client.js +315 -0
- package/dist/sandbox/estimate-data-profile-resources.d.ts +5 -0
- package/dist/sandbox/estimate-data-profile-resources.js +73 -0
- package/dist/sandbox/exec-id.d.ts +12 -0
- package/dist/sandbox/exec-id.js +20 -0
- package/dist/sandbox/execution-id.d.ts +30 -0
- package/dist/sandbox/execution-id.js +47 -0
- package/dist/sandbox/hmac.d.ts +54 -0
- package/dist/sandbox/hmac.js +67 -0
- package/dist/sandbox/identity.d.ts +15 -0
- package/dist/sandbox/identity.js +22 -0
- package/dist/sandbox/ignored-dirs.d.ts +7 -0
- package/dist/sandbox/ignored-dirs.js +7 -0
- package/dist/sandbox/k8s-client.d.ts +71 -0
- package/dist/sandbox/k8s-client.js +488 -0
- package/dist/sandbox/liveness.d.ts +60 -0
- package/dist/sandbox/liveness.js +82 -0
- package/dist/sandbox/mount-plan.d.ts +77 -0
- package/dist/sandbox/mount-plan.js +84 -0
- package/dist/sandbox/notification-sweep.d.ts +42 -0
- package/dist/sandbox/notification-sweep.js +74 -0
- package/dist/sandbox/reaper.d.ts +70 -0
- package/dist/sandbox/reaper.js +124 -0
- package/dist/sandbox/sandbox-error.d.ts +105 -0
- package/dist/sandbox/sandbox-error.js +92 -0
- package/dist/sandbox/sandbox-step-translate.d.ts +35 -0
- package/dist/sandbox/sandbox-step-translate.js +76 -0
- package/dist/sandbox/submit-exec.d.ts +33 -0
- package/dist/sandbox/submit-exec.js +68 -0
- package/dist/sandbox/types.d.ts +277 -0
- package/dist/sandbox/types.js +147 -0
- package/dist/sandbox/watchdog.d.ts +71 -0
- package/dist/sandbox/watchdog.js +150 -0
- package/dist/schemas/artifact-manifest.d.ts +34 -0
- package/dist/schemas/artifact-manifest.js +36 -0
- package/dist/schemas/data-profile-schemas.d.ts +92 -0
- package/dist/schemas/data-profile-schemas.js +89 -0
- package/dist/schemas/file-metadata.d.ts +51 -0
- package/dist/schemas/file-metadata.js +39 -0
- package/dist/schemas/plan-schemas.d.ts +110 -0
- package/dist/schemas/plan-schemas.js +50 -0
- package/dist/schemas/render-step-prompt.d.ts +32 -0
- package/dist/schemas/render-step-prompt.js +76 -0
- package/dist/schemas/run-synthesis.d.ts +148 -0
- package/dist/schemas/run-synthesis.js +87 -0
- package/dist/schemas/step-summary.d.ts +18 -0
- package/dist/schemas/step-summary.js +20 -0
- package/dist/schemas/validate-plan.d.ts +39 -0
- package/dist/schemas/validate-plan.js +120 -0
- package/dist/schemas/workflow-state.d.ts +314 -0
- package/dist/schemas/workflow-state.js +139 -0
- package/dist/state/active-sandboxes.d.ts +58 -0
- package/dist/state/active-sandboxes.js +100 -0
- package/dist/state/analyses-metrics.d.ts +21 -0
- package/dist/state/analyses-metrics.js +59 -0
- package/dist/state/analyses.d.ts +58 -0
- package/dist/state/analyses.js +132 -0
- package/dist/state/artifacts.d.ts +53 -0
- package/dist/state/artifacts.js +175 -0
- package/dist/state/data-profile.d.ts +176 -0
- package/dist/state/data-profile.js +284 -0
- package/dist/state/db.d.ts +10 -0
- package/dist/state/db.js +9 -0
- package/dist/state/index.d.ts +29 -0
- package/dist/state/index.js +20 -0
- package/dist/state/init.d.ts +14 -0
- package/dist/state/init.js +406 -0
- package/dist/state/plans.d.ts +56 -0
- package/dist/state/plans.js +117 -0
- package/dist/state/runs.d.ts +69 -0
- package/dist/state/runs.js +206 -0
- package/dist/state/schema.d.ts +150 -0
- package/dist/state/schema.js +100 -0
- package/dist/state/step-executions.d.ts +77 -0
- package/dist/state/step-executions.js +175 -0
- package/dist/state/target-assessments.d.ts +68 -0
- package/dist/state/target-assessments.js +222 -0
- package/dist/state/vector-store.d.ts +53 -0
- package/dist/state/vector-store.js +89 -0
- package/dist/tasks/data-profile.d.ts +171 -0
- package/dist/tasks/data-profile.js +461 -0
- package/dist/tasks/refresh-regulatory-corpus.d.ts +59 -0
- package/dist/tasks/refresh-regulatory-corpus.js +146 -0
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +55 -0
- package/dist/tasks/regulatory-corpus-boot-refresh.js +149 -0
- package/dist/tools/__fixtures__/tool-context.d.ts +13 -0
- package/dist/tools/__fixtures__/tool-context.js +18 -0
- package/dist/tools/bio/check-safety-panel.d.ts +35 -0
- package/dist/tools/bio/check-safety-panel.js +76 -0
- package/dist/tools/bio/find-approval-precedent.d.ts +32 -0
- package/dist/tools/bio/find-approval-precedent.js +72 -0
- package/dist/tools/bio/get-article-details.d.ts +11 -0
- package/dist/tools/bio/get-article-details.js +20 -0
- package/dist/tools/bio/get-article-full-text.d.ts +19 -0
- package/dist/tools/bio/get-article-full-text.js +32 -0
- package/dist/tools/bio/get-bioactivity.d.ts +11 -0
- package/dist/tools/bio/get-bioactivity.js +23 -0
- package/dist/tools/bio/get-drug-info.d.ts +9 -0
- package/dist/tools/bio/get-drug-info.js +22 -0
- package/dist/tools/bio/get-impc-ko-profile.d.ts +9 -0
- package/dist/tools/bio/get-impc-ko-profile.js +20 -0
- package/dist/tools/bio/get-mechanism.d.ts +8 -0
- package/dist/tools/bio/get-mechanism.js +18 -0
- package/dist/tools/bio/get-pubchem-assays.d.ts +22 -0
- package/dist/tools/bio/get-pubchem-assays.js +107 -0
- package/dist/tools/bio/get-pubchem-cross-refs.d.ts +15 -0
- package/dist/tools/bio/get-pubchem-cross-refs.js +68 -0
- package/dist/tools/bio/get-target-safety.d.ts +18 -0
- package/dist/tools/bio/get-target-safety.js +26 -0
- package/dist/tools/bio/index.d.ts +41 -0
- package/dist/tools/bio/index.js +48 -0
- package/dist/tools/bio/keys.d.ts +31 -0
- package/dist/tools/bio/keys.js +30 -0
- package/dist/tools/bio/lookup-go-term.d.ts +31 -0
- package/dist/tools/bio/lookup-go-term.js +116 -0
- package/dist/tools/bio/search-bgee-expression.d.ts +10 -0
- package/dist/tools/bio/search-bgee-expression.js +24 -0
- package/dist/tools/bio/search-clinical-trials.d.ts +12 -0
- package/dist/tools/bio/search-clinical-trials.js +21 -0
- package/dist/tools/bio/search-clinvar.d.ts +13 -0
- package/dist/tools/bio/search-clinvar.js +28 -0
- package/dist/tools/bio/search-compounds.d.ts +22 -0
- package/dist/tools/bio/search-compounds.js +160 -0
- package/dist/tools/bio/search-ctx-chemical.d.ts +50 -0
- package/dist/tools/bio/search-ctx-chemical.js +130 -0
- package/dist/tools/bio/search-ctx-exposure.d.ts +55 -0
- package/dist/tools/bio/search-ctx-exposure.js +176 -0
- package/dist/tools/bio/search-ctx-hazard.d.ts +111 -0
- package/dist/tools/bio/search-ctx-hazard.js +178 -0
- package/dist/tools/bio/search-dgidb.d.ts +43 -0
- package/dist/tools/bio/search-dgidb.js +199 -0
- package/dist/tools/bio/search-disgenet.d.ts +30 -0
- package/dist/tools/bio/search-disgenet.js +84 -0
- package/dist/tools/bio/search-drugbank.d.ts +38 -0
- package/dist/tools/bio/search-drugbank.js +109 -0
- package/dist/tools/bio/search-faers.d.ts +11 -0
- package/dist/tools/bio/search-faers.js +23 -0
- package/dist/tools/bio/search-gene.d.ts +11 -0
- package/dist/tools/bio/search-gene.js +19 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +20 -0
- package/dist/tools/bio/search-geo-datasets.js +86 -0
- package/dist/tools/bio/search-gwas-catalog.d.ts +33 -0
- package/dist/tools/bio/search-gwas-catalog.js +172 -0
- package/dist/tools/bio/search-interactions.d.ts +17 -0
- package/dist/tools/bio/search-interactions.js +31 -0
- package/dist/tools/bio/search-opentargets.d.ts +11 -0
- package/dist/tools/bio/search-opentargets.js +25 -0
- package/dist/tools/bio/search-pathway.d.ts +12 -0
- package/dist/tools/bio/search-pathway.js +32 -0
- package/dist/tools/bio/search-pharmgkb.d.ts +17 -0
- package/dist/tools/bio/search-pharmgkb.js +46 -0
- package/dist/tools/bio/search-pubchem-compound.d.ts +26 -0
- package/dist/tools/bio/search-pubchem-compound.js +110 -0
- package/dist/tools/bio/search-pubmed.d.ts +17 -0
- package/dist/tools/bio/search-pubmed.js +31 -0
- package/dist/tools/bio/search-targets.d.ts +9 -0
- package/dist/tools/bio/search-targets.js +20 -0
- package/dist/tools/bio/search-toxcast.d.ts +36 -0
- package/dist/tools/bio/search-toxcast.js +141 -0
- package/dist/tools/define-tool.d.ts +80 -0
- package/dist/tools/define-tool.js +48 -0
- package/dist/tools/display/index.d.ts +4 -0
- package/dist/tools/display/index.js +4 -0
- package/dist/tools/display/show-user.d.ts +33 -0
- package/dist/tools/display/show-user.js +67 -0
- package/dist/tools/execute-plan.d.ts +64 -0
- package/dist/tools/execute-plan.js +208 -0
- package/dist/tools/iterate-report.d.ts +172 -0
- package/dist/tools/iterate-report.js +521 -0
- package/dist/tools/lib/api-utils.d.ts +80 -0
- package/dist/tools/lib/api-utils.js +128 -0
- package/dist/tools/lib/bgee-client.d.ts +36 -0
- package/dist/tools/lib/bgee-client.js +150 -0
- package/dist/tools/lib/cbioportal-client.d.ts +34 -0
- package/dist/tools/lib/cbioportal-client.js +159 -0
- package/dist/tools/lib/chembl-client.d.ts +123 -0
- package/dist/tools/lib/chembl-client.js +458 -0
- package/dist/tools/lib/chembl-config.d.ts +5 -0
- package/dist/tools/lib/chembl-config.js +3 -0
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +33 -0
- package/dist/tools/lib/clinical-benchmarks-client.js +54 -0
- package/dist/tools/lib/clinical-trials-client.d.ts +216 -0
- package/dist/tools/lib/clinical-trials-client.js +339 -0
- package/dist/tools/lib/clinicaltrials-config.d.ts +4 -0
- package/dist/tools/lib/clinicaltrials-config.js +2 -0
- package/dist/tools/lib/clinvar-client.d.ts +25 -0
- package/dist/tools/lib/clinvar-client.js +126 -0
- package/dist/tools/lib/disgenet-config.d.ts +2 -0
- package/dist/tools/lib/disgenet-config.js +11 -0
- package/dist/tools/lib/drugbank-config.d.ts +2 -0
- package/dist/tools/lib/drugbank-config.js +12 -0
- package/dist/tools/lib/ema-client.d.ts +45 -0
- package/dist/tools/lib/ema-client.js +127 -0
- package/dist/tools/lib/ema-config.d.ts +7 -0
- package/dist/tools/lib/ema-config.js +7 -0
- package/dist/tools/lib/ensembl-client.d.ts +27 -0
- package/dist/tools/lib/ensembl-client.js +82 -0
- package/dist/tools/lib/gwas-catalog-config.d.ts +4 -0
- package/dist/tools/lib/gwas-catalog-config.js +2 -0
- package/dist/tools/lib/identifier-resolver.d.ts +85 -0
- package/dist/tools/lib/identifier-resolver.js +333 -0
- package/dist/tools/lib/impc-client.d.ts +44 -0
- package/dist/tools/lib/impc-client.js +239 -0
- package/dist/tools/lib/iuphar-client.d.ts +75 -0
- package/dist/tools/lib/iuphar-client.js +230 -0
- package/dist/tools/lib/iuphar-config.d.ts +5 -0
- package/dist/tools/lib/iuphar-config.js +3 -0
- package/dist/tools/lib/ncbi-utils.d.ts +58 -0
- package/dist/tools/lib/ncbi-utils.js +286 -0
- package/dist/tools/lib/openfda-client.d.ts +53 -0
- package/dist/tools/lib/openfda-client.js +192 -0
- package/dist/tools/lib/openfda-config.d.ts +2 -0
- package/dist/tools/lib/openfda-config.js +2 -0
- package/dist/tools/lib/opentargets-client.d.ts +64 -0
- package/dist/tools/lib/opentargets-client.js +290 -0
- package/dist/tools/lib/opentargets-config.d.ts +5 -0
- package/dist/tools/lib/opentargets-config.js +5 -0
- package/dist/tools/lib/path-validation.d.ts +14 -0
- package/dist/tools/lib/path-validation.js +26 -0
- package/dist/tools/lib/pathway-client.d.ts +27 -0
- package/dist/tools/lib/pathway-client.js +149 -0
- package/dist/tools/lib/pharmgkb-config.d.ts +4 -0
- package/dist/tools/lib/pharmgkb-config.js +2 -0
- package/dist/tools/lib/preview-lock.d.ts +20 -0
- package/dist/tools/lib/preview-lock.js +35 -0
- package/dist/tools/lib/protein-family-modality.d.ts +16 -0
- package/dist/tools/lib/protein-family-modality.js +42 -0
- package/dist/tools/lib/protein-family-normalize.d.ts +12 -0
- package/dist/tools/lib/protein-family-normalize.js +46 -0
- package/dist/tools/lib/pubchem-client.d.ts +40 -0
- package/dist/tools/lib/pubchem-client.js +128 -0
- package/dist/tools/lib/pubchem-config.d.ts +5 -0
- package/dist/tools/lib/pubchem-config.js +3 -0
- package/dist/tools/lib/pubmed-client.d.ts +28 -0
- package/dist/tools/lib/pubmed-client.js +91 -0
- package/dist/tools/lib/report-preflight.d.ts +39 -0
- package/dist/tools/lib/report-preflight.js +283 -0
- package/dist/tools/lib/string-client.d.ts +33 -0
- package/dist/tools/lib/string-client.js +93 -0
- package/dist/tools/lib/toxcast-config.d.ts +2 -0
- package/dist/tools/lib/toxcast-config.js +11 -0
- package/dist/tools/lib/uniprot-client.d.ts +28 -0
- package/dist/tools/lib/uniprot-client.js +103 -0
- package/dist/tools/lib/uniprot-config.d.ts +5 -0
- package/dist/tools/lib/uniprot-config.js +3 -0
- package/dist/tools/memory/index.d.ts +4 -0
- package/dist/tools/memory/index.js +4 -0
- package/dist/tools/memory/update-working-memory.d.ts +25 -0
- package/dist/tools/memory/update-working-memory.js +112 -0
- package/dist/tools/registry.d.ts +15 -0
- package/dist/tools/registry.js +26 -0
- package/dist/tools/report/build-report.d.ts +13 -0
- package/dist/tools/report/build-report.js +26 -0
- package/dist/tools/report/index.d.ts +14 -0
- package/dist/tools/report/index.js +14 -0
- package/dist/tools/report/mint-preview-url.d.ts +26 -0
- package/dist/tools/report/mint-preview-url.js +44 -0
- package/dist/tools/report/preview-publisher.d.ts +37 -0
- package/dist/tools/report/preview-publisher.js +25 -0
- package/dist/tools/report/preview-snapshot.d.ts +26 -0
- package/dist/tools/report/preview-snapshot.js +121 -0
- package/dist/tools/report/submit-report.d.ts +25 -0
- package/dist/tools/report/submit-report.js +126 -0
- package/dist/tools/report/version-fs.d.ts +15 -0
- package/dist/tools/report/version-fs.js +154 -0
- package/dist/tools/research/context7-docs.d.ts +31 -0
- package/dist/tools/research/context7-docs.js +61 -0
- package/dist/tools/research/generate-analogy-report.d.ts +60 -0
- package/dist/tools/research/generate-analogy-report.js +288 -0
- package/dist/tools/research/generate-plan.d.ts +39 -0
- package/dist/tools/research/generate-plan.js +393 -0
- package/dist/tools/research/index.d.ts +15 -0
- package/dist/tools/research/index.js +15 -0
- package/dist/tools/research/inspect-run.d.ts +54 -0
- package/dist/tools/research/inspect-run.js +85 -0
- package/dist/tools/research/literature-reviewer.d.ts +29 -0
- package/dist/tools/research/literature-reviewer.js +84 -0
- package/dist/tools/research/search-arxiv.d.ts +32 -0
- package/dist/tools/research/search-arxiv.js +123 -0
- package/dist/tools/research/search-github-repos.d.ts +32 -0
- package/dist/tools/research/search-github-repos.js +86 -0
- package/dist/tools/research/search-semantic-scholar.d.ts +33 -0
- package/dist/tools/research/search-semantic-scholar.js +93 -0
- package/dist/tools/run-ephemeral.d.ts +33 -0
- package/dist/tools/run-ephemeral.js +65 -0
- package/dist/tools/sandbox/index.d.ts +7 -0
- package/dist/tools/sandbox/index.js +7 -0
- package/dist/tools/sandbox/list-available-packages.d.ts +7 -0
- package/dist/tools/sandbox/list-available-packages.js +27 -0
- package/dist/tools/sandbox/list-available-refs.d.ts +7 -0
- package/dist/tools/sandbox/list-available-refs.js +147 -0
- package/dist/tools/sandbox/report-blocker.d.ts +23 -0
- package/dist/tools/sandbox/report-blocker.js +39 -0
- package/dist/tools/sandbox/skills.d.ts +72 -0
- package/dist/tools/sandbox/skills.js +144 -0
- package/dist/tools/workspace/edit-file.d.ts +46 -0
- package/dist/tools/workspace/edit-file.js +100 -0
- package/dist/tools/workspace/execute-command.d.ts +80 -0
- package/dist/tools/workspace/execute-command.js +95 -0
- package/dist/tools/workspace/file-stat.d.ts +24 -0
- package/dist/tools/workspace/file-stat.js +37 -0
- package/dist/tools/workspace/grep.d.ts +57 -0
- package/dist/tools/workspace/grep.js +154 -0
- package/dist/tools/workspace/index.d.ts +26 -0
- package/dist/tools/workspace/index.js +27 -0
- package/dist/tools/workspace/list-files.d.ts +24 -0
- package/dist/tools/workspace/list-files.js +38 -0
- package/dist/tools/workspace/mutator.d.ts +83 -0
- package/dist/tools/workspace/mutator.js +81 -0
- package/dist/tools/workspace/read-file.d.ts +39 -0
- package/dist/tools/workspace/read-file.js +93 -0
- package/dist/tools/workspace/result-bounds.d.ts +42 -0
- package/dist/tools/workspace/result-bounds.js +50 -0
- package/dist/tools/workspace/run-exec.d.ts +32 -0
- package/dist/tools/workspace/run-exec.js +34 -0
- package/dist/tools/workspace/show-file.d.ts +37 -0
- package/dist/tools/workspace/show-file.js +54 -0
- package/dist/tools/workspace/show-plan.d.ts +23 -0
- package/dist/tools/workspace/show-plan.js +44 -0
- package/dist/tools/workspace/workspace-search.d.ts +25 -0
- package/dist/tools/workspace/workspace-search.js +78 -0
- package/dist/tools/workspace/write-file.d.ts +16 -0
- package/dist/tools/workspace/write-file.js +33 -0
- package/dist/workflows/execute-analysis-scheduler.d.ts +94 -0
- package/dist/workflows/execute-analysis-scheduler.js +186 -0
- package/dist/workflows/execute-analysis.d.ts +271 -0
- package/dist/workflows/execute-analysis.js +746 -0
- package/dist/workflows/execute-target-assessment.d.ts +101 -0
- package/dist/workflows/execute-target-assessment.js +528 -0
- package/dist/workflows/metrics.d.ts +37 -0
- package/dist/workflows/metrics.js +55 -0
- package/dist/workflows/plan/level.d.ts +12 -0
- package/dist/workflows/plan/level.js +12 -0
- package/dist/workflows/register-workflows.d.ts +51 -0
- package/dist/workflows/register-workflows.js +48 -0
- package/dist/workflows/resume-execute-analysis.d.ts +70 -0
- package/dist/workflows/resume-execute-analysis.js +80 -0
- package/dist/workflows/sandbox-step.d.ts +243 -0
- package/dist/workflows/sandbox-step.js +573 -0
- package/dist/workflows/target-assessment/assemblers/index.d.ts +5 -0
- package/dist/workflows/target-assessment/assemblers/index.js +4 -0
- package/dist/workflows/target-assessment/assemblers/literature.d.ts +299 -0
- package/dist/workflows/target-assessment/assemblers/literature.js +987 -0
- package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +109 -0
- package/dist/workflows/target-assessment/assemblers/orchestrator.js +835 -0
- package/dist/workflows/target-assessment/assemblers/safety.d.ts +352 -0
- package/dist/workflows/target-assessment/assemblers/safety.js +985 -0
- package/dist/workflows/target-assessment/assemblers/trials.d.ts +30 -0
- package/dist/workflows/target-assessment/assemblers/trials.js +75 -0
- package/dist/workflows/target-assessment/collectors/index.d.ts +105 -0
- package/dist/workflows/target-assessment/collectors/index.js +468 -0
- package/dist/workflows/target-assessment/correction-loop.d.ts +45 -0
- package/dist/workflows/target-assessment/correction-loop.js +62 -0
- package/dist/workflows/target-assessment/coverage.d.ts +81 -0
- package/dist/workflows/target-assessment/coverage.js +82 -0
- package/dist/workflows/target-assessment/decisions/index.d.ts +86 -0
- package/dist/workflows/target-assessment/decisions/index.js +127 -0
- package/dist/workflows/target-assessment/fanout/index.d.ts +31 -0
- package/dist/workflows/target-assessment/fanout/index.js +155 -0
- package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +52 -0
- package/dist/workflows/target-assessment/lib/approval-precedents.js +119 -0
- package/dist/workflows/target-assessment/lib/citation-validator.d.ts +46 -0
- package/dist/workflows/target-assessment/lib/citation-validator.js +316 -0
- package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +62 -0
- package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +172 -0
- package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +45 -0
- package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +156 -0
- package/dist/workflows/target-assessment/lib/compute-derived.d.ts +19 -0
- package/dist/workflows/target-assessment/lib/compute-derived.js +252 -0
- package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +15 -0
- package/dist/workflows/target-assessment/lib/compute-selectivity.js +18 -0
- package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +37 -0
- package/dist/workflows/target-assessment/lib/dedup-modulators.js +157 -0
- package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +17 -0
- package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +100 -0
- package/dist/workflows/target-assessment/lib/expression-constants.d.ts +21 -0
- package/dist/workflows/target-assessment/lib/expression-constants.js +21 -0
- package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +21 -0
- package/dist/workflows/target-assessment/lib/family-complex-supplement.js +37 -0
- package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +39 -0
- package/dist/workflows/target-assessment/lib/heterodimer-filter.js +54 -0
- package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +4 -0
- package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +24 -0
- package/dist/workflows/target-assessment/lib/llm-step.d.ts +77 -0
- package/dist/workflows/target-assessment/lib/llm-step.js +99 -0
- package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +30 -0
- package/dist/workflows/target-assessment/lib/meddra-organ-map.js +126 -0
- package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +17 -0
- package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +99 -0
- package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +2 -0
- package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +51 -0
- package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +26 -0
- package/dist/workflows/target-assessment/lib/regulatory-actions.js +147 -0
- package/dist/workflows/target-assessment/lib/structured-llm.d.ts +58 -0
- package/dist/workflows/target-assessment/lib/structured-llm.js +101 -0
- package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +60 -0
- package/dist/workflows/target-assessment/lib/target-identity-filter.js +86 -0
- package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +20 -0
- package/dist/workflows/target-assessment/lib/therapeutic-programs.js +68 -0
- package/dist/workflows/target-assessment/metrics.d.ts +21 -0
- package/dist/workflows/target-assessment/metrics.js +42 -0
- package/dist/workflows/target-assessment/phase4-assemble.d.ts +1841 -0
- package/dist/workflows/target-assessment/phase4-assemble.js +39 -0
- package/dist/workflows/target-assessment/phase5-persist.d.ts +57 -0
- package/dist/workflows/target-assessment/phase5-persist.js +461 -0
- package/dist/workflows/target-assessment/progress.d.ts +38 -0
- package/dist/workflows/target-assessment/progress.js +76 -0
- package/dist/workflows/target-assessment/schemas.d.ts +931 -0
- package/dist/workflows/target-assessment/schemas.js +293 -0
- package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +15 -0
- package/dist/workflows/target-assessment/steps/collectors/pathways.js +58 -0
- package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +34 -0
- package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +31 -0
- package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +57 -0
- package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +54 -0
- package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +35 -0
- package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +32 -0
- package/dist/workflows/target-assessment/steps/fanout/index.d.ts +14 -0
- package/dist/workflows/target-assessment/steps/fanout/index.js +10 -0
- package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +28 -0
- package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +27 -0
- package/dist/workflows/target-assessment/steps/phase0-resolve.d.ts +71 -0
- package/dist/workflows/target-assessment/steps/phase0-resolve.js +21 -0
- package/dist/workflows/target-assessment/steps/phase1-aggregate.d.ts +1018 -0
- package/dist/workflows/target-assessment/steps/phase1-aggregate.js +25 -0
- package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +696 -0
- package/dist/workflows/target-assessment/steps/phase2-aggregate.js +38 -0
- package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +936 -0
- package/dist/workflows/target-assessment/steps/phase3-aggregate.js +22 -0
- package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +34 -0
- package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +45 -0
- package/dist/workflows/target-assessment/sub-workflows/index.d.ts +15 -0
- package/dist/workflows/target-assessment/sub-workflows/index.js +11 -0
- package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +41 -0
- package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +12 -0
- package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +41 -0
- package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +12 -0
- package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +36 -0
- package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +12 -0
- package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +66 -0
- package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +12 -0
- package/dist/workflows/target-assessment/synthesis/index.d.ts +560 -0
- package/dist/workflows/target-assessment/synthesis/index.js +351 -0
- package/dist/workflows/target-assessment/synthesis-probes.d.ts +56 -0
- package/dist/workflows/target-assessment/synthesis-probes.js +320 -0
- package/dist/workspace/filesystem.d.ts +117 -0
- package/dist/workspace/filesystem.js +304 -0
- package/dist/workspace/mount-strategy.d.ts +50 -0
- package/dist/workspace/mount-strategy.js +67 -0
- package/dist/workspace/paths.d.ts +185 -0
- package/dist/workspace/paths.js +219 -0
- package/dist/workspace/provenance-collector.d.ts +34 -0
- package/dist/workspace/provenance-collector.js +16 -0
- package/dist/workspace/search-config.d.ts +23 -0
- package/dist/workspace/search-config.js +43 -0
- package/dist/workspace/workspace-paths.d.ts +26 -0
- package/dist/workspace/workspace-paths.js +31 -0
- package/package.json +101 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the NCBI ClinVar API.
|
|
3
|
+
*
|
|
4
|
+
* Used by §3.4 (Genetic Alterations — ClinVar variants).
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { apiFetchValidated, describeApiError } from "./api-utils.js";
|
|
8
|
+
import { ncbiUrl } from "./ncbi-utils.js";
|
|
9
|
+
// NCBI esummary wire shapes, validated at the fetch boundary. Every field is
|
|
10
|
+
// optional — esummary omits absent values, and the record mapping below tolerates
|
|
11
|
+
// partial payloads, so an over-strict schema would regress graceful degradation.
|
|
12
|
+
/** NCBI esummary v2 classification block (germline or legacy). */
|
|
13
|
+
const ClinvarClassificationSchema = z.object({
|
|
14
|
+
description: z.string().optional(),
|
|
15
|
+
review_status: z.string().optional(),
|
|
16
|
+
trait_set: z.array(z.object({ trait_name: z.string().optional() })).optional(),
|
|
17
|
+
});
|
|
18
|
+
/** A single ClinVar esummary record. */
|
|
19
|
+
const ClinvarSummaryRecordSchema = z.object({
|
|
20
|
+
title: z.string().optional(),
|
|
21
|
+
accession: z.string().optional(),
|
|
22
|
+
genes: z.array(z.object({ symbol: z.string().optional() })).optional(),
|
|
23
|
+
germline_classification: ClinvarClassificationSchema.optional(),
|
|
24
|
+
clinical_significance: z.union([ClinvarClassificationSchema, z.string()]).optional(),
|
|
25
|
+
trait_set: z.array(z.object({ trait_name: z.string().optional() })).optional(),
|
|
26
|
+
molecular_consequence_list: z.array(z.string()).optional(),
|
|
27
|
+
variation_set: z.array(z.object({ variation_loc: z.array(z.object({ variant_type: z.string().optional() })).optional() })).optional(),
|
|
28
|
+
});
|
|
29
|
+
const ClinvarSearchResponseSchema = z.object({
|
|
30
|
+
esearchresult: z
|
|
31
|
+
.object({
|
|
32
|
+
idlist: z.array(z.string()).optional(),
|
|
33
|
+
count: z.union([z.string(), z.number()]).optional(),
|
|
34
|
+
})
|
|
35
|
+
.optional(),
|
|
36
|
+
});
|
|
37
|
+
// esummary keys each record under its UID; the `uids` key holds a string[] of
|
|
38
|
+
// the returned UIDs, so a record value is a summary object OR that string[].
|
|
39
|
+
// The array member is listed first so an actual array never falls through to
|
|
40
|
+
// the object schema (which rejects arrays).
|
|
41
|
+
const ClinvarSummaryResponseSchema = z.object({
|
|
42
|
+
result: z.record(z.string(), z.union([z.array(z.string()), ClinvarSummaryRecordSchema])).optional(),
|
|
43
|
+
});
|
|
44
|
+
const SIG_MAP = {
|
|
45
|
+
pathogenic: "clinsig_pathogenic",
|
|
46
|
+
"likely-pathogenic": "clinsig_likely_pathogenic",
|
|
47
|
+
benign: "clinsig_benign",
|
|
48
|
+
"likely-benign": "clinsig_likely_benign",
|
|
49
|
+
uncertain: "clinsig_uncertain",
|
|
50
|
+
};
|
|
51
|
+
/** Filter out uninformative ClinVar entries (literal "not provided", placeholders). */
|
|
52
|
+
export function filterInformative(variants) {
|
|
53
|
+
const noise = /^(not provided|not specified|reclassified)$/i;
|
|
54
|
+
return variants.filter((v) => {
|
|
55
|
+
const sig = (v.clinicalSignificance ?? "").trim();
|
|
56
|
+
if (!sig || noise.test(sig))
|
|
57
|
+
return false;
|
|
58
|
+
return true;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function searchClinvar(ncbiApiKey, query, options = {}) {
|
|
62
|
+
const limit = options.limit ?? 20;
|
|
63
|
+
let searchTerm = query;
|
|
64
|
+
if (options.clinicalSignificance) {
|
|
65
|
+
searchTerm += ` AND ${SIG_MAP[options.clinicalSignificance]}[Properties]`;
|
|
66
|
+
}
|
|
67
|
+
const searchUrl = ncbiUrl(ncbiApiKey, "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi", {
|
|
68
|
+
db: "clinvar",
|
|
69
|
+
term: searchTerm,
|
|
70
|
+
retmax: String(limit),
|
|
71
|
+
retmode: "json",
|
|
72
|
+
});
|
|
73
|
+
const searchRes = await apiFetchValidated(searchUrl, ClinvarSearchResponseSchema);
|
|
74
|
+
if (searchRes.isErr())
|
|
75
|
+
throw new Error(describeApiError(searchRes.error));
|
|
76
|
+
const ids = searchRes.value?.esearchresult?.idlist ?? [];
|
|
77
|
+
const totalFound = Number(searchRes.value?.esearchresult?.count ?? ids.length);
|
|
78
|
+
if (ids.length === 0)
|
|
79
|
+
return { totalFound, variants: [] };
|
|
80
|
+
const summaryUrl = ncbiUrl(ncbiApiKey, "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi", {
|
|
81
|
+
db: "clinvar",
|
|
82
|
+
id: ids.join(","),
|
|
83
|
+
retmode: "json",
|
|
84
|
+
});
|
|
85
|
+
const summaryRes = await apiFetchValidated(summaryUrl, ClinvarSummaryResponseSchema);
|
|
86
|
+
if (summaryRes.isErr())
|
|
87
|
+
throw new Error(describeApiError(summaryRes.error));
|
|
88
|
+
const result = summaryRes.value?.result ?? {};
|
|
89
|
+
const rawUids = result.uids;
|
|
90
|
+
const uids = Array.isArray(rawUids) ? rawUids : ids;
|
|
91
|
+
const variants = uids.map((uid) => {
|
|
92
|
+
const recEntry = result[uid];
|
|
93
|
+
const rec = recEntry && !Array.isArray(recEntry) ? recEntry : {};
|
|
94
|
+
const genes = rec.genes ?? [];
|
|
95
|
+
const geneSymbol = genes[0]?.symbol ?? "";
|
|
96
|
+
// NCBI esummary v2 schema: germline_classification holds the primary
|
|
97
|
+
// pathogenicity call. The legacy top-level clinical_significance field
|
|
98
|
+
// no longer appears in responses — fall back gracefully for older cached data.
|
|
99
|
+
const germline = rec.germline_classification ?? {};
|
|
100
|
+
// The legacy field is either a classification object or a bare string.
|
|
101
|
+
const legacy = rec.clinical_significance;
|
|
102
|
+
const legacyObj = typeof legacy === "object" ? legacy : null;
|
|
103
|
+
const legacyStr = typeof legacy === "string" ? legacy : null;
|
|
104
|
+
const clinSig = germline.description ?? legacyObj?.description ?? legacyStr ?? "";
|
|
105
|
+
const reviewStatus = germline.review_status ?? legacyObj?.review_status ?? "";
|
|
106
|
+
const conditions = (germline.trait_set ?? rec.trait_set ?? []).map((t) => t.trait_name ?? "");
|
|
107
|
+
const molecularConsequence = rec.molecular_consequence_list?.join(", ") ??
|
|
108
|
+
rec.variation_set
|
|
109
|
+
?.flatMap((vs) => vs.variation_loc ?? [])
|
|
110
|
+
.map((vl) => vl.variant_type ?? "")
|
|
111
|
+
.filter(Boolean)
|
|
112
|
+
.join(", ") ??
|
|
113
|
+
"";
|
|
114
|
+
return {
|
|
115
|
+
variationId: uid,
|
|
116
|
+
title: rec.title ?? "",
|
|
117
|
+
clinicalSignificance: clinSig,
|
|
118
|
+
reviewStatus,
|
|
119
|
+
geneSymbol,
|
|
120
|
+
molecularConsequence,
|
|
121
|
+
conditions,
|
|
122
|
+
accession: rec.accession ?? `VCV${uid.padStart(9, "0")}`,
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
return { totalFound, variants };
|
|
126
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const DISGENET_BASE = "https://www.disgenet.org/api";
|
|
2
|
+
export function getDisgenetHeaders(apiKey) {
|
|
3
|
+
const key = apiKey;
|
|
4
|
+
if (!key) {
|
|
5
|
+
throw new Error("DISGENET_API_KEY environment variable is not set. " + "Obtain a key from https://www.disgenet.org/api/#/Authorization");
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
Authorization: `Bearer ${key}`,
|
|
9
|
+
Accept: "application/json",
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const DRUGBANK_BASE = "https://api.drugbank.com/v1";
|
|
2
|
+
export function getDrugbankHeaders(apiKey) {
|
|
3
|
+
const key = apiKey;
|
|
4
|
+
if (!key) {
|
|
5
|
+
throw new Error("DRUGBANK_API_KEY environment variable is not set. " + "Obtain a key from https://go.drugbank.com/");
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
Authorization: key,
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
Accept: "application/json",
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the EMA (European Medicines Agency)
|
|
3
|
+
* referrals catalogue.
|
|
4
|
+
*
|
|
5
|
+
* The catalogue is exposed as a single bulk JSON download (~700KB) that
|
|
6
|
+
* lists every ongoing and completed EMA referral procedure (Article 31,
|
|
7
|
+
* Article 20, etc.). We fetch and cache it in-process; per-drug queries
|
|
8
|
+
* filter the cached records by INN, referral name, and associated
|
|
9
|
+
* medicine names.
|
|
10
|
+
*/
|
|
11
|
+
export interface EmaReferral {
|
|
12
|
+
category: string;
|
|
13
|
+
referralName: string;
|
|
14
|
+
inn: string;
|
|
15
|
+
currentStatus: string;
|
|
16
|
+
safetyReferral: boolean;
|
|
17
|
+
referralType: string;
|
|
18
|
+
associatedMedicinesCentrally: string[];
|
|
19
|
+
associatedMedicinesNationally: string[];
|
|
20
|
+
class: string;
|
|
21
|
+
referenceNumber: string;
|
|
22
|
+
authorisationModel: string;
|
|
23
|
+
procedureStartDate: string;
|
|
24
|
+
pracRecommendationDate: string;
|
|
25
|
+
cmdhPositionDate: string;
|
|
26
|
+
chmpOpinionDate: string;
|
|
27
|
+
europeanCommissionDecisionDate: string;
|
|
28
|
+
firstPublishedDate: string;
|
|
29
|
+
lastUpdatedDate: string;
|
|
30
|
+
referralUrl: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Download (or return cached) full EMA referrals catalogue. The catalogue
|
|
34
|
+
* updates twice daily — a 6h in-process TTL is well within freshness
|
|
35
|
+
* tolerance while keeping the per-collector overhead near zero.
|
|
36
|
+
*/
|
|
37
|
+
export declare function fetchAllReferrals(): Promise<EmaReferral[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Find EMA referrals associated with a drug name (matches INN, referral
|
|
40
|
+
* name, and centrally/nationally-authorised medicine names). Returns all
|
|
41
|
+
* matches; the caller filters by referralType / currentStatus as needed.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getReferralsByDrug(drugName: string): Promise<EmaReferral[]>;
|
|
44
|
+
/** Reset the in-process catalogue cache. Test-only. */
|
|
45
|
+
export declare function __resetReferralsCacheForTest(): void;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the EMA (European Medicines Agency)
|
|
3
|
+
* referrals catalogue.
|
|
4
|
+
*
|
|
5
|
+
* The catalogue is exposed as a single bulk JSON download (~700KB) that
|
|
6
|
+
* lists every ongoing and completed EMA referral procedure (Article 31,
|
|
7
|
+
* Article 20, etc.). We fetch and cache it in-process; per-drug queries
|
|
8
|
+
* filter the cached records by INN, referral name, and associated
|
|
9
|
+
* medicine names.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { apiFetchValidated, describeApiError } from "./api-utils.js";
|
|
13
|
+
import { EMA_REFERRALS_URL } from "./ema-config.js";
|
|
14
|
+
function parseMedicineList(field) {
|
|
15
|
+
if (!field || !field.trim())
|
|
16
|
+
return [];
|
|
17
|
+
return field
|
|
18
|
+
.split(/[;,]/)
|
|
19
|
+
.map((s) => s.trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
}
|
|
22
|
+
// One schema that both validates the raw referral wire shape (snake_case, every
|
|
23
|
+
// field optional or null — the bulk file omits or nulls absent values) and
|
|
24
|
+
// normalizes it into the camelCase `EmaReferral` we return. Parsing IS the
|
|
25
|
+
// validation: `apiFetchValidated` runs this over the download, so a record whose
|
|
26
|
+
// field TYPES drift is rejected as `invalid_response` instead of silently
|
|
27
|
+
// mis-mapped. Every field is `.nullable()` so one null-bearing record in the
|
|
28
|
+
// ~600-row catalogue doesn't fail the whole `data` array (the transform already
|
|
29
|
+
// collapses null to "" via `??`).
|
|
30
|
+
const EmaReferralSchema = z
|
|
31
|
+
.object({
|
|
32
|
+
category: z.string().nullable().optional(),
|
|
33
|
+
referral_name: z.string().nullable().optional(),
|
|
34
|
+
international_non_proprietary_name_inn_common_name: z.string().nullable().optional(),
|
|
35
|
+
current_status: z.string().nullable().optional(),
|
|
36
|
+
safety_referral: z.string().nullable().optional(),
|
|
37
|
+
referral_type: z.string().nullable().optional(),
|
|
38
|
+
associated_names_centrally_authorised_medicines: z.string().nullable().optional(),
|
|
39
|
+
associated_names_non_centrally_authorised_medicines: z.string().nullable().optional(),
|
|
40
|
+
class: z.string().nullable().optional(),
|
|
41
|
+
reference_number: z.string().nullable().optional(),
|
|
42
|
+
authorisation_model: z.string().nullable().optional(),
|
|
43
|
+
procedure_start_date: z.string().nullable().optional(),
|
|
44
|
+
prac_recommendation_date: z.string().nullable().optional(),
|
|
45
|
+
cmdh_position_date: z.string().nullable().optional(),
|
|
46
|
+
chmp_cvmp_opinion_date: z.string().nullable().optional(),
|
|
47
|
+
european_commission_decision_date: z.string().nullable().optional(),
|
|
48
|
+
first_published_date: z.string().nullable().optional(),
|
|
49
|
+
last_updated_date: z.string().nullable().optional(),
|
|
50
|
+
referral_url: z.string().nullable().optional(),
|
|
51
|
+
})
|
|
52
|
+
.transform((raw) => ({
|
|
53
|
+
category: raw.category ?? "",
|
|
54
|
+
referralName: raw.referral_name ?? "",
|
|
55
|
+
inn: raw.international_non_proprietary_name_inn_common_name ?? "",
|
|
56
|
+
currentStatus: raw.current_status ?? "",
|
|
57
|
+
safetyReferral: (raw.safety_referral ?? "").toLowerCase() === "yes",
|
|
58
|
+
referralType: raw.referral_type ?? "",
|
|
59
|
+
associatedMedicinesCentrally: parseMedicineList(raw.associated_names_centrally_authorised_medicines),
|
|
60
|
+
associatedMedicinesNationally: parseMedicineList(raw.associated_names_non_centrally_authorised_medicines),
|
|
61
|
+
class: raw.class ?? "",
|
|
62
|
+
referenceNumber: raw.reference_number ?? "",
|
|
63
|
+
authorisationModel: raw.authorisation_model ?? "",
|
|
64
|
+
procedureStartDate: raw.procedure_start_date ?? "",
|
|
65
|
+
pracRecommendationDate: raw.prac_recommendation_date ?? "",
|
|
66
|
+
cmdhPositionDate: raw.cmdh_position_date ?? "",
|
|
67
|
+
chmpOpinionDate: raw.chmp_cvmp_opinion_date ?? "",
|
|
68
|
+
europeanCommissionDecisionDate: raw.european_commission_decision_date ?? "",
|
|
69
|
+
firstPublishedDate: raw.first_published_date ?? "",
|
|
70
|
+
lastUpdatedDate: raw.last_updated_date ?? "",
|
|
71
|
+
referralUrl: raw.referral_url ?? "",
|
|
72
|
+
}));
|
|
73
|
+
const ReferralFileSchema = z.object({
|
|
74
|
+
meta: z.object({ total_records: z.number().optional(), timestamp: z.string().optional() }).optional(),
|
|
75
|
+
data: z.array(EmaReferralSchema).optional(),
|
|
76
|
+
});
|
|
77
|
+
let _cache = null;
|
|
78
|
+
const CACHE_TTL_MS = 6 * 60 * 60 * 1000;
|
|
79
|
+
/**
|
|
80
|
+
* Download (or return cached) full EMA referrals catalogue. The catalogue
|
|
81
|
+
* updates twice daily — a 6h in-process TTL is well within freshness
|
|
82
|
+
* tolerance while keeping the per-collector overhead near zero.
|
|
83
|
+
*/
|
|
84
|
+
export async function fetchAllReferrals() {
|
|
85
|
+
if (_cache && Date.now() - _cache.fetchedAt < CACHE_TTL_MS) {
|
|
86
|
+
return _cache.referrals;
|
|
87
|
+
}
|
|
88
|
+
const res = await apiFetchValidated(EMA_REFERRALS_URL, ReferralFileSchema, {
|
|
89
|
+
headers: { Accept: "application/json" },
|
|
90
|
+
});
|
|
91
|
+
if (res.isErr())
|
|
92
|
+
throw new Error(`EMA referrals fetch failed: ${describeApiError(res.error)}`);
|
|
93
|
+
const referrals = res.value.data ?? [];
|
|
94
|
+
_cache = { fetchedAt: Date.now(), referrals };
|
|
95
|
+
return referrals;
|
|
96
|
+
}
|
|
97
|
+
function nameMatches(referral, needle) {
|
|
98
|
+
if (!needle)
|
|
99
|
+
return false;
|
|
100
|
+
if (referral.inn.toLowerCase().includes(needle))
|
|
101
|
+
return true;
|
|
102
|
+
if (referral.referralName.toLowerCase().includes(needle))
|
|
103
|
+
return true;
|
|
104
|
+
for (const m of referral.associatedMedicinesCentrally) {
|
|
105
|
+
if (m.toLowerCase().includes(needle))
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
for (const m of referral.associatedMedicinesNationally) {
|
|
109
|
+
if (m.toLowerCase().includes(needle))
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Find EMA referrals associated with a drug name (matches INN, referral
|
|
116
|
+
* name, and centrally/nationally-authorised medicine names). Returns all
|
|
117
|
+
* matches; the caller filters by referralType / currentStatus as needed.
|
|
118
|
+
*/
|
|
119
|
+
export async function getReferralsByDrug(drugName) {
|
|
120
|
+
const all = await fetchAllReferrals();
|
|
121
|
+
const needle = drugName.toLowerCase().trim();
|
|
122
|
+
return all.filter((r) => nameMatches(r, needle));
|
|
123
|
+
}
|
|
124
|
+
/** Reset the in-process catalogue cache. Test-only. */
|
|
125
|
+
export function __resetReferralsCacheForTest() {
|
|
126
|
+
_cache = null;
|
|
127
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared constants for the EMA (European Medicines Agency) data downloads. */
|
|
2
|
+
/**
|
|
3
|
+
* Full referrals catalogue (~600 rows, ~700KB). Updated twice daily at
|
|
4
|
+
* 06:00 and 18:00 Amsterdam time. There is no per-drug query endpoint;
|
|
5
|
+
* we download the bulk file and filter in-process.
|
|
6
|
+
*/
|
|
7
|
+
export declare const EMA_REFERRALS_URL = "https://www.ema.europa.eu/en/documents/report/referrals-output-json-report_en.json";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared constants for the EMA (European Medicines Agency) data downloads. */
|
|
2
|
+
/**
|
|
3
|
+
* Full referrals catalogue (~600 rows, ~700KB). Updated twice daily at
|
|
4
|
+
* 06:00 and 18:00 Amsterdam time. There is no per-drug query endpoint;
|
|
5
|
+
* we download the bulk file and filter in-process.
|
|
6
|
+
*/
|
|
7
|
+
export const EMA_REFERRALS_URL = "https://www.ema.europa.eu/en/documents/report/referrals-output-json-report_en.json";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the Ensembl REST API.
|
|
3
|
+
*
|
|
4
|
+
* Used by §1.1 (Entity resolution) and as a fallback for ID resolution.
|
|
5
|
+
*/
|
|
6
|
+
export interface GeneInfo {
|
|
7
|
+
symbol: string;
|
|
8
|
+
id: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
biotype: string;
|
|
12
|
+
start: number;
|
|
13
|
+
end: number;
|
|
14
|
+
strand: number;
|
|
15
|
+
assemblyName: string;
|
|
16
|
+
seqRegionName: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LookupOptions {
|
|
19
|
+
species?: string;
|
|
20
|
+
expand?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function lookupGenes(symbols: string[], options?: LookupOptions): Promise<{
|
|
23
|
+
genes: GeneInfo[];
|
|
24
|
+
notFound: string[];
|
|
25
|
+
}>;
|
|
26
|
+
/** Resolve a single human gene symbol to its canonical Ensembl ID. */
|
|
27
|
+
export declare function resolveSymbolToEnsemblId(symbol: string): Promise<string | null>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the Ensembl REST API.
|
|
3
|
+
*
|
|
4
|
+
* Used by §1.1 (Entity resolution) and as a fallback for ID resolution.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { apiFetchValidated, describeApiError } from "./api-utils.js";
|
|
8
|
+
const ENSEMBL_BASE = "https://rest.ensembl.org";
|
|
9
|
+
const HEADERS = {
|
|
10
|
+
"Content-Type": "application/json",
|
|
11
|
+
Accept: "application/json",
|
|
12
|
+
};
|
|
13
|
+
// Raw Ensembl gene wire shape (snake_case), validated at the fetch boundary.
|
|
14
|
+
// Every field is optional because the API omits absent values; `mapGene`
|
|
15
|
+
// normalizes each into the camelCase `GeneInfo` we return.
|
|
16
|
+
const RawGeneSchema = z.object({
|
|
17
|
+
id: z.string().optional(),
|
|
18
|
+
display_name: z.string().nullable().optional(),
|
|
19
|
+
description: z.string().nullable().optional(),
|
|
20
|
+
biotype: z.string().optional(),
|
|
21
|
+
start: z.number().optional(),
|
|
22
|
+
end: z.number().optional(),
|
|
23
|
+
strand: z.number().optional(),
|
|
24
|
+
assembly_name: z.string().optional(),
|
|
25
|
+
seq_region_name: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
function mapGene(symbol, raw) {
|
|
28
|
+
return {
|
|
29
|
+
symbol,
|
|
30
|
+
id: raw.id ?? "",
|
|
31
|
+
displayName: raw.display_name ?? "",
|
|
32
|
+
description: raw.description ?? "",
|
|
33
|
+
biotype: raw.biotype ?? "",
|
|
34
|
+
start: raw.start ?? 0,
|
|
35
|
+
end: raw.end ?? 0,
|
|
36
|
+
strand: raw.strand ?? 0,
|
|
37
|
+
assemblyName: raw.assembly_name ?? "",
|
|
38
|
+
seqRegionName: raw.seq_region_name ?? "",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export async function lookupGenes(symbols, options = {}) {
|
|
42
|
+
const species = options.species ?? "homo_sapiens";
|
|
43
|
+
const expand = options.expand ?? false;
|
|
44
|
+
if (symbols.length === 1) {
|
|
45
|
+
const expandParam = expand ? "?expand=1" : "";
|
|
46
|
+
const result = await apiFetchValidated(`${ENSEMBL_BASE}/lookup/symbol/${species}/${symbols[0]}${expandParam}`, RawGeneSchema, { headers: HEADERS });
|
|
47
|
+
if (result.isErr()) {
|
|
48
|
+
if (result.error.type === "http_status" && result.error.status === 400) {
|
|
49
|
+
return { genes: [], notFound: [symbols[0]] };
|
|
50
|
+
}
|
|
51
|
+
throw new Error(describeApiError(result.error));
|
|
52
|
+
}
|
|
53
|
+
return { genes: [mapGene(symbols[0], result.value)], notFound: [] };
|
|
54
|
+
}
|
|
55
|
+
const result = await apiFetchValidated(`${ENSEMBL_BASE}/lookup/symbol/${species}`, z.record(z.string(), RawGeneSchema), {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: HEADERS,
|
|
58
|
+
body: JSON.stringify({ symbols }),
|
|
59
|
+
});
|
|
60
|
+
if (result.isErr())
|
|
61
|
+
throw new Error(describeApiError(result.error));
|
|
62
|
+
const genes = [];
|
|
63
|
+
const notFound = [];
|
|
64
|
+
for (const sym of symbols) {
|
|
65
|
+
const raw = result.value[sym];
|
|
66
|
+
if (raw)
|
|
67
|
+
genes.push(mapGene(sym, raw));
|
|
68
|
+
else
|
|
69
|
+
notFound.push(sym);
|
|
70
|
+
}
|
|
71
|
+
return { genes, notFound };
|
|
72
|
+
}
|
|
73
|
+
/** Resolve a single human gene symbol to its canonical Ensembl ID. */
|
|
74
|
+
export async function resolveSymbolToEnsemblId(symbol) {
|
|
75
|
+
const url = `${ENSEMBL_BASE}/lookup/symbol/homo_sapiens/${encodeURIComponent(symbol)}`;
|
|
76
|
+
const res = await apiFetchValidated(url, z.object({ id: z.string().optional() }), { headers: HEADERS });
|
|
77
|
+
if (res.isErr())
|
|
78
|
+
return null;
|
|
79
|
+
if (typeof res.value.id !== "string" || !res.value.id.startsWith("ENSG"))
|
|
80
|
+
return null;
|
|
81
|
+
return res.value.id;
|
|
82
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier resolver — combines HGNC, UniProt, Ensembl, and ChEMBL gene-name
|
|
3
|
+
* fields into a single canonical entity payload with synonyms.
|
|
4
|
+
*
|
|
5
|
+
* Used by Phase 0 of the target-assessment workflow to resolve a user-
|
|
6
|
+
* supplied target string (gene symbol, alias, UniProt accession, Ensembl
|
|
7
|
+
* id, ChEMBL target id) to a canonical entity that downstream collectors
|
|
8
|
+
* can key off.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
* 1. If the input matches a known id pattern (ENSG, UniProt 6-char,
|
|
12
|
+
* CHEMBL\d+), use that as the seed.
|
|
13
|
+
* 2. Otherwise treat as a gene symbol and resolve via HGNC, then enrich
|
|
14
|
+
* with UniProt, Ensembl, and ChEMBL.
|
|
15
|
+
*
|
|
16
|
+
* This is the only step in the workflow allowed to throw — a hard
|
|
17
|
+
* resolution failure aborts the assessment with `error.kind:
|
|
18
|
+
* "target-unresolved"` (per design §6).
|
|
19
|
+
*/
|
|
20
|
+
export interface ResolvedTarget {
|
|
21
|
+
/** Canonical id used as the entity-resolution anchor — preferred order: HGNC, then Ensembl. */
|
|
22
|
+
canonicalId: string;
|
|
23
|
+
/** What ontology produced the canonical id ("hgnc" or "ensembl"). */
|
|
24
|
+
canonicalOntology: "hgnc" | "ensembl";
|
|
25
|
+
/** Approved HGNC symbol (always uppercase). */
|
|
26
|
+
geneSymbol: string;
|
|
27
|
+
/** Full gene name. */
|
|
28
|
+
approvedName: string;
|
|
29
|
+
/** Cross-reference identifiers, populated where available. */
|
|
30
|
+
ids: {
|
|
31
|
+
hgnc: string | null;
|
|
32
|
+
ensembl: string | null;
|
|
33
|
+
uniprot: string | null;
|
|
34
|
+
chembl: string | null;
|
|
35
|
+
entrez: string | null;
|
|
36
|
+
};
|
|
37
|
+
/** Gene symbol synonyms. */
|
|
38
|
+
synonyms: string[];
|
|
39
|
+
/** Protein name synonyms (UniProt). */
|
|
40
|
+
proteinSynonyms: string[];
|
|
41
|
+
/** Protein family / classification fields gathered from UniProt or ChEMBL — used by §2.2 family fallback. */
|
|
42
|
+
proteinFamily: string | null;
|
|
43
|
+
/** Whether each upstream lookup succeeded — used to disclose coverage. */
|
|
44
|
+
resolutionCoverage: {
|
|
45
|
+
hgnc: boolean;
|
|
46
|
+
uniprot: boolean;
|
|
47
|
+
ensembl: boolean;
|
|
48
|
+
chembl: boolean;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a free-form target identifier to a canonical entity.
|
|
53
|
+
*
|
|
54
|
+
* @throws when the input cannot be mapped to any human gene/protein.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveTarget(input: string): Promise<ResolvedTarget>;
|
|
57
|
+
export interface AutocompleteCandidate {
|
|
58
|
+
/** Approved HGNC symbol when known, otherwise the input symbol. */
|
|
59
|
+
symbol: string;
|
|
60
|
+
/** Full gene/protein name. */
|
|
61
|
+
displayName: string | null;
|
|
62
|
+
hgncId: string | null;
|
|
63
|
+
ensemblId: string | null;
|
|
64
|
+
uniprotId: string | null;
|
|
65
|
+
/** Sorted synonyms across HGNC + UniProt. */
|
|
66
|
+
synonyms: string[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a single gene-symbol query for the autocomplete UI by fanning
|
|
70
|
+
* out HGNC + UniProt + Ensembl in parallel and merging into one canonical
|
|
71
|
+
* candidate. Per `target-assessment/spec.md` "Autocomplete returns
|
|
72
|
+
* canonical identifiers" — three identifiers populated on one row, not
|
|
73
|
+
* three separate rows.
|
|
74
|
+
*
|
|
75
|
+
* Returns `null` when none of the upstream sources find a match. Throws
|
|
76
|
+
* never — failures of individual sources degrade to `null` for that field.
|
|
77
|
+
*
|
|
78
|
+
* Symbol handling mirrors `resolveTarget` so both entry points behave the
|
|
79
|
+
* same on edge cases:
|
|
80
|
+
* - The query is upper-cased before hitting upstream APIs (HGNC's
|
|
81
|
+
* `symbol` index is case-sensitive; `tp53` would miss).
|
|
82
|
+
* - HGNC is queried with a `symbol` → `alias_symbol` → `prev_symbol`
|
|
83
|
+
* fallback ladder so deprecated symbols still resolve.
|
|
84
|
+
*/
|
|
85
|
+
export declare function searchTargetByName(symbol: string): Promise<AutocompleteCandidate | null>;
|