@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,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-profile status operations — the `data_profile_*` columns on
|
|
3
|
+
* `cortex_analysis_state`. Tracks the lifecycle of the per-analysis data
|
|
4
|
+
* profiling pass (pending → running → completed | failed).
|
|
5
|
+
*/
|
|
6
|
+
import type { ResultAsync } from "neverthrow";
|
|
7
|
+
import { type DbError } from "../lib/db-result.js";
|
|
8
|
+
import type { Querier } from "./db.js";
|
|
9
|
+
/**
|
|
10
|
+
* One profiled input file's **drift signature**. `fileId` is a path identity the
|
|
11
|
+
* embedder derives (two files at the same path share it regardless of content),
|
|
12
|
+
* so `size` + `mtimeMs` are what let a consumer notice that the bytes behind a
|
|
13
|
+
* path changed. The harness treats all three as opaque labels: it persists them
|
|
14
|
+
* verbatim and never stats a source file or compares signatures itself.
|
|
15
|
+
*/
|
|
16
|
+
export interface DataProfileInputFile {
|
|
17
|
+
fileId: string;
|
|
18
|
+
size: number;
|
|
19
|
+
mtimeMs: number;
|
|
20
|
+
}
|
|
21
|
+
/** The profile snapshot `completeDataProfile` persists and `loadDataProfileStatus` reads back. */
|
|
22
|
+
export interface DataProfileResult {
|
|
23
|
+
summary: string;
|
|
24
|
+
files: Array<{
|
|
25
|
+
path: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}>;
|
|
28
|
+
/** Which files the profile covered — the audit record. */
|
|
29
|
+
inputFileIds: string[];
|
|
30
|
+
/**
|
|
31
|
+
* Whether the same bytes were covered — the drift comparand. Optional on read:
|
|
32
|
+
* a snapshot written before this field existed carries only `inputFileIds`, and
|
|
33
|
+
* a consumer treats the absence as drift (re-profiling repairs it), exactly as
|
|
34
|
+
* it already treats a wholly absent `result`.
|
|
35
|
+
*/
|
|
36
|
+
inputFiles?: DataProfileInputFile[];
|
|
37
|
+
profiledAt: string;
|
|
38
|
+
}
|
|
39
|
+
export interface DataProfileStatus {
|
|
40
|
+
status: "pending" | "running" | "completed" | "failed";
|
|
41
|
+
error: string | null;
|
|
42
|
+
startedAt: string | null;
|
|
43
|
+
completedAt: string | null;
|
|
44
|
+
result: DataProfileResult | null;
|
|
45
|
+
seedInputFileIds: string[] | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Try to claim a startable row into `running`. Startable means `'pending'` (seeded,
|
|
49
|
+
* not yet run) or NULL (no profile: never profiled, or cleared by `clearDataProfile`).
|
|
50
|
+
*
|
|
51
|
+
* NULL must be claimable or a cleared analysis whose inputs return can never be
|
|
52
|
+
* profiled again: the seed upsert's ON CONFLICT deliberately never rewrites profile
|
|
53
|
+
* status, so the row stays NULL — and NULL matches neither the rerun (`completed`)
|
|
54
|
+
* nor retry (`failed`) claims. A cleared row is therefore claimable only once a later
|
|
55
|
+
* seed upsert has repopulated `seed_input_file_ids` (see {@link SEEDED}).
|
|
56
|
+
*
|
|
57
|
+
* `ok(true)` when this call won the CAS; `ok(false)` when it lost or the row is
|
|
58
|
+
* unseeded — neither is an error, both stay in the ok channel.
|
|
59
|
+
*/
|
|
60
|
+
export declare function tryStartDataProfile(pool: Querier, analysisId: string): ResultAsync<boolean, DbError>;
|
|
61
|
+
/** Claim a `failed` row back into `running` (the deliberate-retry route). Carries {@link SEEDED}. */
|
|
62
|
+
export declare function tryRetryDataProfile(pool: Querier, analysisId: string): ResultAsync<boolean, DbError>;
|
|
63
|
+
/**
|
|
64
|
+
* Claim a `completed` row back into `running` (the re-profile route). `data_profile_result`
|
|
65
|
+
* is deliberately preserved so a consumer can keep serving the prior profile while the new
|
|
66
|
+
* one runs. Carries {@link SEEDED}.
|
|
67
|
+
*/
|
|
68
|
+
export declare function tryRerunDataProfile(pool: Querier, analysisId: string): ResultAsync<boolean, DbError>;
|
|
69
|
+
/**
|
|
70
|
+
* Stamp a claimed-`running` row `completed` and record its result — a terminal
|
|
71
|
+
* write CAS'd on `data_profile_status = 'running'`.
|
|
72
|
+
*
|
|
73
|
+
* The running guard is load-bearing, not decoration. This write runs as plain
|
|
74
|
+
* workflow-body code, and the row it targets can be moved out from under it in the
|
|
75
|
+
* window between the claim and this call: `clearDataProfile` nulls an emptied-inputs
|
|
76
|
+
* row (its own guard only defers on a *running* row, so it succeeds on a `failed` one),
|
|
77
|
+
* `expireStaleDataProfile` flips a slow run to `failed`, and DBOS recovery may replay
|
|
78
|
+
* this body after either has landed. Without the guard a late completion re-stamps
|
|
79
|
+
* `completed` + result over a since-cleared row, resurrecting exactly the seedless-
|
|
80
|
+
* completed state the seed CAS forbids (`completed` with a NULL `seed_input_file_ids`).
|
|
81
|
+
* Every legitimate caller reaches here from a row it claimed into `running`, so the
|
|
82
|
+
* guard only ever refuses a row another writer already moved on from.
|
|
83
|
+
*
|
|
84
|
+
* `ok(true)` when this call stamped the row; `ok(false)` when the guard refused it
|
|
85
|
+
* (the row was cleared/expired/replayed away) — a no-op the caller logs, not an error.
|
|
86
|
+
*/
|
|
87
|
+
export declare function completeDataProfile(pool: Querier, analysisId: string, result?: DataProfileResult): ResultAsync<boolean, DbError>;
|
|
88
|
+
/**
|
|
89
|
+
* Stamp a claimed-`running` row `failed` with a reason — the terminal-failure
|
|
90
|
+
* counterpart to {@link completeDataProfile}, CAS'd on `data_profile_status = 'running'`
|
|
91
|
+
* for the same reason: a workflow that fails after its row was cleared/expired
|
|
92
|
+
* out from under it (or a recovery replay of that body) must not resurrect a
|
|
93
|
+
* `failed` status over a cleared row. `data_profile_result` is left untouched so a
|
|
94
|
+
* prior profile survives the failure (the re-profile/retry route can keep serving it).
|
|
95
|
+
*
|
|
96
|
+
* `ok(true)` when this call stamped the row; `ok(false)` when the guard refused it —
|
|
97
|
+
* a logged no-op, not an error.
|
|
98
|
+
*/
|
|
99
|
+
export declare function failDataProfile(pool: Querier, analysisId: string, error: string): ResultAsync<boolean, DbError>;
|
|
100
|
+
export declare function expireStaleDataProfile(pool: Querier, analysisId: string, timeoutMs: number): ResultAsync<boolean, DbError>;
|
|
101
|
+
/**
|
|
102
|
+
* Reset a ledger row wedged at `running` with no workflow behind it back to
|
|
103
|
+
* `failed`, so the normal retry path can re-profile it.
|
|
104
|
+
*
|
|
105
|
+
* A start that rejects after the CAS already flipped the row to `running`
|
|
106
|
+
* compensates itself (`triggerDataProfile`/`runDataProfile` fail the ledger in
|
|
107
|
+
* their catch). This covers the residual case that compensation cannot: a host
|
|
108
|
+
* that dies in the window between the CAS and the `DBOS.startWorkflow` insert
|
|
109
|
+
* leaves a `running` row with no workflow for recovery to resume — nothing
|
|
110
|
+
* would ever move it off `running`, and every later trigger reports
|
|
111
|
+
* `already_running` forever.
|
|
112
|
+
*
|
|
113
|
+
* The `NOT EXISTS` guard keys off the DBOS workflow ledger directly (the same
|
|
114
|
+
* `dataprofile:{analysisId}:{nonce}` id space this module's trigger mints) so a
|
|
115
|
+
* genuinely in-flight or recovery-requeued run — whose `dbos.workflow_status`
|
|
116
|
+
* row is PENDING/ENQUEUED/DELAYED — is never disturbed: only a row with no
|
|
117
|
+
* active workflow is reset. Call it AFTER `DBOS.launch()` has run recovery, so
|
|
118
|
+
* a resumable run has already been re-queued and is visible to the guard.
|
|
119
|
+
*/
|
|
120
|
+
export declare function reconcileOrphanedDataProfile(pool: Querier, analysisId: string): ResultAsync<boolean, DbError>;
|
|
121
|
+
/**
|
|
122
|
+
* Clear an analysis's data profile back to the honest "no profile" state,
|
|
123
|
+
* nulling every `data_profile_*` column plus the `seed_input_file_ids` the
|
|
124
|
+
* profile was taken against. `ok(true)` when a row was cleared, `ok(false)`
|
|
125
|
+
* when the clear was skipped (no such analysis, or a live profile) — a skip
|
|
126
|
+
* stays in the ok channel, exactly like the sibling CAS ops.
|
|
127
|
+
*
|
|
128
|
+
* An emptied input set makes any existing profile a lie: it describes files
|
|
129
|
+
* the analysis no longer has, so the UI must fall back to "not profiled". The
|
|
130
|
+
* `IS DISTINCT FROM 'running'` guard defers the clear while a profiling workflow
|
|
131
|
+
* is live, so this write does not race that workflow's own ledger updates;
|
|
132
|
+
* reconciliation waits for the caller's next parity check once it settles.
|
|
133
|
+
*
|
|
134
|
+
* Deferring here is NOT what stops a late workflow from resurrecting a cleared
|
|
135
|
+
* row — it cannot be, because a clear still succeeds once the row has left
|
|
136
|
+
* `running`. The dangerous interleave is: `expireStaleDataProfile` flips a slow
|
|
137
|
+
* run to `failed`, this clear then succeeds on that `failed` row, and the
|
|
138
|
+
* still-live workflow finally reaches its terminal write against a since-cleared
|
|
139
|
+
* row. That resurrection is closed at the OTHER end: `completeDataProfile` /
|
|
140
|
+
* `failDataProfile` CAS on `data_profile_status = 'running'`, so a terminal write
|
|
141
|
+
* finds no running row to stamp and no-ops instead of re-seeding the cleared one.
|
|
142
|
+
*/
|
|
143
|
+
export declare function clearDataProfile(pool: Querier, analysisId: string): ResultAsync<boolean, DbError>;
|
|
144
|
+
/**
|
|
145
|
+
* Load an analysis's data-profile ledger state. Returns `null` for BOTH miss
|
|
146
|
+
* conditions, deliberately indistinguishable to consumers:
|
|
147
|
+
* - the analysis row does not exist, AND
|
|
148
|
+
* - the row exists but `data_profile_status IS NULL` — set by
|
|
149
|
+
* {@link clearDataProfile} when the input set empties (the cleared state is
|
|
150
|
+
* the same wire shape as a never-profiled analysis on purpose, so the UI
|
|
151
|
+
* falls back to "not profiled" uniformly).
|
|
152
|
+
*
|
|
153
|
+
* This collapsed null is a public contract: a non-null `analysisId` does NOT
|
|
154
|
+
* guarantee a non-null status. Consumers must treat `null` uniformly as "no
|
|
155
|
+
* profile" — never assume "row exists ⇒ status non-null" — and never read
|
|
156
|
+
* `seedInputFileIds` from a `null` return (it rides along only on the non-null
|
|
157
|
+
* branch). The pre-clearance state to check seed is not exposed here; read
|
|
158
|
+
* `seed_input_file_ids` directly when a caller needs that distinction
|
|
159
|
+
* (e.g. the seed-first guard in `triggerDataProfile`).
|
|
160
|
+
*/
|
|
161
|
+
export declare function loadDataProfileStatus(pool: Querier, analysisId: string): ResultAsync<DataProfileStatus | null, DbError>;
|
|
162
|
+
/**
|
|
163
|
+
* Read an analysis's raw `seed_input_file_ids`, without the NULL-status collapse
|
|
164
|
+
* {@link loadDataProfileStatus} applies (which hides the seed of any cleared row).
|
|
165
|
+
* Returns the seeded set, or `null` for BOTH "no such analysis row" AND "the row
|
|
166
|
+
* exists but the column is NULL" — the two are deliberately indistinguishable here,
|
|
167
|
+
* exactly as they are to the consumer: both mean "nothing to profile, no claim would
|
|
168
|
+
* match". A stored `[]` returns as an empty array — a real value naming zero files,
|
|
169
|
+
* which a caller refuses distinctly from a missing seed.
|
|
170
|
+
*
|
|
171
|
+
* Advisory only: this read never gates a claim. The seed conjunct that actually makes
|
|
172
|
+
* a seedless `running` row impossible rides in each claim's CAS (see {@link SEEDED});
|
|
173
|
+
* this exists so a caller can name WHY no claim would match before it fires one (the
|
|
174
|
+
* seed-first guard in `triggerDataProfile`).
|
|
175
|
+
*/
|
|
176
|
+
export declare function loadSeedInputFileIds(pool: Querier, analysisId: string): ResultAsync<string[] | null, DbError>;
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-profile status operations — the `data_profile_*` columns on
|
|
3
|
+
* `cortex_analysis_state`. Tracks the lifecycle of the per-analysis data
|
|
4
|
+
* profiling pass (pending → running → completed | failed).
|
|
5
|
+
*/
|
|
6
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
7
|
+
/**
|
|
8
|
+
* The conjunct every claim into `running` carries: the row names a non-empty set
|
|
9
|
+
* of seeded input files.
|
|
10
|
+
*
|
|
11
|
+
* It rides in the CAS rather than in a caller's pre-read because "a `running` row
|
|
12
|
+
* records the input set it is profiling" is an invariant of the LEDGER, not of any
|
|
13
|
+
* one orchestration — and `clearDataProfile` can null the seed of any non-`running`
|
|
14
|
+
* row at any moment, so a pre-read followed by a claim is a race, not an enforcement.
|
|
15
|
+
*
|
|
16
|
+
* An empty array is not a seed. `upsertAnalysis` writes NULL to mean "leave the
|
|
17
|
+
* stored seed alone" (its `COALESCE` conflict branch), so `[]` is a real value that
|
|
18
|
+
* names zero files — a set no profile may run against. `jsonb_array_length` raises on
|
|
19
|
+
* a non-array jsonb; the column is only ever written from `JSON.stringify(string[])`,
|
|
20
|
+
* and surfacing a hand-corrupted row as a `DbError` beats silently claiming it.
|
|
21
|
+
*/
|
|
22
|
+
const SEEDED = "seed_input_file_ids IS NOT NULL AND jsonb_array_length(seed_input_file_ids) > 0";
|
|
23
|
+
/**
|
|
24
|
+
* Try to claim a startable row into `running`. Startable means `'pending'` (seeded,
|
|
25
|
+
* not yet run) or NULL (no profile: never profiled, or cleared by `clearDataProfile`).
|
|
26
|
+
*
|
|
27
|
+
* NULL must be claimable or a cleared analysis whose inputs return can never be
|
|
28
|
+
* profiled again: the seed upsert's ON CONFLICT deliberately never rewrites profile
|
|
29
|
+
* status, so the row stays NULL — and NULL matches neither the rerun (`completed`)
|
|
30
|
+
* nor retry (`failed`) claims. A cleared row is therefore claimable only once a later
|
|
31
|
+
* seed upsert has repopulated `seed_input_file_ids` (see {@link SEEDED}).
|
|
32
|
+
*
|
|
33
|
+
* `ok(true)` when this call won the CAS; `ok(false)` when it lost or the row is
|
|
34
|
+
* unseeded — neither is an error, both stay in the ok channel.
|
|
35
|
+
*/
|
|
36
|
+
export function tryStartDataProfile(pool, analysisId) {
|
|
37
|
+
const now = new Date().toISOString();
|
|
38
|
+
return tryMutation("dataProfile.tryStartDataProfile", async () => {
|
|
39
|
+
const result = await pool.query({
|
|
40
|
+
text: `UPDATE cortex_analysis_state
|
|
41
|
+
SET data_profile_status = 'running', data_profile_started_at = $1
|
|
42
|
+
WHERE analysis_id = $2 AND (data_profile_status = 'pending' OR data_profile_status IS NULL) AND ${SEEDED}`,
|
|
43
|
+
values: [now, analysisId],
|
|
44
|
+
});
|
|
45
|
+
return (result.rowCount ?? 0) > 0;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Claim a `failed` row back into `running` (the deliberate-retry route). Carries {@link SEEDED}. */
|
|
49
|
+
export function tryRetryDataProfile(pool, analysisId) {
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
return tryMutation("dataProfile.tryRetryDataProfile", async () => {
|
|
52
|
+
const result = await pool.query({
|
|
53
|
+
text: `UPDATE cortex_analysis_state
|
|
54
|
+
SET data_profile_status = 'running', data_profile_started_at = $1,
|
|
55
|
+
data_profile_error = NULL, data_profile_completed_at = NULL
|
|
56
|
+
WHERE analysis_id = $2 AND data_profile_status = 'failed' AND ${SEEDED}`,
|
|
57
|
+
values: [now, analysisId],
|
|
58
|
+
});
|
|
59
|
+
return (result.rowCount ?? 0) > 0;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Claim a `completed` row back into `running` (the re-profile route). `data_profile_result`
|
|
64
|
+
* is deliberately preserved so a consumer can keep serving the prior profile while the new
|
|
65
|
+
* one runs. Carries {@link SEEDED}.
|
|
66
|
+
*/
|
|
67
|
+
export function tryRerunDataProfile(pool, analysisId) {
|
|
68
|
+
const now = new Date().toISOString();
|
|
69
|
+
return tryMutation("dataProfile.tryRerunDataProfile", async () => {
|
|
70
|
+
const result = await pool.query({
|
|
71
|
+
text: `UPDATE cortex_analysis_state
|
|
72
|
+
SET data_profile_status = 'running', data_profile_started_at = $1,
|
|
73
|
+
data_profile_error = NULL, data_profile_completed_at = NULL
|
|
74
|
+
WHERE analysis_id = $2 AND data_profile_status = 'completed' AND ${SEEDED}`,
|
|
75
|
+
values: [now, analysisId],
|
|
76
|
+
});
|
|
77
|
+
return (result.rowCount ?? 0) > 0;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Stamp a claimed-`running` row `completed` and record its result — a terminal
|
|
82
|
+
* write CAS'd on `data_profile_status = 'running'`.
|
|
83
|
+
*
|
|
84
|
+
* The running guard is load-bearing, not decoration. This write runs as plain
|
|
85
|
+
* workflow-body code, and the row it targets can be moved out from under it in the
|
|
86
|
+
* window between the claim and this call: `clearDataProfile` nulls an emptied-inputs
|
|
87
|
+
* row (its own guard only defers on a *running* row, so it succeeds on a `failed` one),
|
|
88
|
+
* `expireStaleDataProfile` flips a slow run to `failed`, and DBOS recovery may replay
|
|
89
|
+
* this body after either has landed. Without the guard a late completion re-stamps
|
|
90
|
+
* `completed` + result over a since-cleared row, resurrecting exactly the seedless-
|
|
91
|
+
* completed state the seed CAS forbids (`completed` with a NULL `seed_input_file_ids`).
|
|
92
|
+
* Every legitimate caller reaches here from a row it claimed into `running`, so the
|
|
93
|
+
* guard only ever refuses a row another writer already moved on from.
|
|
94
|
+
*
|
|
95
|
+
* `ok(true)` when this call stamped the row; `ok(false)` when the guard refused it
|
|
96
|
+
* (the row was cleared/expired/replayed away) — a no-op the caller logs, not an error.
|
|
97
|
+
*/
|
|
98
|
+
export function completeDataProfile(pool, analysisId, result) {
|
|
99
|
+
const now = new Date().toISOString();
|
|
100
|
+
return tryMutation("dataProfile.completeDataProfile", async () => {
|
|
101
|
+
const res = await pool.query({
|
|
102
|
+
text: `UPDATE cortex_analysis_state
|
|
103
|
+
SET data_profile_status = 'completed', data_profile_completed_at = $1,
|
|
104
|
+
data_profile_result = $2::jsonb
|
|
105
|
+
WHERE analysis_id = $3 AND data_profile_status = 'running'`,
|
|
106
|
+
values: [now, result ? JSON.stringify(result) : null, analysisId],
|
|
107
|
+
});
|
|
108
|
+
return (res.rowCount ?? 0) > 0;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stamp a claimed-`running` row `failed` with a reason — the terminal-failure
|
|
113
|
+
* counterpart to {@link completeDataProfile}, CAS'd on `data_profile_status = 'running'`
|
|
114
|
+
* for the same reason: a workflow that fails after its row was cleared/expired
|
|
115
|
+
* out from under it (or a recovery replay of that body) must not resurrect a
|
|
116
|
+
* `failed` status over a cleared row. `data_profile_result` is left untouched so a
|
|
117
|
+
* prior profile survives the failure (the re-profile/retry route can keep serving it).
|
|
118
|
+
*
|
|
119
|
+
* `ok(true)` when this call stamped the row; `ok(false)` when the guard refused it —
|
|
120
|
+
* a logged no-op, not an error.
|
|
121
|
+
*/
|
|
122
|
+
export function failDataProfile(pool, analysisId, error) {
|
|
123
|
+
const now = new Date().toISOString();
|
|
124
|
+
return tryMutation("dataProfile.failDataProfile", async () => {
|
|
125
|
+
const res = await pool.query({
|
|
126
|
+
text: `UPDATE cortex_analysis_state
|
|
127
|
+
SET data_profile_status = 'failed', data_profile_error = $1,
|
|
128
|
+
data_profile_completed_at = $2
|
|
129
|
+
WHERE analysis_id = $3 AND data_profile_status = 'running'`,
|
|
130
|
+
values: [error, now, analysisId],
|
|
131
|
+
});
|
|
132
|
+
return (res.rowCount ?? 0) > 0;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export function expireStaleDataProfile(pool, analysisId, timeoutMs) {
|
|
136
|
+
const now = new Date();
|
|
137
|
+
const cutoff = new Date(now.getTime() - timeoutMs).toISOString();
|
|
138
|
+
return tryMutation("dataProfile.expireStaleDataProfile", async () => {
|
|
139
|
+
const result = await pool.query({
|
|
140
|
+
text: `UPDATE cortex_analysis_state
|
|
141
|
+
SET data_profile_status = 'failed',
|
|
142
|
+
data_profile_error = 'Data profiling timed out',
|
|
143
|
+
data_profile_completed_at = $1
|
|
144
|
+
WHERE analysis_id = $2 AND data_profile_status = 'running'
|
|
145
|
+
AND data_profile_started_at < $3`,
|
|
146
|
+
values: [now.toISOString(), analysisId, cutoff],
|
|
147
|
+
});
|
|
148
|
+
return (result.rowCount ?? 0) > 0;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Reset a ledger row wedged at `running` with no workflow behind it back to
|
|
153
|
+
* `failed`, so the normal retry path can re-profile it.
|
|
154
|
+
*
|
|
155
|
+
* A start that rejects after the CAS already flipped the row to `running`
|
|
156
|
+
* compensates itself (`triggerDataProfile`/`runDataProfile` fail the ledger in
|
|
157
|
+
* their catch). This covers the residual case that compensation cannot: a host
|
|
158
|
+
* that dies in the window between the CAS and the `DBOS.startWorkflow` insert
|
|
159
|
+
* leaves a `running` row with no workflow for recovery to resume — nothing
|
|
160
|
+
* would ever move it off `running`, and every later trigger reports
|
|
161
|
+
* `already_running` forever.
|
|
162
|
+
*
|
|
163
|
+
* The `NOT EXISTS` guard keys off the DBOS workflow ledger directly (the same
|
|
164
|
+
* `dataprofile:{analysisId}:{nonce}` id space this module's trigger mints) so a
|
|
165
|
+
* genuinely in-flight or recovery-requeued run — whose `dbos.workflow_status`
|
|
166
|
+
* row is PENDING/ENQUEUED/DELAYED — is never disturbed: only a row with no
|
|
167
|
+
* active workflow is reset. Call it AFTER `DBOS.launch()` has run recovery, so
|
|
168
|
+
* a resumable run has already been re-queued and is visible to the guard.
|
|
169
|
+
*/
|
|
170
|
+
export function reconcileOrphanedDataProfile(pool, analysisId) {
|
|
171
|
+
const now = new Date().toISOString();
|
|
172
|
+
return tryMutation("dataProfile.reconcileOrphanedDataProfile", async () => {
|
|
173
|
+
const result = await pool.query({
|
|
174
|
+
text: `UPDATE cortex_analysis_state
|
|
175
|
+
SET data_profile_status = 'failed',
|
|
176
|
+
data_profile_error = 'Profiling never started (no backing workflow); reset for retry',
|
|
177
|
+
data_profile_completed_at = $1
|
|
178
|
+
WHERE analysis_id = $2 AND data_profile_status = 'running'
|
|
179
|
+
AND NOT EXISTS (
|
|
180
|
+
SELECT 1 FROM dbos.workflow_status
|
|
181
|
+
WHERE workflow_uuid LIKE 'dataprofile:' || $2 || ':%'
|
|
182
|
+
AND status IN ('PENDING', 'ENQUEUED', 'DELAYED'))`,
|
|
183
|
+
values: [now, analysisId],
|
|
184
|
+
});
|
|
185
|
+
return (result.rowCount ?? 0) > 0;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clear an analysis's data profile back to the honest "no profile" state,
|
|
190
|
+
* nulling every `data_profile_*` column plus the `seed_input_file_ids` the
|
|
191
|
+
* profile was taken against. `ok(true)` when a row was cleared, `ok(false)`
|
|
192
|
+
* when the clear was skipped (no such analysis, or a live profile) — a skip
|
|
193
|
+
* stays in the ok channel, exactly like the sibling CAS ops.
|
|
194
|
+
*
|
|
195
|
+
* An emptied input set makes any existing profile a lie: it describes files
|
|
196
|
+
* the analysis no longer has, so the UI must fall back to "not profiled". The
|
|
197
|
+
* `IS DISTINCT FROM 'running'` guard defers the clear while a profiling workflow
|
|
198
|
+
* is live, so this write does not race that workflow's own ledger updates;
|
|
199
|
+
* reconciliation waits for the caller's next parity check once it settles.
|
|
200
|
+
*
|
|
201
|
+
* Deferring here is NOT what stops a late workflow from resurrecting a cleared
|
|
202
|
+
* row — it cannot be, because a clear still succeeds once the row has left
|
|
203
|
+
* `running`. The dangerous interleave is: `expireStaleDataProfile` flips a slow
|
|
204
|
+
* run to `failed`, this clear then succeeds on that `failed` row, and the
|
|
205
|
+
* still-live workflow finally reaches its terminal write against a since-cleared
|
|
206
|
+
* row. That resurrection is closed at the OTHER end: `completeDataProfile` /
|
|
207
|
+
* `failDataProfile` CAS on `data_profile_status = 'running'`, so a terminal write
|
|
208
|
+
* finds no running row to stamp and no-ops instead of re-seeding the cleared one.
|
|
209
|
+
*/
|
|
210
|
+
export function clearDataProfile(pool, analysisId) {
|
|
211
|
+
return tryMutation("dataProfile.clearDataProfile", async () => {
|
|
212
|
+
const result = await pool.query({
|
|
213
|
+
text: `UPDATE cortex_analysis_state
|
|
214
|
+
SET data_profile_status = NULL, data_profile_error = NULL,
|
|
215
|
+
data_profile_started_at = NULL, data_profile_completed_at = NULL,
|
|
216
|
+
data_profile_result = NULL, seed_input_file_ids = NULL
|
|
217
|
+
WHERE analysis_id = $1 AND data_profile_status IS DISTINCT FROM 'running'`,
|
|
218
|
+
values: [analysisId],
|
|
219
|
+
});
|
|
220
|
+
return (result.rowCount ?? 0) > 0;
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Load an analysis's data-profile ledger state. Returns `null` for BOTH miss
|
|
225
|
+
* conditions, deliberately indistinguishable to consumers:
|
|
226
|
+
* - the analysis row does not exist, AND
|
|
227
|
+
* - the row exists but `data_profile_status IS NULL` — set by
|
|
228
|
+
* {@link clearDataProfile} when the input set empties (the cleared state is
|
|
229
|
+
* the same wire shape as a never-profiled analysis on purpose, so the UI
|
|
230
|
+
* falls back to "not profiled" uniformly).
|
|
231
|
+
*
|
|
232
|
+
* This collapsed null is a public contract: a non-null `analysisId` does NOT
|
|
233
|
+
* guarantee a non-null status. Consumers must treat `null` uniformly as "no
|
|
234
|
+
* profile" — never assume "row exists ⇒ status non-null" — and never read
|
|
235
|
+
* `seedInputFileIds` from a `null` return (it rides along only on the non-null
|
|
236
|
+
* branch). The pre-clearance state to check seed is not exposed here; read
|
|
237
|
+
* `seed_input_file_ids` directly when a caller needs that distinction
|
|
238
|
+
* (e.g. the seed-first guard in `triggerDataProfile`).
|
|
239
|
+
*/
|
|
240
|
+
export function loadDataProfileStatus(pool, analysisId) {
|
|
241
|
+
return tryQuery("dataProfile.loadDataProfileStatus", async () => {
|
|
242
|
+
const result = await pool.query({
|
|
243
|
+
text: `SELECT data_profile_status, data_profile_error,
|
|
244
|
+
data_profile_started_at, data_profile_completed_at,
|
|
245
|
+
data_profile_result, seed_input_file_ids
|
|
246
|
+
FROM cortex_analysis_state WHERE analysis_id = $1`,
|
|
247
|
+
values: [analysisId],
|
|
248
|
+
});
|
|
249
|
+
const row = result.rows[0];
|
|
250
|
+
if (!row || row.data_profile_status === null)
|
|
251
|
+
return null;
|
|
252
|
+
return {
|
|
253
|
+
status: row.data_profile_status,
|
|
254
|
+
error: row.data_profile_error ?? null,
|
|
255
|
+
startedAt: row.data_profile_started_at ?? null,
|
|
256
|
+
completedAt: row.data_profile_completed_at ?? null,
|
|
257
|
+
result: row.data_profile_result ?? null,
|
|
258
|
+
seedInputFileIds: row.seed_input_file_ids ?? null,
|
|
259
|
+
};
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Read an analysis's raw `seed_input_file_ids`, without the NULL-status collapse
|
|
264
|
+
* {@link loadDataProfileStatus} applies (which hides the seed of any cleared row).
|
|
265
|
+
* Returns the seeded set, or `null` for BOTH "no such analysis row" AND "the row
|
|
266
|
+
* exists but the column is NULL" — the two are deliberately indistinguishable here,
|
|
267
|
+
* exactly as they are to the consumer: both mean "nothing to profile, no claim would
|
|
268
|
+
* match". A stored `[]` returns as an empty array — a real value naming zero files,
|
|
269
|
+
* which a caller refuses distinctly from a missing seed.
|
|
270
|
+
*
|
|
271
|
+
* Advisory only: this read never gates a claim. The seed conjunct that actually makes
|
|
272
|
+
* a seedless `running` row impossible rides in each claim's CAS (see {@link SEEDED});
|
|
273
|
+
* this exists so a caller can name WHY no claim would match before it fires one (the
|
|
274
|
+
* seed-first guard in `triggerDataProfile`).
|
|
275
|
+
*/
|
|
276
|
+
export function loadSeedInputFileIds(pool, analysisId) {
|
|
277
|
+
return tryQuery("dataProfile.loadSeedInputFileIds", async () => {
|
|
278
|
+
const result = await pool.query({
|
|
279
|
+
text: "SELECT seed_input_file_ids AS seed FROM cortex_analysis_state WHERE analysis_id = $1",
|
|
280
|
+
values: [analysisId],
|
|
281
|
+
});
|
|
282
|
+
return result.rows[0]?.seed ?? null;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Postgres-querier type for `state/` modules.
|
|
3
|
+
*
|
|
4
|
+
* Every per-entity module accepts a `Querier` as its first parameter so the
|
|
5
|
+
* same operation works against the harness's connection pool or a
|
|
6
|
+
* single-transaction `PoolClient`. Lifted here to keep the type declared in
|
|
7
|
+
* one place instead of redeclared per file.
|
|
8
|
+
*/
|
|
9
|
+
import type { Pool, PoolClient } from "pg";
|
|
10
|
+
export type Querier = Pool | PoolClient;
|
package/dist/state/db.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Postgres-querier type for `state/` modules.
|
|
3
|
+
*
|
|
4
|
+
* Every per-entity module accepts a `Querier` as its first parameter so the
|
|
5
|
+
* same operation works against the harness's connection pool or a
|
|
6
|
+
* single-transaction `PoolClient`. Lifted here to keep the type declared in
|
|
7
|
+
* one place instead of redeclared per file.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cortex execution state module.
|
|
3
|
+
*
|
|
4
|
+
* Cortex-owned Postgres tables for analysis state, artifact registry,
|
|
5
|
+
* and execution ledgers. Per-entity sub-modules live alongside this barrel;
|
|
6
|
+
* importers may either pull from `./state` (everything) or from the
|
|
7
|
+
* specific entity module (e.g. `./state/runs.js`) when narrow.
|
|
8
|
+
*/
|
|
9
|
+
export { initCortexState } from "./init.js";
|
|
10
|
+
export type { Querier } from "./db.js";
|
|
11
|
+
export { upsertAnalysis, resolveAnalysisBilling, suspendAnalysis, resumeAnalysis, loadAnalysisStatus } from "./analyses.js";
|
|
12
|
+
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, countArtifactsForRun, } from "./artifacts.js";
|
|
13
|
+
export type { RegisterArtifactInput, InputArtifactMeta } from "./artifacts.js";
|
|
14
|
+
export { insertRun, RunDedupCollisionError, updateRunStatus, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
|
|
15
|
+
queryRun, queryActiveRun, queryRunsByAnalysis, queryRunsByThread, } from "./runs.js";
|
|
16
|
+
export type { InsertRunInput } from "./runs.js";
|
|
17
|
+
export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, updateStepExecution, queryStepsByRun } from "./step-executions.js";
|
|
18
|
+
export type { InsertStepExecutionInput, SeedStepExecutionRow, UpdateStepExecutionInput } from "./step-executions.js";
|
|
19
|
+
export { setSandboxRef, setActiveExecId, clearSandboxRef, queryActiveSandboxes, reconcileReapedSandbox } from "./active-sandboxes.js";
|
|
20
|
+
export type { ActiveSandboxRow } from "./active-sandboxes.js";
|
|
21
|
+
export { insertPlan, loadPlan } from "./plans.js";
|
|
22
|
+
export type { InsertPlanInput } from "./plans.js";
|
|
23
|
+
export { tryStartDataProfile, tryRetryDataProfile, tryRerunDataProfile, completeDataProfile, failDataProfile, expireStaleDataProfile, reconcileOrphanedDataProfile, clearDataProfile, loadDataProfileStatus, loadSeedInputFileIds, } from "./data-profile.js";
|
|
24
|
+
export type { DataProfileStatus, DataProfileResult, DataProfileInputFile } from "./data-profile.js";
|
|
25
|
+
export { queryRunCountsByAnalyses, queryThreadCountsByAnalyses, queryDataProfileStatusByAnalyses } from "./analyses-metrics.js";
|
|
26
|
+
export { AnalysisStateRowSchema, ArtifactRole, ArtifactRowSchema, RunStatus, StepExecutionStatus, CortexRunRowSchema, StepExecutionRowSchema, CortexPlanRowSchema, } from "./schema.js";
|
|
27
|
+
export type { AnalysisStateRow, ArtifactRow, CortexRunRow, StepExecutionRow, CortexPlanRow } from "./schema.js";
|
|
28
|
+
export { insertAssessment, updateProgress, setDossier, markFailed, getAssessment, listAssessmentsByOrg, softDeleteAssessment, TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentRowSchema, } from "./target-assessments.js";
|
|
29
|
+
export type { TargetAssessmentStatus, TargetAssessmentRow, TargetAssessmentError, InsertAssessmentInput, ListAssessmentsOptions, } from "./target-assessments.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cortex execution state module.
|
|
3
|
+
*
|
|
4
|
+
* Cortex-owned Postgres tables for analysis state, artifact registry,
|
|
5
|
+
* and execution ledgers. Per-entity sub-modules live alongside this barrel;
|
|
6
|
+
* importers may either pull from `./state` (everything) or from the
|
|
7
|
+
* specific entity module (e.g. `./state/runs.js`) when narrow.
|
|
8
|
+
*/
|
|
9
|
+
export { initCortexState } from "./init.js";
|
|
10
|
+
export { upsertAnalysis, resolveAnalysisBilling, suspendAnalysis, resumeAnalysis, loadAnalysisStatus } from "./analyses.js";
|
|
11
|
+
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, countArtifactsForRun, } from "./artifacts.js";
|
|
12
|
+
export { insertRun, RunDedupCollisionError, updateRunStatus, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
|
|
13
|
+
queryRun, queryActiveRun, queryRunsByAnalysis, queryRunsByThread, } from "./runs.js";
|
|
14
|
+
export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, updateStepExecution, queryStepsByRun } from "./step-executions.js";
|
|
15
|
+
export { setSandboxRef, setActiveExecId, clearSandboxRef, queryActiveSandboxes, reconcileReapedSandbox } from "./active-sandboxes.js";
|
|
16
|
+
export { insertPlan, loadPlan } from "./plans.js";
|
|
17
|
+
export { tryStartDataProfile, tryRetryDataProfile, tryRerunDataProfile, completeDataProfile, failDataProfile, expireStaleDataProfile, reconcileOrphanedDataProfile, clearDataProfile, loadDataProfileStatus, loadSeedInputFileIds, } from "./data-profile.js";
|
|
18
|
+
export { queryRunCountsByAnalyses, queryThreadCountsByAnalyses, queryDataProfileStatusByAnalyses } from "./analyses-metrics.js";
|
|
19
|
+
export { AnalysisStateRowSchema, ArtifactRole, ArtifactRowSchema, RunStatus, StepExecutionStatus, CortexRunRowSchema, StepExecutionRowSchema, CortexPlanRowSchema, } from "./schema.js";
|
|
20
|
+
export { insertAssessment, updateProgress, setDossier, markFailed, getAssessment, listAssessmentsByOrg, softDeleteAssessment, TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentRowSchema, } from "./target-assessments.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cortex state table initialization.
|
|
3
|
+
*
|
|
4
|
+
* Creates `cortex_*` tables on startup using `CREATE TABLE IF NOT EXISTS` +
|
|
5
|
+
* additive `ALTER TABLE ... ADD COLUMN IF NOT EXISTS`. The whole flow is
|
|
6
|
+
* serialized across concurrent replicas with a Postgres advisory lock so
|
|
7
|
+
* simultaneous startups don't race on DDL.
|
|
8
|
+
*/
|
|
9
|
+
import type { Pool } from "pg";
|
|
10
|
+
/**
|
|
11
|
+
* Initialize Cortex state tables. Safe to call on every startup and across
|
|
12
|
+
* concurrent replicas (advisory lock serializes the init flow).
|
|
13
|
+
*/
|
|
14
|
+
export declare function initCortexState(pool: Pool): Promise<void>;
|