@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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cortex_step_executions` operations — step lifecycle and retry telemetry.
|
|
3
|
+
* The `sandbox_ref` column is read/written by the sibling `active-sandboxes`
|
|
4
|
+
* module.
|
|
5
|
+
*/
|
|
6
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
7
|
+
/**
|
|
8
|
+
* Seed one `pending` row per plan step at run start (`started_at` NULL — no
|
|
9
|
+
* attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
|
|
10
|
+
* defaults). `ON CONFLICT DO NOTHING`, NOT the mark-running upsert: on DBOS
|
|
11
|
+
* recovery the parent body replays this seed against rows a prior execution
|
|
12
|
+
* already advanced, and an upsert would reset them — DO NOTHING makes the seed
|
|
13
|
+
* idempotent and monotone (it can only ever add missing rows). From the first
|
|
14
|
+
* seed, `queryStepsByRun` returns the run's full DAG, so consumers can render
|
|
15
|
+
* honest done/total progress including not-yet-started steps.
|
|
16
|
+
*/
|
|
17
|
+
export function seedStepExecutions(pool, rows) {
|
|
18
|
+
return tryMutation("stepExecutions.seedStepExecutions", async () => {
|
|
19
|
+
if (rows.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
const values = [];
|
|
22
|
+
const tuples = rows.map((row) => {
|
|
23
|
+
values.push(row.runId, row.stepId, row.analysisId, row.wave, row.agentId);
|
|
24
|
+
const base = values.length - 5;
|
|
25
|
+
return `($${base + 1}, $${base + 2}, $${base + 3}, $${base + 4}, $${base + 5}, 'pending')`;
|
|
26
|
+
});
|
|
27
|
+
await pool.query({
|
|
28
|
+
text: `INSERT INTO cortex_step_executions
|
|
29
|
+
(run_id, step_id, analysis_id, wave, agent_id, status)
|
|
30
|
+
VALUES ${tuples.join(", ")}
|
|
31
|
+
ON CONFLICT (run_id, step_id) DO NOTHING`,
|
|
32
|
+
values,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function insertStepExecution(pool, input) {
|
|
37
|
+
const now = new Date().toISOString();
|
|
38
|
+
return tryMutation("stepExecutions.insertStepExecution", async () => {
|
|
39
|
+
await pool.query({
|
|
40
|
+
text: `INSERT INTO cortex_step_executions
|
|
41
|
+
(run_id, step_id, analysis_id, wave, agent_id, status, started_at,
|
|
42
|
+
attempts, last_error_class, finish_reason, hit_max_steps,
|
|
43
|
+
child_workflow_id)
|
|
44
|
+
VALUES ($1, $2, $3, $4, $5, 'running', $6, 1, NULL, NULL, 0, $7)
|
|
45
|
+
ON CONFLICT (run_id, step_id) DO UPDATE SET
|
|
46
|
+
wave = EXCLUDED.wave,
|
|
47
|
+
agent_id = EXCLUDED.agent_id,
|
|
48
|
+
status = EXCLUDED.status,
|
|
49
|
+
started_at = EXCLUDED.started_at,
|
|
50
|
+
completed_at = NULL,
|
|
51
|
+
duration_ms = NULL,
|
|
52
|
+
error = NULL,
|
|
53
|
+
attempts = 1,
|
|
54
|
+
last_error_class = NULL,
|
|
55
|
+
finish_reason = NULL,
|
|
56
|
+
hit_max_steps = 0,
|
|
57
|
+
child_workflow_id = EXCLUDED.child_workflow_id`,
|
|
58
|
+
values: [input.runId, input.stepId, input.analysisId, input.wave, input.agentId, now, input.childWorkflowId ?? null],
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Update a step execution row. Columns are written conditionally so callers
|
|
64
|
+
* can bump `attempts` / `lastErrorClass` on retry without clobbering timing
|
|
65
|
+
* telemetry, or set `finishReason` / `hitMaxSteps` on success.
|
|
66
|
+
*
|
|
67
|
+
* `completed_at` is only stamped for terminal statuses (completed/failed/
|
|
68
|
+
* skipped) — running updates leave it NULL for the next transition.
|
|
69
|
+
*/
|
|
70
|
+
export function updateStepExecution(pool, runId, stepId, update) {
|
|
71
|
+
// Build the SET clause dynamically so retries can bump telemetry columns
|
|
72
|
+
// without clobbering timing, and success paths can set finish_reason /
|
|
73
|
+
// hit_max_steps without touching error. Placeholders are numbered
|
|
74
|
+
// position-wise via the `values` array length.
|
|
75
|
+
const sets = [];
|
|
76
|
+
const values = [];
|
|
77
|
+
const push = (col, val) => {
|
|
78
|
+
values.push(val);
|
|
79
|
+
sets.push(`${col} = $${values.length}`);
|
|
80
|
+
};
|
|
81
|
+
push("status", update.status);
|
|
82
|
+
const isTerminal = update.status !== "running";
|
|
83
|
+
if (isTerminal) {
|
|
84
|
+
push("completed_at", new Date().toISOString());
|
|
85
|
+
push("duration_ms", update.durationMs ?? null);
|
|
86
|
+
push("error", update.error ?? null);
|
|
87
|
+
}
|
|
88
|
+
if (update.attempts != null) {
|
|
89
|
+
push("attempts", update.attempts);
|
|
90
|
+
}
|
|
91
|
+
// Accept explicit null to clear (e.g., on success).
|
|
92
|
+
if (update.lastErrorClass !== undefined) {
|
|
93
|
+
push("last_error_class", update.lastErrorClass ?? null);
|
|
94
|
+
}
|
|
95
|
+
if (update.finishReason !== undefined) {
|
|
96
|
+
push("finish_reason", update.finishReason ?? null);
|
|
97
|
+
}
|
|
98
|
+
if (update.hitMaxSteps !== undefined) {
|
|
99
|
+
// `hit_max_steps` is INTEGER NOT NULL. node-postgres binds JS booleans as
|
|
100
|
+
// PG `boolean` type and PG refuses the implicit boolean → integer cast,
|
|
101
|
+
// so coerce to 0/1 at the bind site.
|
|
102
|
+
push("hit_max_steps", update.hitMaxSteps === true ? 1 : 0);
|
|
103
|
+
}
|
|
104
|
+
if (update.blockedReason !== undefined) {
|
|
105
|
+
push("blocked_reason", update.blockedReason ?? null);
|
|
106
|
+
}
|
|
107
|
+
values.push(runId);
|
|
108
|
+
const runIdPos = values.length;
|
|
109
|
+
values.push(stepId);
|
|
110
|
+
const stepIdPos = values.length;
|
|
111
|
+
return tryMutation("stepExecutions.updateStepExecution", async () => {
|
|
112
|
+
await pool.query({
|
|
113
|
+
text: `UPDATE cortex_step_executions
|
|
114
|
+
SET ${sets.join(", ")}
|
|
115
|
+
WHERE run_id = $${runIdPos} AND step_id = $${stepIdPos}`,
|
|
116
|
+
values,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Sweep a run's still-`pending` rows to `skipped` ("never ran, never will") at
|
|
122
|
+
* finalisation, stamping `completed_at`. Only genuinely-terminal paths may call
|
|
123
|
+
* this — the resumable budget-pause branch must NOT, because the resumed
|
|
124
|
+
* workflow still executes those steps (see the workflow-failure-lifecycle
|
|
125
|
+
* spec). `skipped`, not `canceled`: canceled means torn down mid-flight, and
|
|
126
|
+
* these steps never started.
|
|
127
|
+
*/
|
|
128
|
+
export function sweepPendingStepExecutions(pool, runId) {
|
|
129
|
+
const now = new Date().toISOString();
|
|
130
|
+
return tryMutation("stepExecutions.sweepPendingStepExecutions", async () => {
|
|
131
|
+
await pool.query({
|
|
132
|
+
text: `UPDATE cortex_step_executions
|
|
133
|
+
SET status = 'skipped', completed_at = $2
|
|
134
|
+
WHERE run_id = $1 AND status = 'pending'`,
|
|
135
|
+
values: [runId, now],
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
export function queryStepsByRun(pool, runId) {
|
|
140
|
+
return tryQuery("stepExecutions.queryStepsByRun", async () => {
|
|
141
|
+
const result = await pool.query({
|
|
142
|
+
text: `SELECT run_id, step_id, analysis_id, wave, agent_id,
|
|
143
|
+
status, started_at, completed_at, duration_ms, error,
|
|
144
|
+
attempts, last_error_class, finish_reason, hit_max_steps,
|
|
145
|
+
blocked_reason, sandbox_ref, exec_id, child_workflow_id
|
|
146
|
+
FROM cortex_step_executions
|
|
147
|
+
WHERE run_id = $1
|
|
148
|
+
ORDER BY wave, started_at NULLS LAST, step_id`,
|
|
149
|
+
values: [runId],
|
|
150
|
+
});
|
|
151
|
+
return result.rows.map(mapStepExecutionRow);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function mapStepExecutionRow(row) {
|
|
155
|
+
return {
|
|
156
|
+
runId: row.run_id,
|
|
157
|
+
stepId: row.step_id,
|
|
158
|
+
analysisId: row.analysis_id,
|
|
159
|
+
wave: Number(row.wave),
|
|
160
|
+
agentId: row.agent_id,
|
|
161
|
+
status: row.status,
|
|
162
|
+
startedAt: row.started_at ?? null,
|
|
163
|
+
completedAt: row.completed_at ?? null,
|
|
164
|
+
durationMs: row.duration_ms === null || row.duration_ms === undefined ? null : Number(row.duration_ms),
|
|
165
|
+
error: row.error ?? null,
|
|
166
|
+
attempts: row.attempts ?? 1,
|
|
167
|
+
lastErrorClass: row.last_error_class ?? null,
|
|
168
|
+
finishReason: row.finish_reason ?? null,
|
|
169
|
+
hitMaxSteps: row.hit_max_steps === 1 || row.hit_max_steps === true,
|
|
170
|
+
blockedReason: row.blocked_reason ?? null,
|
|
171
|
+
sandboxRef: row.sandbox_ref ?? null,
|
|
172
|
+
execId: row.exec_id ?? null,
|
|
173
|
+
childWorkflowId: row.child_workflow_id ?? null,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness-side typed query helpers for `cortex_target_assessments`.
|
|
3
|
+
*
|
|
4
|
+
* Owns the helpers the DBOS workflow body and harness HTTP routes call:
|
|
5
|
+
* - `insertAssessment` accepts an optional `workflowId` and persists it on
|
|
6
|
+
* insert (defaults to the assessment id; for DBOS-shaped rows the
|
|
7
|
+
* assessmentId IS the DBOS workflowID).
|
|
8
|
+
* - `markAssessmentSuspended` flips the row to the new
|
|
9
|
+
* `suspended_insufficient_funds` status, idempotent on replay.
|
|
10
|
+
* - `markAssessmentRunning` is used by the resume entry point after
|
|
11
|
+
* `DBOS.resumeWorkflow` completes.
|
|
12
|
+
* - All row mappers surface `workflowId` alongside `workflowRunId`.
|
|
13
|
+
*
|
|
14
|
+
* Soft-deleted rows (`status = 'deleted'`) are never resurrected — every
|
|
15
|
+
* mutating helper carries an `AND status != 'deleted'` guard, so a user
|
|
16
|
+
* deleting a row mid-run causes terminal workflow writes to no-op.
|
|
17
|
+
*/
|
|
18
|
+
import type { ResultAsync } from "neverthrow";
|
|
19
|
+
import { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema, type TargetAssessmentStatus, type TargetAssessmentError, type TargetAssessmentListRow, type TargetAssessmentRow } from "@inflexa-ai/harness/contracts/target-assessment-row.js";
|
|
20
|
+
import { type DbError } from "../lib/db-result.js";
|
|
21
|
+
import type { Querier } from "./db.js";
|
|
22
|
+
export { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema };
|
|
23
|
+
export type { TargetAssessmentStatus, TargetAssessmentError, TargetAssessmentListRow, TargetAssessmentRow };
|
|
24
|
+
export interface InsertAssessmentInput {
|
|
25
|
+
id?: string;
|
|
26
|
+
/**
|
|
27
|
+
* DBOS workflow id for the executeTargetAssessment workflow. Defaults to
|
|
28
|
+
* the assessment id when omitted — the trigger route always passes the
|
|
29
|
+
* id explicitly so a future split between the two ids stays trivial.
|
|
30
|
+
*/
|
|
31
|
+
workflowId?: string;
|
|
32
|
+
organizationId: string;
|
|
33
|
+
targetId: string;
|
|
34
|
+
targetLabel: string;
|
|
35
|
+
goal?: string | null;
|
|
36
|
+
billingContextId: string;
|
|
37
|
+
requestedBy: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function insertAssessment(pool: Querier, input: InsertAssessmentInput): ResultAsync<string, DbError>;
|
|
40
|
+
export declare function updateProgress(pool: Querier, id: string, progress: string, status?: TargetAssessmentStatus): ResultAsync<void, DbError>;
|
|
41
|
+
export declare function setDossier(pool: Querier, id: string, dossier: Record<string, unknown>): ResultAsync<void, DbError>;
|
|
42
|
+
export declare function markFailed(pool: Querier, id: string, error: TargetAssessmentError): ResultAsync<void, DbError>;
|
|
43
|
+
/**
|
|
44
|
+
* Flip the row to the new `suspended_insufficient_funds` status used when
|
|
45
|
+
* an LLM step self-cancels the workflow on a 402 (budget exhausted).
|
|
46
|
+
* Idempotent on DBOS replay — a second call from the terminal handler on
|
|
47
|
+
* the recovery path is a no-op against an already-suspended row. Soft-
|
|
48
|
+
* deleted rows are NOT resurrected.
|
|
49
|
+
*/
|
|
50
|
+
export declare function markAssessmentSuspended(pool: Querier, id: string): ResultAsync<void, DbError>;
|
|
51
|
+
/**
|
|
52
|
+
* Flip a suspended row back to `running` on `DBOS.resumeWorkflow`. Called
|
|
53
|
+
* from the resume entry point AFTER the resume call returns success.
|
|
54
|
+
* No-op on a soft-deleted row.
|
|
55
|
+
*/
|
|
56
|
+
export declare function markAssessmentRunning(pool: Querier, id: string): ResultAsync<void, DbError>;
|
|
57
|
+
export declare function getAssessment(pool: Querier, id: string, organizationId: string): ResultAsync<TargetAssessmentRow | null, DbError>;
|
|
58
|
+
export interface ListAssessmentsOptions {
|
|
59
|
+
limit?: number;
|
|
60
|
+
offset?: number;
|
|
61
|
+
includeDeleted?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export declare function listAssessmentsByOrg(pool: Querier, organizationId: string, options?: ListAssessmentsOptions): ResultAsync<TargetAssessmentListRow[], DbError>;
|
|
64
|
+
/**
|
|
65
|
+
* Soft-delete a row. A missing/already-deleted row returns `ok(0)` — absence
|
|
66
|
+
* rides the ok channel; `rowCount === 0` is not a failure.
|
|
67
|
+
*/
|
|
68
|
+
export declare function softDeleteAssessment(pool: Querier, id: string, organizationId: string): ResultAsync<number, DbError>;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness-side typed query helpers for `cortex_target_assessments`.
|
|
3
|
+
*
|
|
4
|
+
* Owns the helpers the DBOS workflow body and harness HTTP routes call:
|
|
5
|
+
* - `insertAssessment` accepts an optional `workflowId` and persists it on
|
|
6
|
+
* insert (defaults to the assessment id; for DBOS-shaped rows the
|
|
7
|
+
* assessmentId IS the DBOS workflowID).
|
|
8
|
+
* - `markAssessmentSuspended` flips the row to the new
|
|
9
|
+
* `suspended_insufficient_funds` status, idempotent on replay.
|
|
10
|
+
* - `markAssessmentRunning` is used by the resume entry point after
|
|
11
|
+
* `DBOS.resumeWorkflow` completes.
|
|
12
|
+
* - All row mappers surface `workflowId` alongside `workflowRunId`.
|
|
13
|
+
*
|
|
14
|
+
* Soft-deleted rows (`status = 'deleted'`) are never resurrected — every
|
|
15
|
+
* mutating helper carries an `AND status != 'deleted'` guard, so a user
|
|
16
|
+
* deleting a row mid-run causes terminal workflow writes to no-op.
|
|
17
|
+
*/
|
|
18
|
+
import { randomUUID } from "node:crypto";
|
|
19
|
+
import { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema, } from "@inflexa-ai/harness/contracts/target-assessment-row.js";
|
|
20
|
+
import { tryQuery, tryMutation } from "../lib/db-result.js";
|
|
21
|
+
export { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema };
|
|
22
|
+
function toIso(value) {
|
|
23
|
+
if (value === null)
|
|
24
|
+
return null;
|
|
25
|
+
if (value instanceof Date)
|
|
26
|
+
return value.toISOString();
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function parseJsonb(raw) {
|
|
30
|
+
if (raw === null || raw === undefined)
|
|
31
|
+
return null;
|
|
32
|
+
if (typeof raw === "string") {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(raw);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return raw;
|
|
41
|
+
}
|
|
42
|
+
function mapListRow(row) {
|
|
43
|
+
const created = toIso(row.created_at);
|
|
44
|
+
const updated = toIso(row.updated_at);
|
|
45
|
+
if (!created || !updated) {
|
|
46
|
+
throw new Error(`cortex_target_assessments(${row.id}): missing created_at or updated_at`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
id: row.id,
|
|
50
|
+
organizationId: row.organization_id,
|
|
51
|
+
targetId: row.target_id,
|
|
52
|
+
targetLabel: row.target_label,
|
|
53
|
+
goal: row.goal,
|
|
54
|
+
status: row.status,
|
|
55
|
+
progress: row.progress,
|
|
56
|
+
billingContextId: row.billing_context_id,
|
|
57
|
+
error: parseJsonb(row.error),
|
|
58
|
+
requestedBy: row.requested_by,
|
|
59
|
+
workflowRunId: row.workflow_run_id,
|
|
60
|
+
workflowId: row.workflow_id,
|
|
61
|
+
createdAt: created,
|
|
62
|
+
updatedAt: updated,
|
|
63
|
+
completedAt: toIso(row.completed_at),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function mapRow(row) {
|
|
67
|
+
return {
|
|
68
|
+
...mapListRow(row),
|
|
69
|
+
dossier: parseJsonb(row.dossier),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const SELECT_LIST_COLUMNS = `id, organization_id, target_id, target_label, goal,
|
|
73
|
+
status, progress, billing_context_id, error, requested_by,
|
|
74
|
+
workflow_run_id, workflow_id, created_at, updated_at, completed_at`;
|
|
75
|
+
const SELECT_COLUMNS = `${SELECT_LIST_COLUMNS}, dossier`;
|
|
76
|
+
export function insertAssessment(pool, input) {
|
|
77
|
+
const id = input.id ?? randomUUID();
|
|
78
|
+
const workflowId = input.workflowId ?? id;
|
|
79
|
+
return tryMutation("targetAssessments.insertAssessment", async () => {
|
|
80
|
+
await pool.query({
|
|
81
|
+
text: `INSERT INTO cortex_target_assessments
|
|
82
|
+
(id, organization_id, target_id, target_label, goal, status,
|
|
83
|
+
billing_context_id, requested_by, workflow_id)
|
|
84
|
+
VALUES ($1, $2, $3, $4, $5, 'queued', $6, $7, $8)`,
|
|
85
|
+
values: [id, input.organizationId, input.targetId, input.targetLabel, input.goal ?? null, input.billingContextId, input.requestedBy, workflowId],
|
|
86
|
+
});
|
|
87
|
+
return id;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export function updateProgress(pool, id, progress, status) {
|
|
91
|
+
return tryMutation("targetAssessments.updateProgress", async () => {
|
|
92
|
+
if (status) {
|
|
93
|
+
await pool.query({
|
|
94
|
+
text: `UPDATE cortex_target_assessments
|
|
95
|
+
SET progress = $1, status = $2, updated_at = NOW()
|
|
96
|
+
WHERE id = $3 AND status != 'deleted'`,
|
|
97
|
+
values: [progress, status, id],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
await pool.query({
|
|
102
|
+
text: `UPDATE cortex_target_assessments
|
|
103
|
+
SET progress = $1, updated_at = NOW()
|
|
104
|
+
WHERE id = $2 AND status != 'deleted'`,
|
|
105
|
+
values: [progress, id],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function setDossier(pool, id, dossier) {
|
|
111
|
+
return tryMutation("targetAssessments.setDossier", async () => {
|
|
112
|
+
await pool.query({
|
|
113
|
+
text: `UPDATE cortex_target_assessments
|
|
114
|
+
SET dossier = $1::jsonb,
|
|
115
|
+
status = 'completed',
|
|
116
|
+
progress = 'Completed',
|
|
117
|
+
error = NULL,
|
|
118
|
+
completed_at = NOW(),
|
|
119
|
+
updated_at = NOW()
|
|
120
|
+
WHERE id = $2 AND status != 'deleted'`,
|
|
121
|
+
values: [JSON.stringify(dossier), id],
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
export function markFailed(pool, id, error) {
|
|
126
|
+
return tryMutation("targetAssessments.markFailed", async () => {
|
|
127
|
+
await pool.query({
|
|
128
|
+
text: `UPDATE cortex_target_assessments
|
|
129
|
+
SET status = 'failed',
|
|
130
|
+
error = $1::jsonb,
|
|
131
|
+
completed_at = NOW(),
|
|
132
|
+
updated_at = NOW()
|
|
133
|
+
WHERE id = $2 AND status != 'deleted'`,
|
|
134
|
+
values: [JSON.stringify(error), id],
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Flip the row to the new `suspended_insufficient_funds` status used when
|
|
140
|
+
* an LLM step self-cancels the workflow on a 402 (budget exhausted).
|
|
141
|
+
* Idempotent on DBOS replay — a second call from the terminal handler on
|
|
142
|
+
* the recovery path is a no-op against an already-suspended row. Soft-
|
|
143
|
+
* deleted rows are NOT resurrected.
|
|
144
|
+
*/
|
|
145
|
+
export function markAssessmentSuspended(pool, id) {
|
|
146
|
+
return tryMutation("targetAssessments.markAssessmentSuspended", async () => {
|
|
147
|
+
await pool.query({
|
|
148
|
+
text: `UPDATE cortex_target_assessments
|
|
149
|
+
SET status = 'suspended_insufficient_funds',
|
|
150
|
+
progress = 'Suspended — insufficient funds',
|
|
151
|
+
updated_at = NOW()
|
|
152
|
+
WHERE id = $1 AND status != 'deleted'`,
|
|
153
|
+
values: [id],
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Flip a suspended row back to `running` on `DBOS.resumeWorkflow`. Called
|
|
159
|
+
* from the resume entry point AFTER the resume call returns success.
|
|
160
|
+
* No-op on a soft-deleted row.
|
|
161
|
+
*/
|
|
162
|
+
export function markAssessmentRunning(pool, id) {
|
|
163
|
+
return tryMutation("targetAssessments.markAssessmentRunning", async () => {
|
|
164
|
+
await pool.query({
|
|
165
|
+
text: `UPDATE cortex_target_assessments
|
|
166
|
+
SET status = 'running',
|
|
167
|
+
progress = 'Resuming',
|
|
168
|
+
error = NULL,
|
|
169
|
+
updated_at = NOW()
|
|
170
|
+
WHERE id = $1 AND status != 'deleted'`,
|
|
171
|
+
values: [id],
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export function getAssessment(pool, id, organizationId) {
|
|
176
|
+
// The raw read is wrapped; `mapRow`/`mapListRow` runs via `.map()` outside
|
|
177
|
+
// the catch so its corrupt-row throw (missing created_at) propagates as a
|
|
178
|
+
// control-flow throw rather than being captured as a `DbError`.
|
|
179
|
+
return tryQuery("targetAssessments.getAssessment", async () => {
|
|
180
|
+
const result = await pool.query({
|
|
181
|
+
text: `SELECT ${SELECT_COLUMNS}
|
|
182
|
+
FROM cortex_target_assessments
|
|
183
|
+
WHERE id = $1 AND organization_id = $2`,
|
|
184
|
+
values: [id, organizationId],
|
|
185
|
+
});
|
|
186
|
+
return result.rows[0] ?? null;
|
|
187
|
+
}).map((row) => (row ? mapRow(row) : null));
|
|
188
|
+
}
|
|
189
|
+
export function listAssessmentsByOrg(pool, organizationId, options = {}) {
|
|
190
|
+
const limit = options.limit ?? 50;
|
|
191
|
+
const offset = options.offset ?? 0;
|
|
192
|
+
const includeDeleted = options.includeDeleted ?? false;
|
|
193
|
+
const filterDeleted = includeDeleted ? "" : `AND status != 'deleted'`;
|
|
194
|
+
// `mapListRow` runs via `.map()` outside the catch so its corrupt-row throw
|
|
195
|
+
// propagates as a control-flow throw, not a captured `DbError`.
|
|
196
|
+
return tryQuery("targetAssessments.listAssessmentsByOrg", async () => {
|
|
197
|
+
const result = await pool.query({
|
|
198
|
+
text: `SELECT ${SELECT_LIST_COLUMNS}
|
|
199
|
+
FROM cortex_target_assessments
|
|
200
|
+
WHERE organization_id = $1 ${filterDeleted}
|
|
201
|
+
ORDER BY created_at DESC
|
|
202
|
+
LIMIT $2 OFFSET $3`,
|
|
203
|
+
values: [organizationId, limit, offset],
|
|
204
|
+
});
|
|
205
|
+
return result.rows;
|
|
206
|
+
}).map((rows) => rows.map(mapListRow));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Soft-delete a row. A missing/already-deleted row returns `ok(0)` — absence
|
|
210
|
+
* rides the ok channel; `rowCount === 0` is not a failure.
|
|
211
|
+
*/
|
|
212
|
+
export function softDeleteAssessment(pool, id, organizationId) {
|
|
213
|
+
return tryMutation("targetAssessments.softDeleteAssessment", async () => {
|
|
214
|
+
const result = await pool.query({
|
|
215
|
+
text: `UPDATE cortex_target_assessments
|
|
216
|
+
SET status = 'deleted', updated_at = NOW()
|
|
217
|
+
WHERE id = $1 AND organization_id = $2`,
|
|
218
|
+
values: [id, organizationId],
|
|
219
|
+
});
|
|
220
|
+
return result.rowCount ?? 0;
|
|
221
|
+
});
|
|
222
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal pgvector store — just the surface the harness write-side needs.
|
|
3
|
+
*
|
|
4
|
+
* Schema:
|
|
5
|
+
* - `id SERIAL PRIMARY KEY`
|
|
6
|
+
* - `vector_id TEXT UNIQUE NOT NULL`
|
|
7
|
+
* - `embedding vector(${dimension})`
|
|
8
|
+
* - `metadata JSONB DEFAULT '{}'::jsonb`
|
|
9
|
+
* Existing per-analysis `search_{...}` tables continue to work; the read-side
|
|
10
|
+
* (`tools/workspace/workspace-search.ts`) already speaks `vector_id`.
|
|
11
|
+
*
|
|
12
|
+
* Identifier guard: `indexName` is interpolated into SQL — only allow the
|
|
13
|
+
* `search_{snake}` shape we ever produce.
|
|
14
|
+
*/
|
|
15
|
+
import { ResultAsync } from "neverthrow";
|
|
16
|
+
import type { Pool } from "pg";
|
|
17
|
+
import { type DbError } from "../lib/db-result.js";
|
|
18
|
+
export interface CreateIndexInput {
|
|
19
|
+
readonly indexName: string;
|
|
20
|
+
readonly dimension: number;
|
|
21
|
+
readonly metric?: "cosine" | "l2" | "ip";
|
|
22
|
+
}
|
|
23
|
+
export interface BuildIndexInput {
|
|
24
|
+
readonly indexName: string;
|
|
25
|
+
readonly metric?: "cosine" | "l2" | "ip";
|
|
26
|
+
readonly indexConfig: {
|
|
27
|
+
readonly type: "hnsw";
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface UpsertInput {
|
|
31
|
+
readonly indexName: string;
|
|
32
|
+
readonly vectors: readonly number[][];
|
|
33
|
+
readonly metadata?: readonly Record<string, unknown>[];
|
|
34
|
+
readonly ids?: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
export interface QueryInput {
|
|
37
|
+
readonly indexName: string;
|
|
38
|
+
readonly queryVector: readonly number[];
|
|
39
|
+
readonly topK: number;
|
|
40
|
+
readonly filter?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface QueryResult {
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly score: number;
|
|
45
|
+
readonly metadata: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
export interface VectorStore {
|
|
48
|
+
createIndex(input: CreateIndexInput): ResultAsync<void, DbError>;
|
|
49
|
+
buildIndex(input: BuildIndexInput): ResultAsync<void, DbError>;
|
|
50
|
+
upsert(input: UpsertInput): ResultAsync<void, DbError>;
|
|
51
|
+
query(input: QueryInput): ResultAsync<QueryResult[], DbError>;
|
|
52
|
+
}
|
|
53
|
+
export declare function createVectorStore(pool: Pool): VectorStore;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal pgvector store — just the surface the harness write-side needs.
|
|
3
|
+
*
|
|
4
|
+
* Schema:
|
|
5
|
+
* - `id SERIAL PRIMARY KEY`
|
|
6
|
+
* - `vector_id TEXT UNIQUE NOT NULL`
|
|
7
|
+
* - `embedding vector(${dimension})`
|
|
8
|
+
* - `metadata JSONB DEFAULT '{}'::jsonb`
|
|
9
|
+
* Existing per-analysis `search_{...}` tables continue to work; the read-side
|
|
10
|
+
* (`tools/workspace/workspace-search.ts`) already speaks `vector_id`.
|
|
11
|
+
*
|
|
12
|
+
* Identifier guard: `indexName` is interpolated into SQL — only allow the
|
|
13
|
+
* `search_{snake}` shape we ever produce.
|
|
14
|
+
*/
|
|
15
|
+
import { okAsync } from "neverthrow";
|
|
16
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
17
|
+
const IDENT = /^[a-z_][a-z0-9_]*$/;
|
|
18
|
+
function assertIdent(name) {
|
|
19
|
+
if (!IDENT.test(name)) {
|
|
20
|
+
throw new Error(`vector-store: unsafe index name "${name}"`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function toVectorLiteral(v) {
|
|
24
|
+
return `[${v.join(",")}]`;
|
|
25
|
+
}
|
|
26
|
+
export function createVectorStore(pool) {
|
|
27
|
+
return {
|
|
28
|
+
createIndex({ indexName, dimension }) {
|
|
29
|
+
assertIdent(indexName);
|
|
30
|
+
return tryMutation("vectorStore.createIndex", async () => {
|
|
31
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS "${indexName}" (
|
|
32
|
+
id SERIAL PRIMARY KEY,
|
|
33
|
+
vector_id TEXT UNIQUE NOT NULL,
|
|
34
|
+
embedding vector(${dimension}),
|
|
35
|
+
metadata JSONB DEFAULT '{}'::jsonb
|
|
36
|
+
)`);
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
buildIndex({ indexName, indexConfig }) {
|
|
40
|
+
assertIdent(indexName);
|
|
41
|
+
if (indexConfig.type !== "hnsw") {
|
|
42
|
+
throw new Error(`vector-store: unsupported index type "${indexConfig.type}"`);
|
|
43
|
+
}
|
|
44
|
+
// m/ef_construction default to 8/32.
|
|
45
|
+
return tryMutation("vectorStore.buildIndex", async () => {
|
|
46
|
+
await pool.query(`CREATE INDEX IF NOT EXISTS "${indexName}_vector_idx"
|
|
47
|
+
ON "${indexName}"
|
|
48
|
+
USING hnsw (embedding vector_cosine_ops)
|
|
49
|
+
WITH (m = 8, ef_construction = 32)`);
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
upsert({ indexName, vectors, metadata, ids }) {
|
|
53
|
+
assertIdent(indexName);
|
|
54
|
+
if (vectors.length === 0)
|
|
55
|
+
return okAsync(undefined);
|
|
56
|
+
const finalIds = ids ?? vectors.map(() => crypto.randomUUID());
|
|
57
|
+
return tryMutation("vectorStore.upsert", async () => {
|
|
58
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
59
|
+
const vec = toVectorLiteral(vectors[i]);
|
|
60
|
+
const meta = JSON.stringify(metadata?.[i] ?? {});
|
|
61
|
+
await pool.query(`INSERT INTO "${indexName}" (vector_id, embedding, metadata)
|
|
62
|
+
VALUES ($1, $2::vector, $3::jsonb)
|
|
63
|
+
ON CONFLICT (vector_id)
|
|
64
|
+
DO UPDATE SET embedding = $2::vector, metadata = $3::jsonb`, [finalIds[i], vec, meta]);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
query({ indexName, queryVector, topK, filter }) {
|
|
69
|
+
assertIdent(indexName);
|
|
70
|
+
const literal = toVectorLiteral(queryVector);
|
|
71
|
+
const values = [literal, topK];
|
|
72
|
+
let where = "";
|
|
73
|
+
if (filter && Object.keys(filter).length > 0) {
|
|
74
|
+
values.push(JSON.stringify(filter));
|
|
75
|
+
where = `WHERE metadata @> $3::jsonb`;
|
|
76
|
+
}
|
|
77
|
+
return tryQuery("vectorStore.query", async () => {
|
|
78
|
+
const result = await pool.query(`SELECT vector_id AS id,
|
|
79
|
+
1 - (embedding <=> $1::vector) AS score,
|
|
80
|
+
metadata
|
|
81
|
+
FROM "${indexName}"
|
|
82
|
+
${where}
|
|
83
|
+
ORDER BY embedding <=> $1::vector
|
|
84
|
+
LIMIT $2`, values);
|
|
85
|
+
return result.rows;
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|