@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,35 @@
|
|
|
1
|
+
export type FdaCenter = "CDER" | "CBER";
|
|
2
|
+
export interface FdaDocStub {
|
|
3
|
+
doc_id: string;
|
|
4
|
+
doc_title: string;
|
|
5
|
+
doc_url: string;
|
|
6
|
+
center: FdaCenter;
|
|
7
|
+
metadata?: {
|
|
8
|
+
year?: string;
|
|
9
|
+
category?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface FdaDoc {
|
|
13
|
+
doc_id: string;
|
|
14
|
+
doc_title: string;
|
|
15
|
+
doc_url: string;
|
|
16
|
+
text: string;
|
|
17
|
+
metadata: {
|
|
18
|
+
center: FdaCenter;
|
|
19
|
+
year?: string;
|
|
20
|
+
category?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Return the curated FDA guidance stubs for `center`. The catalog is
|
|
25
|
+
* static; this function exists for parity with `fetchIchListing()` and as
|
|
26
|
+
* the seam where a future contributor can swap in dynamic discovery
|
|
27
|
+
* (e.g., headless-browser scraping or a vetted third-party index).
|
|
28
|
+
*/
|
|
29
|
+
export declare function fetchFdaGuidanceListing(center: FdaCenter): Promise<FdaDocStub[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Download a single FDA guidance document and extract its text. Handles
|
|
32
|
+
* both HTML and PDF formats (FDA serves a mix). Returns normalized
|
|
33
|
+
* whitespace-collapsed text suitable for chunking.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchAndExtractFdaDoc(stub: FdaDocStub): Promise<FdaDoc>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { load } from "cheerio";
|
|
2
|
+
import { PDFParse } from "pdf-parse";
|
|
3
|
+
/**
|
|
4
|
+
* Curated catalog of FDA guidance documents to index into the corpus.
|
|
5
|
+
*
|
|
6
|
+
* The FDA listing page (`/regulatory-information/search-fda-guidance-documents`)
|
|
7
|
+
* is a Drupal datatable rendered client-side from
|
|
8
|
+
* `/datatables-json/search-for-guidance.json`, and Akamai's edge returns
|
|
9
|
+
* 503 to non-browser fetches. Rather than scraping behind a headless
|
|
10
|
+
* browser, we maintain a hand-picked list of canonical guidances most
|
|
11
|
+
* relevant to the safety, translational, and clinical-evaluation work
|
|
12
|
+
* Cortex agents do.
|
|
13
|
+
*
|
|
14
|
+
* Each entry is keyed by the FDA media ID at `https://www.fda.gov/media/{id}/download`.
|
|
15
|
+
* Media IDs are stable: once issued they don't get renumbered when the
|
|
16
|
+
* underlying PDF is revised. To add an entry, open the guidance's
|
|
17
|
+
* `/regulatory-information/search-fda-guidance-documents/{slug}` page and
|
|
18
|
+
* grab the `Download` link's `/media/{id}/download` href.
|
|
19
|
+
*/
|
|
20
|
+
const FDA_GUIDANCES = [
|
|
21
|
+
{
|
|
22
|
+
center: "CDER",
|
|
23
|
+
doc_id: "fda-cder-bioanalytical-method-validation",
|
|
24
|
+
doc_title: "Bioanalytical Method Validation Guidance for Industry",
|
|
25
|
+
media_id: "70858",
|
|
26
|
+
year: "2018",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
center: "CDER",
|
|
30
|
+
doc_id: "fda-cder-safety-testing-of-drug-metabolites",
|
|
31
|
+
doc_title: "Safety Testing of Drug Metabolites",
|
|
32
|
+
media_id: "72279",
|
|
33
|
+
year: "2020",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
center: "CDER",
|
|
37
|
+
doc_id: "fda-cder-estimating-maximum-safe-starting-dose",
|
|
38
|
+
doc_title: "Estimating the Maximum Safe Starting Dose in Initial Clinical Trials for Therapeutics in Adult Healthy Volunteers",
|
|
39
|
+
media_id: "72309",
|
|
40
|
+
year: "2005",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
center: "CDER",
|
|
44
|
+
doc_id: "fda-cder-drug-induced-liver-injury",
|
|
45
|
+
doc_title: "Drug-Induced Liver Injury: Premarketing Clinical Evaluation",
|
|
46
|
+
media_id: "116737",
|
|
47
|
+
year: "2009",
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Return the curated FDA guidance stubs for `center`. The catalog is
|
|
52
|
+
* static; this function exists for parity with `fetchIchListing()` and as
|
|
53
|
+
* the seam where a future contributor can swap in dynamic discovery
|
|
54
|
+
* (e.g., headless-browser scraping or a vetted third-party index).
|
|
55
|
+
*/
|
|
56
|
+
export async function fetchFdaGuidanceListing(center) {
|
|
57
|
+
return FDA_GUIDANCES.filter((g) => g.center === center).map((g) => ({
|
|
58
|
+
doc_id: g.doc_id,
|
|
59
|
+
doc_title: g.doc_title,
|
|
60
|
+
doc_url: `https://www.fda.gov/media/${g.media_id}/download`,
|
|
61
|
+
center: g.center,
|
|
62
|
+
metadata: { year: g.year },
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Download a single FDA guidance document and extract its text. Handles
|
|
67
|
+
* both HTML and PDF formats (FDA serves a mix). Returns normalized
|
|
68
|
+
* whitespace-collapsed text suitable for chunking.
|
|
69
|
+
*/
|
|
70
|
+
export async function fetchAndExtractFdaDoc(stub) {
|
|
71
|
+
const res = await fetch(stub.doc_url);
|
|
72
|
+
if (!res.ok) {
|
|
73
|
+
throw new Error(`fetch ${stub.doc_url}: ${res.status} ${res.statusText}`);
|
|
74
|
+
}
|
|
75
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
76
|
+
const ct = (res.headers.get("content-type") ?? "").toLowerCase();
|
|
77
|
+
let text;
|
|
78
|
+
if (ct.includes("pdf") || stub.doc_url.toLowerCase().endsWith(".pdf")) {
|
|
79
|
+
const parser = new PDFParse({ data: buf });
|
|
80
|
+
const result = await parser.getText();
|
|
81
|
+
await parser.destroy();
|
|
82
|
+
text = result.text;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const $ = load(buf.toString("utf-8"));
|
|
86
|
+
// Prefer <main> when present; fall back to body.
|
|
87
|
+
text = ($("main").length > 0 ? $("main") : $("body")).text();
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
doc_id: stub.doc_id,
|
|
91
|
+
doc_title: stub.doc_title,
|
|
92
|
+
doc_url: stub.doc_url,
|
|
93
|
+
text: normalizeWhitespace(text),
|
|
94
|
+
metadata: {
|
|
95
|
+
center: stub.center,
|
|
96
|
+
year: stub.metadata?.year,
|
|
97
|
+
category: stub.metadata?.category,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function normalizeWhitespace(s) {
|
|
102
|
+
return s
|
|
103
|
+
.replace(/[ \t]+/g, " ")
|
|
104
|
+
.replace(/\r/g, "")
|
|
105
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
106
|
+
.trim();
|
|
107
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetcher for ICH (International Council for Harmonisation) guidelines.
|
|
3
|
+
* Returns a curated catalog of canonical guidelines and downloads each PDF.
|
|
4
|
+
*
|
|
5
|
+
* Series:
|
|
6
|
+
* S — Safety (nonclinical safety pharmacology, toxicology)
|
|
7
|
+
* E — Efficacy (clinical study design, statistical principles)
|
|
8
|
+
* M — Multidisciplinary
|
|
9
|
+
* Q — Quality (CMC)
|
|
10
|
+
*
|
|
11
|
+
* Codes look like S7A, E14, M3(R2), Q1A. The doc_id we emit is
|
|
12
|
+
* `ich-<code>` with non-word chars sanitized.
|
|
13
|
+
*/
|
|
14
|
+
export type IchSeries = "S" | "E" | "M" | "Q";
|
|
15
|
+
export interface IchStub {
|
|
16
|
+
doc_id: string;
|
|
17
|
+
doc_title: string;
|
|
18
|
+
doc_url: string;
|
|
19
|
+
code: string;
|
|
20
|
+
series: IchSeries;
|
|
21
|
+
metadata?: {
|
|
22
|
+
year?: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface IchDoc {
|
|
26
|
+
doc_id: string;
|
|
27
|
+
doc_title: string;
|
|
28
|
+
doc_url: string;
|
|
29
|
+
text: string;
|
|
30
|
+
metadata: {
|
|
31
|
+
code: string;
|
|
32
|
+
series: IchSeries;
|
|
33
|
+
year?: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Return the curated ICH guideline stubs. The catalog is static; this
|
|
38
|
+
* function exists for parity with `fetchFdaGuidanceListing()` and as the
|
|
39
|
+
* seam where a future contributor can swap in dynamic discovery.
|
|
40
|
+
*/
|
|
41
|
+
export declare function fetchIchListing(): Promise<IchStub[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Download a single ICH guideline PDF and extract its text. Returns
|
|
44
|
+
* normalized whitespace-collapsed text suitable for chunking.
|
|
45
|
+
*/
|
|
46
|
+
export declare function fetchAndExtractIchDoc(stub: IchStub): Promise<IchDoc>;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetcher for ICH (International Council for Harmonisation) guidelines.
|
|
3
|
+
* Returns a curated catalog of canonical guidelines and downloads each PDF.
|
|
4
|
+
*
|
|
5
|
+
* Series:
|
|
6
|
+
* S — Safety (nonclinical safety pharmacology, toxicology)
|
|
7
|
+
* E — Efficacy (clinical study design, statistical principles)
|
|
8
|
+
* M — Multidisciplinary
|
|
9
|
+
* Q — Quality (CMC)
|
|
10
|
+
*
|
|
11
|
+
* Codes look like S7A, E14, M3(R2), Q1A. The doc_id we emit is
|
|
12
|
+
* `ich-<code>` with non-word chars sanitized.
|
|
13
|
+
*/
|
|
14
|
+
import { PDFParse } from "pdf-parse";
|
|
15
|
+
/**
|
|
16
|
+
* Curated catalog of ICH guidelines to index into the corpus.
|
|
17
|
+
*
|
|
18
|
+
* The ICH guidelines listing at ich.org is an Angular SPA (the server
|
|
19
|
+
* returns 687 bytes of `<app-root>` shell), and the admin REST API
|
|
20
|
+
* (`admin.ich.org/api/v1/nodes`) does not expose paragraph entities, so
|
|
21
|
+
* the per-section guideline lists never reach a `fetch + cheerio` consumer.
|
|
22
|
+
* Rather than scraping behind a headless browser, we maintain a hand-picked
|
|
23
|
+
* list of canonical guidelines covering the safety, efficacy, and quality
|
|
24
|
+
* ground that Cortex agents most often need to cite.
|
|
25
|
+
*
|
|
26
|
+
* URLs target the stable PDFs at `database.ich.org/sites/default/files/...`.
|
|
27
|
+
* Filenames are inconsistent across guidelines (some include a Step-4
|
|
28
|
+
* date, some are bare); add new entries by visiting the corresponding
|
|
29
|
+
* `/page/<series>-guidelines` page in a browser, copying the PDF link,
|
|
30
|
+
* and verifying it returns `application/pdf`.
|
|
31
|
+
*/
|
|
32
|
+
const ICH_GUIDELINES = [
|
|
33
|
+
// Safety
|
|
34
|
+
{
|
|
35
|
+
code: "S7A",
|
|
36
|
+
series: "S",
|
|
37
|
+
doc_title: "Safety Pharmacology Studies for Human Pharmaceuticals",
|
|
38
|
+
url: "https://database.ich.org/sites/default/files/S7A_Guideline.pdf",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
code: "S7B",
|
|
42
|
+
series: "S",
|
|
43
|
+
doc_title: "Nonclinical Evaluation of the Potential for Delayed Ventricular Repolarization (QT Interval Prolongation) by Human Pharmaceuticals",
|
|
44
|
+
url: "https://database.ich.org/sites/default/files/S7B_Guideline.pdf",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
code: "S9",
|
|
48
|
+
series: "S",
|
|
49
|
+
doc_title: "Nonclinical Evaluation for Anticancer Pharmaceuticals",
|
|
50
|
+
url: "https://database.ich.org/sites/default/files/S9_Guideline.pdf",
|
|
51
|
+
},
|
|
52
|
+
// Multidisciplinary
|
|
53
|
+
{
|
|
54
|
+
code: "M3(R2)",
|
|
55
|
+
series: "M",
|
|
56
|
+
doc_title: "Nonclinical Safety Studies for the Conduct of Human Clinical Trials and Marketing Authorization for Pharmaceuticals",
|
|
57
|
+
url: "https://database.ich.org/sites/default/files/M3_R2__Guideline.pdf",
|
|
58
|
+
},
|
|
59
|
+
// Efficacy
|
|
60
|
+
{
|
|
61
|
+
code: "E14",
|
|
62
|
+
series: "E",
|
|
63
|
+
doc_title: "Clinical Evaluation of QT/QTc Interval Prolongation and Proarrhythmic Potential for Non-Antiarrhythmic Drugs",
|
|
64
|
+
url: "https://database.ich.org/sites/default/files/E14_Guideline.pdf",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
code: "E6(R3)",
|
|
68
|
+
series: "E",
|
|
69
|
+
doc_title: "Good Clinical Practice (GCP)",
|
|
70
|
+
url: "https://database.ich.org/sites/default/files/ICH_E6%28R3%29_Step4_FinalGuideline_2025_0106.pdf",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
code: "E8(R1)",
|
|
74
|
+
series: "E",
|
|
75
|
+
doc_title: "General Considerations for Clinical Studies",
|
|
76
|
+
url: "https://database.ich.org/sites/default/files/ICH_E8-R1_Guideline_Step4_2021_1006.pdf",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
code: "E9(R1)",
|
|
80
|
+
series: "E",
|
|
81
|
+
doc_title: "Statistical Principles for Clinical Trials (Addendum: Estimands and Sensitivity Analysis)",
|
|
82
|
+
url: "https://database.ich.org/sites/default/files/E9-R1_Step4_Guideline_2019_1203.pdf",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
code: "E11(R1)",
|
|
86
|
+
series: "E",
|
|
87
|
+
doc_title: "Clinical Investigation of Medicinal Products in the Pediatric Population (Addendum)",
|
|
88
|
+
url: "https://database.ich.org/sites/default/files/E11_R1_Addendum.pdf",
|
|
89
|
+
},
|
|
90
|
+
// Quality
|
|
91
|
+
{
|
|
92
|
+
code: "Q1A(R2)",
|
|
93
|
+
series: "Q",
|
|
94
|
+
doc_title: "Stability Testing of New Drug Substances and Products",
|
|
95
|
+
url: "https://database.ich.org/sites/default/files/Q1A%28R2%29%20Guideline.pdf",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
code: "Q3D(R2)",
|
|
99
|
+
series: "Q",
|
|
100
|
+
doc_title: "Guideline for Elemental Impurities",
|
|
101
|
+
url: "https://database.ich.org/sites/default/files/Q3D-R2_Guideline_Step4_2022_0308.pdf",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
code: "Q8(R2)",
|
|
105
|
+
series: "Q",
|
|
106
|
+
doc_title: "Pharmaceutical Development",
|
|
107
|
+
url: "https://database.ich.org/sites/default/files/Q8%28R2%29%20Guideline.pdf",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
code: "Q9",
|
|
111
|
+
series: "Q",
|
|
112
|
+
doc_title: "Quality Risk Management",
|
|
113
|
+
url: "https://database.ich.org/sites/default/files/Q9%20Guideline.pdf",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
code: "Q10",
|
|
117
|
+
series: "Q",
|
|
118
|
+
doc_title: "Pharmaceutical Quality System",
|
|
119
|
+
url: "https://database.ich.org/sites/default/files/Q10%20Guideline.pdf",
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
/**
|
|
123
|
+
* Return the curated ICH guideline stubs. The catalog is static; this
|
|
124
|
+
* function exists for parity with `fetchFdaGuidanceListing()` and as the
|
|
125
|
+
* seam where a future contributor can swap in dynamic discovery.
|
|
126
|
+
*/
|
|
127
|
+
export async function fetchIchListing() {
|
|
128
|
+
return ICH_GUIDELINES.map((g) => ({
|
|
129
|
+
doc_id: `ich-${slugify(g.code)}`,
|
|
130
|
+
doc_title: g.doc_title,
|
|
131
|
+
doc_url: g.url,
|
|
132
|
+
code: g.code,
|
|
133
|
+
series: g.series,
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Download a single ICH guideline PDF and extract its text. Returns
|
|
138
|
+
* normalized whitespace-collapsed text suitable for chunking.
|
|
139
|
+
*/
|
|
140
|
+
export async function fetchAndExtractIchDoc(stub) {
|
|
141
|
+
const res = await fetch(stub.doc_url);
|
|
142
|
+
if (!res.ok) {
|
|
143
|
+
throw new Error(`fetch ${stub.doc_url}: ${res.status} ${res.statusText}`);
|
|
144
|
+
}
|
|
145
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
146
|
+
const parser = new PDFParse({ data: buf });
|
|
147
|
+
const result = await parser.getText();
|
|
148
|
+
await parser.destroy();
|
|
149
|
+
return {
|
|
150
|
+
doc_id: stub.doc_id,
|
|
151
|
+
doc_title: stub.doc_title,
|
|
152
|
+
doc_url: stub.doc_url,
|
|
153
|
+
text: normalizeWhitespace(result.text),
|
|
154
|
+
metadata: {
|
|
155
|
+
code: stub.code,
|
|
156
|
+
series: stub.series,
|
|
157
|
+
year: stub.metadata?.year,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function normalizeWhitespace(s) {
|
|
162
|
+
return s
|
|
163
|
+
.replace(/[ \t]+/g, " ")
|
|
164
|
+
.replace(/\r/g, "")
|
|
165
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
166
|
+
.trim();
|
|
167
|
+
}
|
|
168
|
+
function slugify(s) {
|
|
169
|
+
return s
|
|
170
|
+
.toLowerCase()
|
|
171
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
172
|
+
.replace(/^-|-$/g, "");
|
|
173
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the FDA/ICH regulatory corpus stored in cortex_regulatory_chunks.
|
|
3
|
+
*
|
|
4
|
+
* Three responsibilities:
|
|
5
|
+
* 1. chunkText — split a normalized document into (~1000-token, 200-token-overlap)
|
|
6
|
+
* chunks, preserving section headings where the doc uses `## Heading` markers.
|
|
7
|
+
* 2. upsertChunks — replace-by-(source, doc_id) write of a document's chunks +
|
|
8
|
+
* embeddings + metadata.
|
|
9
|
+
* 3. searchByEmbedding — top-K cosine similarity over the corpus, with optional
|
|
10
|
+
* source / indication / modality filters.
|
|
11
|
+
*
|
|
12
|
+
* Embedding dim is 1536 (openai/text-embedding-3-small). The schema's vector
|
|
13
|
+
* column is fixed at vector(1536) — passing other-dim arrays will fail at
|
|
14
|
+
* insert time.
|
|
15
|
+
*/
|
|
16
|
+
import { ResultAsync } from "neverthrow";
|
|
17
|
+
import type { Pool } from "pg";
|
|
18
|
+
import { type DbError } from "./db-result.js";
|
|
19
|
+
export interface ChunkOptions {
|
|
20
|
+
maxTokens?: number;
|
|
21
|
+
overlapTokens?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface RawChunk {
|
|
24
|
+
section: string | null;
|
|
25
|
+
index: number;
|
|
26
|
+
text: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Split `text` into overlapping chunks bounded by `maxTokens` (word-count
|
|
30
|
+
* approximation), respecting `## Heading` section boundaries where present.
|
|
31
|
+
*
|
|
32
|
+
* When the document has `## Heading` markers the text is split at those
|
|
33
|
+
* boundaries first; each resulting section is then sliced into fixed-size
|
|
34
|
+
* windows with the requested overlap. Sections with no body content are
|
|
35
|
+
* silently skipped.
|
|
36
|
+
*
|
|
37
|
+
* When no `## Heading` markers are present the entire text is treated as a
|
|
38
|
+
* single anonymous section (section: null).
|
|
39
|
+
*
|
|
40
|
+
* The returned chunks have globally monotone `index` values so consumers
|
|
41
|
+
* can reassemble the document order without inspecting section names.
|
|
42
|
+
*/
|
|
43
|
+
export declare function chunkText(text: string, opts?: ChunkOptions): RawChunk[];
|
|
44
|
+
export interface ChunkRow {
|
|
45
|
+
source: "FDA-CDER" | "FDA-CBER" | "ICH";
|
|
46
|
+
doc_id: string;
|
|
47
|
+
doc_title: string;
|
|
48
|
+
doc_url: string;
|
|
49
|
+
chunks: Array<RawChunk & {
|
|
50
|
+
embedding: number[];
|
|
51
|
+
}>;
|
|
52
|
+
metadata: Record<string, unknown>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Replace-by-(source, doc_id): delete all existing chunks for the document
|
|
56
|
+
* then insert the new set in a single transaction.
|
|
57
|
+
*
|
|
58
|
+
* Embedding dimension is validated before the transaction opens — a mismatch
|
|
59
|
+
* is a programmer/data error, thrown verbatim (no DB touched, nothing to roll
|
|
60
|
+
* back), not a `DbError`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function upsertChunks(pool: Pool, row: ChunkRow): ResultAsync<void, DbError>;
|
|
63
|
+
export interface SearchFilters {
|
|
64
|
+
source?: "FDA-CDER" | "FDA-CBER" | "ICH";
|
|
65
|
+
topK?: number;
|
|
66
|
+
}
|
|
67
|
+
export interface SearchHit {
|
|
68
|
+
source: string;
|
|
69
|
+
doc_id: string;
|
|
70
|
+
doc_title: string;
|
|
71
|
+
doc_url: string;
|
|
72
|
+
section: string | null;
|
|
73
|
+
excerpt: string;
|
|
74
|
+
score: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Top-K cosine similarity search over cortex_regulatory_chunks.
|
|
78
|
+
*
|
|
79
|
+
* Uses pgvector's `<=>` (cosine distance) operator. Score is `1 - distance`
|
|
80
|
+
* so higher scores = more similar. The `source` filter narrows results to
|
|
81
|
+
* a single corpus subset (FDA-CDER, FDA-CBER, or ICH).
|
|
82
|
+
*
|
|
83
|
+
* Embedding dimension is validated before the query. Indication/modality
|
|
84
|
+
* filters are intentionally absent — the ingestion pipeline does not yet
|
|
85
|
+
* tag those keys on chunk metadata, and a filter that always returns zero
|
|
86
|
+
* rows would silently defeat consumer expectations.
|
|
87
|
+
*/
|
|
88
|
+
export declare function searchByEmbedding(pool: Pool, embedding: number[], filters?: SearchFilters): ResultAsync<SearchHit[], DbError>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the FDA/ICH regulatory corpus stored in cortex_regulatory_chunks.
|
|
3
|
+
*
|
|
4
|
+
* Three responsibilities:
|
|
5
|
+
* 1. chunkText — split a normalized document into (~1000-token, 200-token-overlap)
|
|
6
|
+
* chunks, preserving section headings where the doc uses `## Heading` markers.
|
|
7
|
+
* 2. upsertChunks — replace-by-(source, doc_id) write of a document's chunks +
|
|
8
|
+
* embeddings + metadata.
|
|
9
|
+
* 3. searchByEmbedding — top-K cosine similarity over the corpus, with optional
|
|
10
|
+
* source / indication / modality filters.
|
|
11
|
+
*
|
|
12
|
+
* Embedding dim is 1536 (openai/text-embedding-3-small). The schema's vector
|
|
13
|
+
* column is fixed at vector(1536) — passing other-dim arrays will fail at
|
|
14
|
+
* insert time.
|
|
15
|
+
*/
|
|
16
|
+
import { tryMutation, tryQuery, withTransaction } from "./db-result.js";
|
|
17
|
+
/**
|
|
18
|
+
* Split `text` into overlapping chunks bounded by `maxTokens` (word-count
|
|
19
|
+
* approximation), respecting `## Heading` section boundaries where present.
|
|
20
|
+
*
|
|
21
|
+
* When the document has `## Heading` markers the text is split at those
|
|
22
|
+
* boundaries first; each resulting section is then sliced into fixed-size
|
|
23
|
+
* windows with the requested overlap. Sections with no body content are
|
|
24
|
+
* silently skipped.
|
|
25
|
+
*
|
|
26
|
+
* When no `## Heading` markers are present the entire text is treated as a
|
|
27
|
+
* single anonymous section (section: null).
|
|
28
|
+
*
|
|
29
|
+
* The returned chunks have globally monotone `index` values so consumers
|
|
30
|
+
* can reassemble the document order without inspecting section names.
|
|
31
|
+
*/
|
|
32
|
+
export function chunkText(text, opts = {}) {
|
|
33
|
+
const maxTokens = opts.maxTokens ?? 1000;
|
|
34
|
+
const overlapTokens = opts.overlapTokens ?? 200;
|
|
35
|
+
// Normalise so every `## Heading` is preceded by `\n`, then split.
|
|
36
|
+
// This ensures a heading at position 0 (no preceding newline) is caught
|
|
37
|
+
// the same way as headings mid-document.
|
|
38
|
+
const normalised = text.startsWith("##") ? `\n${text}` : text;
|
|
39
|
+
const parts = normalised.split(/\n##\s+/);
|
|
40
|
+
// parts[0] is always the lead-in text before the first heading (may be
|
|
41
|
+
// empty when the document opens with a heading).
|
|
42
|
+
const sections = parts.length > 1
|
|
43
|
+
? parts.map((p, i) => {
|
|
44
|
+
if (i === 0)
|
|
45
|
+
return { heading: null, body: p };
|
|
46
|
+
const nl = p.indexOf("\n");
|
|
47
|
+
if (nl === -1)
|
|
48
|
+
return { heading: p.trim(), body: "" };
|
|
49
|
+
return { heading: p.slice(0, nl).trim(), body: p.slice(nl + 1) };
|
|
50
|
+
})
|
|
51
|
+
: [{ heading: null, body: text }];
|
|
52
|
+
const out = [];
|
|
53
|
+
let globalIdx = 0;
|
|
54
|
+
for (const sec of sections) {
|
|
55
|
+
const tokens = sec.body.split(/\s+/).filter(Boolean);
|
|
56
|
+
if (tokens.length === 0)
|
|
57
|
+
continue;
|
|
58
|
+
// Slide a window of maxTokens tokens with advance = maxTokens - overlapTokens.
|
|
59
|
+
// The last window may be shorter than maxTokens (trailing partial slice).
|
|
60
|
+
const advance = Math.max(1, maxTokens - overlapTokens);
|
|
61
|
+
let i = 0;
|
|
62
|
+
while (i < tokens.length) {
|
|
63
|
+
const slice = tokens.slice(i, i + maxTokens).join(" ");
|
|
64
|
+
out.push({ section: sec.heading, index: globalIdx++, text: slice });
|
|
65
|
+
// If this window didn't fill maxTokens it was the final slice.
|
|
66
|
+
if (i + maxTokens >= tokens.length)
|
|
67
|
+
break;
|
|
68
|
+
i += advance;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Replace-by-(source, doc_id): delete all existing chunks for the document
|
|
75
|
+
* then insert the new set in a single transaction.
|
|
76
|
+
*
|
|
77
|
+
* Embedding dimension is validated before the transaction opens — a mismatch
|
|
78
|
+
* is a programmer/data error, thrown verbatim (no DB touched, nothing to roll
|
|
79
|
+
* back), not a `DbError`.
|
|
80
|
+
*/
|
|
81
|
+
export function upsertChunks(pool, row) {
|
|
82
|
+
for (const ch of row.chunks) {
|
|
83
|
+
if (ch.embedding.length !== 1536) {
|
|
84
|
+
throw new Error(`chunk embedding dim ${ch.embedding.length} != 1536 ` + `(source=${row.source} doc_id=${row.doc_id} index=${ch.index})`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return withTransaction(pool, "regulatoryCorpus.upsertChunks", (client) => tryMutation("regulatoryCorpus.upsertChunks", async () => {
|
|
88
|
+
await client.query("DELETE FROM cortex_regulatory_chunks WHERE source = $1 AND doc_id = $2", [row.source, row.doc_id]);
|
|
89
|
+
for (const ch of row.chunks) {
|
|
90
|
+
await client.query(`INSERT INTO cortex_regulatory_chunks
|
|
91
|
+
(source, doc_id, doc_title, doc_url, section, chunk_index, chunk_text, embedding, metadata)
|
|
92
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8::vector, $9)`, [row.source, row.doc_id, row.doc_title, row.doc_url, ch.section, ch.index, ch.text, `[${ch.embedding.join(",")}]`, row.metadata]);
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Top-K cosine similarity search over cortex_regulatory_chunks.
|
|
98
|
+
*
|
|
99
|
+
* Uses pgvector's `<=>` (cosine distance) operator. Score is `1 - distance`
|
|
100
|
+
* so higher scores = more similar. The `source` filter narrows results to
|
|
101
|
+
* a single corpus subset (FDA-CDER, FDA-CBER, or ICH).
|
|
102
|
+
*
|
|
103
|
+
* Embedding dimension is validated before the query. Indication/modality
|
|
104
|
+
* filters are intentionally absent — the ingestion pipeline does not yet
|
|
105
|
+
* tag those keys on chunk metadata, and a filter that always returns zero
|
|
106
|
+
* rows would silently defeat consumer expectations.
|
|
107
|
+
*/
|
|
108
|
+
export function searchByEmbedding(pool, embedding, filters = {}) {
|
|
109
|
+
if (embedding.length !== 1536) {
|
|
110
|
+
throw new Error(`query embedding dim ${embedding.length} != 1536`);
|
|
111
|
+
}
|
|
112
|
+
const topK = filters.topK ?? 8;
|
|
113
|
+
const wheres = [];
|
|
114
|
+
const params = [`[${embedding.join(",")}]`];
|
|
115
|
+
if (filters.source) {
|
|
116
|
+
params.push(filters.source);
|
|
117
|
+
wheres.push(`source = $${params.length}`);
|
|
118
|
+
}
|
|
119
|
+
const whereClause = wheres.length ? `WHERE ${wheres.join(" AND ")}` : "";
|
|
120
|
+
params.push(topK);
|
|
121
|
+
const sql = `
|
|
122
|
+
SELECT source, doc_id, doc_title, doc_url, section, chunk_text,
|
|
123
|
+
1 - (embedding <=> $1::vector) AS score
|
|
124
|
+
FROM cortex_regulatory_chunks
|
|
125
|
+
${whereClause}
|
|
126
|
+
ORDER BY embedding <=> $1::vector
|
|
127
|
+
LIMIT $${params.length}
|
|
128
|
+
`;
|
|
129
|
+
return tryQuery("regulatoryCorpus.searchByEmbedding", async () => {
|
|
130
|
+
const res = await pool.query(sql, params);
|
|
131
|
+
return res.rows.map((r) => ({
|
|
132
|
+
source: r.source,
|
|
133
|
+
doc_id: r.doc_id,
|
|
134
|
+
doc_title: r.doc_title,
|
|
135
|
+
doc_url: r.doc_url,
|
|
136
|
+
section: r.section,
|
|
137
|
+
excerpt: r.chunk_text,
|
|
138
|
+
score: Number(r.score),
|
|
139
|
+
}));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* neverthrow conventions for cortex.
|
|
3
|
+
*
|
|
4
|
+
* The agent loop and execution boundary model failure as values, not throws.
|
|
5
|
+
* The house rules:
|
|
6
|
+
*
|
|
7
|
+
* 1. `try/catch` lives ONLY inside the thin wrappers at calls to code
|
|
8
|
+
* external to ours — a third-party SDK, the `pg` driver, `fs`, the DBOS
|
|
9
|
+
* runtime. Those wrappers turn a throw into an `err(DomainError)`.
|
|
10
|
+
* Everything above them flows `Result` / `ResultAsync`.
|
|
11
|
+
* 2. Absence is NOT an error. A "not found" stays in the ok channel as a
|
|
12
|
+
* data variant (`ok({ found: false })`), never an `err`. `err` is
|
|
13
|
+
* reserved for what used to be `throw`n — an unexpected upstream failure.
|
|
14
|
+
* 3. A `Result` is unwrapped at exactly three edges, each speaking its own
|
|
15
|
+
* dialect of failure:
|
|
16
|
+
* - HTTP routes `.match(...)` a `Result` into a response.
|
|
17
|
+
* - The DBOS step boundary throws on `err` (`unwrapOrThrow` /
|
|
18
|
+
* `resultStep` in `loop/run-step.ts`): durability records a step as
|
|
19
|
+
* failed — and retries / fails fast — ONLY on a thrown exception, so
|
|
20
|
+
* an `err` crossing `DBOS.runStep` MUST become a throw.
|
|
21
|
+
* - Tool dispatch maps `err` into an `is_error` `tool_result`
|
|
22
|
+
* (`loop/run-agent.ts`).
|
|
23
|
+
*
|
|
24
|
+
* Control-flow exceptions (DBOS cancellation, `AbortError`) are NOT failures
|
|
25
|
+
* and live OUTSIDE the `Result` error channel — they are thrown verbatim and
|
|
26
|
+
* must never be captured as an `err`.
|
|
27
|
+
*
|
|
28
|
+
* Sites import `ok`/`err`/`Result`/`ResultAsync`/`fromPromise`/`fromThrowable`
|
|
29
|
+
* directly from `neverthrow`; this module owns only the cortex-specific glue.
|
|
30
|
+
*/
|
|
31
|
+
import { type Result } from "neverthrow";
|
|
32
|
+
/**
|
|
33
|
+
* The shape every per-subsystem error union shares: a string `type`
|
|
34
|
+
* discriminant plus an optional underlying `cause`. Concrete modules narrow
|
|
35
|
+
* `type` to their own literals and add typed fields (e.g. `DbError`,
|
|
36
|
+
* `SandboxError`), and ship a `describe*Error` formatter that turns one into
|
|
37
|
+
* a user-facing line. A step body's error channel is some `DomainError`.
|
|
38
|
+
*/
|
|
39
|
+
export interface DomainError {
|
|
40
|
+
readonly type: string;
|
|
41
|
+
readonly cause?: unknown;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* A thrown wrapper for a structured error value that is not already an
|
|
45
|
+
* `Error`. The original value rides on `.cause`, so the cause-walking
|
|
46
|
+
* classifiers (`classifyProviderError`, `isBudgetExceeded`) still reach the
|
|
47
|
+
* `status` / `code` signals they look for after a `Result` is rethrown at a
|
|
48
|
+
* boundary.
|
|
49
|
+
*/
|
|
50
|
+
export declare class ResultError extends Error {
|
|
51
|
+
readonly value: unknown;
|
|
52
|
+
constructor(value: unknown);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Bridge a `Result` error value into a thrown `Error` at a boundary that
|
|
56
|
+
* speaks exceptions. An error that is already an `Error` is thrown verbatim
|
|
57
|
+
* (its class, `.cause`, and any `status` survive); anything else is wrapped
|
|
58
|
+
* in `ResultError` with the structured value on `.cause`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function toThrowable(value: unknown): Error;
|
|
61
|
+
/**
|
|
62
|
+
* Unwrap a `Result`, throwing on `err`. The canonical Result→throw bridge for
|
|
63
|
+
* the DBOS step edge and any other boundary whose failure protocol is an
|
|
64
|
+
* exception (a driver's throw-to-rollback). The throw is isolated here so the
|
|
65
|
+
* rest of the code stays Result-shaped.
|
|
66
|
+
*
|
|
67
|
+
* Use it ONLY where a throw is the boundary's failure contract:
|
|
68
|
+
*
|
|
69
|
+
* - **DBOS workflow/step bodies** (directly, or composed via `resultStep` in
|
|
70
|
+
* `loop/run-step.ts`). DBOS records a step as failed — and retries / fails
|
|
71
|
+
* fast — only on a thrown exception; a *returned* `err` would be durably
|
|
72
|
+
* cached as a successful step output and replayed as success forever.
|
|
73
|
+
* - **Tool `execute` bodies**, where the loop's dispatch catch maps the
|
|
74
|
+
* throw into a model-visible error tool result (`loop/run-agent.ts`).
|
|
75
|
+
* - **Driver edges whose protocol is a throw** (e.g. throw-to-rollback).
|
|
76
|
+
*
|
|
77
|
+
* Anywhere else, keep the `Result` flowing: return it, chain
|
|
78
|
+
* `.andThen`/`.map`/`.mapErr`, or `.match` both branches. Never reach for
|
|
79
|
+
* this to dodge error handling in composable domain logic.
|
|
80
|
+
*
|
|
81
|
+
* The `must-use-result` lint rule recognizes `unwrapOrThrow(...)` as
|
|
82
|
+
* consuming its Result (see the plugin patch in `eslint.config.js`) — do not
|
|
83
|
+
* rewrite call sites into inline `.match`+throw forms to appease lint.
|
|
84
|
+
*/
|
|
85
|
+
export declare function unwrapOrThrow<T, E>(result: Result<T, E>): T;
|
|
86
|
+
/** Runtime brand check — is this value a neverthrow `Result`? */
|
|
87
|
+
export declare function isResult(value: unknown): value is Result<unknown, unknown>;
|