@inflexa-ai/harness 0.45.1 → 0.46.0
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/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
6
|
import { err, ok, okAsync, ResultAsync } from "neverthrow";
|
|
7
|
+
import { errorNameOf } from "../lib/thrown.js";
|
|
7
8
|
import { z } from "zod";
|
|
8
9
|
import { capabilityDataRequirement } from "../agents/sandbox-catalog.js";
|
|
9
10
|
import { SANDBOX_AGENT_META } from "../agents/sandbox/index.js";
|
|
@@ -17,13 +18,15 @@ import { buildRunCardData } from "../memory/card-builders.js";
|
|
|
17
18
|
import { formatQuery, parseQuery } from "../sandbox/package-identity.js";
|
|
18
19
|
import { AnalysisPlanSchema } from "../schemas/workflow-state.js";
|
|
19
20
|
import { validatePlan } from "../schemas/validate-plan.js";
|
|
20
|
-
import { RunDedupCollisionError, insertRun, loadPlan, queryActiveRun, queryNewestPlanRun,
|
|
21
|
+
import { RunDedupCollisionError, insertRun, loadPlan, queryActiveRun, queryNewestPlanRun, queryRun, reserveRunById, updateRunStatus, upsertPlan, } from "../state/index.js";
|
|
21
22
|
import { routeAdHocRequest } from "./ad-hoc-router.js";
|
|
22
|
-
import { adHocPlanId, adHocRunId } from "./analysis-invocation.js";
|
|
23
|
+
import { adHocPlanId, adHocRunId, callRunId, durableCallKey } from "./analysis-invocation.js";
|
|
23
24
|
import { defineTool } from "./define-tool.js";
|
|
24
25
|
import { queryPackages, readInventorySections } from "./sandbox/list-available-packages.js";
|
|
25
26
|
import { callExtendAnalysisFarm } from "./sandbox/link-packages.js";
|
|
26
|
-
|
|
27
|
+
import { PLAN_ID_RE } from "../contracts/schemas/chat-parts.js";
|
|
28
|
+
import { collapseWhitespace } from "../lib/text.js";
|
|
29
|
+
const planIdSchema = z.string().regex(PLAN_ID_RE, "planId must be a pln-<8hex> value");
|
|
27
30
|
const inputSchema = z
|
|
28
31
|
.object({
|
|
29
32
|
mode: z
|
|
@@ -67,7 +70,7 @@ export class PlanValidationError extends Error {
|
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
72
|
function isDedupCollision(err) {
|
|
70
|
-
return err instanceof RunDedupCollisionError || (err
|
|
73
|
+
return err instanceof RunDedupCollisionError || errorNameOf(err) === "RunDedupCollisionError";
|
|
71
74
|
}
|
|
72
75
|
/**
|
|
73
76
|
* A pool miss at the pre-launch link pass. The message names the missing
|
|
@@ -229,7 +232,7 @@ async function linkPlanPackages(extendAnalysisFarm, analysisId, planId, plan) {
|
|
|
229
232
|
const collisions = outcomes
|
|
230
233
|
.filter((o) => o.kind === "collision")
|
|
231
234
|
.map((o) => `${o.spelling} — two store directories claim it, ${o.storeDirs[0]} and ${o.storeDirs[1]}` +
|
|
232
|
-
|
|
235
|
+
(o.detail === undefined ? "" : ` (${o.detail})`) +
|
|
233
236
|
`; when the two directories are one spelling in two tracks, name the track in the plan, as ` +
|
|
234
237
|
`${formatQuery({ spelling: o.spelling, track: "python" })} or ${formatQuery({ spelling: o.spelling, track: "r" })}`);
|
|
235
238
|
if (missing.length > 0 || collisions.length > 0) {
|
|
@@ -265,14 +268,13 @@ function workflowInput(planId, plan, args) {
|
|
|
265
268
|
planId,
|
|
266
269
|
planSummary: planSummary(plan),
|
|
267
270
|
threadId: args.threadId,
|
|
268
|
-
steps: plan.steps.map((step) => ({ id: step.id, depends_on: step.depends_on
|
|
271
|
+
steps: plan.steps.map((step) => ({ id: step.id, depends_on: step.depends_on })),
|
|
269
272
|
planStepById: Object.fromEntries(plan.steps.map((step) => [step.id, step])),
|
|
270
273
|
agentByStepId: Object.fromEntries(plan.steps.map((step) => [step.id, step.agent ?? "unknown"])),
|
|
271
274
|
resourcesByStepId: args.resourcesByStepId,
|
|
272
|
-
timeoutByStepId: Object.fromEntries(plan.steps.
|
|
275
|
+
timeoutByStepId: Object.fromEntries(plan.steps.flatMap((step) => (step.timeout === undefined ? [] : [[step.id, step.timeout]]))),
|
|
273
276
|
budget: args.budget,
|
|
274
277
|
runSession: args.runSession,
|
|
275
|
-
ownsMandate: args.ownsMandate,
|
|
276
278
|
synthesisEnabled: args.synthesisEnabled,
|
|
277
279
|
};
|
|
278
280
|
}
|
|
@@ -293,7 +295,7 @@ function validateStoredPlan(raw, planId) {
|
|
|
293
295
|
return parsed.value;
|
|
294
296
|
}
|
|
295
297
|
function adHocTitle(request) {
|
|
296
|
-
const compact = request
|
|
298
|
+
const compact = collapseWhitespace(request);
|
|
297
299
|
return compact.length <= 80 ? compact : `${compact.slice(0, 77)}…`;
|
|
298
300
|
}
|
|
299
301
|
/** How a dropped entry reads to the step agent, in the terms of its own reason. */
|
|
@@ -349,7 +351,7 @@ export function buildAdHocPlan(request, route, createdAt = new Date().toISOStrin
|
|
|
349
351
|
status: "pending",
|
|
350
352
|
resources: route.resources,
|
|
351
353
|
agent: route.agentId,
|
|
352
|
-
|
|
354
|
+
capability: route.capability,
|
|
353
355
|
maxSteps: meta?.defaultMaxSteps ?? DEFAULT_SANDBOX_MAX_STEPS,
|
|
354
356
|
},
|
|
355
357
|
],
|
|
@@ -369,9 +371,9 @@ function adHocPackageResolver(deps, analysisId) {
|
|
|
369
371
|
if (!deps.farmLockFile && !deps.imagePackagesFile && !deps.readPoolInventory)
|
|
370
372
|
return undefined;
|
|
371
373
|
const inventory = {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
374
|
+
farmLockFile: deps.farmLockFile,
|
|
375
|
+
imagePackagesFile: deps.imagePackagesFile,
|
|
376
|
+
readPoolInventory: deps.readPoolInventory,
|
|
375
377
|
};
|
|
376
378
|
return async (names) => {
|
|
377
379
|
const read = await readInventorySections(inventory, analysisId);
|
|
@@ -394,14 +396,14 @@ async function persistedAdHocPlan(deps, args) {
|
|
|
394
396
|
pool: deps.pool,
|
|
395
397
|
resourcePolicy: deps.resourcePolicy,
|
|
396
398
|
logger: deps.logger,
|
|
397
|
-
|
|
398
|
-
|
|
399
|
+
resolvePackages,
|
|
400
|
+
usageRecorder: deps.usageRecorder,
|
|
399
401
|
}, {
|
|
400
402
|
analysisId: args.analysisId,
|
|
401
403
|
request: args.request,
|
|
402
404
|
session: args.ctx.session,
|
|
403
405
|
signal: args.ctx.signal,
|
|
404
|
-
|
|
406
|
+
turnUsage: args.ctx.turnUsage,
|
|
405
407
|
invocationId: args.ctx.invocationId,
|
|
406
408
|
});
|
|
407
409
|
const candidate = buildAdHocPlan(args.request, route);
|
|
@@ -414,6 +416,10 @@ async function persistedAdHocPlan(deps, args) {
|
|
|
414
416
|
/**
|
|
415
417
|
* The half of a launch that the plan mode and the ad hoc mode share: the link pass, the reservation,
|
|
416
418
|
* the authorization, and the workflow start. It gives each outcome as a `Result`.
|
|
419
|
+
*
|
|
420
|
+
* A launch of the run of this call always authorizes and starts, also when its row exists. A rerun of
|
|
421
|
+
* the call can come after the reservation and before the start, and the launcher starts one workflow for
|
|
422
|
+
* each run id. A rerun after the start mints a second mandate that no run uses.
|
|
417
423
|
*/
|
|
418
424
|
async function launchReservedRun(deps, args) {
|
|
419
425
|
const logger = (deps.logger ?? createNoopLogger()).named("execute-analysis-tool");
|
|
@@ -438,9 +444,10 @@ async function launchReservedRun(deps, args) {
|
|
|
438
444
|
const reservation = await args.reserve({ analysisId, threadId });
|
|
439
445
|
if (reservation.isErr())
|
|
440
446
|
return err(reservation.error);
|
|
441
|
-
|
|
447
|
+
// A different run holds the slot of the plan, or the view of the caller is stale: this call starts nothing.
|
|
448
|
+
if (reservation.value.runId !== args.runId)
|
|
442
449
|
return reservation;
|
|
443
|
-
const runId =
|
|
450
|
+
const runId = args.runId;
|
|
444
451
|
const authorized = await passGate("RunAuthorizer.authorize", deps.runAuthorizer.authorize({
|
|
445
452
|
auth: session.auth,
|
|
446
453
|
scope: session.scope,
|
|
@@ -448,25 +455,17 @@ async function launchReservedRun(deps, args) {
|
|
|
448
455
|
frame: { runId },
|
|
449
456
|
}));
|
|
450
457
|
if (authorized.isErr()) {
|
|
451
|
-
// The refusal ends the run before a workflow exists, thus the
|
|
452
|
-
//
|
|
458
|
+
// The refusal ends the run before a workflow exists, thus the reserved row must not stay `running`. No work
|
|
459
|
+
// exists yet, thus a refusal with the suspend flag does not pause, and it marks no analysis.
|
|
453
460
|
const { kind, reason } = authorized.error;
|
|
454
|
-
if (kind === "suspended") {
|
|
455
|
-
await updateRunStatus(deps.pool, runId, "suspended_insufficient_funds", reason).match(() => { }, () => { });
|
|
456
|
-
const suspension = await suspendAnalysis(deps.pool, analysisId);
|
|
457
|
-
if (suspension.isErr())
|
|
458
|
-
return err({ type: "store_failed", cause: suspension.error });
|
|
459
|
-
return err({ type: "suspended", reason });
|
|
460
|
-
}
|
|
461
461
|
await updateRunStatus(deps.pool, runId, "failed", reason).match(() => { }, () => { });
|
|
462
|
-
return err({ type: "not_authorized", reason });
|
|
462
|
+
return err(kind === "suspended" ? { type: "suspended", reason } : { type: "not_authorized", reason });
|
|
463
463
|
}
|
|
464
|
-
const
|
|
464
|
+
const runSession = authorized.value;
|
|
465
465
|
const wfInput = workflowInput(planId, plan, {
|
|
466
466
|
analysisId,
|
|
467
467
|
threadId,
|
|
468
|
-
runSession
|
|
469
|
-
ownsMandate: authorization.ownsMandate,
|
|
468
|
+
runSession,
|
|
470
469
|
budget: deps.resourcePolicy?.budget,
|
|
471
470
|
synthesisEnabled: args.mode === "plan",
|
|
472
471
|
resourcesByStepId: resources.value,
|
|
@@ -475,7 +474,7 @@ async function launchReservedRun(deps, args) {
|
|
|
475
474
|
await deps.runLauncher.launch(deps.executeAnalysisWorkflow, { workflowId: runId }, wfInput);
|
|
476
475
|
}
|
|
477
476
|
catch (cause) {
|
|
478
|
-
await deliverNotice(logger, "RunAuthorizer.revoke", deps.runAuthorizer.revoke(
|
|
477
|
+
await deliverNotice(logger, "RunAuthorizer.revoke", deps.runAuthorizer.revoke(runSession, "workflow-start-failed"));
|
|
479
478
|
// A failed write leaves the row `running` with no workflow. The boot repair (`reconcileOrphanedRuns`) fails it.
|
|
480
479
|
await updateRunStatus(deps.pool, runId, "failed", "workflow start failed").match(() => { }, (error) => logger.warn("the failed status of a run whose start failed was not written", { runId, ...logger.errorFields(error) }));
|
|
481
480
|
return err({ type: "launch_failed", cause });
|
|
@@ -496,29 +495,34 @@ function lockPlanLaunch(client, planId) {
|
|
|
496
495
|
return tryQuery("execute-analysis.lockPlanLaunch", () => client.query("SELECT pg_advisory_xact_lock(hashtext($1))", [`plan-launch:${planId}`])).map(() => undefined);
|
|
497
496
|
}
|
|
498
497
|
/**
|
|
499
|
-
* Reserve
|
|
500
|
-
* after the other. A
|
|
501
|
-
*
|
|
502
|
-
*
|
|
498
|
+
* Reserve the run `runId` for a plan under the lock of the plan, thus the reservations of one plan occur
|
|
499
|
+
* one after the other. A row of `runId` that exists is the reservation of a first attempt of the same
|
|
500
|
+
* call. A caller with a `newestRunId` reserves nothing when the newest run of the plan is a different run.
|
|
501
|
+
* The new row starts after the newest start, thus it is the newest run of the plan. A concurrent launch of
|
|
502
|
+
* the same plan can hold the active-plan slot, and its run is the answer.
|
|
503
503
|
*/
|
|
504
504
|
async function reservePlanRun(deps, args) {
|
|
505
|
-
const runId =
|
|
505
|
+
const { runId } = args;
|
|
506
506
|
try {
|
|
507
507
|
const reserved = await withTransaction(deps.pool, "execute-analysis.reservePlanRun", (client) => lockPlanLaunch(client, args.planId)
|
|
508
|
-
.andThen(() =>
|
|
509
|
-
.andThen((
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
508
|
+
.andThen(() => queryRun(client, runId))
|
|
509
|
+
.andThen((own) => {
|
|
510
|
+
if (own !== null)
|
|
511
|
+
return okAsync({ type: "reserved" });
|
|
512
|
+
return queryNewestPlanRun(client, { analysisId: args.analysisId, planId: args.planId }).andThen((newest) => {
|
|
513
|
+
const stale = args.newestRunId === undefined ? null : staleViewOf(newest?.runId ?? null, args.newestRunId);
|
|
514
|
+
if (stale)
|
|
515
|
+
return okAsync({ type: "stale", view: stale });
|
|
516
|
+
const startedAt = newest === null ? undefined : new Date(Math.max(Date.now(), Date.parse(newest.startedAt) + 1)).toISOString();
|
|
517
|
+
return insertRun(client, {
|
|
518
|
+
runId,
|
|
519
|
+
analysisId: args.analysisId,
|
|
520
|
+
threadId: args.threadId,
|
|
521
|
+
workflowName: "executeAnalysis",
|
|
522
|
+
planId: args.planId,
|
|
523
|
+
startedAt,
|
|
524
|
+
}).map(() => ({ type: "reserved" }));
|
|
525
|
+
});
|
|
522
526
|
}));
|
|
523
527
|
if (reserved.isErr())
|
|
524
528
|
return err({ type: "store_failed", cause: reserved.error });
|
|
@@ -565,6 +569,7 @@ async function reserveAdHocRun(deps, args) {
|
|
|
565
569
|
async function launchStoredPlan(deps, input) {
|
|
566
570
|
const { session, planId, newestRunId } = input;
|
|
567
571
|
const analysisId = session.scope.analysisId;
|
|
572
|
+
const runId = input.runId ?? randomUUID();
|
|
568
573
|
const raw = await loadPlan(deps.pool, planId, { analysisId });
|
|
569
574
|
if (raw.isErr())
|
|
570
575
|
return err({ type: "store_failed", cause: raw.error });
|
|
@@ -584,14 +589,21 @@ async function launchStoredPlan(deps, input) {
|
|
|
584
589
|
const active = await queryActiveRun(deps.pool, analysisId, planId);
|
|
585
590
|
if (active.isErr())
|
|
586
591
|
return err({ type: "store_failed", cause: active.error });
|
|
587
|
-
if (active.value)
|
|
588
|
-
|
|
592
|
+
if (active.value && active.value.runId !== runId) {
|
|
593
|
+
// A rerun of a call whose run ended keeps its run, also when a later launch holds the slot.
|
|
594
|
+
const own = await queryRun(deps.pool, runId);
|
|
595
|
+
if (own.isErr())
|
|
596
|
+
return err({ type: "store_failed", cause: own.error });
|
|
597
|
+
if (own.value === null)
|
|
598
|
+
return ok({ runId: active.value.runId, started: false });
|
|
599
|
+
}
|
|
589
600
|
return launchReservedRun(deps, {
|
|
590
601
|
session,
|
|
591
602
|
planId,
|
|
592
603
|
plan: plan.value,
|
|
593
604
|
mode: "plan",
|
|
594
|
-
|
|
605
|
+
runId,
|
|
606
|
+
reserve: (frame) => reservePlanRun(deps, { ...frame, planId, runId, newestRunId }),
|
|
595
607
|
});
|
|
596
608
|
}
|
|
597
609
|
/**
|
|
@@ -645,20 +657,28 @@ export function createExecuteAnalysisTool(deps) {
|
|
|
645
657
|
// running is a different event from an ad hoc request being routed.
|
|
646
658
|
describeCall: (input) => (input.mode === "plan" ? `plan ${input.planId ?? ""}` : `ad hoc: ${input.request ?? ""}`),
|
|
647
659
|
execute: async (input, ctx) => {
|
|
648
|
-
if (ctx.session.scope.kind !== "analysis")
|
|
649
|
-
throw new Error("execute_analysis requires an analysis-scoped session");
|
|
650
|
-
if (!ctx.session.auth)
|
|
651
|
-
throw new Error("execute_analysis: session is missing its auth capability");
|
|
652
660
|
const analysisId = ctx.session.scope.analysisId;
|
|
653
|
-
|
|
661
|
+
let planId;
|
|
662
|
+
if (input.mode === "plan") {
|
|
663
|
+
if (input.planId === undefined)
|
|
664
|
+
throw new Error("plan mode requires planId");
|
|
665
|
+
planId = input.planId;
|
|
666
|
+
}
|
|
667
|
+
else {
|
|
668
|
+
planId = adHocPlanId(analysisId, ctx.invocationId);
|
|
669
|
+
}
|
|
654
670
|
const emitRunCard = async (runId) => {
|
|
655
671
|
const card = await buildRunCardData(deps.pool, { planId, analysisId, runId }).unwrapOr(null);
|
|
656
672
|
if (card)
|
|
657
673
|
await ctx.emit({ type: "data-run-card", source: ctx.session.provenance, data: card });
|
|
658
674
|
};
|
|
659
675
|
const launch = async () => {
|
|
660
|
-
if (input.mode === "plan")
|
|
661
|
-
|
|
676
|
+
if (input.mode === "plan") {
|
|
677
|
+
const callKey = durableCallKey(ctx.invocationId);
|
|
678
|
+
return launchPlanRun(deps, { session: ctx.session, planId, runId: callKey === undefined ? undefined : callRunId(callKey) });
|
|
679
|
+
}
|
|
680
|
+
if (input.request === undefined)
|
|
681
|
+
throw new Error("adhoc mode requires request");
|
|
662
682
|
const plan = await persistedAdHocPlan(deps, { analysisId, request: input.request, ctx, planId });
|
|
663
683
|
const runId = adHocRunId(analysisId, ctx.invocationId);
|
|
664
684
|
return launchReservedRun(deps, {
|
|
@@ -666,6 +686,7 @@ export function createExecuteAnalysisTool(deps) {
|
|
|
666
686
|
planId,
|
|
667
687
|
plan,
|
|
668
688
|
mode: "adhoc",
|
|
689
|
+
runId,
|
|
669
690
|
reserve: (frame) => reserveAdHocRun(deps, { ...frame, planId, runId }),
|
|
670
691
|
});
|
|
671
692
|
};
|
|
@@ -673,7 +694,7 @@ export function createExecuteAnalysisTool(deps) {
|
|
|
673
694
|
if (launched.isErr()) {
|
|
674
695
|
const refusal = launched.error;
|
|
675
696
|
if (refusal.type === "suspended")
|
|
676
|
-
return err({ error: `The
|
|
697
|
+
return err({ error: `The host refused the run: ${refusal.reason}`, retryable: false });
|
|
677
698
|
if (refusal.type === "not_authorized")
|
|
678
699
|
return err({ error: `The run was not authorized: ${refusal.reason}`, retryable: false });
|
|
679
700
|
return throwLaunchRefusal(refusal, planId);
|
|
@@ -6,55 +6,177 @@
|
|
|
6
6
|
* typed refusal and never reaches the service. A small model that cannot
|
|
7
7
|
* satisfy a finding otherwise rephrases the step until the plan times out.
|
|
8
8
|
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { type Tool } from "../define-tool.js";
|
|
9
11
|
import type { CheckResponse, KnowledgeClient, KnowledgeRejected, KnowledgeSnapshotMismatch, KnowledgeUnavailable } from "./client.js";
|
|
10
12
|
import type { SnapshotPin } from "./pin.js";
|
|
11
|
-
export
|
|
13
|
+
export type KnowledgeCheckDeps = {
|
|
12
14
|
readonly client: KnowledgeClient;
|
|
13
15
|
/** The release the plan pinned on its first recommend answer. The check sends it, thus another release refuses the call. */
|
|
14
16
|
readonly pin?: SnapshotPin;
|
|
15
|
-
}
|
|
17
|
+
};
|
|
16
18
|
export type KnowledgeCheckOutput = CheckResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch;
|
|
17
19
|
/** The checks one plan generation may run. Two is a draft and one revision; the third is slack. */
|
|
18
20
|
export declare const CHECK_CALL_LIMIT = 3;
|
|
19
|
-
|
|
20
|
-
question:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
21
|
+
declare const KnowledgeCheckInputSchema: z.ZodObject<{
|
|
22
|
+
question: z.ZodEnum<{
|
|
23
|
+
clustering: "clustering";
|
|
24
|
+
coexpression: "coexpression";
|
|
25
|
+
deconvolution: "deconvolution";
|
|
26
|
+
differential_expression: "differential_expression";
|
|
27
|
+
enrichment: "enrichment";
|
|
28
|
+
full_plan: "full_plan";
|
|
29
|
+
qc: "qc";
|
|
30
|
+
signature_scoring: "signature_scoring";
|
|
31
|
+
survival: "survival";
|
|
32
|
+
tf_activity: "tf_activity";
|
|
33
|
+
}>;
|
|
34
|
+
modality: z.ZodLiteral<"bulk_rna_seq">;
|
|
35
|
+
data_state: z.ZodEnum<{
|
|
36
|
+
counts: "counts";
|
|
37
|
+
fastq: "fastq";
|
|
38
|
+
log_normalized: "log_normalized";
|
|
39
|
+
tpm_or_fpkm: "tpm_or_fpkm";
|
|
40
|
+
}>;
|
|
41
|
+
count_source: z.ZodOptional<z.ZodEnum<{
|
|
42
|
+
kallisto: "kallisto";
|
|
43
|
+
rsem: "rsem";
|
|
44
|
+
salmon: "salmon";
|
|
45
|
+
star_featurecounts: "star_featurecounts";
|
|
46
|
+
unknown: "unknown";
|
|
47
|
+
}>>;
|
|
48
|
+
import_state: z.ZodOptional<z.ZodEnum<{
|
|
49
|
+
corrected_counts: "corrected_counts";
|
|
50
|
+
estimated_counts_with_lengths: "estimated_counts_with_lengths";
|
|
51
|
+
integer_counts: "integer_counts";
|
|
52
|
+
quantifications: "quantifications";
|
|
53
|
+
unknown: "unknown";
|
|
54
|
+
}>>;
|
|
55
|
+
organism: z.ZodEnum<{
|
|
56
|
+
human: "human";
|
|
57
|
+
mouse: "mouse";
|
|
58
|
+
other: "other";
|
|
59
|
+
}>;
|
|
60
|
+
n_groups: z.ZodNumber;
|
|
61
|
+
n_per_group_min: z.ZodNumber;
|
|
62
|
+
n_per_group_max: z.ZodNumber;
|
|
63
|
+
n_samples: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
n_events: z.ZodOptional<z.ZodNumber>;
|
|
65
|
+
paired: z.ZodBoolean;
|
|
66
|
+
blocking_factor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
67
|
+
cell_line: "cell_line";
|
|
68
|
+
individual: "individual";
|
|
69
|
+
litter: "litter";
|
|
70
|
+
other: "other";
|
|
71
|
+
pair: "pair";
|
|
72
|
+
site: "site";
|
|
73
|
+
}>>>;
|
|
74
|
+
block_structure: z.ZodOptional<z.ZodEnum<{
|
|
75
|
+
crossed: "crossed";
|
|
76
|
+
nested: "nested";
|
|
77
|
+
}>>;
|
|
78
|
+
batch: z.ZodEnum<{
|
|
79
|
+
known_balanced: "known_balanced";
|
|
80
|
+
known_confounded: "known_confounded";
|
|
81
|
+
known_unbalanced: "known_unbalanced";
|
|
82
|
+
none: "none";
|
|
83
|
+
suspected: "suspected";
|
|
84
|
+
}>;
|
|
85
|
+
covariates: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
86
|
+
age: "age";
|
|
87
|
+
clinical: "clinical";
|
|
88
|
+
other: "other";
|
|
89
|
+
sex: "sex";
|
|
90
|
+
technical: "technical";
|
|
91
|
+
}>>>;
|
|
92
|
+
n_timepoints: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
93
|
+
continuous_predictor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
94
|
+
age: "age";
|
|
95
|
+
dose: "dose";
|
|
96
|
+
other: "other";
|
|
97
|
+
score: "score";
|
|
98
|
+
time: "time";
|
|
99
|
+
}>>>;
|
|
100
|
+
technical_replicates: z.ZodOptional<z.ZodBoolean>;
|
|
101
|
+
sample_exclusions: z.ZodOptional<z.ZodBoolean>;
|
|
102
|
+
feature_level: z.ZodOptional<z.ZodEnum<{
|
|
103
|
+
exon: "exon";
|
|
104
|
+
gene: "gene";
|
|
105
|
+
transcript: "transcript";
|
|
106
|
+
}>>;
|
|
107
|
+
library_type: z.ZodOptional<z.ZodEnum<{
|
|
108
|
+
polyA: "polyA";
|
|
109
|
+
three_prime: "three_prime";
|
|
110
|
+
total: "total";
|
|
111
|
+
unknown: "unknown";
|
|
112
|
+
}>>;
|
|
113
|
+
strandedness: z.ZodOptional<z.ZodEnum<{
|
|
114
|
+
declared_unverified: "declared_unverified";
|
|
115
|
+
unknown: "unknown";
|
|
116
|
+
verified: "verified";
|
|
117
|
+
}>>;
|
|
118
|
+
interaction: z.ZodOptional<z.ZodBoolean>;
|
|
119
|
+
classifier: z.ZodOptional<z.ZodBoolean>;
|
|
120
|
+
extra_analyses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
121
|
+
annotation: "annotation";
|
|
122
|
+
clustering: "clustering";
|
|
123
|
+
coexpression: "coexpression";
|
|
124
|
+
deconvolution: "deconvolution";
|
|
125
|
+
pathway_activity: "pathway_activity";
|
|
126
|
+
signature_scoring: "signature_scoring";
|
|
127
|
+
survival: "survival";
|
|
128
|
+
tf_activity: "tf_activity";
|
|
129
|
+
transcript_level: "transcript_level";
|
|
130
|
+
variance_partition: "variance_partition";
|
|
131
|
+
}>>>;
|
|
132
|
+
preferred_language: z.ZodOptional<z.ZodEnum<{
|
|
133
|
+
R: "R";
|
|
134
|
+
python: "python";
|
|
135
|
+
}>>;
|
|
136
|
+
enrichment_input: z.ZodOptional<z.ZodEnum<{
|
|
137
|
+
gene_list: "gene_list";
|
|
138
|
+
ranked_list: "ranked_list";
|
|
139
|
+
sample_scores: "sample_scores";
|
|
140
|
+
}>>;
|
|
141
|
+
quality_flags: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
142
|
+
degraded_rna: "degraded_rna";
|
|
143
|
+
high_duplication: "high_duplication";
|
|
144
|
+
low_depth_sample: "low_depth_sample";
|
|
145
|
+
outlier_sample: "outlier_sample";
|
|
146
|
+
sample_identity_doubt: "sample_identity_doubt";
|
|
147
|
+
}>>>;
|
|
148
|
+
steps: z.ZodArray<z.ZodObject<{
|
|
149
|
+
step_type: z.ZodEnum<{
|
|
150
|
+
annotation: "annotation";
|
|
151
|
+
clustering: "clustering";
|
|
152
|
+
coexpression: "coexpression";
|
|
153
|
+
cohort_assembly: "cohort_assembly";
|
|
154
|
+
deconvolution: "deconvolution";
|
|
155
|
+
differential_expression: "differential_expression";
|
|
156
|
+
enrichment: "enrichment";
|
|
157
|
+
filter_low_counts: "filter_low_counts";
|
|
158
|
+
model_design: "model_design";
|
|
159
|
+
multiple_testing: "multiple_testing";
|
|
160
|
+
normalize: "normalize";
|
|
161
|
+
pathway_activity: "pathway_activity";
|
|
162
|
+
qc_sample_structure: "qc_sample_structure";
|
|
163
|
+
report: "report";
|
|
164
|
+
shrink_lfc: "shrink_lfc";
|
|
165
|
+
signature_scoring: "signature_scoring";
|
|
166
|
+
survival: "survival";
|
|
167
|
+
tf_activity: "tf_activity";
|
|
168
|
+
transcript_level: "transcript_level";
|
|
169
|
+
variance_partition: "variance_partition";
|
|
170
|
+
}>;
|
|
171
|
+
method: z.ZodString;
|
|
172
|
+
method_id: z.ZodOptional<z.ZodString>;
|
|
173
|
+
package: z.ZodOptional<z.ZodString>;
|
|
174
|
+
parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
175
|
+
name: z.ZodString;
|
|
176
|
+
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
|
|
177
|
+
}, z.core.$strip>>>;
|
|
178
|
+
outcome: z.ZodOptional<z.ZodString>;
|
|
179
|
+
}, z.core.$strip>>;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
export declare function createKnowledgeCheckTool(deps: KnowledgeCheckDeps): Tool<z.infer<typeof KnowledgeCheckInputSchema>, KnowledgeCheckOutput>;
|
|
182
|
+
export {};
|
|
@@ -40,6 +40,7 @@ const DraftedStepSchema = z.object({
|
|
|
40
40
|
method: z.string().min(1).describe("The method as the step names it, for example `DESeq2 Wald test` or `edgeR quasi-likelihood`."),
|
|
41
41
|
method_id: z
|
|
42
42
|
.string()
|
|
43
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the recommend-answer method id shape: M- plus four digits.
|
|
43
44
|
.regex(/^M-\d{4}$/)
|
|
44
45
|
.optional()
|
|
45
46
|
.describe("The `method.id` of the step in the `knowledge_recommend` answer (for example `M-0001`), copied when the step uses that method. With it the check matches the method exactly and ignores the wording."),
|
|
@@ -59,6 +60,9 @@ function describeFindings(result) {
|
|
|
59
60
|
const notAssessed = result.not_assessed?.length ?? 0;
|
|
60
61
|
return notAssessed > 0 ? `${findings}, ${notAssessed} not assessed` : findings;
|
|
61
62
|
}
|
|
63
|
+
const KnowledgeCheckInputSchema = SituationFieldsSchema.extend({
|
|
64
|
+
steps: z.array(DraftedStepSchema).min(1).describe("The drafted method steps, one entry per step type."),
|
|
65
|
+
});
|
|
62
66
|
export function createKnowledgeCheckTool(deps) {
|
|
63
67
|
let calls = 0;
|
|
64
68
|
return defineTool({
|
|
@@ -70,9 +74,7 @@ export function createKnowledgeCheckTool(deps) {
|
|
|
70
74
|
"`not_assessed` lists the steps that no rule covers; the check neither passed nor failed them, so submit them as drafted. " +
|
|
71
75
|
"`match: unavailable` means the service did not answer, and `match: snapshot_mismatch` means the service moved to another release than the one your recommend answer came from; in both cases submit the draft as it is. " +
|
|
72
76
|
`The host accepts ${CHECK_CALL_LIMIT} checks per plan; after that the tool refuses and you submit with the findings you have.`,
|
|
73
|
-
inputSchema:
|
|
74
|
-
steps: z.array(DraftedStepSchema).min(1).describe("The drafted method steps, one entry per step type."),
|
|
75
|
-
}),
|
|
77
|
+
inputSchema: KnowledgeCheckInputSchema,
|
|
76
78
|
describeCall: ({ steps }) => `${steps.length} drafted step(s)`,
|
|
77
79
|
describeResult: (_input, result) => ("ok" in result ? describeFindings(result) : result.match),
|
|
78
80
|
execute: async (input) => {
|