@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,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-path reconstruction of display cards from a persisted turn.
|
|
3
|
+
*
|
|
4
|
+
* `show_plan` / `show_user` / `show_file` / `execute_plan` / `iterate_report` emit
|
|
5
|
+
* `data-plan` / `data-presentation` / `data-file-reference` / `data-run-card` /
|
|
6
|
+
* `data-report-preview` cards
|
|
7
|
+
* live over the chat SSE stream. On reload, `content-to-cortex` calls this
|
|
8
|
+
* resolver for each AI SDK tool-call part: a recognised display tool yields its card (rebuilt via the
|
|
9
|
+
* shared `card-builders`); anything else yields `null` and falls back to a
|
|
10
|
+
* generic `tool-call` chip. Keyed by the analysis `Pool` + id (plan / run) or
|
|
11
|
+
* the analysis's workspace root (preview, filesystem-backed) so the card can
|
|
12
|
+
* be re-loaded.
|
|
13
|
+
*/
|
|
14
|
+
import { unwrapOrThrow } from "../lib/result.js";
|
|
15
|
+
import { validatePath } from "../tools/lib/path-validation.js";
|
|
16
|
+
import { buildFileReferenceCardData, buildPlanCardData, buildPresentationCardData, buildPreviewCardData, buildRunCardData } from "./card-builders.js";
|
|
17
|
+
export function createCardResolver(pool, analysisId, workspaceRoot) {
|
|
18
|
+
return async (block) => {
|
|
19
|
+
if (block.type !== "tool_use")
|
|
20
|
+
return null;
|
|
21
|
+
const input = (block.input ?? {});
|
|
22
|
+
// The harness tool id is `iterate_report`; legacy transcripts carry
|
|
23
|
+
// `iterateReport` — accept both.
|
|
24
|
+
if (block.name === "iterate_report" || block.name === "iterateReport") {
|
|
25
|
+
const report = (input.report ?? null);
|
|
26
|
+
const card = await buildPreviewCardData(workspaceRoot, {
|
|
27
|
+
previewId: typeof input.previewId === "string" ? input.previewId : undefined,
|
|
28
|
+
title: report && typeof report.title === "string" ? report.title : undefined,
|
|
29
|
+
format: input.format === "pdf" || input.format === "html" ? input.format : undefined,
|
|
30
|
+
});
|
|
31
|
+
return card ? { type: "data-report-preview", ...card } : null;
|
|
32
|
+
}
|
|
33
|
+
if (block.name === "show_user") {
|
|
34
|
+
// The live tool rejects a malformed/traversal echart `dataPath` and emits nothing; the
|
|
35
|
+
// persisted tool_use still carries it, so the reload path MUST re-validate before building
|
|
36
|
+
// the card — otherwise an unvalidated path is resurrected for the host to join into the
|
|
37
|
+
// workspace root. Invalid → no card (chip fallback), matching the live "emitted nothing".
|
|
38
|
+
if (typeof input.dataPath === "string" && validatePath(input.dataPath) !== null)
|
|
39
|
+
return null;
|
|
40
|
+
const card = buildPresentationCardData(input);
|
|
41
|
+
return card ? { type: "data-presentation", ...card } : null;
|
|
42
|
+
}
|
|
43
|
+
if (block.name === "show_file") {
|
|
44
|
+
const card = buildFileReferenceCardData(input);
|
|
45
|
+
return card ? { type: "data-file-reference", ...card } : null;
|
|
46
|
+
}
|
|
47
|
+
if (block.name === "show_plan") {
|
|
48
|
+
const planId = typeof input.planId === "string" ? input.planId : null;
|
|
49
|
+
if (!planId)
|
|
50
|
+
return null;
|
|
51
|
+
const title = typeof input.title === "string" ? input.title : undefined;
|
|
52
|
+
const card = unwrapOrThrow(await buildPlanCardData(pool, planId, analysisId, title));
|
|
53
|
+
return card ? { type: "data-plan", ...card } : null;
|
|
54
|
+
}
|
|
55
|
+
if (block.name === "execute_plan") {
|
|
56
|
+
const planId = typeof input.planId === "string" ? input.planId : null;
|
|
57
|
+
if (!planId)
|
|
58
|
+
return null;
|
|
59
|
+
const card = unwrapOrThrow(await buildRunCardData(pool, { planId, analysisId }));
|
|
60
|
+
return card ? { type: "data-run-card", ...card } : null;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation message store — the harness's owned `ThreadHistory`.
|
|
3
|
+
*
|
|
4
|
+
* Conversation-scoped store with an explicit two-method interface and
|
|
5
|
+
* nothing else bundled in (no semantic recall, no working memory, no title
|
|
6
|
+
* generation). It is also the home of context-window management — the read
|
|
7
|
+
* side, `loadRecent`, returns a token-bounded window.
|
|
8
|
+
*
|
|
9
|
+
* Scope (see the harness-thread-store spec): conversation threads only. A `threadId` is the
|
|
10
|
+
* UI-generated id of one conversation thread (a random UUID — an analysis
|
|
11
|
+
* has many threads); it is opaque to this module. Workflow and sandbox
|
|
12
|
+
* agent loops never call this; their message durability is the DBOS step
|
|
13
|
+
* cache. The interface vocabulary (`appendTurn` / `loadRecent`) is
|
|
14
|
+
* conversation-turn shaped on purpose, so reaching for it inside a
|
|
15
|
+
* workflow step feels immediately wrong.
|
|
16
|
+
*
|
|
17
|
+
* The window is always a valid AI SDK model-message sequence: it begins on a
|
|
18
|
+
* `user` message that is genuine user input — never a `tool`-role
|
|
19
|
+
* continuation — and never splits a tool-call/tool-result pair. The turn
|
|
20
|
+
* is the atomic unit; `appendTurn` writes one atomically and `loadRecent`
|
|
21
|
+
* rounds the budget walk to turn boundaries.
|
|
22
|
+
*/
|
|
23
|
+
import type { ModelMessage } from "ai";
|
|
24
|
+
import { ResultAsync } from "neverthrow";
|
|
25
|
+
import type { Pool } from "pg";
|
|
26
|
+
import { type DbError } from "../lib/db-result.js";
|
|
27
|
+
import { type StoredMessageEnvelope } from "./ai-sdk-message-storage.js";
|
|
28
|
+
/** One stored message, as returned by the display read (`loadPage`). */
|
|
29
|
+
export interface StoredMessage {
|
|
30
|
+
readonly seq: number;
|
|
31
|
+
readonly envelope: StoredMessageEnvelope;
|
|
32
|
+
readonly message: ModelMessage;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A page of stored messages plus pagination metadata. Pagination is
|
|
36
|
+
* turn-based: `total` is the thread's turn count and `page`/`perPage` index
|
|
37
|
+
* turns, while `messages` is the flattened rows of the page's turns.
|
|
38
|
+
*/
|
|
39
|
+
export interface MessagePage {
|
|
40
|
+
readonly messages: StoredMessage[];
|
|
41
|
+
readonly total: number;
|
|
42
|
+
readonly page: number;
|
|
43
|
+
readonly perPage: number;
|
|
44
|
+
readonly hasMore: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The conversation message store. Two methods, by design — no generic row
|
|
48
|
+
* insert (see the harness-thread-store spec). `threadId` is the conversation scope — one UI thread.
|
|
49
|
+
*/
|
|
50
|
+
export interface ThreadHistory {
|
|
51
|
+
/**
|
|
52
|
+
* Append one conversation turn — every message written in a single
|
|
53
|
+
* transaction with a `seq` monotonically increasing per thread.
|
|
54
|
+
*/
|
|
55
|
+
appendTurn(threadId: string, messages: readonly ModelMessage[]): ResultAsync<void, DbError>;
|
|
56
|
+
/**
|
|
57
|
+
* Return the most recent messages whose cumulative `tokens` fit
|
|
58
|
+
* `tokenBudget`, oldest-first, snapped to a valid AI SDK model-message sequence.
|
|
59
|
+
*/
|
|
60
|
+
loadRecent(threadId: string, tokenBudget: number): ResultAsync<ModelMessage[], DbError>;
|
|
61
|
+
/**
|
|
62
|
+
* Return one page of a thread's messages oldest-first for UI display —
|
|
63
|
+
* NOT token-windowed (that is `loadRecent`'s job for the agent loop). No
|
|
64
|
+
* eviction. Paginated by whole turns: `page`, `perPage`, and `total` count
|
|
65
|
+
* turns, not rows, so a multi-row turn always reloads intact. `messages`
|
|
66
|
+
* holds the flattened rows of the selected turns.
|
|
67
|
+
*/
|
|
68
|
+
loadPage(threadId: string, page: number, perPage: number): ResultAsync<MessagePage, DbError>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Drop the memoized instruments so the next `loadRecent` rebinds to a
|
|
72
|
+
* freshly-registered `MeterProvider`. Test-only.
|
|
73
|
+
*/
|
|
74
|
+
export declare function __resetThreadHistoryMetricsForTest(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Create a `ThreadHistory` bound to a Postgres pool — a factory closure
|
|
77
|
+
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The `messages` table is
|
|
78
|
+
* provisioned by the project's state-init DDL.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createThreadHistory(pool: Pool): ThreadHistory;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation message store — the harness's owned `ThreadHistory`.
|
|
3
|
+
*
|
|
4
|
+
* Conversation-scoped store with an explicit two-method interface and
|
|
5
|
+
* nothing else bundled in (no semantic recall, no working memory, no title
|
|
6
|
+
* generation). It is also the home of context-window management — the read
|
|
7
|
+
* side, `loadRecent`, returns a token-bounded window.
|
|
8
|
+
*
|
|
9
|
+
* Scope (see the harness-thread-store spec): conversation threads only. A `threadId` is the
|
|
10
|
+
* UI-generated id of one conversation thread (a random UUID — an analysis
|
|
11
|
+
* has many threads); it is opaque to this module. Workflow and sandbox
|
|
12
|
+
* agent loops never call this; their message durability is the DBOS step
|
|
13
|
+
* cache. The interface vocabulary (`appendTurn` / `loadRecent`) is
|
|
14
|
+
* conversation-turn shaped on purpose, so reaching for it inside a
|
|
15
|
+
* workflow step feels immediately wrong.
|
|
16
|
+
*
|
|
17
|
+
* The window is always a valid AI SDK model-message sequence: it begins on a
|
|
18
|
+
* `user` message that is genuine user input — never a `tool`-role
|
|
19
|
+
* continuation — and never splits a tool-call/tool-result pair. The turn
|
|
20
|
+
* is the atomic unit; `appendTurn` writes one atomically and `loadRecent`
|
|
21
|
+
* rounds the budget walk to turn boundaries.
|
|
22
|
+
*/
|
|
23
|
+
import { metrics } from "@opentelemetry/api";
|
|
24
|
+
import { ResultAsync, ok } from "neverthrow";
|
|
25
|
+
import { tryMutation, tryQuery, withTransaction } from "../lib/db-result.js";
|
|
26
|
+
import { countTokens } from "./count-tokens.js";
|
|
27
|
+
import { envelopeMessage, parseStoredMessageEnvelope } from "./ai-sdk-message-storage.js";
|
|
28
|
+
/** A resolved `ok(undefined)` ResultAsync — the empty/seed transaction step. */
|
|
29
|
+
function okVoid() {
|
|
30
|
+
return new ResultAsync(Promise.resolve(ok(undefined)));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A turn starts on a `user` message. In AI SDK message terms tool results
|
|
34
|
+
* are `tool`-role messages, so a mid-turn tool continuation never carries
|
|
35
|
+
* the `user` role and cannot open a turn.
|
|
36
|
+
*/
|
|
37
|
+
function isGenuineUserStart(message) {
|
|
38
|
+
return message.role === "user";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Group rows (oldest-first) into turns at genuine-user-start boundaries.
|
|
42
|
+
* Generic over the row shape so the token-windowed read (`loadRecent`) and
|
|
43
|
+
* the display read (`loadPage`) share it, each supplying its own start
|
|
44
|
+
* predicate.
|
|
45
|
+
*/
|
|
46
|
+
function groupTurns(rows, isStart) {
|
|
47
|
+
const turns = [];
|
|
48
|
+
for (const row of rows) {
|
|
49
|
+
if (turns.length === 0 || isStart(row)) {
|
|
50
|
+
turns.push([row]);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
turns[turns.length - 1].push(row);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return turns;
|
|
57
|
+
}
|
|
58
|
+
let instruments;
|
|
59
|
+
function getInstruments() {
|
|
60
|
+
if (instruments === undefined) {
|
|
61
|
+
const meter = metrics.getMeter("cortex.harness.memory");
|
|
62
|
+
instruments = {
|
|
63
|
+
totalTokens: meter.createHistogram("cortex.harness.thread.total_tokens", {
|
|
64
|
+
description: "Total token count of a conversation thread, sampled on every loadRecent",
|
|
65
|
+
unit: "{token}",
|
|
66
|
+
}),
|
|
67
|
+
turnsEvicted: meter.createHistogram("cortex.harness.thread.turns_evicted", {
|
|
68
|
+
description: "Conversation turns dropped by loadRecent's token-budget window",
|
|
69
|
+
unit: "{turn}",
|
|
70
|
+
}),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return instruments;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Drop the memoized instruments so the next `loadRecent` rebinds to a
|
|
77
|
+
* freshly-registered `MeterProvider`. Test-only.
|
|
78
|
+
*/
|
|
79
|
+
export function __resetThreadHistoryMetricsForTest() {
|
|
80
|
+
instruments = undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a `ThreadHistory` bound to a Postgres pool — a factory closure
|
|
84
|
+
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The `messages` table is
|
|
85
|
+
* provisioned by the project's state-init DDL.
|
|
86
|
+
*/
|
|
87
|
+
export function createThreadHistory(pool) {
|
|
88
|
+
function appendTurn(threadId, messages) {
|
|
89
|
+
if (messages.length === 0)
|
|
90
|
+
return okVoid();
|
|
91
|
+
return withTransaction(pool, "thread-history.appendTurn", (client) =>
|
|
92
|
+
// Serialize concurrent appends on this thread — without the lock, two
|
|
93
|
+
// transactions can both read the same MAX(seq) and collide on the
|
|
94
|
+
// (thread_id, seq) primary key. Released automatically at COMMIT/ROLLBACK.
|
|
95
|
+
tryQuery("thread-history.appendTurn.lock", () => client.query("SELECT pg_advisory_xact_lock(hashtext($1))", [threadId]))
|
|
96
|
+
.andThen(() => tryQuery("thread-history.appendTurn.maxSeq", async () => {
|
|
97
|
+
const { rows } = await client.query("SELECT COALESCE(MAX(seq), -1)::text AS max_seq FROM messages WHERE thread_id = $1", [threadId]);
|
|
98
|
+
return Number(rows[0].max_seq) + 1;
|
|
99
|
+
}))
|
|
100
|
+
.andThen((startSeq) =>
|
|
101
|
+
// Insert the turn's messages in order. Each insert chains off the
|
|
102
|
+
// prior so the first `err` short-circuits — and `withTransaction`
|
|
103
|
+
// re-throws it to force ROLLBACK (a returned `err` that does not
|
|
104
|
+
// reach `withTransaction` would COMMIT silently).
|
|
105
|
+
messages.reduce((chain, message, i) => chain.andThen(() => tryMutation("thread-history.appendTurn.insert", () => client.query(`INSERT INTO messages (thread_id, seq, message_envelope, tokens)
|
|
106
|
+
VALUES ($1, $2, $3::jsonb, $4)
|
|
107
|
+
ON CONFLICT (thread_id, seq) DO UPDATE
|
|
108
|
+
SET message_envelope = EXCLUDED.message_envelope,
|
|
109
|
+
tokens = EXCLUDED.tokens`, [threadId, startSeq + i, JSON.stringify(envelopeMessage(message)), countTokens(message.content)])).map(() => undefined)), okVoid())));
|
|
110
|
+
}
|
|
111
|
+
function loadRecent(threadId, tokenBudget) {
|
|
112
|
+
return tryQuery("thread-history.loadRecent", async () => {
|
|
113
|
+
const { rows } = await pool.query(
|
|
114
|
+
// ORDER BY must qualify `messages.seq` — a bare `seq` would bind to the
|
|
115
|
+
// `seq::text AS seq` output alias (Postgres resolves an unqualified
|
|
116
|
+
// ORDER BY name to the output column), sorting the bigint as text:
|
|
117
|
+
// "10" before "2". Scrambled order splits a tool-call/tool-result pair
|
|
118
|
+
// across an intervening turn. The qualified name forces the bigint column.
|
|
119
|
+
`SELECT seq::text AS seq, message_envelope, tokens
|
|
120
|
+
FROM messages WHERE thread_id = $1 ORDER BY messages.seq ASC`, [threadId]);
|
|
121
|
+
const parsed = rows.map((row) => ({
|
|
122
|
+
message: parseStoredMessageEnvelope(row.message_envelope, `${threadId}/${row.seq}`).message,
|
|
123
|
+
tokens: row.tokens,
|
|
124
|
+
}));
|
|
125
|
+
const turns = groupTurns(parsed, (row) => isGenuineUserStart(row.message));
|
|
126
|
+
const turnTokens = turns.map((turn) => turn.reduce((sum, row) => sum + row.tokens, 0));
|
|
127
|
+
const threadTotal = turnTokens.reduce((sum, n) => sum + n, 0);
|
|
128
|
+
// Walk turns newest-first, accumulating token cost. The most recent turn
|
|
129
|
+
// is always included — even if it alone exceeds the budget, a valid
|
|
130
|
+
// sequence beats an under-budget one. Older turns join while they fit.
|
|
131
|
+
let included = 0;
|
|
132
|
+
let cumulative = 0;
|
|
133
|
+
for (let t = turns.length - 1; t >= 0; t--) {
|
|
134
|
+
if (included > 0 && cumulative + turnTokens[t] > tokenBudget)
|
|
135
|
+
break;
|
|
136
|
+
cumulative += turnTokens[t];
|
|
137
|
+
included++;
|
|
138
|
+
}
|
|
139
|
+
const turnsEvicted = turns.length - included;
|
|
140
|
+
const { totalTokens, turnsEvicted: turnsEvictedHist } = getInstruments();
|
|
141
|
+
const attributes = { eviction: turnsEvicted > 0 };
|
|
142
|
+
totalTokens.record(threadTotal, attributes);
|
|
143
|
+
turnsEvictedHist.record(turnsEvicted, attributes);
|
|
144
|
+
return turns
|
|
145
|
+
.slice(turns.length - included)
|
|
146
|
+
.flat()
|
|
147
|
+
.map((row) => row.message);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function loadPage(threadId, page, perPage) {
|
|
151
|
+
const safePerPage = Math.min(Math.max(perPage, 1), 200);
|
|
152
|
+
const safePage = Math.max(page, 0);
|
|
153
|
+
return tryQuery("thread-history.loadPage", async () => {
|
|
154
|
+
// Display pages are turn-bounded, not row-bounded. A serial-tool assistant
|
|
155
|
+
// turn is persisted as one row per step (plus its tool_result `user` rows),
|
|
156
|
+
// so a row-windowed page could split a turn — truncating the trailing
|
|
157
|
+
// report card/text out of the page the UI fetches. Read the thread, group
|
|
158
|
+
// into turns, and slice whole turns so a turn always reloads intact.
|
|
159
|
+
// Threads are conversation-scoped and bounded, so reading every row here
|
|
160
|
+
// matches `loadRecent`'s existing whole-thread read.
|
|
161
|
+
const { rows } = await pool.query(
|
|
162
|
+
// ORDER BY must qualify `messages.seq` — a bare `seq` would bind to the
|
|
163
|
+
// `seq::text AS seq` output alias (Postgres resolves an unqualified
|
|
164
|
+
// ORDER BY name to the output column), sorting the bigint as text:
|
|
165
|
+
// "10" before "2". The qualified name forces the bigint column.
|
|
166
|
+
`SELECT seq::text AS seq, message_envelope
|
|
167
|
+
FROM messages WHERE thread_id = $1
|
|
168
|
+
ORDER BY messages.seq ASC`, [threadId]);
|
|
169
|
+
const stored = rows.map((r) => {
|
|
170
|
+
const envelope = parseStoredMessageEnvelope(r.message_envelope, `${threadId}/${r.seq}`);
|
|
171
|
+
return { seq: Number(r.seq), envelope, message: envelope.message };
|
|
172
|
+
});
|
|
173
|
+
const turns = groupTurns(stored, (row) => isGenuineUserStart(row.message));
|
|
174
|
+
const total = turns.length;
|
|
175
|
+
const offset = safePage * safePerPage;
|
|
176
|
+
const pageTurns = turns.slice(offset, offset + safePerPage);
|
|
177
|
+
return {
|
|
178
|
+
messages: pageTurns.flat(),
|
|
179
|
+
total,
|
|
180
|
+
page: safePage,
|
|
181
|
+
perPage: safePerPage,
|
|
182
|
+
hasMore: offset + pageTurns.length < total,
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return { appendTurn, loadRecent, loadPage };
|
|
187
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation thread metadata store — the harness's owned `ThreadStore`.
|
|
3
|
+
*
|
|
4
|
+
* The analysis-scope, ownership, listing, and title that the harness
|
|
5
|
+
* `messages` table (`thread-history.ts`) deliberately lacks. One row per
|
|
6
|
+
* conversation thread in `cortex_analysis_threads`, keyed by the
|
|
7
|
+
* UI-generated `thread_id` (a random UUID — an analysis has many threads).
|
|
8
|
+
*
|
|
9
|
+
* Scope (see the harness-thread-store spec): conversation threads only. Like `thread-history.ts`,
|
|
10
|
+
* the vocabulary is conversation-shaped on purpose — reaching for it inside
|
|
11
|
+
* a workflow step feels immediately wrong.
|
|
12
|
+
*
|
|
13
|
+
* Delete is soft: `deleteThread` sets `deleted_at`; `getThread` and
|
|
14
|
+
* `listThreads` filter `deleted_at IS NULL`, so the row (and its messages)
|
|
15
|
+
* survive a delete and a tombstoned thread is indistinguishable from absent.
|
|
16
|
+
*/
|
|
17
|
+
import { type ResultAsync } from "neverthrow";
|
|
18
|
+
import type { Pool } from "pg";
|
|
19
|
+
import { type DbError } from "../lib/db-result.js";
|
|
20
|
+
/** One conversation thread's metadata, as returned by the store. */
|
|
21
|
+
export interface Thread {
|
|
22
|
+
readonly threadId: string;
|
|
23
|
+
readonly analysisId: string;
|
|
24
|
+
readonly title: string | null;
|
|
25
|
+
readonly createdAt: Date;
|
|
26
|
+
readonly updatedAt: Date;
|
|
27
|
+
}
|
|
28
|
+
export interface CreateThreadInput {
|
|
29
|
+
readonly threadId: string;
|
|
30
|
+
readonly analysisId: string;
|
|
31
|
+
readonly title?: string | null;
|
|
32
|
+
}
|
|
33
|
+
export interface ListThreadsInput {
|
|
34
|
+
readonly analysisId: string;
|
|
35
|
+
readonly page?: number;
|
|
36
|
+
readonly perPage?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ThreadPage {
|
|
39
|
+
readonly threads: Thread[];
|
|
40
|
+
readonly total: number;
|
|
41
|
+
readonly page: number;
|
|
42
|
+
readonly perPage: number;
|
|
43
|
+
readonly hasMore: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ThreadStore {
|
|
46
|
+
/**
|
|
47
|
+
* Create a thread row. Idempotent on `thread_id` — a second create for an
|
|
48
|
+
* existing id is a no-op that preserves the existing row (including its
|
|
49
|
+
* `created_at`). Returns the live row.
|
|
50
|
+
*/
|
|
51
|
+
createThread(input: CreateThreadInput): ResultAsync<Thread, DbError>;
|
|
52
|
+
/** The live thread by id, or `null` if absent or soft-deleted. */
|
|
53
|
+
getThread(threadId: string): ResultAsync<Thread | null, DbError>;
|
|
54
|
+
/** Set only the title (and bump `updated_at`). No-op on a missing/deleted row. */
|
|
55
|
+
updateTitle(threadId: string, title: string): ResultAsync<Thread | null, DbError>;
|
|
56
|
+
/** Soft-delete: set `deleted_at`. The row and its messages remain. */
|
|
57
|
+
deleteThread(threadId: string): ResultAsync<void, DbError>;
|
|
58
|
+
/** Live threads for one analysis, newest-updated first, paginated. */
|
|
59
|
+
listThreads(input: ListThreadsInput): ResultAsync<ThreadPage, DbError>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a `ThreadStore` bound to a Postgres pool — a factory closure
|
|
63
|
+
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The
|
|
64
|
+
* `cortex_analysis_threads` table is provisioned by the state-init DDL.
|
|
65
|
+
*/
|
|
66
|
+
export declare function createThreadStore(pool: Pool): ThreadStore;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation thread metadata store — the harness's owned `ThreadStore`.
|
|
3
|
+
*
|
|
4
|
+
* The analysis-scope, ownership, listing, and title that the harness
|
|
5
|
+
* `messages` table (`thread-history.ts`) deliberately lacks. One row per
|
|
6
|
+
* conversation thread in `cortex_analysis_threads`, keyed by the
|
|
7
|
+
* UI-generated `thread_id` (a random UUID — an analysis has many threads).
|
|
8
|
+
*
|
|
9
|
+
* Scope (see the harness-thread-store spec): conversation threads only. Like `thread-history.ts`,
|
|
10
|
+
* the vocabulary is conversation-shaped on purpose — reaching for it inside
|
|
11
|
+
* a workflow step feels immediately wrong.
|
|
12
|
+
*
|
|
13
|
+
* Delete is soft: `deleteThread` sets `deleted_at`; `getThread` and
|
|
14
|
+
* `listThreads` filter `deleted_at IS NULL`, so the row (and its messages)
|
|
15
|
+
* survive a delete and a tombstoned thread is indistinguishable from absent.
|
|
16
|
+
*/
|
|
17
|
+
import { okAsync } from "neverthrow";
|
|
18
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
19
|
+
function toThread(row) {
|
|
20
|
+
return {
|
|
21
|
+
threadId: row.thread_id,
|
|
22
|
+
analysisId: row.analysis_id,
|
|
23
|
+
title: row.title,
|
|
24
|
+
createdAt: row.created_at,
|
|
25
|
+
updatedAt: row.updated_at,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const DEFAULT_PER_PAGE = 100;
|
|
29
|
+
const MAX_PER_PAGE = 200;
|
|
30
|
+
/**
|
|
31
|
+
* Create a `ThreadStore` bound to a Postgres pool — a factory closure
|
|
32
|
+
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The
|
|
33
|
+
* `cortex_analysis_threads` table is provisioned by the state-init DDL.
|
|
34
|
+
*/
|
|
35
|
+
export function createThreadStore(pool) {
|
|
36
|
+
function createThread(input) {
|
|
37
|
+
return tryMutation("thread-store.createThread.insert", () => pool.query(`INSERT INTO cortex_analysis_threads (thread_id, analysis_id, title)
|
|
38
|
+
VALUES ($1, $2, $3)
|
|
39
|
+
ON CONFLICT (thread_id) DO NOTHING
|
|
40
|
+
RETURNING thread_id, analysis_id, title, created_at, updated_at`, [input.threadId, input.analysisId, input.title ?? null])).andThen(({ rows }) => {
|
|
41
|
+
if (rows[0])
|
|
42
|
+
return okAsync(toThread(rows[0]));
|
|
43
|
+
// Row already existed — ON CONFLICT DO NOTHING returns nothing. Read it
|
|
44
|
+
// back (it may be soft-deleted; return it regardless so the caller sees
|
|
45
|
+
// the existing row's identity).
|
|
46
|
+
return tryQuery("thread-store.createThread.readback", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
|
|
47
|
+
FROM cortex_analysis_threads WHERE thread_id = $1`, [input.threadId])).map(({ rows: existing }) => toThread(existing[0]));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function getThread(threadId) {
|
|
51
|
+
return tryQuery("thread-store.getThread", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
|
|
52
|
+
FROM cortex_analysis_threads
|
|
53
|
+
WHERE thread_id = $1 AND deleted_at IS NULL`, [threadId])).map(({ rows }) => (rows[0] ? toThread(rows[0]) : null));
|
|
54
|
+
}
|
|
55
|
+
function updateTitle(threadId, title) {
|
|
56
|
+
return tryMutation("thread-store.updateTitle", () => pool.query(`UPDATE cortex_analysis_threads
|
|
57
|
+
SET title = $2, updated_at = NOW()
|
|
58
|
+
WHERE thread_id = $1 AND deleted_at IS NULL
|
|
59
|
+
RETURNING thread_id, analysis_id, title, created_at, updated_at`, [threadId, title])).map(({ rows }) => (rows[0] ? toThread(rows[0]) : null));
|
|
60
|
+
}
|
|
61
|
+
function deleteThread(threadId) {
|
|
62
|
+
return tryMutation("thread-store.deleteThread", () => pool.query(`UPDATE cortex_analysis_threads
|
|
63
|
+
SET deleted_at = NOW()
|
|
64
|
+
WHERE thread_id = $1 AND deleted_at IS NULL`, [threadId])).map(() => undefined);
|
|
65
|
+
}
|
|
66
|
+
function listThreads(input) {
|
|
67
|
+
const perPage = Math.min(Math.max(input.perPage ?? DEFAULT_PER_PAGE, 1), MAX_PER_PAGE);
|
|
68
|
+
const page = Math.max(input.page ?? 0, 0);
|
|
69
|
+
const offset = page * perPage;
|
|
70
|
+
return tryQuery("thread-store.listThreads.count", () => pool.query(`SELECT COUNT(*)::text AS count
|
|
71
|
+
FROM cortex_analysis_threads
|
|
72
|
+
WHERE analysis_id = $1 AND deleted_at IS NULL`, [input.analysisId])).andThen((totalResult) => {
|
|
73
|
+
const total = Number(totalResult.rows[0].count);
|
|
74
|
+
return tryQuery("thread-store.listThreads.page", () => pool.query(`SELECT thread_id, analysis_id, title, created_at, updated_at
|
|
75
|
+
FROM cortex_analysis_threads
|
|
76
|
+
WHERE analysis_id = $1 AND deleted_at IS NULL
|
|
77
|
+
ORDER BY updated_at DESC, thread_id
|
|
78
|
+
LIMIT $2 OFFSET $3`, [input.analysisId, perPage, offset])).map(({ rows }) => ({
|
|
79
|
+
threads: rows.map(toThread),
|
|
80
|
+
total,
|
|
81
|
+
page,
|
|
82
|
+
perPage,
|
|
83
|
+
hasMore: offset + rows.length < total,
|
|
84
|
+
}));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return { createThread, getThread, updateTitle, deleteThread, listThreads };
|
|
88
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working memory — the harness's structured, analysis-scoped interpretive
|
|
3
|
+
* store.
|
|
4
|
+
*
|
|
5
|
+
* Structured JSONB object the agent updates one section at a time, serialized
|
|
6
|
+
* to Markdown only when injected (see the harness-thread-store spec).
|
|
7
|
+
*
|
|
8
|
+
* Four sections. `goal`, `constraints`, `hypotheses` are analysis-flat;
|
|
9
|
+
* `findings` is run-scoped, keyed by `runId`, so a finding stays attributable
|
|
10
|
+
* to the run that produced it. There is deliberately no `context` section —
|
|
11
|
+
* analysis context lives in `cortex_analysis_state.context` and is injected
|
|
12
|
+
* separately by the chat route.
|
|
13
|
+
*
|
|
14
|
+
* `updateSection` is a section-addressable read-modify-write: the named
|
|
15
|
+
* section is replaced or amended and the other three are left byte-identical.
|
|
16
|
+
*/
|
|
17
|
+
import type { ResultAsync } from "neverthrow";
|
|
18
|
+
import type { Pool } from "pg";
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
import { type DbError } from "../lib/db-result.js";
|
|
21
|
+
/** A binding rule — user-stated or agent-derived. The highest-value section. */
|
|
22
|
+
export declare const constraintSchema: z.ZodObject<{
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
text: z.ZodString;
|
|
25
|
+
origin: z.ZodEnum<{
|
|
26
|
+
user: "user";
|
|
27
|
+
agent: "agent";
|
|
28
|
+
}>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export type Constraint = z.infer<typeof constraintSchema>;
|
|
31
|
+
/** An active hypothesis under exploration. */
|
|
32
|
+
export declare const hypothesisSchema: z.ZodObject<{
|
|
33
|
+
id: z.ZodString;
|
|
34
|
+
text: z.ZodString;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
export type Hypothesis = z.infer<typeof hypothesisSchema>;
|
|
37
|
+
/** A durable conclusion, attributed to the run that produced it. */
|
|
38
|
+
export declare const findingSchema: z.ZodObject<{
|
|
39
|
+
id: z.ZodString;
|
|
40
|
+
text: z.ZodString;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
export type Finding = z.infer<typeof findingSchema>;
|
|
43
|
+
/**
|
|
44
|
+
* The persisted `data` shape — one JSONB object per analysis. `findings` is
|
|
45
|
+
* keyed by `runId`; an analysis with no recorded findings has an empty map.
|
|
46
|
+
*/
|
|
47
|
+
export declare const workingMemorySchema: z.ZodObject<{
|
|
48
|
+
goal: z.ZodString;
|
|
49
|
+
constraints: z.ZodArray<z.ZodObject<{
|
|
50
|
+
id: z.ZodString;
|
|
51
|
+
text: z.ZodString;
|
|
52
|
+
origin: z.ZodEnum<{
|
|
53
|
+
user: "user";
|
|
54
|
+
agent: "agent";
|
|
55
|
+
}>;
|
|
56
|
+
}, z.core.$strip>>;
|
|
57
|
+
hypotheses: z.ZodArray<z.ZodObject<{
|
|
58
|
+
id: z.ZodString;
|
|
59
|
+
text: z.ZodString;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
findings: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
|
|
62
|
+
id: z.ZodString;
|
|
63
|
+
text: z.ZodString;
|
|
64
|
+
}, z.core.$strip>>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export type WorkingMemory = z.infer<typeof workingMemorySchema>;
|
|
67
|
+
/** The shape `load` returns for an analysis with no working-memory row. */
|
|
68
|
+
export declare function emptyWorkingMemory(): WorkingMemory;
|
|
69
|
+
/**
|
|
70
|
+
* A list-section amendment: append a new entry, revise an existing one's
|
|
71
|
+
* text, or retire a stale one. `revise`/`retire` address an entry by the
|
|
72
|
+
* `id` the agent copies from the rendered working memory.
|
|
73
|
+
*/
|
|
74
|
+
export type ListOp = {
|
|
75
|
+
readonly op: "add";
|
|
76
|
+
readonly text: string;
|
|
77
|
+
} | {
|
|
78
|
+
readonly op: "revise";
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly text: string;
|
|
81
|
+
} | {
|
|
82
|
+
readonly op: "retire";
|
|
83
|
+
readonly id: string;
|
|
84
|
+
};
|
|
85
|
+
/** As `ListOp`, but `add` also carries the constraint's `origin`. */
|
|
86
|
+
export type ConstraintOp = {
|
|
87
|
+
readonly op: "add";
|
|
88
|
+
readonly text: string;
|
|
89
|
+
readonly origin: "user" | "agent";
|
|
90
|
+
} | {
|
|
91
|
+
readonly op: "revise";
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly text: string;
|
|
94
|
+
} | {
|
|
95
|
+
readonly op: "retire";
|
|
96
|
+
readonly id: string;
|
|
97
|
+
};
|
|
98
|
+
/** The `value` argument of `updateSection`, keyed by the `section` name. */
|
|
99
|
+
export interface SectionValue {
|
|
100
|
+
readonly goal: {
|
|
101
|
+
readonly text: string;
|
|
102
|
+
};
|
|
103
|
+
readonly constraint: ConstraintOp;
|
|
104
|
+
readonly hypothesis: ListOp;
|
|
105
|
+
readonly finding: {
|
|
106
|
+
readonly runId: string;
|
|
107
|
+
readonly text: string;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export type Section = keyof SectionValue;
|
|
111
|
+
/**
|
|
112
|
+
* The working-memory store. Three methods — `load` reads the structured
|
|
113
|
+
* shape, `updateSection` amends one section, `render` serializes to the
|
|
114
|
+
* Markdown the chat route injects.
|
|
115
|
+
*/
|
|
116
|
+
export interface WorkingMemoryStore {
|
|
117
|
+
/** Read the row; return the empty shape if absent (no lazy insert). */
|
|
118
|
+
load(analysisId: string): ResultAsync<WorkingMemory, DbError>;
|
|
119
|
+
/**
|
|
120
|
+
* Atomically read-modify-write one section. The other three sections are
|
|
121
|
+
* left byte-identical; the row is upserted if absent.
|
|
122
|
+
*/
|
|
123
|
+
updateSection<S extends Section>(analysisId: string, section: S, value: SectionValue[S]): ResultAsync<void, DbError>;
|
|
124
|
+
/** Serialize working memory to a Markdown document for injection. */
|
|
125
|
+
render(analysisId: string): ResultAsync<string, DbError>;
|
|
126
|
+
}
|
|
127
|
+
/** Serialize working memory to the Markdown document injected each turn. */
|
|
128
|
+
export declare function renderWorkingMemory(wm: WorkingMemory): string;
|
|
129
|
+
/**
|
|
130
|
+
* Create a `WorkingMemoryStore` bound to a Postgres pool — a factory closure
|
|
131
|
+
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The
|
|
132
|
+
* `cortex_working_memory` table is provisioned by the project's state-init
|
|
133
|
+
* DDL.
|
|
134
|
+
*/
|
|
135
|
+
export declare function createWorkingMemory(pool: Pool): WorkingMemoryStore;
|