@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,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DBOS Transact bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* This is the only module that imports `@dbos-inc/dbos-sdk` directly. The
|
|
5
|
+
* agent loop and routes depend on the `RunStep` shape (`harness/loop/types.ts`),
|
|
6
|
+
* so DBOS stays swappable and the chat path never reaches into the workflow
|
|
7
|
+
* runtime. `harness/loop/run-step.ts` wraps `DBOS.runStep` for the durable
|
|
8
|
+
* variant; nothing else here.
|
|
9
|
+
*
|
|
10
|
+
* Launch is dormant — this change registers no workflows. The durability seam
|
|
11
|
+
* exists; the engine is running; nothing is durable yet.
|
|
12
|
+
*
|
|
13
|
+
* See `openspec/changes/harness-dbos-runtime`.
|
|
14
|
+
*/
|
|
15
|
+
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
16
|
+
import { DBOS_SYSTEM_POOL_SIZE } from "./pools.js";
|
|
17
|
+
const state = {
|
|
18
|
+
launched: false,
|
|
19
|
+
recoveryStarted: false,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Build the Postgres URL DBOS uses for its system database. Reuses the
|
|
23
|
+
* existing `DB_PG_*` env vars; sslmode is propagated as a query string so
|
|
24
|
+
* DBOS's underlying `pg.Pool` honours it.
|
|
25
|
+
*
|
|
26
|
+
* The sslmode must mirror the app pool's mapping in `lib/storage.ts`:
|
|
27
|
+
* `require` means "encrypt, don't verify the chain" there, but
|
|
28
|
+
* `pg-connection-string` parses bare `require` as an alias for `verify-full`
|
|
29
|
+
* (full chain verification). Against RDS — whose CA isn't in Node's default
|
|
30
|
+
* trust store — that fails with SELF_SIGNED_CERT_IN_CHAIN. Emit `no-verify`
|
|
31
|
+
* so DBOS's pool gets `rejectUnauthorized: false`, matching the app pool.
|
|
32
|
+
*/
|
|
33
|
+
function dbosSslMode(mode) {
|
|
34
|
+
if (mode === "disable")
|
|
35
|
+
return "disable";
|
|
36
|
+
if (mode === "verify-ca" || mode === "verify-full")
|
|
37
|
+
return "verify-full";
|
|
38
|
+
return "no-verify";
|
|
39
|
+
}
|
|
40
|
+
function systemDatabaseUrl(config) {
|
|
41
|
+
const user = encodeURIComponent(config.dbUser);
|
|
42
|
+
const password = encodeURIComponent(config.dbPassword);
|
|
43
|
+
const host = config.dbHost;
|
|
44
|
+
const port = config.dbPort;
|
|
45
|
+
const database = encodeURIComponent(config.dbName);
|
|
46
|
+
return `postgresql://${user}:${password}@${host}:${port}/${database}?sslmode=${dbosSslMode(config.dbSslMode)}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Launch DBOS. Idempotent — a second call is a no-op so tests that drive
|
|
50
|
+
* the harness twice (or accidentally double-import) don't re-launch.
|
|
51
|
+
*
|
|
52
|
+
* Order is load-bearing: `setConfig` must precede `launch`, and `launch`
|
|
53
|
+
* must resolve before the HTTP listener accepts traffic (otherwise the
|
|
54
|
+
* readiness probe could 200 against a runtime that can't own workflows).
|
|
55
|
+
*/
|
|
56
|
+
export async function launchDbos({ config, logger }) {
|
|
57
|
+
if (state.launched)
|
|
58
|
+
return;
|
|
59
|
+
const executorID = config.executorId;
|
|
60
|
+
const adminPort = parseInt(config.adminPort, 10);
|
|
61
|
+
DBOS.setConfig({
|
|
62
|
+
name: config.appName,
|
|
63
|
+
systemDatabaseUrl: systemDatabaseUrl(config),
|
|
64
|
+
systemDatabasePoolSize: DBOS_SYSTEM_POOL_SIZE,
|
|
65
|
+
executorID,
|
|
66
|
+
applicationVersion: config.applicationVersion,
|
|
67
|
+
adminPort,
|
|
68
|
+
logLevel: config.logLevel,
|
|
69
|
+
});
|
|
70
|
+
const start = performance.now();
|
|
71
|
+
await DBOS.launch();
|
|
72
|
+
state.launched = true;
|
|
73
|
+
state.recoveryStarted = true;
|
|
74
|
+
logger.info({
|
|
75
|
+
executorID,
|
|
76
|
+
applicationVersion: config.applicationVersion,
|
|
77
|
+
adminPort,
|
|
78
|
+
durationMs: Math.round(performance.now() - start),
|
|
79
|
+
}, "[dbos] launched");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Shut DBOS down. In-flight workflows are marked recoverable so another
|
|
83
|
+
* replica (or this pod on restart) can adopt them. Never throws — the
|
|
84
|
+
* outer shutdown sequence must close the pg.Pool and flush exporters even
|
|
85
|
+
* if DBOS shutdown fails.
|
|
86
|
+
*
|
|
87
|
+
* Must run after HTTP has drained (so no inbound request is orphaned) and
|
|
88
|
+
* before the application pool closes (DBOS needs the system DB).
|
|
89
|
+
*/
|
|
90
|
+
export async function shutdownDbos({ logger }) {
|
|
91
|
+
if (!state.launched)
|
|
92
|
+
return;
|
|
93
|
+
const start = performance.now();
|
|
94
|
+
try {
|
|
95
|
+
await DBOS.shutdown();
|
|
96
|
+
logger.info({ durationMs: Math.round(performance.now() - start) }, "[dbos] shutdown");
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
logger.error({
|
|
100
|
+
err: err instanceof Error ? err.message : String(err),
|
|
101
|
+
durationMs: Math.round(performance.now() - start),
|
|
102
|
+
}, "[dbos] shutdown failed");
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
state.launched = false;
|
|
106
|
+
state.recoveryStarted = false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Cancel any `ephemeral:`-prefixed PENDING workflow this executor owns —
|
|
111
|
+
* called BEFORE `launchDbos`, whose recovery would otherwise re-dispatch them.
|
|
112
|
+
*
|
|
113
|
+
* Ephemeral runs are turn-scoped: a run whose pod died mid-flight has no live
|
|
114
|
+
* awaiter and must never re-execute. DBOS has no "zero recovery" knob, and
|
|
115
|
+
* `launch()` starts recovery itself, so there is no post-launch window to
|
|
116
|
+
* cancel from — the only race-free point is a direct system-DB UPDATE before
|
|
117
|
+
* launch. A CANCELLED row is excluded from the recovery query (which selects
|
|
118
|
+
* `status='PENDING'`). The `dbos.workflow_status` coupling is the price of
|
|
119
|
+
* pre-launch timing, and this is the sole module that owns DBOS. The system
|
|
120
|
+
* DB is the same database as the app pool, so the pool reaches it directly.
|
|
121
|
+
*/
|
|
122
|
+
export async function sweepEphemeralWorkflows({ pool, logger, executorId, }) {
|
|
123
|
+
const executorID = executorId;
|
|
124
|
+
try {
|
|
125
|
+
const { rowCount } = await pool.query({
|
|
126
|
+
text: `UPDATE dbos.workflow_status
|
|
127
|
+
SET status = 'CANCELLED', updated_at = $1
|
|
128
|
+
WHERE status = 'PENDING'
|
|
129
|
+
AND executor_id = $2
|
|
130
|
+
AND workflow_uuid LIKE 'ephemeral:%'`,
|
|
131
|
+
values: [Date.now(), executorID],
|
|
132
|
+
});
|
|
133
|
+
if (rowCount && rowCount > 0) {
|
|
134
|
+
logger.info({ executorID, swept: rowCount }, "[dbos] swept orphaned ephemeral workflows");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
// First-ever boot: DBOS has not created its schema yet — nothing to sweep.
|
|
139
|
+
if (err && typeof err === "object" && "code" in err && err.code === "42P01") {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
logger.error({ executorID, err: err instanceof Error ? err.message : String(err) }, "[dbos] ephemeral sweep failed");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** Snapshot of DBOS lifecycle state — read by the readiness probe. */
|
|
146
|
+
export function dbosState() {
|
|
147
|
+
return { ...state };
|
|
148
|
+
}
|
|
149
|
+
/** Test hook: force-reset state without calling DBOS. Test-only. */
|
|
150
|
+
export function __resetDbosStateForTest() {
|
|
151
|
+
state.launched = false;
|
|
152
|
+
state.recoveryStarted = false;
|
|
153
|
+
}
|
|
154
|
+
/** Test hook: mark launched without calling DBOS. Test-only. */
|
|
155
|
+
export function __setDbosStateForTest(next) {
|
|
156
|
+
if (next.launched !== undefined)
|
|
157
|
+
state.launched = next.launched;
|
|
158
|
+
if (next.recoveryStarted !== undefined)
|
|
159
|
+
state.recoveryStarted = next.recoveryStarted;
|
|
160
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide lifecycle flags shared between the readiness probe and the
|
|
3
|
+
* shutdown sequence.
|
|
4
|
+
*
|
|
5
|
+
* `draining` flips true the moment SIGTERM/SIGINT is received, so the
|
|
6
|
+
* readiness probe drops the pod out of LB rotation before the HTTP
|
|
7
|
+
* server starts refusing requests.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isDraining(): boolean;
|
|
10
|
+
export declare function markDraining(): void;
|
|
11
|
+
/** Test hook — reset the flag between tests. */
|
|
12
|
+
export declare function __resetLifecycleForTest(): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide lifecycle flags shared between the readiness probe and the
|
|
3
|
+
* shutdown sequence.
|
|
4
|
+
*
|
|
5
|
+
* `draining` flips true the moment SIGTERM/SIGINT is received, so the
|
|
6
|
+
* readiness probe drops the pod out of LB rotation before the HTTP
|
|
7
|
+
* server starts refusing requests.
|
|
8
|
+
*/
|
|
9
|
+
let draining = false;
|
|
10
|
+
export function isDraining() {
|
|
11
|
+
return draining;
|
|
12
|
+
}
|
|
13
|
+
export function markDraining() {
|
|
14
|
+
draining = true;
|
|
15
|
+
}
|
|
16
|
+
/** Test hook — reset the flag between tests. */
|
|
17
|
+
export function __resetLifecycleForTest() {
|
|
18
|
+
draining = false;
|
|
19
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-pod Postgres pool sizing — the single source of truth.
|
|
3
|
+
*
|
|
4
|
+
* Cortex runs two pools per pod against the same cluster (see the postgres-storage-backend spec): the
|
|
5
|
+
* application pool (`lib/storage.ts::createPool()`) and the DBOS system-DB
|
|
6
|
+
* pool (`runtime/dbos.ts`). Both numbers live here so the value DBOS is
|
|
7
|
+
* configured with and the value the boot-time guard reasons about can never
|
|
8
|
+
* drift apart.
|
|
9
|
+
*
|
|
10
|
+
* Fleet-level capacity (how many replicas the cluster can hold) is NOT a
|
|
11
|
+
* per-pod concern and is deliberately absent here — it belongs to the
|
|
12
|
+
* database (`max_connections` sizing) or a connection pooler. See
|
|
13
|
+
* `runtime/connection-budget.ts`.
|
|
14
|
+
*/
|
|
15
|
+
/** DBOS system-DB pool size; passed verbatim to `DBOS.setConfig`. */
|
|
16
|
+
export declare const DBOS_SYSTEM_POOL_SIZE = 10;
|
|
17
|
+
/** Application pool size when `DB_POOL_MAX` is unset. */
|
|
18
|
+
export declare const DEFAULT_APP_POOL_SIZE = 12;
|
|
19
|
+
/**
|
|
20
|
+
* Connections reserved outside the two pools: psql admin sessions, a brief
|
|
21
|
+
* overlap during DBOS recovery, replication / monitoring users.
|
|
22
|
+
*/
|
|
23
|
+
export declare const SAFETY_MARGIN = 5;
|
|
24
|
+
/** Resolve the app pool size from the optional `DB_POOL_MAX` override. */
|
|
25
|
+
export declare function resolveAppPoolSize(dbPoolMax: string | undefined): number;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-pod Postgres pool sizing — the single source of truth.
|
|
3
|
+
*
|
|
4
|
+
* Cortex runs two pools per pod against the same cluster (see the postgres-storage-backend spec): the
|
|
5
|
+
* application pool (`lib/storage.ts::createPool()`) and the DBOS system-DB
|
|
6
|
+
* pool (`runtime/dbos.ts`). Both numbers live here so the value DBOS is
|
|
7
|
+
* configured with and the value the boot-time guard reasons about can never
|
|
8
|
+
* drift apart.
|
|
9
|
+
*
|
|
10
|
+
* Fleet-level capacity (how many replicas the cluster can hold) is NOT a
|
|
11
|
+
* per-pod concern and is deliberately absent here — it belongs to the
|
|
12
|
+
* database (`max_connections` sizing) or a connection pooler. See
|
|
13
|
+
* `runtime/connection-budget.ts`.
|
|
14
|
+
*/
|
|
15
|
+
/** DBOS system-DB pool size; passed verbatim to `DBOS.setConfig`. */
|
|
16
|
+
export const DBOS_SYSTEM_POOL_SIZE = 10;
|
|
17
|
+
/** Application pool size when `DB_POOL_MAX` is unset. */
|
|
18
|
+
export const DEFAULT_APP_POOL_SIZE = 12;
|
|
19
|
+
/**
|
|
20
|
+
* Connections reserved outside the two pools: psql admin sessions, a brief
|
|
21
|
+
* overlap during DBOS recovery, replication / monitoring users.
|
|
22
|
+
*/
|
|
23
|
+
export const SAFETY_MARGIN = 5;
|
|
24
|
+
/** Resolve the app pool size from the optional `DB_POOL_MAX` override. */
|
|
25
|
+
export function resolveAppPoolSize(dbPoolMax) {
|
|
26
|
+
if (dbPoolMax === undefined || dbPoolMax === "")
|
|
27
|
+
return DEFAULT_APP_POOL_SIZE;
|
|
28
|
+
const n = Number.parseInt(dbPoolMax, 10);
|
|
29
|
+
return Number.isFinite(n) && n >= 1 ? n : DEFAULT_APP_POOL_SIZE;
|
|
30
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful-shutdown sequence.
|
|
3
|
+
*
|
|
4
|
+
* The order is load-bearing for durability:
|
|
5
|
+
*
|
|
6
|
+
* 1. Flip readiness to NOT_READY (so the LB stops sending new traffic).
|
|
7
|
+
* 2. Drain in-flight HTTP (close the listener, await pending requests).
|
|
8
|
+
* 3. `DBOS.shutdown()` — marks in-flight workflows recoverable.
|
|
9
|
+
* Must run AFTER HTTP drains (so no inbound request is orphaned)
|
|
10
|
+
* and BEFORE the application pool closes (DBOS needs the system DB,
|
|
11
|
+
* though it owns its own pool, the app close happens after).
|
|
12
|
+
* 4. Close the application `pg.Pool`.
|
|
13
|
+
* 5. Flush log + OTel exporters.
|
|
14
|
+
* 6. `process.exit(0)`.
|
|
15
|
+
*
|
|
16
|
+
* Each side effect is injected so the sequence can be tested in isolation
|
|
17
|
+
* (no real server, no real DBOS). Errors at any step are logged and
|
|
18
|
+
* swallowed — once shutdown has started, exiting takes precedence over
|
|
19
|
+
* any single step's failure.
|
|
20
|
+
*/
|
|
21
|
+
import type pino from "pino";
|
|
22
|
+
export interface ShutdownDeps {
|
|
23
|
+
signal: string;
|
|
24
|
+
logger: pino.Logger;
|
|
25
|
+
markDraining: () => void;
|
|
26
|
+
closeHttpServer: () => Promise<void>;
|
|
27
|
+
shutdownDbos: () => Promise<void>;
|
|
28
|
+
closePool: () => Promise<void>;
|
|
29
|
+
flushLogger: () => Promise<void>;
|
|
30
|
+
shutdownOtel: () => Promise<void>;
|
|
31
|
+
exit: (code: number) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function runShutdownSequence(deps: ShutdownDeps): Promise<void>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful-shutdown sequence.
|
|
3
|
+
*
|
|
4
|
+
* The order is load-bearing for durability:
|
|
5
|
+
*
|
|
6
|
+
* 1. Flip readiness to NOT_READY (so the LB stops sending new traffic).
|
|
7
|
+
* 2. Drain in-flight HTTP (close the listener, await pending requests).
|
|
8
|
+
* 3. `DBOS.shutdown()` — marks in-flight workflows recoverable.
|
|
9
|
+
* Must run AFTER HTTP drains (so no inbound request is orphaned)
|
|
10
|
+
* and BEFORE the application pool closes (DBOS needs the system DB,
|
|
11
|
+
* though it owns its own pool, the app close happens after).
|
|
12
|
+
* 4. Close the application `pg.Pool`.
|
|
13
|
+
* 5. Flush log + OTel exporters.
|
|
14
|
+
* 6. `process.exit(0)`.
|
|
15
|
+
*
|
|
16
|
+
* Each side effect is injected so the sequence can be tested in isolation
|
|
17
|
+
* (no real server, no real DBOS). Errors at any step are logged and
|
|
18
|
+
* swallowed — once shutdown has started, exiting takes precedence over
|
|
19
|
+
* any single step's failure.
|
|
20
|
+
*/
|
|
21
|
+
async function safely(logger, step, fn) {
|
|
22
|
+
try {
|
|
23
|
+
await fn();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
logger.error({ err: err instanceof Error ? err.message : String(err), step }, `[shutdown] ${step} failed`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function runShutdownSequence(deps) {
|
|
30
|
+
const { logger, signal } = deps;
|
|
31
|
+
logger.info({ signal }, "[shutdown] requested");
|
|
32
|
+
deps.markDraining();
|
|
33
|
+
await safely(logger, "http-drain", deps.closeHttpServer);
|
|
34
|
+
await safely(logger, "dbos-shutdown", deps.shutdownDbos);
|
|
35
|
+
await safely(logger, "pool-close", deps.closePool);
|
|
36
|
+
await safely(logger, "otel-flush", deps.shutdownOtel);
|
|
37
|
+
await safely(logger, "logger-flush", deps.flushLogger);
|
|
38
|
+
deps.exit(0);
|
|
39
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `awaitExec` — awaits a submitted exec's terminal result, forwarding progress
|
|
3
|
+
* events, under one of two transports selected by `options.transport`:
|
|
4
|
+
*
|
|
5
|
+
* - `poll` (default): {@link awaitExecPoll} loops durable pull steps against
|
|
6
|
+
* `GET /exec/{execId}?since={cursor}`. The sandbox initiates nothing; the
|
|
7
|
+
* host asks. Inherently restart-proof — a recovered workflow just resumes
|
|
8
|
+
* polling from its current identity — so the recovery wedge (#41) does not
|
|
9
|
+
* apply. A machine that dies mid-exec fast-fails in-loop: sustained
|
|
10
|
+
* `unavailable` polls escalate to a backend-inspect probe (`liveness.ts`)
|
|
11
|
+
* and an observably dead machine returns the synthetic-failure result
|
|
12
|
+
* instead of waiting out the deadline.
|
|
13
|
+
* - `callback`: {@link awaitExecCallback} is the recv loop below, with the
|
|
14
|
+
* pull as its recovery backstop.
|
|
15
|
+
*
|
|
16
|
+
* Both run in the workflow body (NOT a step) — `DBOS.recv`, `DBOS.writeStream`,
|
|
17
|
+
* and `DBOS.sleepms` are body-only — and both verify every result against the
|
|
18
|
+
* per-sandbox HMAC, treating a bad/stale signature as a hard cancel.
|
|
19
|
+
*
|
|
20
|
+
* ## Callback mode: the recv loop
|
|
21
|
+
*
|
|
22
|
+
* On each received envelope:
|
|
23
|
+
*
|
|
24
|
+
* 1. If it carries `signature: null` and the payload is a
|
|
25
|
+
* `synthetic-failure` done-marker, accept it — the watchdog is an
|
|
26
|
+
* in-process trusted sender. Any other null-signature message
|
|
27
|
+
* hard-cancels.
|
|
28
|
+
* 2. Otherwise HMAC-verify against the per-sandbox `callbackSecret`.
|
|
29
|
+
* A bad or stale signature throws `HardCancelError`, which DBOS
|
|
30
|
+
* treats as a fatal workflow error (no retry).
|
|
31
|
+
* 3. If the verified payload is a done-marker, return its `result`.
|
|
32
|
+
* 4. Otherwise forward the payload via `emit` and continue.
|
|
33
|
+
*
|
|
34
|
+
* `deadline` is an absolute unix-ms timestamp — the durable backstop
|
|
35
|
+
* (typically `step.timeout`). `T` is liveness-agnostic recv pacing: we
|
|
36
|
+
* use `min(5s, remaining)` so the loop returns often enough to honour
|
|
37
|
+
* the deadline.
|
|
38
|
+
*
|
|
39
|
+
* ## Recv is not the only way home
|
|
40
|
+
*
|
|
41
|
+
* The completion callback is a *push* to an address baked into the container at
|
|
42
|
+
* creation. A host that dies mid-exec comes back with a different ingress port,
|
|
43
|
+
* so the push can never land — the sandbox retries into a void while the
|
|
44
|
+
* recovered recv waits for a message that will never arrive. That is the
|
|
45
|
+
* recovery wedge (#41), and it is silent: a `running` row that never advances.
|
|
46
|
+
*
|
|
47
|
+
* So whenever the topic falls quiet, this loop stops waiting and *asks*:
|
|
48
|
+
* `GET /exec/{execId}` on the sandbox itself returns the terminal result,
|
|
49
|
+
* signed fresh at request time. The bytes are the ones the callback would have
|
|
50
|
+
* carried, so the provenance frame survives the recovery path intact and one
|
|
51
|
+
* verification path serves both. Push remains the fast path; pull is what makes
|
|
52
|
+
* the protocol durable rather than merely optimistic.
|
|
53
|
+
*
|
|
54
|
+
* The pull is a DBOS step, not a bare `fetch`: a body-level call whose result
|
|
55
|
+
* varied between replays would desynchronise the recorded function-ID sequence.
|
|
56
|
+
*/
|
|
57
|
+
import { type ExecEmit, type ExecResult, type SandboxLiveness, type SandboxRef, type SandboxTransport } from "./types.js";
|
|
58
|
+
export declare class HardCancelError extends Error {
|
|
59
|
+
readonly execId: string;
|
|
60
|
+
readonly reason: "bad-signature" | "stale-timestamp" | "missing" | "synthetic-without-marker";
|
|
61
|
+
constructor(execId: string, reason: "bad-signature" | "stale-timestamp" | "missing" | "synthetic-without-marker", detail?: string);
|
|
62
|
+
}
|
|
63
|
+
export declare class ExecTimeoutError extends Error {
|
|
64
|
+
readonly execId: string;
|
|
65
|
+
constructor(execId: string);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Dependency seams of the await loops — every member is an injectable effect
|
|
69
|
+
* (clock, recv, fetch, durable step, durable sleep, warn sink) plus the
|
|
70
|
+
* transport selector. Tuning values (freshness window, pull threshold, poll
|
|
71
|
+
* cadence) are module constants, not options.
|
|
72
|
+
*/
|
|
73
|
+
export interface AwaitExecOptions {
|
|
74
|
+
/**
|
|
75
|
+
* Clock source for the deadline check and HMAC freshness. Defaults to the
|
|
76
|
+
* checkpointed `DBOS.now()` so the loop's recv count is replay-stable (a raw
|
|
77
|
+
* `Date.now()` here drifts the recorded `DBOS.recv` function-ID sequence on
|
|
78
|
+
* recovery — see the harness-durable-runtime spec).
|
|
79
|
+
*/
|
|
80
|
+
now?: () => number | Promise<number>;
|
|
81
|
+
/** Replaces `DBOS.recv` (callback mode). */
|
|
82
|
+
recv?: <T>(topic: string, timeoutSec: number) => Promise<T | null>;
|
|
83
|
+
/** Defaults to `globalThis.fetch`. */
|
|
84
|
+
fetch?: typeof fetch;
|
|
85
|
+
/** Defaults to `DBOS.runStep`. */
|
|
86
|
+
runStep?: <T>(fn: () => Promise<T>, config: {
|
|
87
|
+
name: string;
|
|
88
|
+
}) => Promise<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Result transport. `poll` (default) runs the durable poll loop; `callback`
|
|
91
|
+
* runs the `DBOS.recv` loop with the pull as its recovery backstop. The
|
|
92
|
+
* composition root passes the same value it hands the container.
|
|
93
|
+
*/
|
|
94
|
+
transport?: SandboxTransport;
|
|
95
|
+
/** Replaces the durable inter-poll sleep. Defaults to `DBOS.sleepms`. */
|
|
96
|
+
sleep?: (ms: number) => Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Sink for advisory warnings (poll-mode progress-event loss). Defaults to
|
|
99
|
+
* `DBOS.logger.warn`. Advisory only: the terminal result — not the event
|
|
100
|
+
* stream — is the authoritative outcome.
|
|
101
|
+
*/
|
|
102
|
+
warn?: (message: string) => void;
|
|
103
|
+
/**
|
|
104
|
+
* Backend inspect for the poll loop's liveness escalation (`liveness.ts`).
|
|
105
|
+
* Wired by `createSandboxClient` from its backend ops; when absent the
|
|
106
|
+
* loop skips escalation and stays purely deadline-bounded. Throws on
|
|
107
|
+
* transient backend API errors — the escalation treats a throw as an
|
|
108
|
+
* inconclusive probe, never a failed exec.
|
|
109
|
+
*/
|
|
110
|
+
isAlive?: (ref: SandboxRef) => Promise<SandboxLiveness>;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Await a submitted exec's terminal result. Dispatches on transport — `poll`
|
|
114
|
+
* (default) or `callback`. Both verify every result against the per-sandbox
|
|
115
|
+
* HMAC and are bounded by `deadlineMs`.
|
|
116
|
+
*/
|
|
117
|
+
export declare function awaitExec(ref: SandboxRef, execId: string, emit: ExecEmit, deadlineMs: number, options?: AwaitExecOptions): Promise<ExecResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Body of the recv loop (callback transport). Hoisted so it's testable without
|
|
120
|
+
* spinning up DBOS — `recv` is injectable and `now` is overridable.
|
|
121
|
+
*/
|
|
122
|
+
export declare function awaitExecCallback(ref: SandboxRef, execId: string, emit: ExecEmit, deadlineMs: number, options?: AwaitExecOptions): Promise<ExecResult>;
|
|
123
|
+
/**
|
|
124
|
+
* Body of the poll loop (poll transport). No `DBOS.recv`, no per-exec topic, no
|
|
125
|
+
* callback handler: a sequence of durable pull steps named
|
|
126
|
+
* `sandbox.poll-exec-result.${execId}.${n}`, each fetching the signed
|
|
127
|
+
* `{ status, events, cursor, result? }`, verifying it exactly as a pushed
|
|
128
|
+
* completion is verified, forwarding new events via `emit`, advancing the
|
|
129
|
+
* cursor, and returning `result` once terminal. `sleep`, `now`, `fetch`,
|
|
130
|
+
* `runStep`, and `isAlive` are injectable so the loop is testable without DBOS.
|
|
131
|
+
*
|
|
132
|
+
* Liveness: when the `isAlive` seam is wired (the client always wires it),
|
|
133
|
+
* consecutive `unavailable` polls past the module threshold escalate to a
|
|
134
|
+
* durable probe step `sandbox.probe-liveness.${execId}.${k}`; a dead verdict
|
|
135
|
+
* returns the synthetic-failure result in-loop — the poll-mode analogue of the
|
|
136
|
+
* watchdog's synthetic-complete, minus the topic and the race gate, since the
|
|
137
|
+
* verdict is produced and consumed by the same workflow in sequence.
|
|
138
|
+
*
|
|
139
|
+
* The `cursor`, `pollAttempt`, and `probeAttempt` counters are pure functions
|
|
140
|
+
* of the cached step sequence, so a replay issues the same polls and probes in
|
|
141
|
+
* the same order and the DBOS function-ID sequence stays stable.
|
|
142
|
+
*/
|
|
143
|
+
export declare function awaitExecPoll(ref: SandboxRef, execId: string, emit: ExecEmit, deadlineMs: number, options?: AwaitExecOptions): Promise<ExecResult>;
|