@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,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace read seam — `{ readFile, list, stat }` over the analysis
|
|
3
|
+
* workspace tree. A construction-time dependency (see the harness-durable-runtime spec): the composition
|
|
4
|
+
* root builds one `WorkspaceFilesystem` and passes it to tool factories.
|
|
5
|
+
*
|
|
6
|
+
* Reads resolve from the analysis's workspace root when the file is present and
|
|
7
|
+
* fall back to an embedder-supplied presigned URL otherwise. The seam writes no
|
|
8
|
+
* provenance — reads don't produce lineage — and does not depend on any
|
|
9
|
+
* sandbox.
|
|
10
|
+
*
|
|
11
|
+
* Scoping is enforced once, here, by `resolveWorkspacePath`: any path that
|
|
12
|
+
* escapes the analysis's resolved workspace root is rejected before any I/O.
|
|
13
|
+
* `read_file` / `grep` / any future reader share the chokepoint.
|
|
14
|
+
*
|
|
15
|
+
* Reads roam the whole tree read-only, so the seam never confines. Relative
|
|
16
|
+
* paths resolve against the caller-supplied `workingDir` (frame-local, per
|
|
17
|
+
* the harness-workspace-tools spec);
|
|
18
|
+
* when omitted they resolve against the analysis root, which is the
|
|
19
|
+
* conversation-agent behaviour. Sandbox read tools pass the step working
|
|
20
|
+
* directory so a relative path reads back what a relative write wrote.
|
|
21
|
+
*
|
|
22
|
+
* Failure is modelled as values (see `lib/fs-result.ts`): the public methods
|
|
23
|
+
* return `ResultAsync<…, FsError>`. The `not_found` / `out_of_scope` /
|
|
24
|
+
* `truncated` outcomes are NOT failures — they ride the OK channel as `.kind`
|
|
25
|
+
* data variants. `err(FsError)` is reserved for a genuine I/O failure
|
|
26
|
+
* (permission, `EISDIR`, a presigned-fetch throw). An `AbortError` raised
|
|
27
|
+
* inside a streamed read is control-flow — the streaming/iteration body is kept
|
|
28
|
+
* OUTSIDE `tryFs`, so only the discrete `fs.open` / `fs.read` / `fs.readFile`
|
|
29
|
+
* calls become `err`.
|
|
30
|
+
*/
|
|
31
|
+
import { open as fsOpen, readFile as fsReadFile, readdir as fsReaddir, stat as fsStat } from "node:fs/promises";
|
|
32
|
+
import { createReadStream } from "node:fs";
|
|
33
|
+
import { createInterface } from "node:readline";
|
|
34
|
+
import { join } from "node:path";
|
|
35
|
+
import { ResultAsync, err, errAsync, ok } from "neverthrow";
|
|
36
|
+
import { scopeResource } from "../auth/types.js";
|
|
37
|
+
import { tryFetch, tryFs } from "../lib/fs-result.js";
|
|
38
|
+
import { classifyWithinRoot } from "../lib/fs-helpers.js";
|
|
39
|
+
import { resolveWorkspacePath } from "./paths.js";
|
|
40
|
+
// ── Constructor ───────────────────────────────────────────────────────────
|
|
41
|
+
export function createWorkspaceFilesystem(deps) {
|
|
42
|
+
const { resolveWorkspaceRoot, presignedFallback } = deps;
|
|
43
|
+
/**
|
|
44
|
+
* `ResolveWorkspaceRoot` signals an unresolvable resource by throwing — the contract that
|
|
45
|
+
* makes a resolution failure inside a DBOS body a durably-failed step. This seam is not a
|
|
46
|
+
* DBOS body: it promises `Result`, and the read tools it backs are reachable from a live
|
|
47
|
+
* chat turn whose analysis folder may have been moved or deleted since the turn began.
|
|
48
|
+
* Convert at the boundary so an unresolvable root is a value here, not an exception that
|
|
49
|
+
* only survives because some caller happens to wrap it.
|
|
50
|
+
*/
|
|
51
|
+
function resolveFor(session, path, workingDir) {
|
|
52
|
+
const { resourceId: analysisId } = scopeResource(session.scope);
|
|
53
|
+
let workspaceRoot;
|
|
54
|
+
try {
|
|
55
|
+
workspaceRoot = resolveWorkspaceRoot(analysisId);
|
|
56
|
+
}
|
|
57
|
+
catch (cause) {
|
|
58
|
+
return err({ type: "read_failed", op: "workspace.resolveWorkspaceRoot", path: analysisId, cause });
|
|
59
|
+
}
|
|
60
|
+
return ok({ resolved: resolveWorkspacePath({ workspaceRoot, analysisId, path, workingDir }), workspaceRoot });
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Lexical resolution PLUS a symlink-following confinement check — the single
|
|
64
|
+
* chokepoint every read tool (`read_file`, `grep`, `list`, `stat`) funnels
|
|
65
|
+
* through. `resolveWorkspacePath` is purely lexical, so a symlink an agent
|
|
66
|
+
* planted in its writable step dir (pointing at a host file outside the tree)
|
|
67
|
+
* would otherwise be read through by this host process. `classifyWithinRoot`
|
|
68
|
+
* follows the link: an `escaped` verdict is downgraded to `out_of_scope`; an
|
|
69
|
+
* `absent` path passes through unchanged so the caller's own not-found /
|
|
70
|
+
* presigned-fallback handling still runs (a non-existent path leaks nothing).
|
|
71
|
+
*/
|
|
72
|
+
function confinedResolve(session, path, workingDir) {
|
|
73
|
+
const base = resolveFor(session, path, workingDir);
|
|
74
|
+
if (base.isErr())
|
|
75
|
+
return errAsync(base.error);
|
|
76
|
+
const { resolved, workspaceRoot } = base.value;
|
|
77
|
+
if (resolved.kind === "out_of_scope")
|
|
78
|
+
return okAsync(resolved);
|
|
79
|
+
return ResultAsync.fromPromise(classifyWithinRoot(workspaceRoot, resolved.absolute), (cause) => ({
|
|
80
|
+
type: "read_failed",
|
|
81
|
+
op: "workspace.confineRealpath",
|
|
82
|
+
path: resolved.absolute,
|
|
83
|
+
cause,
|
|
84
|
+
})).map((verdict) => (verdict === "escaped" ? { kind: "out_of_scope" } : resolved));
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
readFile({ session, path, maxBytes, headLines, tailLines, workingDir }) {
|
|
88
|
+
return confinedResolve(session, path, workingDir).andThen((resolved) => {
|
|
89
|
+
if (resolved.kind === "out_of_scope") {
|
|
90
|
+
return okAsync({ kind: "out_of_scope" });
|
|
91
|
+
}
|
|
92
|
+
const absolute = resolved.absolute;
|
|
93
|
+
const relative = resolved.relative;
|
|
94
|
+
return safeStat(absolute).andThen((localStat) => {
|
|
95
|
+
if (localStat?.isFile()) {
|
|
96
|
+
if (headLines !== undefined) {
|
|
97
|
+
return readHeadLines(absolute, headLines, maxBytes);
|
|
98
|
+
}
|
|
99
|
+
if (tailLines !== undefined) {
|
|
100
|
+
return readTailLines(absolute, localStat.size, tailLines, maxBytes);
|
|
101
|
+
}
|
|
102
|
+
return readWithCap(absolute, localStat.size, maxBytes);
|
|
103
|
+
}
|
|
104
|
+
if (presignedFallback) {
|
|
105
|
+
return tryFetch("workspace.presignedFetch", () => presignedFallback.fetch({ session, relativePath: relative }), relative).map((content) => {
|
|
106
|
+
if (content !== null) {
|
|
107
|
+
if (headLines !== undefined)
|
|
108
|
+
return sliceHeadLines(content, headLines, maxBytes);
|
|
109
|
+
if (tailLines !== undefined)
|
|
110
|
+
return sliceTailLines(content, tailLines, maxBytes);
|
|
111
|
+
return capBuffer(content, maxBytes);
|
|
112
|
+
}
|
|
113
|
+
return { kind: "not_found" };
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return okAsync({ kind: "not_found" });
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
list({ session, path, workingDir }) {
|
|
121
|
+
return confinedResolve(session, path, workingDir).andThen((resolved) => {
|
|
122
|
+
if (resolved.kind === "out_of_scope") {
|
|
123
|
+
return okAsync({ kind: "out_of_scope" });
|
|
124
|
+
}
|
|
125
|
+
const absolute = resolved.absolute;
|
|
126
|
+
return tryFs("workspace.list", () => fsReaddir(absolute, { withFileTypes: true }), { path: absolute, onAbsent: () => ({ notFound: true }) }).andThen((dirents) => {
|
|
127
|
+
if ("notFound" in dirents)
|
|
128
|
+
return okAsync({ kind: "not_found" });
|
|
129
|
+
return collectEntries(absolute, dirents).map((entries) => ({ kind: "ok", entries }));
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
stat({ session, path, workingDir }) {
|
|
134
|
+
return confinedResolve(session, path, workingDir).andThen((resolved) => {
|
|
135
|
+
if (resolved.kind === "out_of_scope") {
|
|
136
|
+
return okAsync({ kind: "out_of_scope" });
|
|
137
|
+
}
|
|
138
|
+
return safeStat(resolved.absolute).map((s) => {
|
|
139
|
+
if (!s)
|
|
140
|
+
return { kind: "not_found" };
|
|
141
|
+
return {
|
|
142
|
+
kind: "ok",
|
|
143
|
+
type: s.isDirectory() ? "directory" : "file",
|
|
144
|
+
size: s.size,
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// ── Helpers ───────────────────────────────────────────────────────────────
|
|
152
|
+
/** A bare `ok(value)` as a `ResultAsync`, with no `fs` call to wrap. */
|
|
153
|
+
function okAsync(value) {
|
|
154
|
+
return new ResultAsync(Promise.resolve(ok(value)));
|
|
155
|
+
}
|
|
156
|
+
/** Stat a path; absence (`ENOENT`/`ENOTDIR`) → `ok(null)`, genuine I/O → `err`. */
|
|
157
|
+
function safeStat(absolute) {
|
|
158
|
+
return tryFs("workspace.stat", () => fsStat(absolute), {
|
|
159
|
+
path: absolute,
|
|
160
|
+
onAbsent: () => null,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/** Stat each directory entry to attach a size; absence/I/O failures degrade to no size. */
|
|
164
|
+
function collectEntries(dir, dirents) {
|
|
165
|
+
return ResultAsync.combine(dirents.map((d) => {
|
|
166
|
+
if (d.isDirectory())
|
|
167
|
+
return okAsync({ name: d.name, type: "directory" });
|
|
168
|
+
return safeStat(join(dir, d.name)).map((s) => ({ name: d.name, type: "file", size: s?.size ?? undefined }));
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
function readWithCap(absolute, totalSize, maxBytes) {
|
|
172
|
+
if (maxBytes !== undefined && totalSize > maxBytes) {
|
|
173
|
+
return tryFs("workspace.readCapped", async () => {
|
|
174
|
+
const fh = await fsOpen(absolute, "r");
|
|
175
|
+
try {
|
|
176
|
+
const buf = Buffer.alloc(maxBytes);
|
|
177
|
+
await fh.read(buf, 0, maxBytes, 0);
|
|
178
|
+
return { kind: "truncated", content: buf, totalSize };
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await fh.close();
|
|
182
|
+
}
|
|
183
|
+
}, { path: absolute });
|
|
184
|
+
}
|
|
185
|
+
return tryFs("workspace.readFile", async () => ({ kind: "ok", content: await fsReadFile(absolute), truncated: false }), { path: absolute });
|
|
186
|
+
}
|
|
187
|
+
function capBuffer(content, maxBytes) {
|
|
188
|
+
if (maxBytes !== undefined && content.length > maxBytes) {
|
|
189
|
+
return {
|
|
190
|
+
kind: "truncated",
|
|
191
|
+
content: content.subarray(0, maxBytes),
|
|
192
|
+
totalSize: content.length,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return { kind: "ok", content, truncated: false };
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Stream the first `headLines` lines from disk, byte-bounded by `maxBytes`.
|
|
199
|
+
* Stops at whichever cap binds first; the stream is destroyed eagerly so
|
|
200
|
+
* we never read past the cap into RAM.
|
|
201
|
+
*
|
|
202
|
+
* The streaming/iteration body is kept OUTSIDE `tryFs` — an `AbortError` raised
|
|
203
|
+
* inside it is control-flow and must propagate, not become `err`. Only the
|
|
204
|
+
* follow-up `safeStat` (a discrete `fs` call) flows the `FsError` channel.
|
|
205
|
+
*/
|
|
206
|
+
function readHeadLines(absolute, headLines, maxBytes) {
|
|
207
|
+
return new ResultAsync((async () => {
|
|
208
|
+
const stream = createReadStream(absolute, { highWaterMark: 16 * 1024 });
|
|
209
|
+
const rl = createInterface({ input: stream, crlfDelay: Infinity });
|
|
210
|
+
const collected = [];
|
|
211
|
+
let bytes = 0;
|
|
212
|
+
let truncated = false;
|
|
213
|
+
try {
|
|
214
|
+
for await (const line of rl) {
|
|
215
|
+
const lineBytes = Buffer.byteLength(line, "utf8") + 1;
|
|
216
|
+
if (maxBytes !== undefined && bytes + lineBytes > maxBytes) {
|
|
217
|
+
truncated = true;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
collected.push(line);
|
|
221
|
+
bytes += lineBytes;
|
|
222
|
+
if (collected.length >= headLines)
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
rl.close();
|
|
228
|
+
stream.destroy();
|
|
229
|
+
}
|
|
230
|
+
const content = Buffer.from(collected.join("\n"));
|
|
231
|
+
if (truncated) {
|
|
232
|
+
// Total size is unknown without a full stat; report it as a separate read.
|
|
233
|
+
return (await safeStat(absolute)).map((s) => ({
|
|
234
|
+
kind: "truncated",
|
|
235
|
+
content,
|
|
236
|
+
totalSize: s?.size ?? content.length,
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
// Whether the loop exhausted the file or hit the line cap, the agent asked
|
|
240
|
+
// for exactly this window, so this is `ok` not `truncated`. The tool layer
|
|
241
|
+
// reports `mode: "head"` so the agent knows it's a window.
|
|
242
|
+
return ok({ kind: "ok", content, truncated: false });
|
|
243
|
+
})());
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Read the last `tailLines` lines via a windowed read from the end. The
|
|
247
|
+
* window size is bounded by `maxBytes` (default cap caller-supplied), so we
|
|
248
|
+
* never page in the whole file. If the window doesn't start at offset 0, the
|
|
249
|
+
* first line in the window is partial and is dropped.
|
|
250
|
+
*
|
|
251
|
+
* The discrete `fs.open` / `fh.read` calls are wrapped in `tryFs`; the buffer
|
|
252
|
+
* slicing is pure and runs inside the same `fn`.
|
|
253
|
+
*/
|
|
254
|
+
function readTailLines(absolute, totalSize, tailLines, maxBytes) {
|
|
255
|
+
return tryFs("workspace.readTail", async () => {
|
|
256
|
+
const windowSize = Math.min(totalSize, maxBytes ?? totalSize);
|
|
257
|
+
const offset = totalSize - windowSize;
|
|
258
|
+
const fh = await fsOpen(absolute, "r");
|
|
259
|
+
try {
|
|
260
|
+
const buf = Buffer.alloc(windowSize);
|
|
261
|
+
if (windowSize > 0) {
|
|
262
|
+
await fh.read(buf, 0, windowSize, offset);
|
|
263
|
+
}
|
|
264
|
+
const allLines = buf.toString("utf8").split(/\r?\n/);
|
|
265
|
+
// Drop the partial leading line if the window doesn't cover the file start.
|
|
266
|
+
const candidateLines = offset > 0 ? allLines.slice(1) : allLines;
|
|
267
|
+
const sliced = candidateLines.length > tailLines ? candidateLines.slice(-tailLines) : candidateLines;
|
|
268
|
+
const content = Buffer.from(sliced.join("\n"));
|
|
269
|
+
const gotEnoughLines = sliced.length >= tailLines || offset === 0;
|
|
270
|
+
if (!gotEnoughLines) {
|
|
271
|
+
return { kind: "truncated", content, totalSize };
|
|
272
|
+
}
|
|
273
|
+
return { kind: "ok", content, truncated: false };
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
await fh.close();
|
|
277
|
+
}
|
|
278
|
+
}, { path: absolute });
|
|
279
|
+
}
|
|
280
|
+
function sliceHeadLines(content, headLines, maxBytes) {
|
|
281
|
+
const capped = maxBytes !== undefined && content.length > maxBytes ? content.subarray(0, maxBytes) : content;
|
|
282
|
+
const lines = capped.toString("utf8").split(/\r?\n/);
|
|
283
|
+
const slice = lines.slice(0, headLines);
|
|
284
|
+
const out = Buffer.from(slice.join("\n"));
|
|
285
|
+
if (maxBytes !== undefined && content.length > maxBytes && slice.length < headLines) {
|
|
286
|
+
return { kind: "truncated", content: out, totalSize: content.length };
|
|
287
|
+
}
|
|
288
|
+
return { kind: "ok", content: out, truncated: false };
|
|
289
|
+
}
|
|
290
|
+
function sliceTailLines(content, tailLines, maxBytes) {
|
|
291
|
+
if (maxBytes === undefined || content.length <= maxBytes) {
|
|
292
|
+
const lines = content.toString("utf8").split(/\r?\n/);
|
|
293
|
+
const slice = lines.length > tailLines ? lines.slice(-tailLines) : lines;
|
|
294
|
+
return { kind: "ok", content: Buffer.from(slice.join("\n")), truncated: false };
|
|
295
|
+
}
|
|
296
|
+
const window = content.subarray(content.length - maxBytes);
|
|
297
|
+
const lines = window.toString("utf8").split(/\r?\n/).slice(1);
|
|
298
|
+
const slice = lines.length > tailLines ? lines.slice(-tailLines) : lines;
|
|
299
|
+
const out = Buffer.from(slice.join("\n"));
|
|
300
|
+
if (slice.length < tailLines) {
|
|
301
|
+
return { kind: "truncated", content: out, totalSize: content.length };
|
|
302
|
+
}
|
|
303
|
+
return { kind: "ok", content: out, truncated: false };
|
|
304
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mount strategy — single source of truth for workspace/pod mount paths.
|
|
3
|
+
*
|
|
4
|
+
* Single-mount model: one workspace mount covers the full analysis tree.
|
|
5
|
+
* Write protection is enforced via K8s RO volumeMount (execute_command) and
|
|
6
|
+
* by the harness write guard at the workspace-filesystem layer. Pod mounts
|
|
7
|
+
* are nested (K8s handles this fine — most-specific path wins).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Canonical paths for a step.
|
|
11
|
+
*
|
|
12
|
+
* ANALYSIS is the single workspace mount (covers the full analysis tree).
|
|
13
|
+
* ARTIFACTS is a subpath within that mount (the step's writable area, used as CWD).
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildMountPaths(resourceId: string, runId: string, stepId: string): {
|
|
16
|
+
/** Full analysis tree — single workspace mount. */
|
|
17
|
+
readonly ANALYSIS: `/${string}`;
|
|
18
|
+
/** Step's writable area — subpath within ANALYSIS, used as CWD. */
|
|
19
|
+
readonly ARTIFACTS: `/${string}`;
|
|
20
|
+
};
|
|
21
|
+
export interface PodMount {
|
|
22
|
+
mountPath: string;
|
|
23
|
+
subPath: string;
|
|
24
|
+
readOnly: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DockerMount {
|
|
27
|
+
hostPath: string;
|
|
28
|
+
containerPath: string;
|
|
29
|
+
readOnly: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build pod volumeMount specs — nested: full analysis (RO) + step area (RW).
|
|
33
|
+
* K8s handles nested mounts — the most-specific path wins.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildPodMounts(opts: {
|
|
36
|
+
resourceId: string;
|
|
37
|
+
runId: string;
|
|
38
|
+
stepId: string;
|
|
39
|
+
}): PodMount[];
|
|
40
|
+
/**
|
|
41
|
+
* Build Docker bind mount specs — same nesting logic as buildPodMounts,
|
|
42
|
+
* but with host paths derived from sessionPath.
|
|
43
|
+
* Docker handles nested mounts — the most-specific path wins.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildDockerMounts(opts: {
|
|
46
|
+
resourceId: string;
|
|
47
|
+
runId: string;
|
|
48
|
+
stepId: string;
|
|
49
|
+
sessionPath: string;
|
|
50
|
+
}): DockerMount[];
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mount strategy — single source of truth for workspace/pod mount paths.
|
|
3
|
+
*
|
|
4
|
+
* Single-mount model: one workspace mount covers the full analysis tree.
|
|
5
|
+
* Write protection is enforced via K8s RO volumeMount (execute_command) and
|
|
6
|
+
* by the harness write guard at the workspace-filesystem layer. Pod mounts
|
|
7
|
+
* are nested (K8s handles this fine — most-specific path wins).
|
|
8
|
+
*/
|
|
9
|
+
import { runStepDir } from "./paths.js";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
// ── Mount Path Builders ──────────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Canonical paths for a step.
|
|
14
|
+
*
|
|
15
|
+
* ANALYSIS is the single workspace mount (covers the full analysis tree).
|
|
16
|
+
* ARTIFACTS is a subpath within that mount (the step's writable area, used as CWD).
|
|
17
|
+
*/
|
|
18
|
+
export function buildMountPaths(resourceId, runId, stepId) {
|
|
19
|
+
return {
|
|
20
|
+
/** Full analysis tree — single workspace mount. */
|
|
21
|
+
ANALYSIS: `/${resourceId}`,
|
|
22
|
+
/** Step's writable area — subpath within ANALYSIS, used as CWD. */
|
|
23
|
+
ARTIFACTS: `/${runStepDir(resourceId, runId, stepId)}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// ── Pod mounts ──────────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Build pod volumeMount specs — nested: full analysis (RO) + step area (RW).
|
|
29
|
+
* K8s handles nested mounts — the most-specific path wins.
|
|
30
|
+
*/
|
|
31
|
+
export function buildPodMounts(opts) {
|
|
32
|
+
const mp = buildMountPaths(opts.resourceId, opts.runId, opts.stepId);
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
mountPath: mp.ANALYSIS,
|
|
36
|
+
subPath: opts.resourceId,
|
|
37
|
+
readOnly: true,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
mountPath: mp.ARTIFACTS,
|
|
41
|
+
subPath: runStepDir(opts.resourceId, opts.runId, opts.stepId),
|
|
42
|
+
readOnly: false,
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
// ── Docker bind mounts ─────────────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* Build Docker bind mount specs — same nesting logic as buildPodMounts,
|
|
49
|
+
* but with host paths derived from sessionPath.
|
|
50
|
+
* Docker handles nested mounts — the most-specific path wins.
|
|
51
|
+
*/
|
|
52
|
+
export function buildDockerMounts(opts) {
|
|
53
|
+
const mp = buildMountPaths(opts.resourceId, opts.runId, opts.stepId);
|
|
54
|
+
const stepRelPath = runStepDir(opts.resourceId, opts.runId, opts.stepId);
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
hostPath: join(opts.sessionPath, opts.resourceId),
|
|
58
|
+
containerPath: mp.ANALYSIS,
|
|
59
|
+
readOnly: true,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
hostPath: join(opts.sessionPath, stepRelPath),
|
|
63
|
+
containerPath: mp.ARTIFACTS,
|
|
64
|
+
readOnly: false,
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical workspace path resolver — shared between the read surface and
|
|
3
|
+
* the sandbox-gated mutate surface.
|
|
4
|
+
*
|
|
5
|
+
* One module that maps agent-supplied paths to physical workspace-tree
|
|
6
|
+
* locations under the frame-aware path model (see the harness-workspace-tools spec):
|
|
7
|
+
*
|
|
8
|
+
* - A **relative** path resolves against the caller's `workingDir` (the
|
|
9
|
+
* agent's writable working directory; the analysis root when omitted, as
|
|
10
|
+
* for the conversation agent). Frame-local.
|
|
11
|
+
* - An **absolute `/{analysisId}/...`** path resolves against the analysis
|
|
12
|
+
* root regardless of `workingDir`. Frame-independent — the canonical
|
|
13
|
+
* interchange form for paths crossing an agent or frame boundary.
|
|
14
|
+
*
|
|
15
|
+
* The analysis root itself comes from the embedder through the
|
|
16
|
+
* {@link ResolveWorkspaceRoot} seam — the harness owns the layout *inside*
|
|
17
|
+
* the root, the embedder owns *where* the root lives. Host paths carry no
|
|
18
|
+
* `{resourceId}` segment (the resolved root already identifies the resource);
|
|
19
|
+
* the `/{resourceId}/…` form survives only as the container-side view, which
|
|
20
|
+
* bind mounts keep independent of the host location.
|
|
21
|
+
*
|
|
22
|
+
* Both surfaces share this resolver, so a file a step writes is read back at
|
|
23
|
+
* the identical path — agreement is structural, not re-implemented per tool.
|
|
24
|
+
* `resolveForWrite` adds confinement: a resolved path outside `workingDir`
|
|
25
|
+
* comes back `out_of_prefix` (the read surface skips that — it roams the tree
|
|
26
|
+
* read-only).
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* The workspace-root resolution seam (see the workspace-root-resolution spec).
|
|
30
|
+
*
|
|
31
|
+
* Maps a resource id to the absolute host directory of that resource's
|
|
32
|
+
* workspace tree. Supplied by the embedder at the composition root and closed
|
|
33
|
+
* over once at workflow registration — the *function* is fixed per process,
|
|
34
|
+
* its *result* varies per resource, which is what makes per-resource roots
|
|
35
|
+
* compatible with DBOS's register-once model.
|
|
36
|
+
*
|
|
37
|
+
* Realization contract:
|
|
38
|
+
* - **Injective** — two live resources never resolve to the same root; the
|
|
39
|
+
* harness treats the root as exclusively owned and does not verify this.
|
|
40
|
+
* - **Durable-state-backed** — resolve from host state that survives the
|
|
41
|
+
* process (a DB row, a config map), never process memory, so a recovered
|
|
42
|
+
* workflow on a fresh process resolves correctly.
|
|
43
|
+
* - **Stable while the resource has an active run** — derived paths are
|
|
44
|
+
* recorded in durable step outputs; preventing mid-run moves is the
|
|
45
|
+
* embedder's job.
|
|
46
|
+
* - **Throws on unknown resources** — inside DBOS bodies the failure must
|
|
47
|
+
* cross the step boundary as a throw so the step is durably recorded as
|
|
48
|
+
* failed (see `lib/result.ts` house rules).
|
|
49
|
+
*/
|
|
50
|
+
export type ResolveWorkspaceRoot = (resourceId: string) => string;
|
|
51
|
+
/** Result of resolving a workspace path against the canonical layout. */
|
|
52
|
+
export type ResolvedPath = {
|
|
53
|
+
readonly kind: "ok";
|
|
54
|
+
readonly absolute: string;
|
|
55
|
+
readonly relative: string;
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: "out_of_scope";
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Result of resolving a path for a *write*: scope resolution plus confinement
|
|
61
|
+
* to the caller's `workingDir`. `out_of_prefix` (in-tree but outside the
|
|
62
|
+
* working directory) is distinct from `out_of_scope` (escaped the analysis
|
|
63
|
+
* tree) so the model can correct toward its working directory rather than
|
|
64
|
+
* guessing why the write failed. Both are data variants — never throws.
|
|
65
|
+
*/
|
|
66
|
+
export type WriteResolvedPath = {
|
|
67
|
+
readonly kind: "ok";
|
|
68
|
+
readonly absolute: string;
|
|
69
|
+
readonly relative: string;
|
|
70
|
+
} | {
|
|
71
|
+
readonly kind: "out_of_scope";
|
|
72
|
+
} | {
|
|
73
|
+
readonly kind: "out_of_prefix";
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Resolve an agent-supplied path against the analysis tree under the
|
|
77
|
+
* frame-aware model.
|
|
78
|
+
*
|
|
79
|
+
* - **Relative** (no leading slash) → resolved against `workingDir`
|
|
80
|
+
* (defaults to the analysis root). E.g. with `workingDir` =
|
|
81
|
+
* `…/runs/{runId}/{stepId}`, `"output/x.csv"` → that step's output dir.
|
|
82
|
+
* - **Absolute `/{analysisId}/...`** → resolved against the analysis root,
|
|
83
|
+
* ignoring `workingDir`. Frame-independent.
|
|
84
|
+
*
|
|
85
|
+
* The returned `relative` is always **analysis-root-relative** (used to build
|
|
86
|
+
* the in-sandbox `/{analysisId}/…` path). Returns `out_of_scope` for any input
|
|
87
|
+
* that escapes the resolved workspace root (`..` traversal, absolute host
|
|
88
|
+
* paths outside the tree, `/{otherAnalysisId}/...`).
|
|
89
|
+
*/
|
|
90
|
+
export declare function resolveWorkspacePath(args: {
|
|
91
|
+
/** Absolute host root of the analysis's workspace tree (from the embedder's resolver). */
|
|
92
|
+
readonly workspaceRoot: string;
|
|
93
|
+
readonly analysisId: string;
|
|
94
|
+
readonly path: string;
|
|
95
|
+
/** Absolute host base that relative paths resolve against. Defaults to the analysis root. */
|
|
96
|
+
readonly workingDir?: string;
|
|
97
|
+
}): ResolvedPath;
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a path for a write: same frame-aware resolution as
|
|
100
|
+
* `resolveWorkspacePath` (relative → `workingDir`, absolute → analysis root),
|
|
101
|
+
* then confine the result to `workingDir`. A `..` escape from the tree is
|
|
102
|
+
* `out_of_scope`; an in-tree path outside the working directory is
|
|
103
|
+
* `out_of_prefix`. A path equal to `workingDir` itself is in-prefix.
|
|
104
|
+
*
|
|
105
|
+
* `workingDir` is the absolute host path of the agent's writable working
|
|
106
|
+
* directory (for a plannable step, `stepWritePrefix(...)`).
|
|
107
|
+
*/
|
|
108
|
+
export declare function resolveForWrite(args: {
|
|
109
|
+
/** Absolute host root of the analysis's workspace tree (from the embedder's resolver). */
|
|
110
|
+
readonly workspaceRoot: string;
|
|
111
|
+
readonly analysisId: string;
|
|
112
|
+
readonly path: string;
|
|
113
|
+
readonly workingDir: string;
|
|
114
|
+
}): WriteResolvedPath;
|
|
115
|
+
/**
|
|
116
|
+
* Derive the canonical writable-prefix absolute path for a sandbox step.
|
|
117
|
+
* Single source of truth — the agent does NOT supply this; it is computed
|
|
118
|
+
* from the workspace root + run/step coordinates the workflow owns.
|
|
119
|
+
*/
|
|
120
|
+
export declare function stepWritePrefix(args: {
|
|
121
|
+
readonly workspaceRoot: string;
|
|
122
|
+
readonly runId: string;
|
|
123
|
+
readonly stepId: string;
|
|
124
|
+
}): string;
|
|
125
|
+
/**
|
|
126
|
+
* Map a host-side absolute path within an analysis's workspace tree to its
|
|
127
|
+
* in-sandbox absolute path. The tree is bind-mounted at `/{resourceId}`, so
|
|
128
|
+
* the sandbox path is the resource id plus the root-relative tail — the host
|
|
129
|
+
* location of the root never leaks into the container. Single source of truth
|
|
130
|
+
* for the `execute_command` / `write_file` cwd and the `{{WORKING_DIR}}`
|
|
131
|
+
* prompt substitution (see the harness-workspace-tools spec).
|
|
132
|
+
*/
|
|
133
|
+
export declare function toSandboxPath(workspaceRoot: string, resourceId: string, hostAbsPath: string): string;
|
|
134
|
+
/**
|
|
135
|
+
* Parent of every preview, workspace-root-relative. Callers that enumerate
|
|
136
|
+
* previews join this; callers that address one join {@link previewDir}. Both
|
|
137
|
+
* spell the segment through this constant so the tree has one owner.
|
|
138
|
+
*/
|
|
139
|
+
export declare const PREVIEWS_ROOT = "previews";
|
|
140
|
+
/**
|
|
141
|
+
* Versioned preview directory, workspace-root-relative. Previews live inside
|
|
142
|
+
* the analysis tree (`previews/{previewId}/v{N}`); the content-token `res`
|
|
143
|
+
* claim keeps the separate `previews/{analysisId}/{previewId}` formula in
|
|
144
|
+
* `contracts/content-url.ts` — that is URL space, not a filesystem sub-path,
|
|
145
|
+
* and hosts that serve previews map one onto the other themselves.
|
|
146
|
+
*/
|
|
147
|
+
export declare function previewVersionDir(previewId: string, version: number): string;
|
|
148
|
+
/** Preview root for a specific preview (all versions), workspace-root-relative. */
|
|
149
|
+
export declare function previewDir(previewId: string): string;
|
|
150
|
+
/**
|
|
151
|
+
* Find the highest version number from a list of version directory names.
|
|
152
|
+
* Expects names like "v1", "v2", etc. Returns 0 if no versions found.
|
|
153
|
+
*/
|
|
154
|
+
export declare function latestPreviewVersion(dirNames: string[]): number;
|
|
155
|
+
/**
|
|
156
|
+
* True when `value` is a safe single path segment: the `SAFE_ID` charset (word
|
|
157
|
+
* chars, `.`, `-` — no slash, NUL, or shell-hostile char) AND not a pure-dot
|
|
158
|
+
* segment (`.`/`..`), which the charset otherwise admits and which `resolve`/`join`
|
|
159
|
+
* would treat as the current/parent directory and use to climb the tree. The one
|
|
160
|
+
* definition of "safe id", shared by the throwing {@link assertSafeId} at path
|
|
161
|
+
* builders and the plan validator (`validate-plan.ts`), so a stepId is judged the
|
|
162
|
+
* same at plan time and at mount time.
|
|
163
|
+
*/
|
|
164
|
+
export declare function isSafeId(value: string): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Throwing form of {@link isSafeId} for the mount/host-path builders. Ids are
|
|
167
|
+
* harness-minted UUIDs on every trusted path, but `stepId` reaches these builders
|
|
168
|
+
* straight from an LLM-authored plan, so this is the boundary that keeps a crafted
|
|
169
|
+
* id from re-rooting a mount or a host write. Exported so the mount-plan builders
|
|
170
|
+
* (the container-path source of truth) validate the same way.
|
|
171
|
+
*/
|
|
172
|
+
export declare function assertSafeId(value: string, label: string): void;
|
|
173
|
+
/** Root directory for a specific workflow run, workspace-root-relative. */
|
|
174
|
+
export declare function runDir(runId: string): string;
|
|
175
|
+
/** Step directory within a run, workspace-root-relative. */
|
|
176
|
+
export declare function runStepDir(runId: string, stepId: string): string;
|
|
177
|
+
/** Step subdirectory for a specific artifact type. */
|
|
178
|
+
export type StepSubdirType = "scripts" | "output" | "figures" | "logs" | "notebooks";
|
|
179
|
+
export declare function stepSubdir(stepBase: string, type: StepSubdirType): string;
|
|
180
|
+
/** Report output directory, workspace-root-relative. */
|
|
181
|
+
export declare function reportDir(reportId: string): string;
|
|
182
|
+
/** All standard subdirectory types for a step. */
|
|
183
|
+
export declare const STEP_SUBDIRS: readonly StepSubdirType[];
|
|
184
|
+
/** Get all subdirectory paths for a step. */
|
|
185
|
+
export declare function allStepSubdirs(stepBase: string): string[];
|