@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,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active-sandbox registry (CONTEXT.md) — the projection over
|
|
3
|
+
* `cortex_step_executions` rows with a non-null `sandbox_ref` and a running
|
|
4
|
+
* status. Owns the `sandbox_ref` + `exec_id` columns: written by
|
|
5
|
+
* `sandbox/create-sandbox.ts` on mint, cleared on teardown, enumerated by
|
|
6
|
+
* `sandbox/watchdog.ts` for liveness sweeps.
|
|
7
|
+
*/
|
|
8
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
9
|
+
/**
|
|
10
|
+
* Record the live sandbox handle on a step row. Called inside the
|
|
11
|
+
* `createSandbox` DBOS step after the backend has confirmed the sandbox
|
|
12
|
+
* is up. The `callbackSecret` is deliberately not part of the persisted
|
|
13
|
+
* shape (see the harness-sandbox-exec spec) — it lives only in the cached step output.
|
|
14
|
+
*/
|
|
15
|
+
export function setSandboxRef(pool, runId, stepId, sandboxRef, execId) {
|
|
16
|
+
return tryMutation("activeSandboxes.setSandboxRef", async () => {
|
|
17
|
+
await pool.query({
|
|
18
|
+
text: `UPDATE cortex_step_executions
|
|
19
|
+
SET sandbox_ref = $1::jsonb, exec_id = $2
|
|
20
|
+
WHERE run_id = $3 AND step_id = $4`,
|
|
21
|
+
values: [JSON.stringify(sandboxRef), execId, runId, stepId],
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Tag the active-sandbox row with the exec currently in flight. Called from
|
|
27
|
+
* `run-exec.ts` right before `awaitExec` so the liveness watchdog can target
|
|
28
|
+
* the hung exec when the sandbox dies mid-command. Targets the same
|
|
29
|
+
* `(run_id, step_id)` row `setSandboxRef` writes and `queryActiveSandboxes`
|
|
30
|
+
* enumerates. Overwritten by the next exec; cleared on teardown.
|
|
31
|
+
*/
|
|
32
|
+
export function setActiveExecId(pool, runId, stepId, execId) {
|
|
33
|
+
return tryMutation("activeSandboxes.setActiveExecId", async () => {
|
|
34
|
+
await pool.query({
|
|
35
|
+
text: `UPDATE cortex_step_executions
|
|
36
|
+
SET exec_id = $1
|
|
37
|
+
WHERE run_id = $2 AND step_id = $3`,
|
|
38
|
+
values: [execId, runId, stepId],
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear the sandbox handle. Called inside the `teardown` DBOS step. Safe
|
|
44
|
+
* to call when no sandbox was ever recorded — the UPDATE simply targets
|
|
45
|
+
* zero rows.
|
|
46
|
+
*/
|
|
47
|
+
export function clearSandboxRef(pool, runId, stepId) {
|
|
48
|
+
return tryMutation("activeSandboxes.clearSandboxRef", async () => {
|
|
49
|
+
await pool.query({
|
|
50
|
+
text: `UPDATE cortex_step_executions
|
|
51
|
+
SET sandbox_ref = NULL, exec_id = NULL
|
|
52
|
+
WHERE run_id = $1 AND step_id = $2`,
|
|
53
|
+
values: [runId, stepId],
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Reconcile a step row after the reaper deletes its sandbox machine (ADR
|
|
59
|
+
* 0016). Always clears `sandbox_ref`/`exec_id` (drops the row from the
|
|
60
|
+
* active-sandbox registry, ending the watchdog churn); a row still stuck at
|
|
61
|
+
* `status='running'` — a cancellation that never ran its `mark-*` step — is
|
|
62
|
+
* also flipped to the owning workflow's terminal status so a terminal workflow
|
|
63
|
+
* never leaves a perpetually-"running" step behind. Returns true if a row
|
|
64
|
+
* matched. Safe when no row exists (Class A pure orphan): matches zero rows.
|
|
65
|
+
*/
|
|
66
|
+
export function reconcileReapedSandbox(pool, sandboxId, terminalStatus) {
|
|
67
|
+
// `completed_at` is a TEXT column holding ISO-8601 strings (see
|
|
68
|
+
// `step-executions.ts`), so bind one — `now()` is `timestamptz` and the CASE
|
|
69
|
+
// cannot unify a timestamptz branch with the text column ("CASE types text
|
|
70
|
+
// and timestamp with time zone cannot be matched"), which aborted every sweep.
|
|
71
|
+
const completedAt = new Date().toISOString();
|
|
72
|
+
return tryMutation("activeSandboxes.reconcileReapedSandbox", async () => {
|
|
73
|
+
const result = await pool.query({
|
|
74
|
+
text: `UPDATE cortex_step_executions
|
|
75
|
+
SET sandbox_ref = NULL,
|
|
76
|
+
exec_id = NULL,
|
|
77
|
+
status = CASE WHEN status = 'running' THEN $2 ELSE status END,
|
|
78
|
+
completed_at = CASE WHEN status = 'running' THEN $3 ELSE completed_at END
|
|
79
|
+
WHERE sandbox_ref->>'sandboxId' = $1`,
|
|
80
|
+
values: [sandboxId, terminalStatus, completedAt],
|
|
81
|
+
});
|
|
82
|
+
return (result.rowCount ?? 0) > 0;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function queryActiveSandboxes(pool) {
|
|
86
|
+
return tryQuery("activeSandboxes.queryActiveSandboxes", async () => {
|
|
87
|
+
const result = await pool.query({
|
|
88
|
+
text: `SELECT run_id, step_id, analysis_id, sandbox_ref, exec_id
|
|
89
|
+
FROM cortex_step_executions
|
|
90
|
+
WHERE status = 'running' AND sandbox_ref IS NOT NULL`,
|
|
91
|
+
});
|
|
92
|
+
return result.rows.map((r) => ({
|
|
93
|
+
runId: r.run_id,
|
|
94
|
+
stepId: r.step_id,
|
|
95
|
+
analysisId: r.analysis_id,
|
|
96
|
+
sandboxRef: r.sandbox_ref,
|
|
97
|
+
execId: r.exec_id ?? null,
|
|
98
|
+
}));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-entity aggregate reads used by `routes/analyses-metrics.ts` to build
|
|
3
|
+
* the per-analysis metrics view. Each query touches one table; the view is
|
|
4
|
+
* the batch shape callers want.
|
|
5
|
+
*/
|
|
6
|
+
import { type ResultAsync } from "neverthrow";
|
|
7
|
+
import { type DbError } from "../lib/db-result.js";
|
|
8
|
+
import type { Querier } from "./db.js";
|
|
9
|
+
export declare function queryRunCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
|
|
10
|
+
analysisId: string;
|
|
11
|
+
status: string;
|
|
12
|
+
count: number;
|
|
13
|
+
}>, DbError>;
|
|
14
|
+
export declare function queryThreadCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
|
|
15
|
+
analysisId: string;
|
|
16
|
+
count: number;
|
|
17
|
+
}>, DbError>;
|
|
18
|
+
export declare function queryDataProfileStatusByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
|
|
19
|
+
analysisId: string;
|
|
20
|
+
status: string | null;
|
|
21
|
+
}>, DbError>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-entity aggregate reads used by `routes/analyses-metrics.ts` to build
|
|
3
|
+
* the per-analysis metrics view. Each query touches one table; the view is
|
|
4
|
+
* the batch shape callers want.
|
|
5
|
+
*/
|
|
6
|
+
import { okAsync } from "neverthrow";
|
|
7
|
+
import { tryQuery } from "../lib/db-result.js";
|
|
8
|
+
export function queryRunCountsByAnalyses(pool, analysisIds) {
|
|
9
|
+
if (analysisIds.length === 0)
|
|
10
|
+
return okAsync([]);
|
|
11
|
+
return tryQuery("analysesMetrics.queryRunCountsByAnalyses", async () => {
|
|
12
|
+
const result = await pool.query({
|
|
13
|
+
text: `SELECT analysis_id, status, COUNT(*)::int AS count
|
|
14
|
+
FROM cortex_runs
|
|
15
|
+
WHERE analysis_id = ANY($1::text[])
|
|
16
|
+
GROUP BY analysis_id, status`,
|
|
17
|
+
values: [analysisIds],
|
|
18
|
+
});
|
|
19
|
+
return result.rows.map((r) => ({
|
|
20
|
+
analysisId: r.analysis_id,
|
|
21
|
+
status: r.status,
|
|
22
|
+
count: r.count,
|
|
23
|
+
}));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function queryThreadCountsByAnalyses(pool, analysisIds) {
|
|
27
|
+
if (analysisIds.length === 0)
|
|
28
|
+
return okAsync([]);
|
|
29
|
+
return tryQuery("analysesMetrics.queryThreadCountsByAnalyses", async () => {
|
|
30
|
+
const result = await pool.query({
|
|
31
|
+
text: `SELECT analysis_id, COUNT(*)::int AS count
|
|
32
|
+
FROM cortex_analysis_threads
|
|
33
|
+
WHERE analysis_id = ANY($1::text[])
|
|
34
|
+
AND deleted_at IS NULL
|
|
35
|
+
GROUP BY analysis_id`,
|
|
36
|
+
values: [analysisIds],
|
|
37
|
+
});
|
|
38
|
+
return result.rows.map((r) => ({
|
|
39
|
+
analysisId: r.analysis_id,
|
|
40
|
+
count: r.count,
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function queryDataProfileStatusByAnalyses(pool, analysisIds) {
|
|
45
|
+
if (analysisIds.length === 0)
|
|
46
|
+
return okAsync([]);
|
|
47
|
+
return tryQuery("analysesMetrics.queryDataProfileStatusByAnalyses", async () => {
|
|
48
|
+
const result = await pool.query({
|
|
49
|
+
text: `SELECT analysis_id, data_profile_status
|
|
50
|
+
FROM cortex_analysis_state
|
|
51
|
+
WHERE analysis_id = ANY($1::text[])`,
|
|
52
|
+
values: [analysisIds],
|
|
53
|
+
});
|
|
54
|
+
return result.rows.map((r) => ({
|
|
55
|
+
analysisId: r.analysis_id,
|
|
56
|
+
status: r.data_profile_status ?? null,
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cortex_analysis_state` operations — analysis lifecycle and billing context.
|
|
3
|
+
*/
|
|
4
|
+
import type { ResultAsync } from "neverthrow";
|
|
5
|
+
import { type DbError } from "../lib/db-result.js";
|
|
6
|
+
import type { Querier } from "./db.js";
|
|
7
|
+
/**
|
|
8
|
+
* Upsert a cortex_analysis_state row.
|
|
9
|
+
*
|
|
10
|
+
* The seed endpoint is called repeatedly; this function handles both the
|
|
11
|
+
* initial INSERT and subsequent UPDATEs by writing ALL mutable fields on
|
|
12
|
+
* every call. Re-upserts replace `context` and `billing_context` wholesale.
|
|
13
|
+
*
|
|
14
|
+
* User identity is derived from the ambient credential's JWT `sub` claim
|
|
15
|
+
* at request time — not persisted in this table.
|
|
16
|
+
*
|
|
17
|
+
* INTENTIONAL: split-attribution across a single run.
|
|
18
|
+
* If the seed re-upserts mid-workflow (e.g., the billing context's VK rotates),
|
|
19
|
+
* in-flight steps that have already issued LLM calls keep the old attribution
|
|
20
|
+
* on those calls, while subsequent steps in the same run pick up the new
|
|
21
|
+
* identity on their next `billedAgent` resolution. This is by design —
|
|
22
|
+
* usage rows contain full per-call attribution, so spend is
|
|
23
|
+
* always assignable even when it crosses a rotation boundary.
|
|
24
|
+
*/
|
|
25
|
+
export declare function upsertAnalysis(pool: Querier, resourceId: string, context: string | null, billingContext: Record<string, string> | null, inputFileIds?: string[]): ResultAsync<void, DbError>;
|
|
26
|
+
export declare function loadAnalysisStatus(pool: Querier, resourceId: string): ResultAsync<{
|
|
27
|
+
status: string;
|
|
28
|
+
context: string | null;
|
|
29
|
+
} | null, DbError>;
|
|
30
|
+
/**
|
|
31
|
+
* Suspend an analysis due to a 402 `budget_exceeded` error.
|
|
32
|
+
* Idempotent — no-op if already suspended.
|
|
33
|
+
*
|
|
34
|
+
* The only cause of suspension today is budget exhaustion; no reason is
|
|
35
|
+
* persisted. If a second cause arises, add a column rather than a param so
|
|
36
|
+
* history is queryable.
|
|
37
|
+
*/
|
|
38
|
+
export declare function suspendAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
|
|
39
|
+
/**
|
|
40
|
+
* Resume a suspended analysis after the user tops up.
|
|
41
|
+
* Only transitions from `suspended_insufficient_funds` → `active`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resumeAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
|
|
44
|
+
/**
|
|
45
|
+
* Resolve the persisted billing context for an analysis.
|
|
46
|
+
*
|
|
47
|
+
* Single DB-read chokepoint used by `requireAnalysisBilling` middleware and
|
|
48
|
+
* by any downstream code that needs to re-read billing identity. The driver
|
|
49
|
+
* read is wrapped as a `DbError`; the missing-row / null-billing /
|
|
50
|
+
* unparseable-JSON cases are control-flow throws (a misconfiguration, not a
|
|
51
|
+
* driver failure) that short-circuit the chain and surface verbatim.
|
|
52
|
+
*
|
|
53
|
+
* User identity (`HEADERS.User`) is derived from the ambient credential's
|
|
54
|
+
* JWT `sub` claim by `credential-middleware`, not from the DB.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveAnalysisBilling(pool: Querier, analysisId: string): ResultAsync<{
|
|
57
|
+
billingContext: Record<string, string>;
|
|
58
|
+
}, DbError>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cortex_analysis_state` operations — analysis lifecycle and billing context.
|
|
3
|
+
*/
|
|
4
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
5
|
+
/**
|
|
6
|
+
* Upsert a cortex_analysis_state row.
|
|
7
|
+
*
|
|
8
|
+
* The seed endpoint is called repeatedly; this function handles both the
|
|
9
|
+
* initial INSERT and subsequent UPDATEs by writing ALL mutable fields on
|
|
10
|
+
* every call. Re-upserts replace `context` and `billing_context` wholesale.
|
|
11
|
+
*
|
|
12
|
+
* User identity is derived from the ambient credential's JWT `sub` claim
|
|
13
|
+
* at request time — not persisted in this table.
|
|
14
|
+
*
|
|
15
|
+
* INTENTIONAL: split-attribution across a single run.
|
|
16
|
+
* If the seed re-upserts mid-workflow (e.g., the billing context's VK rotates),
|
|
17
|
+
* in-flight steps that have already issued LLM calls keep the old attribution
|
|
18
|
+
* on those calls, while subsequent steps in the same run pick up the new
|
|
19
|
+
* identity on their next `billedAgent` resolution. This is by design —
|
|
20
|
+
* usage rows contain full per-call attribution, so spend is
|
|
21
|
+
* always assignable even when it crosses a rotation boundary.
|
|
22
|
+
*/
|
|
23
|
+
export function upsertAnalysis(pool, resourceId, context, billingContext, inputFileIds) {
|
|
24
|
+
const now = new Date().toISOString();
|
|
25
|
+
return tryMutation("analyses.upsertAnalysis", async () => {
|
|
26
|
+
await pool.query({
|
|
27
|
+
text: `INSERT INTO cortex_analysis_state
|
|
28
|
+
(analysis_id, status, context, billing_context, data_profile_status,
|
|
29
|
+
seed_input_file_ids, created_at, updated_at)
|
|
30
|
+
VALUES ($1, 'active', $2, $3::jsonb, 'pending', $4::jsonb, $5, $6)
|
|
31
|
+
ON CONFLICT (analysis_id) DO UPDATE SET
|
|
32
|
+
context = EXCLUDED.context,
|
|
33
|
+
billing_context = EXCLUDED.billing_context,
|
|
34
|
+
seed_input_file_ids = COALESCE(EXCLUDED.seed_input_file_ids, cortex_analysis_state.seed_input_file_ids),
|
|
35
|
+
updated_at = EXCLUDED.updated_at`,
|
|
36
|
+
values: [
|
|
37
|
+
resourceId,
|
|
38
|
+
context ?? null,
|
|
39
|
+
billingContext === null ? null : JSON.stringify(billingContext),
|
|
40
|
+
inputFileIds ? JSON.stringify(inputFileIds) : null,
|
|
41
|
+
now,
|
|
42
|
+
now,
|
|
43
|
+
],
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function loadAnalysisStatus(pool, resourceId) {
|
|
48
|
+
return tryQuery("analyses.loadAnalysisStatus", async () => {
|
|
49
|
+
const result = await pool.query({
|
|
50
|
+
text: "SELECT status, context FROM cortex_analysis_state WHERE analysis_id = $1",
|
|
51
|
+
values: [resourceId],
|
|
52
|
+
});
|
|
53
|
+
const row = result.rows[0];
|
|
54
|
+
if (!row)
|
|
55
|
+
return null;
|
|
56
|
+
return { status: row.status, context: row.context ?? null };
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Suspend an analysis due to a 402 `budget_exceeded` error.
|
|
61
|
+
* Idempotent — no-op if already suspended.
|
|
62
|
+
*
|
|
63
|
+
* The only cause of suspension today is budget exhaustion; no reason is
|
|
64
|
+
* persisted. If a second cause arises, add a column rather than a param so
|
|
65
|
+
* history is queryable.
|
|
66
|
+
*/
|
|
67
|
+
export function suspendAnalysis(pool, analysisId) {
|
|
68
|
+
return tryMutation("analyses.suspendAnalysis", async () => {
|
|
69
|
+
await pool.query({
|
|
70
|
+
text: `UPDATE cortex_analysis_state
|
|
71
|
+
SET status = 'suspended_insufficient_funds', updated_at = $1
|
|
72
|
+
WHERE analysis_id = $2 AND status != 'suspended_insufficient_funds'`,
|
|
73
|
+
values: [new Date().toISOString(), analysisId],
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resume a suspended analysis after the user tops up.
|
|
79
|
+
* Only transitions from `suspended_insufficient_funds` → `active`.
|
|
80
|
+
*/
|
|
81
|
+
export function resumeAnalysis(pool, analysisId) {
|
|
82
|
+
return tryMutation("analyses.resumeAnalysis", async () => {
|
|
83
|
+
await pool.query({
|
|
84
|
+
text: `UPDATE cortex_analysis_state
|
|
85
|
+
SET status = 'active', updated_at = $1
|
|
86
|
+
WHERE analysis_id = $2 AND status = 'suspended_insufficient_funds'`,
|
|
87
|
+
values: [new Date().toISOString(), analysisId],
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the persisted billing context for an analysis.
|
|
93
|
+
*
|
|
94
|
+
* Single DB-read chokepoint used by `requireAnalysisBilling` middleware and
|
|
95
|
+
* by any downstream code that needs to re-read billing identity. The driver
|
|
96
|
+
* read is wrapped as a `DbError`; the missing-row / null-billing /
|
|
97
|
+
* unparseable-JSON cases are control-flow throws (a misconfiguration, not a
|
|
98
|
+
* driver failure) that short-circuit the chain and surface verbatim.
|
|
99
|
+
*
|
|
100
|
+
* User identity (`HEADERS.User`) is derived from the ambient credential's
|
|
101
|
+
* JWT `sub` claim by `credential-middleware`, not from the DB.
|
|
102
|
+
*/
|
|
103
|
+
export function resolveAnalysisBilling(pool, analysisId) {
|
|
104
|
+
return tryQuery("analyses.resolveAnalysisBilling", () => pool.query({
|
|
105
|
+
text: "SELECT billing_context FROM cortex_analysis_state WHERE analysis_id = $1",
|
|
106
|
+
values: [analysisId],
|
|
107
|
+
})).map((result) => {
|
|
108
|
+
const row = result.rows[0];
|
|
109
|
+
if (!row) {
|
|
110
|
+
throw new Error(`resolveAnalysisBilling: no cortex_analysis_state row for analysisId=${analysisId}`);
|
|
111
|
+
}
|
|
112
|
+
const rawBilling = row.billing_context;
|
|
113
|
+
if (rawBilling === null || rawBilling === undefined) {
|
|
114
|
+
throw new Error(`resolveAnalysisBilling: billing_context missing for analysisId=${analysisId}`);
|
|
115
|
+
}
|
|
116
|
+
// JSONB is parsed by `pg` into native objects. Legacy TEXT rows (if any
|
|
117
|
+
// slipped through) arrive as strings — parse them.
|
|
118
|
+
let billingContext;
|
|
119
|
+
if (typeof rawBilling === "string") {
|
|
120
|
+
try {
|
|
121
|
+
billingContext = JSON.parse(rawBilling);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
throw new Error(`resolveAnalysisBilling: billing_context is not valid JSON for analysisId=${analysisId}: ${err instanceof Error ? err.message : err}`, { cause: err });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
billingContext = rawBilling;
|
|
129
|
+
}
|
|
130
|
+
return { billingContext };
|
|
131
|
+
});
|
|
132
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cortex_artifacts` operations — artifact upsert, lookup, and file-id
|
|
3
|
+
* reconciliation.
|
|
4
|
+
*/
|
|
5
|
+
import type { Querier } from "./db.js";
|
|
6
|
+
import type { ArtifactRow } from "./schema.js";
|
|
7
|
+
export interface RegisterArtifactInput {
|
|
8
|
+
resourceId: string;
|
|
9
|
+
path: string;
|
|
10
|
+
hash: string;
|
|
11
|
+
size: number;
|
|
12
|
+
role: "input" | "step_output";
|
|
13
|
+
sourceStep?: string | null;
|
|
14
|
+
sourceRun?: string | null;
|
|
15
|
+
fileType?: string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Upstream file identity. Set for `input` rows at materialization so
|
|
18
|
+
* provenance lineage can attribute data inputs by `fileId`; left null for
|
|
19
|
+
* `step_output` rows (their `file_id` is assigned after upload-sync).
|
|
20
|
+
*/
|
|
21
|
+
fileId?: string | null;
|
|
22
|
+
}
|
|
23
|
+
export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInput): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
|
|
26
|
+
* of at most {@link ROWS_PER_STATEMENT} rows. Callers range from per-step
|
|
27
|
+
* manifests (tens of files) to a data-profile's full staged-input manifest
|
|
28
|
+
* (unbounded — directory inputs can reach tens of thousands of files).
|
|
29
|
+
* Chunks run sequentially without a wrapping transaction: the upsert is
|
|
30
|
+
* idempotent per row (`ON CONFLICT ... DO UPDATE`), so a failure between
|
|
31
|
+
* chunks is healed by the caller's retry re-upserting the same manifest.
|
|
32
|
+
*/
|
|
33
|
+
export declare function upsertArtifacts(pool: Querier, entries: RegisterArtifactInput[]): Promise<void>;
|
|
34
|
+
/** Result type for input artifact metadata lookups. */
|
|
35
|
+
export interface InputArtifactMeta {
|
|
36
|
+
path: string;
|
|
37
|
+
hash: string;
|
|
38
|
+
size: number;
|
|
39
|
+
fileId: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Query cortex_artifacts for input-role rows matching the given paths.
|
|
43
|
+
* Used at the registration boundary to resolve metadata for data-source inputs.
|
|
44
|
+
*/
|
|
45
|
+
export declare function queryInputArtifacts(pool: Querier, analysisId: string, paths: string[]): Promise<InputArtifactMeta[]>;
|
|
46
|
+
export declare function queryUnsyncedStepArtifacts(pool: Querier, resourceId: string, runId: string, stepId: string): Promise<ArtifactRow[]>;
|
|
47
|
+
/** Count step-output artifacts produced by a run — for the run-completed card. */
|
|
48
|
+
export declare function countArtifactsForRun(pool: Querier, analysisId: string, runId: string): Promise<number>;
|
|
49
|
+
export declare function updateArtifactId(pool: Querier, resourceId: string, path: string, artifactId: string, fileType?: string | null): Promise<void>;
|
|
50
|
+
export declare function updateFileIds(pool: Querier, pairs: Array<{
|
|
51
|
+
artifactId: string;
|
|
52
|
+
fileId: string;
|
|
53
|
+
}>): Promise<void>;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cortex_artifacts` operations — artifact upsert, lookup, and file-id
|
|
3
|
+
* reconciliation.
|
|
4
|
+
*/
|
|
5
|
+
export async function upsertArtifact(pool, entry) {
|
|
6
|
+
const now = new Date().toISOString();
|
|
7
|
+
await pool.query({
|
|
8
|
+
text: `INSERT INTO cortex_artifacts
|
|
9
|
+
(analysis_id, path, hash, size, role, source_step, source_run, file_type, file_id, created_at)
|
|
10
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
|
11
|
+
ON CONFLICT (analysis_id, path) DO UPDATE SET
|
|
12
|
+
hash = EXCLUDED.hash,
|
|
13
|
+
size = EXCLUDED.size,
|
|
14
|
+
role = EXCLUDED.role,
|
|
15
|
+
source_step = EXCLUDED.source_step,
|
|
16
|
+
source_run = EXCLUDED.source_run,
|
|
17
|
+
file_type = COALESCE(EXCLUDED.file_type, cortex_artifacts.file_type),
|
|
18
|
+
file_id = COALESCE(EXCLUDED.file_id, cortex_artifacts.file_id)`,
|
|
19
|
+
values: [
|
|
20
|
+
entry.resourceId,
|
|
21
|
+
entry.path,
|
|
22
|
+
entry.hash,
|
|
23
|
+
entry.size,
|
|
24
|
+
entry.role,
|
|
25
|
+
entry.sourceStep ?? null,
|
|
26
|
+
entry.sourceRun ?? null,
|
|
27
|
+
entry.fileType ?? null,
|
|
28
|
+
entry.fileId ?? null,
|
|
29
|
+
now,
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const COLS_PER_ROW = 10;
|
|
34
|
+
/**
|
|
35
|
+
* Rows per INSERT statement. The Postgres extended protocol carries the Bind
|
|
36
|
+
* message's parameter count as an Int16, so a statement is capped at 65,535
|
|
37
|
+
* bind parameters — beyond that the count silently wraps and the server
|
|
38
|
+
* rejects with 08P01 ("bind message has N parameter formats but 0
|
|
39
|
+
* parameters"). 1,000 rows × 10 columns stays an order of magnitude under the
|
|
40
|
+
* cap while keeping round-trips negligible even for huge input manifests.
|
|
41
|
+
*/
|
|
42
|
+
const ROWS_PER_STATEMENT = 1_000;
|
|
43
|
+
/**
|
|
44
|
+
* Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
|
|
45
|
+
* of at most {@link ROWS_PER_STATEMENT} rows. Callers range from per-step
|
|
46
|
+
* manifests (tens of files) to a data-profile's full staged-input manifest
|
|
47
|
+
* (unbounded — directory inputs can reach tens of thousands of files).
|
|
48
|
+
* Chunks run sequentially without a wrapping transaction: the upsert is
|
|
49
|
+
* idempotent per row (`ON CONFLICT ... DO UPDATE`), so a failure between
|
|
50
|
+
* chunks is healed by the caller's retry re-upserting the same manifest.
|
|
51
|
+
*/
|
|
52
|
+
export async function upsertArtifacts(pool, entries) {
|
|
53
|
+
const now = new Date().toISOString();
|
|
54
|
+
for (let start = 0; start < entries.length; start += ROWS_PER_STATEMENT) {
|
|
55
|
+
const chunk = entries.slice(start, start + ROWS_PER_STATEMENT);
|
|
56
|
+
const placeholders = chunk
|
|
57
|
+
.map((_, i) => {
|
|
58
|
+
const base = i * COLS_PER_ROW;
|
|
59
|
+
return (`($${base + 1}, $${base + 2}, $${base + 3}, $${base + 4}, ` +
|
|
60
|
+
`$${base + 5}, $${base + 6}, $${base + 7}, $${base + 8}, $${base + 9}, $${base + 10})`);
|
|
61
|
+
})
|
|
62
|
+
.join(", ");
|
|
63
|
+
const values = chunk.flatMap((e) => [
|
|
64
|
+
e.resourceId,
|
|
65
|
+
e.path,
|
|
66
|
+
e.hash,
|
|
67
|
+
e.size,
|
|
68
|
+
e.role,
|
|
69
|
+
e.sourceStep ?? null,
|
|
70
|
+
e.sourceRun ?? null,
|
|
71
|
+
e.fileType ?? null,
|
|
72
|
+
e.fileId ?? null,
|
|
73
|
+
now,
|
|
74
|
+
]);
|
|
75
|
+
await pool.query({
|
|
76
|
+
text: `INSERT INTO cortex_artifacts
|
|
77
|
+
(analysis_id, path, hash, size, role, source_step, source_run, file_type, file_id, created_at)
|
|
78
|
+
VALUES ${placeholders}
|
|
79
|
+
ON CONFLICT (analysis_id, path) DO UPDATE SET
|
|
80
|
+
hash = EXCLUDED.hash,
|
|
81
|
+
size = EXCLUDED.size,
|
|
82
|
+
role = EXCLUDED.role,
|
|
83
|
+
source_step = EXCLUDED.source_step,
|
|
84
|
+
source_run = EXCLUDED.source_run,
|
|
85
|
+
file_type = COALESCE(EXCLUDED.file_type, cortex_artifacts.file_type),
|
|
86
|
+
file_id = COALESCE(EXCLUDED.file_id, cortex_artifacts.file_id)`,
|
|
87
|
+
values,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Query cortex_artifacts for input-role rows matching the given paths.
|
|
93
|
+
* Used at the registration boundary to resolve metadata for data-source inputs.
|
|
94
|
+
*/
|
|
95
|
+
export async function queryInputArtifacts(pool, analysisId, paths) {
|
|
96
|
+
if (paths.length === 0)
|
|
97
|
+
return [];
|
|
98
|
+
const result = await pool.query({
|
|
99
|
+
text: `SELECT path, hash, size, file_id
|
|
100
|
+
FROM cortex_artifacts
|
|
101
|
+
WHERE analysis_id = $1 AND role = 'input' AND path = ANY($2::text[])`,
|
|
102
|
+
values: [analysisId, paths],
|
|
103
|
+
});
|
|
104
|
+
return result.rows.map((r) => ({
|
|
105
|
+
path: r.path,
|
|
106
|
+
hash: r.hash,
|
|
107
|
+
size: Number(r.size),
|
|
108
|
+
fileId: r.file_id ?? null,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
export async function queryUnsyncedStepArtifacts(pool, resourceId, runId, stepId) {
|
|
112
|
+
const result = await pool.query({
|
|
113
|
+
text: `SELECT analysis_id, path, artifact_id, file_id, hash, size, role,
|
|
114
|
+
source_step, source_run, created_at, file_type
|
|
115
|
+
FROM cortex_artifacts
|
|
116
|
+
WHERE analysis_id = $1 AND source_run = $2 AND source_step = $3
|
|
117
|
+
AND artifact_id IS NOT NULL AND file_id IS NULL
|
|
118
|
+
AND role = 'step_output'
|
|
119
|
+
ORDER BY created_at`,
|
|
120
|
+
values: [resourceId, runId, stepId],
|
|
121
|
+
});
|
|
122
|
+
return result.rows.map(mapArtifactRow);
|
|
123
|
+
}
|
|
124
|
+
/** Count step-output artifacts produced by a run — for the run-completed card. */
|
|
125
|
+
export async function countArtifactsForRun(pool, analysisId, runId) {
|
|
126
|
+
const result = await pool.query({
|
|
127
|
+
text: `SELECT COUNT(*)::text AS n
|
|
128
|
+
FROM cortex_artifacts
|
|
129
|
+
WHERE analysis_id = $1 AND source_run = $2 AND role = 'step_output'`,
|
|
130
|
+
values: [analysisId, runId],
|
|
131
|
+
});
|
|
132
|
+
return Number(result.rows[0]?.n ?? 0);
|
|
133
|
+
}
|
|
134
|
+
export async function updateArtifactId(pool, resourceId, path, artifactId, fileType) {
|
|
135
|
+
await pool.query({
|
|
136
|
+
text: `UPDATE cortex_artifacts SET artifact_id = $1,
|
|
137
|
+
file_type = COALESCE($4, file_type)
|
|
138
|
+
WHERE analysis_id = $2 AND path = $3`,
|
|
139
|
+
values: [artifactId, resourceId, path, fileType ?? null],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export async function updateFileIds(pool, pairs) {
|
|
143
|
+
if (pairs.length === 0)
|
|
144
|
+
return;
|
|
145
|
+
const values = [];
|
|
146
|
+
const tuples = [];
|
|
147
|
+
for (let i = 0; i < pairs.length; i++) {
|
|
148
|
+
const base = i * 2;
|
|
149
|
+
tuples.push(`($${base + 1}::text, $${base + 2}::text)`);
|
|
150
|
+
values.push(pairs[i].artifactId, pairs[i].fileId);
|
|
151
|
+
}
|
|
152
|
+
await pool.query({
|
|
153
|
+
text: `UPDATE cortex_artifacts AS a
|
|
154
|
+
SET file_id = c.file_id
|
|
155
|
+
FROM (VALUES ${tuples.join(", ")}) AS c(artifact_id, file_id)
|
|
156
|
+
WHERE a.artifact_id = c.artifact_id`,
|
|
157
|
+
values,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function mapArtifactRow(row) {
|
|
161
|
+
return {
|
|
162
|
+
resourceId: row.analysis_id,
|
|
163
|
+
path: row.path,
|
|
164
|
+
artifactId: row.artifact_id ?? null,
|
|
165
|
+
fileId: row.file_id ?? null,
|
|
166
|
+
hash: row.hash,
|
|
167
|
+
size: Number(row.size),
|
|
168
|
+
role: row.role,
|
|
169
|
+
sourceStep: row.source_step ?? null,
|
|
170
|
+
sourceRun: row.source_run ?? null,
|
|
171
|
+
createdAt: row.created_at,
|
|
172
|
+
unrecoverableAt: row.unrecoverable_at ?? null,
|
|
173
|
+
fileType: row.file_type ?? null,
|
|
174
|
+
};
|
|
175
|
+
}
|