@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,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP fetch helper for bioinformatics API tools.
|
|
3
|
+
*
|
|
4
|
+
* Provides retry-with-backoff for rate-limited APIs (429/503), request
|
|
5
|
+
* timeouts, and tab-delimited text parsing. `apiFetch` is the external-call
|
|
6
|
+
* boundary, so it is where a throw becomes a `Result`: it returns a
|
|
7
|
+
* `ResultAsync<T, ApiError>` rather than throwing — callers branch on
|
|
8
|
+
* `isErr()` and read `value` / `error` (see `result.ts` for the house rules).
|
|
9
|
+
*/
|
|
10
|
+
import { ResultAsync, err, ok } from "neverthrow";
|
|
11
|
+
import { sleep } from "../../lib/async-utils.js";
|
|
12
|
+
const RETRYABLE_STATUSES = new Set([429, 503]);
|
|
13
|
+
/**
|
|
14
|
+
* Fetch a URL with retry on 429/503, exponential backoff, and timeout.
|
|
15
|
+
* `err` carries the structured failure; a non-ok HTTP status is reported as
|
|
16
|
+
* `http_status` so callers can branch on a concrete code (a 404 is usually an
|
|
17
|
+
* expected "not found" → a data variant; see `isUnexpectedApiError`).
|
|
18
|
+
*/
|
|
19
|
+
export function apiFetch(url, options = {}) {
|
|
20
|
+
return new ResultAsync(runFetch(url, options));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* `apiFetch` that validates the JSON response against a Zod `schema` before
|
|
24
|
+
* returning it. The success value is the schema's parsed output, so callers
|
|
25
|
+
* receive a payload whose shape has been checked rather than an unchecked
|
|
26
|
+
* `apiFetch<T>` cast that trusts the wire.
|
|
27
|
+
*
|
|
28
|
+
* A response the schema rejects — the upstream API changed its contract, or
|
|
29
|
+
* returned an error envelope where data was expected — resolves to an
|
|
30
|
+
* `invalid_response` err. That is deliberately an *unexpected* `ApiError`
|
|
31
|
+
* (`isUnexpectedApiError` returns true for it): a contract break should
|
|
32
|
+
* surface, not silently become empty/garbage results downstream. To keep a
|
|
33
|
+
* tool's graceful degradation, model genuinely-optional fields as
|
|
34
|
+
* `.optional()`/`.nullable()` in the schema so a partial-but-valid response
|
|
35
|
+
* still parses; reserve rejection for real type/shape drift.
|
|
36
|
+
*
|
|
37
|
+
* JSON only — `parseAs` is forced to `"json"`, since a schema over raw text is
|
|
38
|
+
* just `z.string()`, which `apiFetch<string>` already covers.
|
|
39
|
+
*/
|
|
40
|
+
export function apiFetchValidated(url, schema, options = {}) {
|
|
41
|
+
return apiFetch(url, { ...options, parseAs: "json" }).andThen((data) => {
|
|
42
|
+
const parsed = schema.safeParse(data);
|
|
43
|
+
if (parsed.success)
|
|
44
|
+
return ok(parsed.data);
|
|
45
|
+
return err({ type: "invalid_response", issues: summarizeZodIssues(parsed.error) });
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Compact one-line rendering of a Zod validation failure (first few issues). */
|
|
49
|
+
function summarizeZodIssues(error) {
|
|
50
|
+
const issues = error.issues.slice(0, 5).map((issue) => {
|
|
51
|
+
const path = issue.path.map((segment) => String(segment)).join(".");
|
|
52
|
+
return path ? `${path}: ${issue.message}` : issue.message;
|
|
53
|
+
});
|
|
54
|
+
const remaining = error.issues.length - issues.length;
|
|
55
|
+
return remaining > 0 ? `${issues.join("; ")} (+${remaining} more)` : issues.join("; ");
|
|
56
|
+
}
|
|
57
|
+
async function runFetch(url, options) {
|
|
58
|
+
const { method = "GET", headers = {}, body, maxRetries = 3, retryDelayMs = 1000, timeoutMs = 90_000, parseAs = "json" } = options;
|
|
59
|
+
let lastError = "";
|
|
60
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
61
|
+
try {
|
|
62
|
+
const res = await fetch(url, {
|
|
63
|
+
method,
|
|
64
|
+
headers,
|
|
65
|
+
body,
|
|
66
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
67
|
+
});
|
|
68
|
+
if (RETRYABLE_STATUSES.has(res.status) && attempt < maxRetries) {
|
|
69
|
+
await sleep(retryDelayMs * 2 ** attempt);
|
|
70
|
+
lastError = `HTTP ${res.status}`;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (!res.ok) {
|
|
74
|
+
const text = await res.text().catch(() => "");
|
|
75
|
+
return err({ type: "http_status", status: res.status, body: text.trim() });
|
|
76
|
+
}
|
|
77
|
+
const data = parseAs === "text" ? (await res.text()) : (await res.json());
|
|
78
|
+
return ok(data);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
if (e instanceof DOMException && e.name === "TimeoutError") {
|
|
82
|
+
return err({ type: "timeout", timeoutMs });
|
|
83
|
+
}
|
|
84
|
+
lastError = e instanceof Error ? e.message : String(e);
|
|
85
|
+
if (attempt < maxRetries) {
|
|
86
|
+
await sleep(retryDelayMs * 2 ** attempt);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return err({ type: "exhausted", attempts: maxRetries + 1, lastError });
|
|
92
|
+
}
|
|
93
|
+
/** Render an `ApiError` as a one-line message (for a rethrow or log). */
|
|
94
|
+
export function describeApiError(e) {
|
|
95
|
+
switch (e.type) {
|
|
96
|
+
case "http_status":
|
|
97
|
+
return e.body ? `HTTP ${e.status}: ${e.body}` : `HTTP ${e.status}`;
|
|
98
|
+
case "timeout":
|
|
99
|
+
return `Request timed out after ${e.timeoutMs}ms`;
|
|
100
|
+
case "exhausted":
|
|
101
|
+
return `Failed after ${e.attempts} attempts: ${e.lastError}`;
|
|
102
|
+
case "invalid_response":
|
|
103
|
+
return `Response did not match the expected schema: ${e.issues}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Is an `ApiError` an unexpected failure?
|
|
108
|
+
*
|
|
109
|
+
* A concrete 4xx means the request itself was wrong — a bad identifier, a
|
|
110
|
+
* resource that does not exist — an expected outcome the caller models as
|
|
111
|
+
* data (an empty result, a `notFound` entry). Everything else — 5xx, a
|
|
112
|
+
* timeout, retry exhaustion, a transport failure, or a schema mismatch
|
|
113
|
+
* (`invalid_response`) — is unexpected and the caller should surface it by
|
|
114
|
+
* throwing (or returning `err`).
|
|
115
|
+
*/
|
|
116
|
+
export function isUnexpectedApiError(e) {
|
|
117
|
+
return !(e.type === "http_status" && e.status >= 400 && e.status < 500);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse tab-separated text into rows of columns (e.g., KEGG responses).
|
|
121
|
+
* Filters out empty lines.
|
|
122
|
+
*/
|
|
123
|
+
export function parseTSV(text) {
|
|
124
|
+
return text
|
|
125
|
+
.split("\n")
|
|
126
|
+
.filter((line) => line.trim() !== "")
|
|
127
|
+
.map((line) => line.split("\t"));
|
|
128
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the Bgee multi-species expression API.
|
|
3
|
+
*
|
|
4
|
+
* Resolves a human gene symbol to its Ensembl ID, fans out to ortholog
|
|
5
|
+
* lookups for the configured non-human species (Ensembl REST), then
|
|
6
|
+
* queries Bgee per (species, ortholog ENSG) for tissue-level expression
|
|
7
|
+
* calls. Returns a per-species table of tissue × expression-rank.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SUPPORTED_SPECIES: readonly ["homo_sapiens", "mus_musculus", "rattus_norvegicus", "canis_lupus_familiaris", "macaca_mulatta"];
|
|
10
|
+
export type SupportedSpecies = (typeof SUPPORTED_SPECIES)[number];
|
|
11
|
+
export declare const SPECIES_TAXON: Record<SupportedSpecies, number>;
|
|
12
|
+
export type ExpressionRank = "absent" | "low" | "medium" | "high";
|
|
13
|
+
export interface TissueRow {
|
|
14
|
+
tissue: string;
|
|
15
|
+
cellType: string | null;
|
|
16
|
+
expressionScore: number | null;
|
|
17
|
+
confidence: "gold" | "silver" | null;
|
|
18
|
+
expressionState: "expressed" | "not expressed";
|
|
19
|
+
rank: ExpressionRank;
|
|
20
|
+
}
|
|
21
|
+
export interface SpeciesEntry {
|
|
22
|
+
species: SupportedSpecies;
|
|
23
|
+
taxonId: number;
|
|
24
|
+
ensemblId: string;
|
|
25
|
+
tissues: TissueRow[];
|
|
26
|
+
}
|
|
27
|
+
export interface MultiSpeciesExpression {
|
|
28
|
+
geneSymbol: string;
|
|
29
|
+
humanEnsemblId: string | null;
|
|
30
|
+
bySpecies: SpeciesEntry[];
|
|
31
|
+
notFound: string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function bucketRank(expressionState: string, score: number | null): ExpressionRank;
|
|
34
|
+
export declare function parseExpressionResponse(raw: unknown): TissueRow[];
|
|
35
|
+
/** Fetch multi-species expression for a human gene symbol. */
|
|
36
|
+
export declare function getMultiSpeciesExpression(geneSymbol: string, species?: SupportedSpecies[]): Promise<MultiSpeciesExpression>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the Bgee multi-species expression API.
|
|
3
|
+
*
|
|
4
|
+
* Resolves a human gene symbol to its Ensembl ID, fans out to ortholog
|
|
5
|
+
* lookups for the configured non-human species (Ensembl REST), then
|
|
6
|
+
* queries Bgee per (species, ortholog ENSG) for tissue-level expression
|
|
7
|
+
* calls. Returns a per-species table of tissue × expression-rank.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { apiFetchValidated, describeApiError, isUnexpectedApiError } from "./api-utils.js";
|
|
11
|
+
const ENSEMBL_BASE = "https://rest.ensembl.org";
|
|
12
|
+
const BGEE_BASE = "https://www.bgee.org/api";
|
|
13
|
+
export const SUPPORTED_SPECIES = ["homo_sapiens", "mus_musculus", "rattus_norvegicus", "canis_lupus_familiaris", "macaca_mulatta"];
|
|
14
|
+
export const SPECIES_TAXON = {
|
|
15
|
+
homo_sapiens: 9606,
|
|
16
|
+
mus_musculus: 10090,
|
|
17
|
+
rattus_norvegicus: 10116,
|
|
18
|
+
canis_lupus_familiaris: 9615,
|
|
19
|
+
macaca_mulatta: 9544,
|
|
20
|
+
};
|
|
21
|
+
const ENSEMBL_HEADERS = {
|
|
22
|
+
Accept: "application/json",
|
|
23
|
+
"Content-Type": "application/json",
|
|
24
|
+
};
|
|
25
|
+
export function bucketRank(expressionState, score) {
|
|
26
|
+
if (expressionState === "not expressed")
|
|
27
|
+
return "absent";
|
|
28
|
+
if (score === null)
|
|
29
|
+
return "low";
|
|
30
|
+
if (score >= 75)
|
|
31
|
+
return "high";
|
|
32
|
+
if (score >= 25)
|
|
33
|
+
return "medium";
|
|
34
|
+
return "low";
|
|
35
|
+
}
|
|
36
|
+
// A single expression call from the Bgee API `data.calls` array, plus the envelope that
|
|
37
|
+
// wraps them. Validated at the fetch boundary; `parseExpressionResponse` reads the fields
|
|
38
|
+
// defensively. Every field optional — the API omits absent values.
|
|
39
|
+
const BgeeCallSchema = z.object({
|
|
40
|
+
condition: z
|
|
41
|
+
.object({
|
|
42
|
+
anatEntity: z.object({ name: z.string().optional() }).optional(),
|
|
43
|
+
cellType: z.object({ name: z.string().optional() }).optional(),
|
|
44
|
+
})
|
|
45
|
+
.optional(),
|
|
46
|
+
expressionScore: z.object({ expressionScore: z.union([z.string(), z.number()]).optional() }).optional(),
|
|
47
|
+
expressionQuality: z.string().optional(),
|
|
48
|
+
expressionState: z.string().optional(),
|
|
49
|
+
});
|
|
50
|
+
const BgeeExpressionResponseSchema = z.object({
|
|
51
|
+
data: z.object({ calls: z.array(BgeeCallSchema).optional() }).optional(),
|
|
52
|
+
});
|
|
53
|
+
// Ensembl REST response shapes consumed by the ortholog-resolution path.
|
|
54
|
+
const EnsemblLookupSchema = z.object({ id: z.string().optional() });
|
|
55
|
+
const EnsemblHomologyResponseSchema = z.object({
|
|
56
|
+
data: z.array(z.object({ homologies: z.array(z.object({ id: z.string().optional(), type: z.string().optional() })).optional() })).optional(),
|
|
57
|
+
});
|
|
58
|
+
export function parseExpressionResponse(raw) {
|
|
59
|
+
// `raw` is the untyped Bgee API payload; `.data.calls` is reached defensively and
|
|
60
|
+
// the `Array.isArray` guard below means a shape mismatch degrades to an empty list.
|
|
61
|
+
const calls = raw?.data?.calls;
|
|
62
|
+
if (!Array.isArray(calls))
|
|
63
|
+
return [];
|
|
64
|
+
const out = [];
|
|
65
|
+
for (const call of calls) {
|
|
66
|
+
const anatName = call?.condition?.anatEntity?.name ?? "";
|
|
67
|
+
const tissue = anatName.trim().toLowerCase();
|
|
68
|
+
if (!tissue)
|
|
69
|
+
continue;
|
|
70
|
+
const cellTypeName = call?.condition?.cellType?.name;
|
|
71
|
+
const cellType = typeof cellTypeName === "string" && cellTypeName.trim() !== "" ? cellTypeName.trim().toLowerCase() : null;
|
|
72
|
+
const rawScore = call?.expressionScore?.expressionScore;
|
|
73
|
+
let expressionScore = null;
|
|
74
|
+
if (typeof rawScore === "string" || typeof rawScore === "number") {
|
|
75
|
+
const n = typeof rawScore === "number" ? rawScore : parseFloat(rawScore);
|
|
76
|
+
expressionScore = Number.isFinite(n) ? n : null;
|
|
77
|
+
}
|
|
78
|
+
const quality = call?.expressionQuality;
|
|
79
|
+
const confidence = quality === "gold" || quality === "silver" ? quality : null;
|
|
80
|
+
const stateRaw = call?.expressionState;
|
|
81
|
+
const expressionState = stateRaw === "not expressed" ? "not expressed" : "expressed";
|
|
82
|
+
out.push({
|
|
83
|
+
tissue,
|
|
84
|
+
cellType,
|
|
85
|
+
expressionScore,
|
|
86
|
+
confidence,
|
|
87
|
+
expressionState,
|
|
88
|
+
rank: bucketRank(expressionState, expressionScore),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
async function resolveHumanEnsembl(symbol) {
|
|
94
|
+
const url = `${ENSEMBL_BASE}/lookup/symbol/homo_sapiens/${encodeURIComponent(symbol)}`;
|
|
95
|
+
const res = await apiFetchValidated(url, EnsemblLookupSchema, { headers: ENSEMBL_HEADERS });
|
|
96
|
+
if (res.isErr()) {
|
|
97
|
+
if (isUnexpectedApiError(res.error))
|
|
98
|
+
throw new Error(describeApiError(res.error));
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
if (typeof res.value.id !== "string" || !res.value.id.startsWith("ENSG"))
|
|
102
|
+
return null;
|
|
103
|
+
return res.value.id;
|
|
104
|
+
}
|
|
105
|
+
async function resolveOrtholog(symbol, targetSpecies) {
|
|
106
|
+
const url = `${ENSEMBL_BASE}/homology/symbol/homo_sapiens/${encodeURIComponent(symbol)}` + `?type=orthologues;target_species=${targetSpecies};format=condensed`;
|
|
107
|
+
const res = await apiFetchValidated(url, EnsemblHomologyResponseSchema, { headers: ENSEMBL_HEADERS });
|
|
108
|
+
if (res.isErr()) {
|
|
109
|
+
if (isUnexpectedApiError(res.error))
|
|
110
|
+
throw new Error(describeApiError(res.error));
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const homologies = res.value.data?.[0]?.homologies ?? [];
|
|
114
|
+
const onetoone = homologies.find((h) => h.type === "ortholog_one2one");
|
|
115
|
+
return (onetoone?.id ?? homologies[0]?.id ?? null) || null;
|
|
116
|
+
}
|
|
117
|
+
async function fetchBgeeForSpecies(ensemblId, taxonId) {
|
|
118
|
+
const url = `${BGEE_BASE}/?page=gene&action=expression&display_type=json` + `&gene_id=${encodeURIComponent(ensemblId)}&species_id=${taxonId}`;
|
|
119
|
+
const res = await apiFetchValidated(url, BgeeExpressionResponseSchema);
|
|
120
|
+
if (res.isErr()) {
|
|
121
|
+
if (isUnexpectedApiError(res.error))
|
|
122
|
+
throw new Error(describeApiError(res.error));
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
return parseExpressionResponse(res.value);
|
|
126
|
+
}
|
|
127
|
+
/** Fetch multi-species expression for a human gene symbol. */
|
|
128
|
+
export async function getMultiSpeciesExpression(geneSymbol, species = [...SUPPORTED_SPECIES]) {
|
|
129
|
+
const humanEnsemblId = await resolveHumanEnsembl(geneSymbol);
|
|
130
|
+
if (!humanEnsemblId) {
|
|
131
|
+
return { geneSymbol, humanEnsemblId: null, bySpecies: [], notFound: [] };
|
|
132
|
+
}
|
|
133
|
+
const idEntries = await Promise.all(species.map(async (sp) => {
|
|
134
|
+
if (sp === "homo_sapiens")
|
|
135
|
+
return { sp, id: humanEnsemblId };
|
|
136
|
+
const id = await resolveOrtholog(geneSymbol, sp);
|
|
137
|
+
return { sp, id };
|
|
138
|
+
}));
|
|
139
|
+
const bySpecies = [];
|
|
140
|
+
const notFound = [];
|
|
141
|
+
await Promise.all(idEntries.map(async ({ sp, id }) => {
|
|
142
|
+
if (!id) {
|
|
143
|
+
notFound.push(sp);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const tissues = await fetchBgeeForSpecies(id, SPECIES_TAXON[sp]);
|
|
147
|
+
bySpecies.push({ species: sp, taxonId: SPECIES_TAXON[sp], ensemblId: id, tissues });
|
|
148
|
+
}));
|
|
149
|
+
return { geneSymbol, humanEnsemblId, bySpecies, notFound };
|
|
150
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client for cBioPortal somatic mutation frequencies.
|
|
3
|
+
*
|
|
4
|
+
* Used by §3.4 (Genetic Alterations — somatic mutation frequencies). Queries
|
|
5
|
+
* the public cBioPortal REST API for mutation occurrence across all curated
|
|
6
|
+
* cancer studies, then aggregates by cancer type to produce the spec's
|
|
7
|
+
* "where is the target broken in human disease, and how often" view.
|
|
8
|
+
*/
|
|
9
|
+
export interface CancerStudy {
|
|
10
|
+
studyId: string;
|
|
11
|
+
cancerType: string;
|
|
12
|
+
cancerTypeName: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MutationFrequency {
|
|
15
|
+
cancerTypeId: string;
|
|
16
|
+
cancerTypeName: string;
|
|
17
|
+
totalSamples: number;
|
|
18
|
+
mutatedSamples: number;
|
|
19
|
+
frequency: number;
|
|
20
|
+
studies: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compute somatic mutation frequencies for a target across all curated
|
|
24
|
+
* cancer studies in cBioPortal, grouped by cancer type. Returns one row
|
|
25
|
+
* per cancer type containing total samples checked, samples with at
|
|
26
|
+
* least one mutation in the gene, and the contributing studies.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getSomaticMutationFrequencies(geneSymbol: string, options?: {
|
|
29
|
+
minSamplesPerCancerType?: number;
|
|
30
|
+
maxStudies?: number;
|
|
31
|
+
}): Promise<{
|
|
32
|
+
entrezGeneId: number | null;
|
|
33
|
+
rows: MutationFrequency[];
|
|
34
|
+
}>;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client for cBioPortal somatic mutation frequencies.
|
|
3
|
+
*
|
|
4
|
+
* Used by §3.4 (Genetic Alterations — somatic mutation frequencies). Queries
|
|
5
|
+
* the public cBioPortal REST API for mutation occurrence across all curated
|
|
6
|
+
* cancer studies, then aggregates by cancer type to produce the spec's
|
|
7
|
+
* "where is the target broken in human disease, and how often" view.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { apiFetchValidated, describeApiError } from "./api-utils.js";
|
|
11
|
+
const CBIOPORTAL_BASE = "https://www.cbioportal.org/api";
|
|
12
|
+
const HEADERS = { Accept: "application/json" };
|
|
13
|
+
// Raw cBioPortal wire shapes, validated at the fetch boundary. Fields the code
|
|
14
|
+
// reads as map keys or feeds into `string[]` params stay required — a missing
|
|
15
|
+
// value there is a contract break we surface as `invalid_response`, not a silent
|
|
16
|
+
// `undefined`; every other field is optional because the API omits absent values.
|
|
17
|
+
const RawMolecularProfileSchema = z.object({
|
|
18
|
+
molecularProfileId: z.string(),
|
|
19
|
+
studyId: z.string(),
|
|
20
|
+
molecularAlterationType: z.string().optional(),
|
|
21
|
+
});
|
|
22
|
+
const RawMutationCountSchema = z.object({
|
|
23
|
+
studyId: z.string(),
|
|
24
|
+
sampleId: z.string(),
|
|
25
|
+
mutationCount: z.number().optional(),
|
|
26
|
+
});
|
|
27
|
+
const RawSampleListSchema = z.object({
|
|
28
|
+
sampleListId: z.string().optional(),
|
|
29
|
+
studyId: z.string(),
|
|
30
|
+
category: z.string().optional(),
|
|
31
|
+
sampleCount: z.number().optional(),
|
|
32
|
+
});
|
|
33
|
+
const RawCancerStudySchema = z.object({
|
|
34
|
+
studyId: z.string(),
|
|
35
|
+
cancerTypeId: z.string().optional(),
|
|
36
|
+
cancerType: z.object({ name: z.string().optional(), cancerTypeId: z.string().optional() }).optional(),
|
|
37
|
+
name: z.string().optional(),
|
|
38
|
+
description: z.string().optional(),
|
|
39
|
+
});
|
|
40
|
+
async function listStudies() {
|
|
41
|
+
const url = `${CBIOPORTAL_BASE}/studies?projection=SUMMARY&pageSize=10000`;
|
|
42
|
+
const res = await apiFetchValidated(url, z.array(RawCancerStudySchema), { headers: HEADERS });
|
|
43
|
+
if (res.isErr())
|
|
44
|
+
throw new Error(describeApiError(res.error));
|
|
45
|
+
return res.value ?? [];
|
|
46
|
+
}
|
|
47
|
+
async function listAllSampleLists() {
|
|
48
|
+
const url = `${CBIOPORTAL_BASE}/sample-lists?projection=SUMMARY&pageSize=10000`;
|
|
49
|
+
const res = await apiFetchValidated(url, z.array(RawSampleListSchema), { headers: HEADERS });
|
|
50
|
+
if (res.isErr())
|
|
51
|
+
throw new Error(describeApiError(res.error));
|
|
52
|
+
return res.value ?? [];
|
|
53
|
+
}
|
|
54
|
+
async function listMutationProfiles() {
|
|
55
|
+
const url = `${CBIOPORTAL_BASE}/molecular-profiles?projection=SUMMARY&pageSize=10000`;
|
|
56
|
+
const res = await apiFetchValidated(url, z.array(RawMolecularProfileSchema), { headers: HEADERS });
|
|
57
|
+
if (res.isErr())
|
|
58
|
+
throw new Error(describeApiError(res.error));
|
|
59
|
+
return (res.value ?? []).filter((p) => p.molecularAlterationType === "MUTATION_EXTENDED");
|
|
60
|
+
}
|
|
61
|
+
async function fetchMutationCountsForGene(entrezGeneId, profileIds) {
|
|
62
|
+
if (profileIds.length === 0)
|
|
63
|
+
return [];
|
|
64
|
+
const url = `${CBIOPORTAL_BASE}/mutations/fetch?projection=SUMMARY`;
|
|
65
|
+
const res = await apiFetchValidated(url, z.array(RawMutationCountSchema), {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers: { ...HEADERS, "Content-Type": "application/json" },
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
molecularProfileIds: profileIds,
|
|
70
|
+
entrezGeneIds: [entrezGeneId],
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
if (res.isErr())
|
|
74
|
+
throw new Error(describeApiError(res.error));
|
|
75
|
+
return res.value ?? [];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve a gene symbol to its NCBI Entrez Gene ID via cBioPortal's gene
|
|
79
|
+
* search endpoint. cBioPortal's mutation API requires entrezGeneId, not
|
|
80
|
+
* symbol.
|
|
81
|
+
*/
|
|
82
|
+
async function resolveEntrezId(symbol) {
|
|
83
|
+
const url = `${CBIOPORTAL_BASE}/genes/${encodeURIComponent(symbol)}`;
|
|
84
|
+
const res = await apiFetchValidated(url, z.object({ entrezGeneId: z.number().optional() }), { headers: HEADERS });
|
|
85
|
+
if (res.isErr())
|
|
86
|
+
return null;
|
|
87
|
+
return res.value?.entrezGeneId ?? null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compute somatic mutation frequencies for a target across all curated
|
|
91
|
+
* cancer studies in cBioPortal, grouped by cancer type. Returns one row
|
|
92
|
+
* per cancer type containing total samples checked, samples with at
|
|
93
|
+
* least one mutation in the gene, and the contributing studies.
|
|
94
|
+
*/
|
|
95
|
+
export async function getSomaticMutationFrequencies(geneSymbol, options = {}) {
|
|
96
|
+
const minSamples = options.minSamplesPerCancerType ?? 50;
|
|
97
|
+
const maxStudies = options.maxStudies ?? 500;
|
|
98
|
+
const entrezGeneId = await resolveEntrezId(geneSymbol);
|
|
99
|
+
if (entrezGeneId == null)
|
|
100
|
+
return { entrezGeneId: null, rows: [] };
|
|
101
|
+
const [studies, profiles, sampleLists] = await Promise.all([listStudies(), listMutationProfiles(), listAllSampleLists()]);
|
|
102
|
+
const allSampleListByStudy = new Map();
|
|
103
|
+
for (const sl of sampleLists) {
|
|
104
|
+
if (sl.category === "all_cases_in_study") {
|
|
105
|
+
allSampleListByStudy.set(sl.studyId, sl);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const studiesWithMutations = profiles
|
|
109
|
+
.map((p) => p.studyId)
|
|
110
|
+
.filter((sid) => allSampleListByStudy.has(sid))
|
|
111
|
+
.slice(0, maxStudies);
|
|
112
|
+
const profileIds = profiles.filter((p) => studiesWithMutations.includes(p.studyId)).map((p) => p.molecularProfileId);
|
|
113
|
+
const studyById = new Map();
|
|
114
|
+
for (const s of studies)
|
|
115
|
+
studyById.set(s.studyId, s);
|
|
116
|
+
const mutations = await fetchMutationCountsForGene(entrezGeneId, profileIds);
|
|
117
|
+
const mutatedStudySamples = new Map();
|
|
118
|
+
for (const m of mutations) {
|
|
119
|
+
if (!mutatedStudySamples.has(m.studyId))
|
|
120
|
+
mutatedStudySamples.set(m.studyId, new Set());
|
|
121
|
+
mutatedStudySamples.get(m.studyId).add(m.sampleId);
|
|
122
|
+
}
|
|
123
|
+
const byCancerType = new Map();
|
|
124
|
+
for (const studyId of studiesWithMutations) {
|
|
125
|
+
const sl = allSampleListByStudy.get(studyId);
|
|
126
|
+
if (!sl?.sampleCount)
|
|
127
|
+
continue;
|
|
128
|
+
const study = studyById.get(studyId);
|
|
129
|
+
const cancerTypeId = study?.cancerType?.cancerTypeId ?? study?.cancerTypeId ?? "unknown";
|
|
130
|
+
const cancerTypeName = study?.cancerType?.name ?? cancerTypeId;
|
|
131
|
+
if (!byCancerType.has(cancerTypeId)) {
|
|
132
|
+
byCancerType.set(cancerTypeId, {
|
|
133
|
+
name: cancerTypeName,
|
|
134
|
+
total: 0,
|
|
135
|
+
mutated: 0,
|
|
136
|
+
studies: new Set(),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const bucket = byCancerType.get(cancerTypeId);
|
|
140
|
+
bucket.total += sl.sampleCount;
|
|
141
|
+
bucket.mutated += mutatedStudySamples.get(studyId)?.size ?? 0;
|
|
142
|
+
bucket.studies.add(studyId);
|
|
143
|
+
}
|
|
144
|
+
const rows = [];
|
|
145
|
+
for (const [cancerTypeId, agg] of byCancerType.entries()) {
|
|
146
|
+
if (agg.total < minSamples)
|
|
147
|
+
continue;
|
|
148
|
+
rows.push({
|
|
149
|
+
cancerTypeId,
|
|
150
|
+
cancerTypeName: agg.name,
|
|
151
|
+
totalSamples: agg.total,
|
|
152
|
+
mutatedSamples: agg.mutated,
|
|
153
|
+
frequency: agg.total === 0 ? 0 : agg.mutated / agg.total,
|
|
154
|
+
studies: [...agg.studies].sort(),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
rows.sort((a, b) => b.frequency - a.frequency);
|
|
158
|
+
return { entrezGeneId, rows };
|
|
159
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure async client functions for the ChEMBL REST API.
|
|
3
|
+
*
|
|
4
|
+
* Used directly by target-assessment workflow steps and by tool wrappers.
|
|
5
|
+
*/
|
|
6
|
+
export interface ChemblTarget {
|
|
7
|
+
targetChemblId: string;
|
|
8
|
+
preferredName: string | null;
|
|
9
|
+
targetType: string | null;
|
|
10
|
+
organism: string | null;
|
|
11
|
+
geneNames: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface ChemblActivity {
|
|
14
|
+
activityId: number | null;
|
|
15
|
+
compoundChemblId: string;
|
|
16
|
+
targetChemblId: string | null;
|
|
17
|
+
standardType: string | null;
|
|
18
|
+
standardValue: number | null;
|
|
19
|
+
standardUnits: string | null;
|
|
20
|
+
assayChemblId: string | null;
|
|
21
|
+
assayType: string | null;
|
|
22
|
+
pchemblValue: number | null;
|
|
23
|
+
}
|
|
24
|
+
export interface ChemblMechanism {
|
|
25
|
+
mechanismOfAction: string | null;
|
|
26
|
+
actionType: string | null;
|
|
27
|
+
targetChemblId: string | null;
|
|
28
|
+
targetName: string | null;
|
|
29
|
+
moleculeChemblId: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ChemblDrug {
|
|
32
|
+
moleculeChemblId: string;
|
|
33
|
+
preferredName: string | null;
|
|
34
|
+
maxPhase: number | null;
|
|
35
|
+
moleculeType: string | null;
|
|
36
|
+
firstApproval: number | null;
|
|
37
|
+
indication: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface ChemblModulator {
|
|
40
|
+
moleculeChemblId: string;
|
|
41
|
+
parentChemblId: string | null;
|
|
42
|
+
preferredName: string | null;
|
|
43
|
+
maxPhase: number | null;
|
|
44
|
+
moleculeType: string | null;
|
|
45
|
+
firstApproval: number | null;
|
|
46
|
+
}
|
|
47
|
+
export interface ChemblPolypharmHit {
|
|
48
|
+
moleculeChemblId: string;
|
|
49
|
+
targetChemblId: string;
|
|
50
|
+
targetName: string | null;
|
|
51
|
+
standardType: string | null;
|
|
52
|
+
standardValue: number | null;
|
|
53
|
+
standardUnits: string | null;
|
|
54
|
+
pchemblValue: number | null;
|
|
55
|
+
}
|
|
56
|
+
export declare function searchTargets(query: string, limit?: number): Promise<ChemblTarget[]>;
|
|
57
|
+
export declare function getBioactivity(chemblId: string, type: "compound" | "target", options?: {
|
|
58
|
+
activityType?: string;
|
|
59
|
+
limit?: number;
|
|
60
|
+
}): Promise<ChemblActivity[]>;
|
|
61
|
+
export declare function getMechanism(chemblId: string): Promise<ChemblMechanism[]>;
|
|
62
|
+
export declare function getDrugInfo(query: string, limit?: number): Promise<ChemblDrug[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Fetch all clinical-stage modulators (max_phase ≥ 2 by default) for a target.
|
|
65
|
+
* Used for §2.6.6 (class precedent) and as the input to §2.6.4 (off-target panel).
|
|
66
|
+
*/
|
|
67
|
+
export declare function getTargetModulators(targetChemblId: string, options?: {
|
|
68
|
+
minPhase?: number;
|
|
69
|
+
limit?: number;
|
|
70
|
+
}): Promise<ChemblModulator[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Fetch off-target binding hits for a modulator: every target the molecule
|
|
73
|
+
* has been measured against (excluding the primary target), with potency.
|
|
74
|
+
* Used for §2.6.4 / §2.8 off-target panel.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getModulatorPolypharmacology(moleculeChemblId: string, options?: {
|
|
77
|
+
minPchembl?: number;
|
|
78
|
+
limit?: number;
|
|
79
|
+
excludeTargetChemblId?: string;
|
|
80
|
+
}): Promise<ChemblPolypharmHit[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Fetch the median pChEMBL value for a modulator measured against its primary
|
|
83
|
+
* on-target. Filters to activities with non-null pchembl_value against the
|
|
84
|
+
* specified target ChEMBL ID. Returns null when no activities are found.
|
|
85
|
+
*
|
|
86
|
+
* Used by the polypharm fanout step so the assembler's computeSelectivity
|
|
87
|
+
* can produce real fold values instead of selectivity_unknown.
|
|
88
|
+
*/
|
|
89
|
+
export declare function getModulatorOnTargetPchembl(modulatorChemblId: string, targetChemblId: string): Promise<number | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Secondary path: fetch clinical-stage small molecules via the activity table.
|
|
92
|
+
*
|
|
93
|
+
* ChEMBL's mechanism table can lag behind for newer programmes (e.g.,
|
|
94
|
+
* orforglipron for GLP1R). Querying the activity table with
|
|
95
|
+
* `max_phase__gte` catches these molecules earlier. The activity table
|
|
96
|
+
* carries `molecule_chembl_id` but not `max_phase` or `molecule_type` —
|
|
97
|
+
* those require a follow-up molecule lookup. We batch unique molecule IDs
|
|
98
|
+
* and fetch molecule records in slices of 5.
|
|
99
|
+
*
|
|
100
|
+
* Returns one `ChemblModulator` per unique molecule that passes the
|
|
101
|
+
* min-phase and molecule-type filters.
|
|
102
|
+
*/
|
|
103
|
+
export declare function getModulatorsViaActivity(args: {
|
|
104
|
+
target_chembl_id: string;
|
|
105
|
+
max_phase_min?: number;
|
|
106
|
+
molecule_type?: string;
|
|
107
|
+
limit?: number;
|
|
108
|
+
}): Promise<ChemblModulator[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Fetch the canonical InChI key for a ChEMBL molecule. Returns null when
|
|
111
|
+
* ChEMBL has no recorded structure (typical for peptide/protein entries
|
|
112
|
+
* with `molecule_type: "Unknown"`).
|
|
113
|
+
*/
|
|
114
|
+
export declare function getMoleculeInChIKey(moleculeChemblId: string): Promise<string | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Resolve a drug's mechanism-of-action targets to UniProt accessions.
|
|
117
|
+
* Returns deduplicated accessions across all mechanism rows.
|
|
118
|
+
* Empty array on no mechanism, missing target, or non-protein target.
|
|
119
|
+
*
|
|
120
|
+
* Used by target-identity-filter to detect off-target trials (e.g., a
|
|
121
|
+
* trial of a CALCRL drug being surfaced under a CALCR assessment).
|
|
122
|
+
*/
|
|
123
|
+
export declare function getDrugPrimaryTargetUniprots(moleculeChemblId: string): Promise<string[]>;
|