@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,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral runner — read-only sandbox execution for ad-hoc data
|
|
3
|
+
* exploration, run as a turn-scoped DBOS workflow.
|
|
4
|
+
*
|
|
5
|
+
* The `run_ephemeral` conversation tool authorizes the run at the async
|
|
6
|
+
* edge, starts this workflow, and awaits its result inline within the chat
|
|
7
|
+
* turn. The workflow is "bare": it has no run-event stream, so `emit` is a
|
|
8
|
+
* no-op and live sandbox progress events are dropped. It is never recovered
|
|
9
|
+
* — chat disconnect cancels it (`DBOS.cancelWorkflow`), and a boot-time sweep
|
|
10
|
+
* cancels any `ephemeral:`-prefixed PENDING workflow a dead pod left behind.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle: create sandbox → build the ephemeral-executor with synthetic
|
|
13
|
+
* step coords (`runId = stepId = "ephemeral"`, the literal the host-managed
|
|
14
|
+
* billing rules key on) → drive `runAgent` over the executor with `durableStep` →
|
|
15
|
+
* final text + step count → teardown the sandbox in `finally` on every
|
|
16
|
+
* terminal path.
|
|
17
|
+
*
|
|
18
|
+
* Read-only is enforced, not aspirational: the executor agent is built with
|
|
19
|
+
* `readOnly: true` (no `write_file`/`edit_file` tools) and its sandbox is
|
|
20
|
+
* provisioned with no read-write mount — only the read-only analysis tree.
|
|
21
|
+
* Container-local `/tmp` stays writable (torn down with the sandbox); nothing
|
|
22
|
+
* persists. The prompt's "you physically cannot write files" is now true.
|
|
23
|
+
*/
|
|
24
|
+
import { DBOS, Error as DBOSErrors } from "@dbos-inc/dbos-sdk";
|
|
25
|
+
import { forSubAgent } from "../auth/types.js";
|
|
26
|
+
import { finalText, runAgent } from "../loop/run-agent.js";
|
|
27
|
+
import { durableStep } from "../loop/run-step.js";
|
|
28
|
+
import { generateExecutionId } from "../sandbox/execution-id.js";
|
|
29
|
+
import { mintSandboxIdentity } from "../sandbox/identity.js";
|
|
30
|
+
import { createEphemeralExecutorAgent } from "../agents/sandbox/ephemeral-executor.js";
|
|
31
|
+
/** Sub-agent identity — appended to `callPath`, set as `agentId`. */
|
|
32
|
+
export const EPHEMERAL_AGENT_ID = "ephemeral-executor";
|
|
33
|
+
/**
|
|
34
|
+
* Synthetic run/step literal stamped into the agent's step coords.
|
|
35
|
+
* Host-managed billing rules key on this literal to recognize chat-turn
|
|
36
|
+
* ephemeral runs (no `cortex_runs` row, no DBOS stream).
|
|
37
|
+
*/
|
|
38
|
+
const EPHEMERAL_RUN_LITERAL = "ephemeral";
|
|
39
|
+
/** Workflow-id prefix — the boot-time never-recover sweep matches on it. */
|
|
40
|
+
export const EPHEMERAL_WORKFLOW_PREFIX = "ephemeral:";
|
|
41
|
+
/** Default budget — chat-turn-scoped, no recovery, no checkpointing. */
|
|
42
|
+
const DEFAULT_DEADLINE_MS = 120_000;
|
|
43
|
+
/** Ephemeral runs have no planner estimate, so the sandbox box is chosen here
|
|
44
|
+
* explicitly — the policy's `ephemeral` spec when supplied, otherwise this
|
|
45
|
+
* mid-range default; either way clamped to cluster limits at create time. */
|
|
46
|
+
const EPHEMERAL_SANDBOX_RESOURCES = { cpu: 4, memoryGb: 8 };
|
|
47
|
+
/**
|
|
48
|
+
* Register the ephemeral workflow with DBOS. Returns the registered callable
|
|
49
|
+
* so the `run_ephemeral` tool can dispatch via `DBOS.startWorkflow`.
|
|
50
|
+
*/
|
|
51
|
+
export function registerEphemeralWorkflow(deps) {
|
|
52
|
+
return DBOS.registerWorkflow((input) => runEphemeralBody(input, deps), { name: "ephemeral" });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Run the ephemeral-executor agent against a fresh read-only sandbox.
|
|
56
|
+
* Throws on sandbox start failure; otherwise returns the agent's final
|
|
57
|
+
* text plus timing. Sandbox teardown fires on every terminal path —
|
|
58
|
+
* success, error, cancel.
|
|
59
|
+
*/
|
|
60
|
+
export async function runEphemeralBody(input, deps) {
|
|
61
|
+
const { runSession } = input;
|
|
62
|
+
if (runSession.scope.kind !== "analysis") {
|
|
63
|
+
throw new Error(`runEphemeralBody requires an analysis-scoped session — got ${runSession.scope.kind}`);
|
|
64
|
+
}
|
|
65
|
+
const analysisId = runSession.scope.analysisId;
|
|
66
|
+
const startedAt = performance.now();
|
|
67
|
+
const executionId = generateExecutionId(EPHEMERAL_AGENT_ID);
|
|
68
|
+
const workflowId = DBOS.workflowID ?? `${EPHEMERAL_WORKFLOW_PREFIX}${executionId}`;
|
|
69
|
+
const childSession = forSubAgent(runSession, EPHEMERAL_AGENT_ID);
|
|
70
|
+
// Resolver throw = loud workflow failure, per the workspace-root-resolution contract.
|
|
71
|
+
const workspaceRoot = deps.resolveWorkspaceRoot(analysisId);
|
|
72
|
+
console.log(`[ephemeral] execution=${executionId} analysis=${analysisId} starting sandbox`);
|
|
73
|
+
const sandbox = await deps.sandboxClient.createSandbox({
|
|
74
|
+
runId: EPHEMERAL_RUN_LITERAL,
|
|
75
|
+
stepId: EPHEMERAL_RUN_LITERAL,
|
|
76
|
+
analysisId,
|
|
77
|
+
execId: null,
|
|
78
|
+
childWorkflowId: workflowId,
|
|
79
|
+
resources: deps.resourcePolicy?.ephemeral ?? EPHEMERAL_SANDBOX_RESOURCES,
|
|
80
|
+
// No read-write step mount — only the read-only analysis tree.
|
|
81
|
+
readOnly: true,
|
|
82
|
+
}, mintSandboxIdentity(EPHEMERAL_RUN_LITERAL));
|
|
83
|
+
try {
|
|
84
|
+
// The fallback reads the CHECKPOINTED clock, not `Date.now()`: `awaitExec`
|
|
85
|
+
// gates on this absolute deadline, and its recovery-pull is a durable step,
|
|
86
|
+
// so a wall-clock deadline that grew on replay would shift which loop
|
|
87
|
+
// iteration crosses the deadline and desynchronise the recorded function-ID
|
|
88
|
+
// sequence (see the harness-durable-runtime spec; sandbox-step.ts does the
|
|
89
|
+
// same). `input.deadlineMs`, when present, is already replay-stable.
|
|
90
|
+
const deadlineAbs = input.deadlineMs ?? (await DBOS.now()) + DEFAULT_DEADLINE_MS;
|
|
91
|
+
const nextFunctionId = makeNextFunctionId();
|
|
92
|
+
const sandboxAgentDeps = {
|
|
93
|
+
provider: deps.provider,
|
|
94
|
+
pool: deps.pool,
|
|
95
|
+
sandboxClient: deps.sandboxClient,
|
|
96
|
+
workspaceFs: deps.workspaceFs,
|
|
97
|
+
embedding: deps.embedding,
|
|
98
|
+
model: deps.model,
|
|
99
|
+
bioKeys: deps.bioKeys,
|
|
100
|
+
step: {
|
|
101
|
+
sandbox,
|
|
102
|
+
workspaceRoot,
|
|
103
|
+
analysisId,
|
|
104
|
+
runId: EPHEMERAL_RUN_LITERAL,
|
|
105
|
+
stepId: EPHEMERAL_RUN_LITERAL,
|
|
106
|
+
workflowId,
|
|
107
|
+
// Enforced read-only: the executor agent gets no write_file/edit_file
|
|
108
|
+
// tools and the sandbox has no read-write mount. This prefix is not a
|
|
109
|
+
// writable location — it only resolves `execute_command`'s default cwd
|
|
110
|
+
// to the read-only analysis-tree root (`/{analysisId}`), where reads land.
|
|
111
|
+
allowedWritePrefix: workspaceRoot,
|
|
112
|
+
nextFunctionId,
|
|
113
|
+
deadlineMs: () => deadlineAbs,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
const agentDef = createEphemeralExecutorAgent(sandboxAgentDeps);
|
|
117
|
+
const agent = input.maxIterations !== undefined ? { ...agentDef, maxIterations: input.maxIterations } : agentDef;
|
|
118
|
+
const signal = new AbortController().signal;
|
|
119
|
+
const { messages: finalMessages } = await runAgent(agent, [{ role: "user", content: input.prompt }], childSession, {
|
|
120
|
+
provider: deps.provider,
|
|
121
|
+
signal,
|
|
122
|
+
emit: () => { },
|
|
123
|
+
runStep: durableStep,
|
|
124
|
+
isFatalLoopError: (err) => err instanceof DBOSErrors.DBOSWorkflowCancelledError,
|
|
125
|
+
});
|
|
126
|
+
const text = finalText(finalMessages);
|
|
127
|
+
const stepsUsed = countAssistantTurns(finalMessages);
|
|
128
|
+
const durationMs = Math.round(performance.now() - startedAt);
|
|
129
|
+
console.log(`[ephemeral] execution=${executionId} completed stepsUsed=${stepsUsed} durationMs=${durationMs}`);
|
|
130
|
+
return { text, stepsUsed, durationMs };
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
134
|
+
console.error(`[ephemeral] execution=${executionId} failed: ${message}`);
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
try {
|
|
139
|
+
await deps.sandboxClient.teardown(sandbox);
|
|
140
|
+
}
|
|
141
|
+
catch (teardownErr) {
|
|
142
|
+
// Teardown is idempotent — "already gone" is success. A failure here
|
|
143
|
+
// is best-effort logged so the chat turn doesn't fail on cleanup.
|
|
144
|
+
console.warn(`[ephemeral] execution=${executionId} teardown failed (non-fatal): ${teardownErr instanceof Error ? teardownErr.message : teardownErr}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Per-call function-id minter — replay-deterministic. */
|
|
149
|
+
function makeNextFunctionId() {
|
|
150
|
+
let n = 0;
|
|
151
|
+
return () => `fn-${(n++).toString(36)}`;
|
|
152
|
+
}
|
|
153
|
+
/** The agent's final assistant turn is the `stepsUsed` proxy — every loop
|
|
154
|
+
* iteration produces one assistant message. */
|
|
155
|
+
function countAssistantTurns(messages) {
|
|
156
|
+
let n = 0;
|
|
157
|
+
for (const m of messages)
|
|
158
|
+
if (m.role === "assistant")
|
|
159
|
+
n++;
|
|
160
|
+
return n;
|
|
161
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `FilesystemArtifactRegistry` — the harness's (cloud-free) `ArtifactRegistry`
|
|
3
|
+
* adapter.
|
|
4
|
+
*
|
|
5
|
+
* Instead of registering provenance with an external ledger, it writes a local
|
|
6
|
+
* provenance index file under the step directory:
|
|
7
|
+
*
|
|
8
|
+
* {sessionPath}/{resourceId}/runs/{runId}/{stepId}/provenance-index.json
|
|
9
|
+
*
|
|
10
|
+
* The index records the step's registered artifacts (analysis-scoped paths +
|
|
11
|
+
* hashes) and the tracked inputs/outputs captured by the `ProvenanceCollector`,
|
|
12
|
+
* so a local embedder (the CLI) retains a queryable lineage record with no
|
|
13
|
+
* cloud dependency. Re-registration merges by output path (latest wins).
|
|
14
|
+
*
|
|
15
|
+
* It returns no external ids — the local `cortex_artifacts` ledger is the only
|
|
16
|
+
* identity store in the cloud-free configuration.
|
|
17
|
+
*/
|
|
18
|
+
import type { ArtifactRegistry } from "./artifact-registry.js";
|
|
19
|
+
export interface FilesystemArtifactRegistryDeps {
|
|
20
|
+
/** Base path holding per-analysis session directories. */
|
|
21
|
+
sessionPath: string;
|
|
22
|
+
}
|
|
23
|
+
/** One registered artifact in the local index. */
|
|
24
|
+
export interface FilesystemArtifactEntry {
|
|
25
|
+
/** Analysis-scoped path (`runs/{runId}/{stepId}/...`). */
|
|
26
|
+
path: string;
|
|
27
|
+
hash: string;
|
|
28
|
+
size: number;
|
|
29
|
+
type: string;
|
|
30
|
+
}
|
|
31
|
+
/** One tracked output's lineage in the local index. */
|
|
32
|
+
export interface FilesystemLineageRecord {
|
|
33
|
+
outputPath: string;
|
|
34
|
+
outputHash: string;
|
|
35
|
+
producer: string;
|
|
36
|
+
scriptPath: string | null;
|
|
37
|
+
inputs: Array<{
|
|
38
|
+
path: string;
|
|
39
|
+
hash: string;
|
|
40
|
+
source: string;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/** Shape of the persisted provenance index file. */
|
|
44
|
+
export interface FilesystemProvenanceIndex {
|
|
45
|
+
resourceId: string;
|
|
46
|
+
runId: string;
|
|
47
|
+
stepId: string;
|
|
48
|
+
updatedAt: string;
|
|
49
|
+
artifacts: FilesystemArtifactEntry[];
|
|
50
|
+
inputs: Array<{
|
|
51
|
+
path: string;
|
|
52
|
+
hash: string;
|
|
53
|
+
source: string;
|
|
54
|
+
}>;
|
|
55
|
+
lineage: FilesystemLineageRecord[];
|
|
56
|
+
}
|
|
57
|
+
export declare function createFilesystemArtifactRegistry(deps: FilesystemArtifactRegistryDeps): ArtifactRegistry;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `FilesystemArtifactRegistry` — the harness's (cloud-free) `ArtifactRegistry`
|
|
3
|
+
* adapter.
|
|
4
|
+
*
|
|
5
|
+
* Instead of registering provenance with an external ledger, it writes a local
|
|
6
|
+
* provenance index file under the step directory:
|
|
7
|
+
*
|
|
8
|
+
* {sessionPath}/{resourceId}/runs/{runId}/{stepId}/provenance-index.json
|
|
9
|
+
*
|
|
10
|
+
* The index records the step's registered artifacts (analysis-scoped paths +
|
|
11
|
+
* hashes) and the tracked inputs/outputs captured by the `ProvenanceCollector`,
|
|
12
|
+
* so a local embedder (the CLI) retains a queryable lineage record with no
|
|
13
|
+
* cloud dependency. Re-registration merges by output path (latest wins).
|
|
14
|
+
*
|
|
15
|
+
* It returns no external ids — the local `cortex_artifacts` ledger is the only
|
|
16
|
+
* identity store in the cloud-free configuration.
|
|
17
|
+
*/
|
|
18
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
19
|
+
import { dirname, join } from "node:path";
|
|
20
|
+
import { runStepDir } from "../workspace/paths.js";
|
|
21
|
+
function indexPath(sessionPath, input) {
|
|
22
|
+
return join(sessionPath, runStepDir(input.resourceId, input.runId, input.stepId), "provenance-index.json");
|
|
23
|
+
}
|
|
24
|
+
async function readIndex(path) {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err.code === "ENOENT")
|
|
30
|
+
return null;
|
|
31
|
+
// Corrupt/partial index (e.g. crash mid-write) → treat as absent and rebuild.
|
|
32
|
+
if (err instanceof SyntaxError)
|
|
33
|
+
return null;
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Merge two keyed lists, latest (incoming) winning per key. */
|
|
38
|
+
function mergeBy(prior, incoming, key) {
|
|
39
|
+
const byKey = new Map();
|
|
40
|
+
for (const item of prior)
|
|
41
|
+
byKey.set(key(item), item);
|
|
42
|
+
for (const item of incoming)
|
|
43
|
+
byKey.set(key(item), item);
|
|
44
|
+
return [...byKey.values()];
|
|
45
|
+
}
|
|
46
|
+
export function createFilesystemArtifactRegistry(deps) {
|
|
47
|
+
const { sessionPath } = deps;
|
|
48
|
+
return {
|
|
49
|
+
async register(input, _session) {
|
|
50
|
+
const { runId, stepId, artifacts, collector } = input;
|
|
51
|
+
if (artifacts.length === 0) {
|
|
52
|
+
return { registered: [], failed: [], failedCount: 0 };
|
|
53
|
+
}
|
|
54
|
+
const dbPathPrefix = `runs/${runId}/${stepId}/`;
|
|
55
|
+
const entries = artifacts.map((a) => ({
|
|
56
|
+
path: `${dbPathPrefix}${a.path}`,
|
|
57
|
+
hash: a.hash ?? "",
|
|
58
|
+
size: a.size,
|
|
59
|
+
type: a.type,
|
|
60
|
+
}));
|
|
61
|
+
const inputs = collector.getTrackedInputs().map((i) => ({
|
|
62
|
+
path: i.path,
|
|
63
|
+
hash: i.hash,
|
|
64
|
+
source: i.source,
|
|
65
|
+
}));
|
|
66
|
+
const lineage = collector.getRecords().map((r) => ({
|
|
67
|
+
outputPath: r.outputPath,
|
|
68
|
+
outputHash: r.outputHash,
|
|
69
|
+
producer: r.producer.type,
|
|
70
|
+
scriptPath: r.scriptPath,
|
|
71
|
+
inputs: r.inputs.map((i) => ({ path: i.path, hash: i.hash, source: i.source })),
|
|
72
|
+
}));
|
|
73
|
+
const path = indexPath(sessionPath, input);
|
|
74
|
+
const prior = await readIndex(path);
|
|
75
|
+
const merged = {
|
|
76
|
+
resourceId: input.resourceId,
|
|
77
|
+
runId,
|
|
78
|
+
stepId,
|
|
79
|
+
updatedAt: new Date().toISOString(),
|
|
80
|
+
artifacts: mergeBy(prior?.artifacts ?? [], entries, (e) => e.path),
|
|
81
|
+
inputs: mergeBy(prior?.inputs ?? [], inputs, (i) => i.path),
|
|
82
|
+
lineage: mergeBy(prior?.lineage ?? [], lineage, (l) => l.outputPath),
|
|
83
|
+
};
|
|
84
|
+
await mkdir(dirname(path), { recursive: true });
|
|
85
|
+
await writeFile(path, JSON.stringify(merged, null, 2));
|
|
86
|
+
// No external identity store in the cloud-free configuration.
|
|
87
|
+
return { registered: [], failed: [], failedCount: 0 };
|
|
88
|
+
},
|
|
89
|
+
// Bytes already live in the local session tree — nothing to upload.
|
|
90
|
+
async sync() { },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ArtifactRegistry } from "./artifact-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Local/OSS artifact-registration seam: `register` records nothing externally
|
|
4
|
+
* and reports zero failures; `sync` is a no-op. The harness writes the local
|
|
5
|
+
* `cortex_artifacts` ledger itself around this seam (see
|
|
6
|
+
* `artifact-registration.ts`), so an embedder with no external provenance
|
|
7
|
+
* system genuinely has nothing to register. `failedCount: 0` is the shape the
|
|
8
|
+
* post-step fail-fast gate reads as success, so the local default never trips
|
|
9
|
+
* it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createNoopArtifactRegistry(): ArtifactRegistry;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local/OSS artifact-registration seam: `register` records nothing externally
|
|
3
|
+
* and reports zero failures; `sync` is a no-op. The harness writes the local
|
|
4
|
+
* `cortex_artifacts` ledger itself around this seam (see
|
|
5
|
+
* `artifact-registration.ts`), so an embedder with no external provenance
|
|
6
|
+
* system genuinely has nothing to register. `failedCount: 0` is the shape the
|
|
7
|
+
* post-step fail-fast gate reads as success, so the local default never trips
|
|
8
|
+
* it.
|
|
9
|
+
*/
|
|
10
|
+
export function createNoopArtifactRegistry() {
|
|
11
|
+
return {
|
|
12
|
+
async register() {
|
|
13
|
+
return { registered: [], failed: [], failedCount: 0 };
|
|
14
|
+
},
|
|
15
|
+
async sync() { },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The harness's post-step pipeline — the per-step bookkeeping that runs after a sandbox
|
|
3
|
+
* agent loop finishes: describe the output files, write an interpretive
|
|
4
|
+
* summary, reconcile + register the artifact manifest, and index the
|
|
5
|
+
* descriptions into the per-analysis vector store.
|
|
6
|
+
*
|
|
7
|
+
* These leaf bodies are host-neutral: the only place an embedder differs is the
|
|
8
|
+
* injected `ArtifactRegistry` (filesystem vs. external provenance) and the
|
|
9
|
+
* write-side `EmbeddingProvider` (billing). The sandbox-step workflow body owns
|
|
10
|
+
* the orchestration — which stage is `DBOS.runStep`-wrapped, which stage is
|
|
11
|
+
* fail-fast vs. best-effort. This module owns only the stage bodies.
|
|
12
|
+
*/
|
|
13
|
+
import type { Pool } from "pg";
|
|
14
|
+
import type { AgentChat, EmbeddingProvider } from "../providers/types.js";
|
|
15
|
+
import type { WorkspaceFilesystem } from "../workspace/filesystem.js";
|
|
16
|
+
import type { ResolveWorkspaceRoot } from "../workspace/paths.js";
|
|
17
|
+
import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
|
|
18
|
+
import type { StepSummary } from "../schemas/step-summary.js";
|
|
19
|
+
import type { ArtifactRegistry } from "./artifact-registry.js";
|
|
20
|
+
import { type FileMetadataEntry } from "./artifact-metadata.js";
|
|
21
|
+
import type { PostStepArtifacts, PostStepContext, StepOutputs } from "../workflows/sandbox-step.js";
|
|
22
|
+
/**
|
|
23
|
+
* The subset of `SandboxStepDeps` the post-step stages consume. The sandbox-step
|
|
24
|
+
* body passes its own `deps` straight through (it is a structural superset).
|
|
25
|
+
*/
|
|
26
|
+
export interface PostStepPipelineDeps {
|
|
27
|
+
readonly pool: Pool;
|
|
28
|
+
/** Non-streaming chat — the metadata + summary sub-agent loops. */
|
|
29
|
+
readonly provider: AgentChat;
|
|
30
|
+
/** Write-side embedder for the vector index. */
|
|
31
|
+
readonly embedding: EmbeddingProvider;
|
|
32
|
+
readonly workspaceFs: WorkspaceFilesystem;
|
|
33
|
+
readonly artifactRegistry: ArtifactRegistry;
|
|
34
|
+
/** Workspace-root resolution seam (see workspace/paths.ts). */
|
|
35
|
+
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
36
|
+
/** Sandbox model id — provenance label for metadata + summary. */
|
|
37
|
+
readonly model: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Describe each manifest file. Returns one entry per file — a file the model
|
|
41
|
+
* fails to describe gets a deterministic fallback, never a dropped entry.
|
|
42
|
+
*/
|
|
43
|
+
export declare function generateStepFileMetadata(deps: PostStepPipelineDeps, postCtx: PostStepContext, manifest: readonly ArtifactManifestEntry[]): Promise<readonly FileMetadataEntry[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Generate the interpretive step summary and persist it to
|
|
46
|
+
* `output/summary.md`. A write failure is non-fatal (logged) — the summary is
|
|
47
|
+
* still returned for vector indexing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateStepSummaryAndWrite(deps: PostStepPipelineDeps, postCtx: PostStepContext, manifest: readonly ArtifactManifestEntry[]): Promise<StepSummary | undefined>;
|
|
50
|
+
/**
|
|
51
|
+
* Reconcile the manifest against disk (drop phantoms, rehash) and register the
|
|
52
|
+
* survivors with the local ledger + the injected `ArtifactRegistry`. Fail-fast
|
|
53
|
+
* (see the artifact-manifest spec): a non-zero `externalFailed` is a persistent rejection that
|
|
54
|
+
* orphans real outputs, so it throws with the per-file detail (the OSS
|
|
55
|
+
* filesystem registry returns `externalFailed: 0`, so it never trips). Returns
|
|
56
|
+
* the reconciled manifest.
|
|
57
|
+
*/
|
|
58
|
+
export declare function reconcileAndRegisterStepArtifacts(deps: PostStepPipelineDeps, postCtx: PostStepContext, manifest: readonly ArtifactManifestEntry[]): Promise<readonly ArtifactManifestEntry[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Vector-index the threaded file descriptions + summary into the per-analysis
|
|
61
|
+
* pgvector store. Best-effort (see the artifact-manifest spec): indexing degrades on any failure
|
|
62
|
+
* without failing the step — the internal try/catch logs + swallows.
|
|
63
|
+
*/
|
|
64
|
+
export declare function vectorIndexStepOutputs(deps: PostStepPipelineDeps, postCtx: PostStepContext, artifacts: PostStepArtifacts): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Assemble the step-detail payload (file tree, summary markdown, output file
|
|
67
|
+
* descriptions) from the threaded post-step products. Pure — returns
|
|
68
|
+
* `undefined` when nothing was produced.
|
|
69
|
+
*/
|
|
70
|
+
export declare function collectStepOutputs(postCtx: PostStepContext, artifacts: PostStepArtifacts): StepOutputs | undefined;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The harness's post-step pipeline — the per-step bookkeeping that runs after a sandbox
|
|
3
|
+
* agent loop finishes: describe the output files, write an interpretive
|
|
4
|
+
* summary, reconcile + register the artifact manifest, and index the
|
|
5
|
+
* descriptions into the per-analysis vector store.
|
|
6
|
+
*
|
|
7
|
+
* These leaf bodies are host-neutral: the only place an embedder differs is the
|
|
8
|
+
* injected `ArtifactRegistry` (filesystem vs. external provenance) and the
|
|
9
|
+
* write-side `EmbeddingProvider` (billing). The sandbox-step workflow body owns
|
|
10
|
+
* the orchestration — which stage is `DBOS.runStep`-wrapped, which stage is
|
|
11
|
+
* fail-fast vs. best-effort. This module owns only the stage bodies.
|
|
12
|
+
*/
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { unwrapOrThrow } from "../lib/result.js";
|
|
15
|
+
import { writeFileWithinRoot } from "../lib/fs-helpers.js";
|
|
16
|
+
import { registerStepArtifacts } from "./artifact-registration.js";
|
|
17
|
+
import { reconcileManifestWithDisk } from "./reconcile-manifest.js";
|
|
18
|
+
import { generateFileMetadata as coreGenerateFileMetadata } from "./artifact-metadata.js";
|
|
19
|
+
import { generateStepSummary as coreGenerateStepSummary } from "./step-summary.js";
|
|
20
|
+
import { createVectorStore } from "../state/vector-store.js";
|
|
21
|
+
import { ensureSearchIndex, searchIndexName } from "../workspace/search-config.js";
|
|
22
|
+
/**
|
|
23
|
+
* Describe each manifest file. Returns one entry per file — a file the model
|
|
24
|
+
* fails to describe gets a deterministic fallback, never a dropped entry.
|
|
25
|
+
*/
|
|
26
|
+
export async function generateStepFileMetadata(deps, postCtx, manifest) {
|
|
27
|
+
const { input, session, transcript, writePrefix } = postCtx;
|
|
28
|
+
if (manifest.length === 0)
|
|
29
|
+
return [];
|
|
30
|
+
const dbPathPrefix = `runs/${input.runId}/${input.stepId}/`;
|
|
31
|
+
const artifactsForMeta = manifest.map((a) => ({
|
|
32
|
+
dbPath: `${dbPathPrefix}${a.path}`,
|
|
33
|
+
displayPath: a.path,
|
|
34
|
+
sizeBytes: a.size,
|
|
35
|
+
}));
|
|
36
|
+
const result = await coreGenerateFileMetadata({
|
|
37
|
+
provider: deps.provider,
|
|
38
|
+
session,
|
|
39
|
+
artifacts: artifactsForMeta,
|
|
40
|
+
resourceId: input.analysisId,
|
|
41
|
+
extraMetadata: {
|
|
42
|
+
role: "step_output",
|
|
43
|
+
producerStep: input.stepId,
|
|
44
|
+
producerRun: input.runId,
|
|
45
|
+
producerAgent: input.agentId,
|
|
46
|
+
},
|
|
47
|
+
modelId: deps.model,
|
|
48
|
+
messages: transcript,
|
|
49
|
+
workspaceFs: deps.workspaceFs,
|
|
50
|
+
workingDir: writePrefix,
|
|
51
|
+
});
|
|
52
|
+
return result.entries;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate the interpretive step summary and persist it to
|
|
56
|
+
* `output/summary.md`. A write failure is non-fatal (logged) — the summary is
|
|
57
|
+
* still returned for vector indexing.
|
|
58
|
+
*/
|
|
59
|
+
export async function generateStepSummaryAndWrite(deps, postCtx, manifest) {
|
|
60
|
+
const { input, session, transcript, writePrefix } = postCtx;
|
|
61
|
+
const summary = await coreGenerateStepSummary({
|
|
62
|
+
provider: deps.provider,
|
|
63
|
+
session,
|
|
64
|
+
modelId: deps.model,
|
|
65
|
+
messages: transcript,
|
|
66
|
+
artifactPaths: manifest.map((a) => a.path),
|
|
67
|
+
workspaceFs: deps.workspaceFs,
|
|
68
|
+
workingDir: writePrefix,
|
|
69
|
+
stepId: input.stepId,
|
|
70
|
+
agentId: input.agentId,
|
|
71
|
+
runId: input.runId,
|
|
72
|
+
});
|
|
73
|
+
if (summary && summary.markdown.trim().length > 0) {
|
|
74
|
+
try {
|
|
75
|
+
// Host-side write into the step's own RW subtree. Confine to the step
|
|
76
|
+
// prefix (not the whole workspace) so a symlink a compromised agent
|
|
77
|
+
// planted cannot redirect it onto a host file — and so this write can
|
|
78
|
+
// never reach the hard-linked `data/` inputs, which are RO by design.
|
|
79
|
+
await writeFileWithinRoot(writePrefix, join(writePrefix, "output", "summary.md"), summary.markdown);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.warn(`[post-step.summary] writeFile output/summary.md failed for ${input.stepId}: ${err instanceof Error ? err.message : err}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return summary;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Reconcile the manifest against disk (drop phantoms, rehash) and register the
|
|
89
|
+
* survivors with the local ledger + the injected `ArtifactRegistry`. Fail-fast
|
|
90
|
+
* (see the artifact-manifest spec): a non-zero `externalFailed` is a persistent rejection that
|
|
91
|
+
* orphans real outputs, so it throws with the per-file detail (the OSS
|
|
92
|
+
* filesystem registry returns `externalFailed: 0`, so it never trips). Returns
|
|
93
|
+
* the reconciled manifest.
|
|
94
|
+
*/
|
|
95
|
+
export async function reconcileAndRegisterStepArtifacts(deps, postCtx, manifest) {
|
|
96
|
+
const { input, session, lineageCollector } = postCtx;
|
|
97
|
+
const reconciled = await reconcileManifestWithDisk({
|
|
98
|
+
workspaceRoot: deps.resolveWorkspaceRoot(input.analysisId),
|
|
99
|
+
resourceId: input.analysisId,
|
|
100
|
+
runId: input.runId,
|
|
101
|
+
stepId: input.stepId,
|
|
102
|
+
agentId: input.agentId,
|
|
103
|
+
manifest: [...manifest],
|
|
104
|
+
collector: lineageCollector,
|
|
105
|
+
});
|
|
106
|
+
if (reconciled.manifest.length === 0)
|
|
107
|
+
return reconciled.manifest;
|
|
108
|
+
const reg = await registerStepArtifacts(deps.pool, deps.artifactRegistry, {
|
|
109
|
+
resourceId: input.analysisId,
|
|
110
|
+
runId: input.runId,
|
|
111
|
+
stepId: input.stepId,
|
|
112
|
+
artifacts: reconciled.manifest,
|
|
113
|
+
collector: lineageCollector,
|
|
114
|
+
}, session);
|
|
115
|
+
if (reg.externalFailed > 0) {
|
|
116
|
+
const wholeActivityFailed = reg.externalRegistered === 0;
|
|
117
|
+
const detail = reg.failureDetails.map((f) => `${f.path}: ${f.error}`).join("\n ");
|
|
118
|
+
const msg = `[post-step.reconcile] external registration failed for ${input.stepId}: ` +
|
|
119
|
+
`${reg.externalFailed} row(s) rejected, ${reg.externalRegistered}/${reg.localCount} local artifact(s) registered` +
|
|
120
|
+
(wholeActivityFailed ? " (WHOLE ACTIVITY ROLLED BACK — outputs orphaned)" : "") +
|
|
121
|
+
(detail ? `\n ${detail}` : "");
|
|
122
|
+
console.error(msg);
|
|
123
|
+
throw new Error(msg);
|
|
124
|
+
}
|
|
125
|
+
return reconciled.manifest;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Vector-index the threaded file descriptions + summary into the per-analysis
|
|
129
|
+
* pgvector store. Best-effort (see the artifact-manifest spec): indexing degrades on any failure
|
|
130
|
+
* without failing the step — the internal try/catch logs + swallows.
|
|
131
|
+
*/
|
|
132
|
+
export async function vectorIndexStepOutputs(deps, postCtx, artifacts) {
|
|
133
|
+
const { input } = postCtx;
|
|
134
|
+
const { metadataEntries, summary, reconciledManifest } = artifacts;
|
|
135
|
+
try {
|
|
136
|
+
await ensureSearchIndex(deps.pool, input.analysisId, deps.embedding.dimensions);
|
|
137
|
+
const vectorStore = createVectorStore(deps.pool);
|
|
138
|
+
const indexName = searchIndexName(input.analysisId);
|
|
139
|
+
const embedOne = async (text) => {
|
|
140
|
+
const [vec] = unwrapOrThrow(await deps.embedding.embed([text], postCtx.session));
|
|
141
|
+
if (!vec)
|
|
142
|
+
throw new Error("vectorIndexStepOutputs: empty embedding response");
|
|
143
|
+
return vec;
|
|
144
|
+
};
|
|
145
|
+
const dbPathPrefix = `runs/${input.runId}/${input.stepId}/`;
|
|
146
|
+
const survivingPaths = new Set(reconciledManifest.map((a) => a.path));
|
|
147
|
+
const liveMetadata = metadataEntries.filter((e) => survivingPaths.has(e.dbPath.slice(dbPathPrefix.length)));
|
|
148
|
+
for (const entry of liveMetadata) {
|
|
149
|
+
const embedding = await embedOne(entry.description);
|
|
150
|
+
unwrapOrThrow(await vectorStore.upsert({
|
|
151
|
+
indexName,
|
|
152
|
+
vectors: [embedding],
|
|
153
|
+
metadata: [{ text: entry.description, type: "output", ...entry.metadata }],
|
|
154
|
+
ids: [`/${input.analysisId}/${entry.dbPath}`],
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
if (summary && summary.markdown.trim().length > 0) {
|
|
158
|
+
const relPath = `runs/${input.runId}/${input.stepId}/output/summary.md`;
|
|
159
|
+
const summaryDbPath = `/${input.analysisId}/${relPath}`;
|
|
160
|
+
const summaryEmbedding = await embedOne(summary.markdown);
|
|
161
|
+
unwrapOrThrow(await vectorStore.upsert({
|
|
162
|
+
indexName,
|
|
163
|
+
vectors: [summaryEmbedding],
|
|
164
|
+
metadata: [
|
|
165
|
+
{
|
|
166
|
+
text: summary.markdown,
|
|
167
|
+
type: "summary",
|
|
168
|
+
stepId: input.stepId,
|
|
169
|
+
runId: input.runId,
|
|
170
|
+
agentId: input.agentId,
|
|
171
|
+
path: relPath,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
ids: [summaryDbPath],
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
console.warn(`[post-step.vector-index] indexing failed for ${input.stepId}: ${err instanceof Error ? err.message : err}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Assemble the step-detail payload (file tree, summary markdown, output file
|
|
184
|
+
* descriptions) from the threaded post-step products. Pure — returns
|
|
185
|
+
* `undefined` when nothing was produced.
|
|
186
|
+
*/
|
|
187
|
+
export function collectStepOutputs(postCtx, artifacts) {
|
|
188
|
+
const { input } = postCtx;
|
|
189
|
+
const { metadataEntries, summary, reconciledManifest } = artifacts;
|
|
190
|
+
const dbPathPrefix = `runs/${input.runId}/${input.stepId}/`;
|
|
191
|
+
const descByPath = new Map();
|
|
192
|
+
for (const e of metadataEntries) {
|
|
193
|
+
const rel = e.dbPath.startsWith(dbPathPrefix) ? e.dbPath.slice(dbPathPrefix.length) : e.dbPath;
|
|
194
|
+
descByPath.set(rel, e.description);
|
|
195
|
+
}
|
|
196
|
+
const files = reconciledManifest.map((a) => ({
|
|
197
|
+
path: a.path,
|
|
198
|
+
size: a.size,
|
|
199
|
+
fileType: a.type,
|
|
200
|
+
description: descByPath.get(a.path) ?? "",
|
|
201
|
+
}));
|
|
202
|
+
const summaryMarkdown = summary?.markdown ?? "";
|
|
203
|
+
if (files.length === 0 && summaryMarkdown.trim().length === 0) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
return { files, summaryMarkdown };
|
|
207
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-step helper — disk-walk of a step's writable artifact directory.
|
|
3
|
+
*
|
|
4
|
+
* The step's runtime input/script lineage rides on the step-scoped
|
|
5
|
+
* `ProvenanceCollector` the sandbox-step body threads through
|
|
6
|
+
* `PostStepContext` (fed per-exec during the agent loop). This module only
|
|
7
|
+
* owns the manifest source: walking the writable step dir and hashing each
|
|
8
|
+
* file from disk.
|
|
9
|
+
*/
|
|
10
|
+
import { type ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
|
|
11
|
+
/**
|
|
12
|
+
* Walk a step's writable artifact directory and produce a fully-hashed
|
|
13
|
+
* `ArtifactManifestEntry[]`. Skips IGNORED_DIRS. Paths are relative to
|
|
14
|
+
* `writePrefix`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function walkStepArtifacts(args: {
|
|
17
|
+
readonly writePrefix: string;
|
|
18
|
+
readonly stepId: string;
|
|
19
|
+
readonly runId: string;
|
|
20
|
+
}): Promise<ArtifactManifestEntry[]>;
|