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