@inflexa-ai/harness 0.45.1 → 0.46.2
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 +306 -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 +32 -7
- package/dist/lib/hooks.js +22 -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 +160 -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 +39 -0
- package/dist/loop/turn-credentials.js +90 -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/request-headers.js +12 -3
- 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 +62 -0
- package/dist/testing.js +101 -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
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
import { err, ok, okAsync } from "neverthrow";
|
|
31
31
|
import { z } from "zod";
|
|
32
32
|
import { tryMutation, tryQuery, withTransaction } from "../lib/db-result.js";
|
|
33
|
+
import { presentGet } from "../lib/present.js";
|
|
33
34
|
/**
|
|
34
35
|
* The write-time bounds on working memory. `updateSection` enforces them, the
|
|
35
36
|
* `update_working_memory` input schema declares them to the model (importing
|
|
@@ -140,7 +141,7 @@ function countFindings(findings) {
|
|
|
140
141
|
}
|
|
141
142
|
/** The run a finding id hangs under, or `undefined` if no run holds it. */
|
|
142
143
|
function runOfFinding(findings, id) {
|
|
143
|
-
return Object.keys(findings).find((runId) => findings
|
|
144
|
+
return Object.keys(findings).find((runId) => presentGet(findings, runId, "the run's findings").some((f) => f.id === id));
|
|
144
145
|
}
|
|
145
146
|
function applyFindingOp(findings, op) {
|
|
146
147
|
switch (op.op) {
|
|
@@ -159,59 +160,51 @@ function applyFindingOp(findings, op) {
|
|
|
159
160
|
return rejectUnknownId("finding", op.id);
|
|
160
161
|
return checkEntryText("finding", op.text).map((text) => ({
|
|
161
162
|
...findings,
|
|
162
|
-
[runId]: findings
|
|
163
|
+
[runId]: presentGet(findings, runId, "the run's findings").map((f) => (f.id === op.id ? { ...f, text } : f)),
|
|
163
164
|
}));
|
|
164
165
|
}
|
|
165
166
|
case "retire": {
|
|
166
167
|
const runId = runOfFinding(findings, op.id);
|
|
167
168
|
if (runId === undefined)
|
|
168
169
|
return rejectUnknownId("finding", op.id);
|
|
169
|
-
const kept = findings
|
|
170
|
+
const kept = presentGet(findings, runId, "the run's findings").filter((f) => f.id !== op.id);
|
|
170
171
|
const next = { ...findings };
|
|
171
172
|
// An emptied run bucket is dropped whole: memory references a run only
|
|
172
173
|
// for as long as it holds a finding from it.
|
|
173
174
|
if (kept.length === 0)
|
|
174
|
-
|
|
175
|
+
Reflect.deleteProperty(next, runId);
|
|
175
176
|
else
|
|
176
177
|
next[runId] = kept;
|
|
177
178
|
return ok(next);
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const text = value.text.trim();
|
|
189
|
-
if (text.length > WORKING_MEMORY_LIMITS.goalChars) {
|
|
190
|
-
return reject(`the goal is ${text.length} characters — the cap is ${WORKING_MEMORY_LIMITS.goalChars}. It was NOT ` +
|
|
191
|
-
`recorded. State the objective in a sentence or two; the supporting detail belongs in ` +
|
|
192
|
-
`constraints and findings, not in the goal.`);
|
|
193
|
-
}
|
|
194
|
-
return ok({ ...wm, goal: text });
|
|
182
|
+
const sectionWriters = {
|
|
183
|
+
goal: (wm, value) => {
|
|
184
|
+
const text = value.text.trim();
|
|
185
|
+
if (text.length > WORKING_MEMORY_LIMITS.goalChars) {
|
|
186
|
+
return reject(`the goal is ${text.length} characters — the cap is ${WORKING_MEMORY_LIMITS.goalChars}. It was NOT ` +
|
|
187
|
+
`recorded. State the objective in a sentence or two; the supporting detail belongs in ` +
|
|
188
|
+
`constraints and findings, not in the goal.`);
|
|
195
189
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return ok(wm);
|
|
190
|
+
return ok({ ...wm, goal: text });
|
|
191
|
+
},
|
|
192
|
+
constraint: (wm, op) => {
|
|
193
|
+
const origin = op.op === "add" ? op.origin : "agent";
|
|
194
|
+
return applyEntryOp(wm.constraints, op, "constraints", WORKING_MEMORY_LIMITS.constraints, (text) => ({
|
|
195
|
+
id: newId(),
|
|
196
|
+
text,
|
|
197
|
+
origin,
|
|
198
|
+
})).map((constraints) => ({ ...wm, constraints }));
|
|
199
|
+
},
|
|
200
|
+
hypothesis: (wm, op) => applyEntryOp(wm.hypotheses, op, "hypotheses", WORKING_MEMORY_LIMITS.hypotheses, (text) => ({
|
|
201
|
+
id: newId(),
|
|
202
|
+
text,
|
|
203
|
+
})).map((hypotheses) => ({ ...wm, hypotheses })),
|
|
204
|
+
finding: (wm, op) => applyFindingOp(wm.findings, op).map((findings) => ({ ...wm, findings })),
|
|
205
|
+
};
|
|
206
|
+
function applySectionUpdate(wm, section, value) {
|
|
207
|
+
return sectionWriters[section](wm, value);
|
|
215
208
|
}
|
|
216
209
|
/** Every finding, in insertion order, each carrying its run reference. */
|
|
217
210
|
function flattenFindings(findings) {
|
|
@@ -283,33 +276,51 @@ export function createWorkingMemory(pool) {
|
|
|
283
276
|
// The driver read is the only thing wrapped; `workingMemorySchema.parse`
|
|
284
277
|
// runs in `.map` so a schema-validation throw propagates verbatim rather
|
|
285
278
|
// than being miscaptured as a `DbError`.
|
|
286
|
-
return tryQuery("working-memory.load", () => pool.query("SELECT data FROM cortex_working_memory WHERE analysis_id = $1", [analysisId])).map(({ rows }) =>
|
|
279
|
+
return tryQuery("working-memory.load", () => pool.query("SELECT data FROM cortex_working_memory WHERE analysis_id = $1", [analysisId])).map(({ rows }) => {
|
|
280
|
+
const [stored] = rows;
|
|
281
|
+
return stored === undefined ? emptyWorkingMemory() : workingMemorySchema.parse(stored.data);
|
|
282
|
+
});
|
|
287
283
|
}
|
|
288
|
-
function updateSection(analysisId, section, value) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
284
|
+
function updateSection(analysisId, section, value, callKey) {
|
|
285
|
+
const written = ok(undefined);
|
|
286
|
+
return withTransaction(pool, "working-memory.updateSection", (client) => {
|
|
287
|
+
// The key is read under the analysis lock, thus a second run of one call
|
|
288
|
+
// waits for the first and then finds its key.
|
|
289
|
+
const alreadyApplied = () => callKey === undefined
|
|
290
|
+
? okAsync(false)
|
|
291
|
+
: tryQuery("working-memory.updateSection.appliedKey", () => client.query("SELECT 1 FROM cortex_applied_memory_edits WHERE call_key = $1", [callKey])).map(({ rows }) => rows.length > 0);
|
|
292
|
+
const recordKey = () => callKey === undefined
|
|
293
|
+
? okAsync(undefined)
|
|
294
|
+
: tryMutation("working-memory.updateSection.recordKey", () => client.query("INSERT INTO cortex_applied_memory_edits (call_key, analysis_id) VALUES ($1, $2)", [callKey, analysisId])).map(() => undefined);
|
|
295
|
+
const amend = () => tryQuery("working-memory.updateSection.read", () => client.query("SELECT data FROM cortex_working_memory WHERE analysis_id = $1", [analysisId]))
|
|
296
|
+
.map(({ rows }) => {
|
|
297
|
+
// Schema parse stays outside the driver wrapper — a validation throw
|
|
298
|
+
// propagates verbatim (and `withTransaction` still rolls back).
|
|
299
|
+
const [stored] = rows;
|
|
300
|
+
const current = stored === undefined ? emptyWorkingMemory() : workingMemorySchema.parse(stored.data);
|
|
301
|
+
return applySectionUpdate(current, section, value);
|
|
302
|
+
})
|
|
303
|
+
.andThen((amended) =>
|
|
304
|
+
// A rejection rides the transaction's ok channel: it is a decision, not a
|
|
305
|
+
// storage failure. The transaction commits having written nothing, and the
|
|
306
|
+
// rejection is lifted back into the error channel below.
|
|
307
|
+
amended.isErr()
|
|
308
|
+
? okAsync(err(amended.error))
|
|
309
|
+
: tryMutation("working-memory.updateSection.upsert", () => client.query(`INSERT INTO cortex_working_memory (analysis_id, data, updated_at)
|
|
310
310
|
VALUES ($1, $2::jsonb, NOW())
|
|
311
311
|
ON CONFLICT (analysis_id)
|
|
312
|
-
DO UPDATE SET data = EXCLUDED.data, updated_at = NOW()`, [analysisId, JSON.stringify(amended.value)]))
|
|
312
|
+
DO UPDATE SET data = EXCLUDED.data, updated_at = NOW()`, [analysisId, JSON.stringify(amended.value)]))
|
|
313
|
+
.andThen(recordKey)
|
|
314
|
+
.map(() => written));
|
|
315
|
+
// Serialize concurrent read-modify-write on this analysis — the lock
|
|
316
|
+
// covers the not-yet-existing-row case an `SELECT ... FOR UPDATE`
|
|
317
|
+
// would miss. Released automatically at COMMIT/ROLLBACK. The cap check
|
|
318
|
+
// runs under it too, so two racing adds cannot both slip past a full
|
|
319
|
+
// section.
|
|
320
|
+
return tryQuery("working-memory.updateSection.lock", () => client.query("SELECT pg_advisory_xact_lock(hashtext($1))", [analysisId]))
|
|
321
|
+
.andThen(alreadyApplied)
|
|
322
|
+
.andThen((done) => (done ? okAsync(written) : amend()));
|
|
323
|
+
}).andThen((result) => result);
|
|
313
324
|
}
|
|
314
325
|
function render(analysisId) {
|
|
315
326
|
return load(analysisId).map(renderWorkingMemory);
|
|
@@ -82,25 +82,25 @@ export declare function emptyStepMemory(): StepMemory;
|
|
|
82
82
|
*/
|
|
83
83
|
export declare function renderMemory(memory: StepMemory): string;
|
|
84
84
|
/** A file the script of the template reads. `path` names the slot that gives it, for example `{{counts_path}}`. */
|
|
85
|
-
export
|
|
85
|
+
export type TemplateBriefInput = {
|
|
86
86
|
readonly name: string;
|
|
87
87
|
readonly path: string;
|
|
88
88
|
readonly description?: string;
|
|
89
|
-
}
|
|
89
|
+
};
|
|
90
90
|
/** One plan setting bound to an adaptable slot of the template. */
|
|
91
|
-
export
|
|
91
|
+
export type TemplateBoundSetting = {
|
|
92
92
|
readonly name: string;
|
|
93
93
|
readonly value: TemplateBindingValue;
|
|
94
94
|
/** The source of the value (a doi or a document), or `plan` when the procedure names none. */
|
|
95
95
|
readonly source: string;
|
|
96
|
-
}
|
|
96
|
+
};
|
|
97
97
|
/**
|
|
98
98
|
* The contract of the template a step renders, projected for the seed. The
|
|
99
99
|
* parent fetches it at dispatch and binds the plan settings to it; the
|
|
100
100
|
* section is what lets an agent that has never seen the template make one
|
|
101
101
|
* valid render call.
|
|
102
102
|
*/
|
|
103
|
-
export
|
|
103
|
+
export type TemplateBrief = {
|
|
104
104
|
/** The template reference of the plan step, with its version when the plan names one. */
|
|
105
105
|
readonly ref: string;
|
|
106
106
|
/** The version the service serves. Differs from the version of `ref` when the snapshot moved on. */
|
|
@@ -112,7 +112,7 @@ export interface TemplateBrief {
|
|
|
112
112
|
readonly bound: readonly TemplateBoundSetting[];
|
|
113
113
|
/** The plan settings no bound slot carries, one line each with the reason. */
|
|
114
114
|
readonly unbound_settings: readonly string[];
|
|
115
|
-
}
|
|
115
|
+
};
|
|
116
116
|
/**
|
|
117
117
|
* The Template contract section. Only the adaptable slots render, bounded by
|
|
118
118
|
* {@link MAX_TEMPLATE_SLOTS} and the description clamp, so a wide template
|
|
@@ -130,12 +130,12 @@ export declare function renderTemplateContract(brief: TemplateBrief | undefined)
|
|
|
130
130
|
* every other path in the briefing is rooted with, thus one field serves the
|
|
131
131
|
* workspace section and the orientation alike.
|
|
132
132
|
*/
|
|
133
|
-
export
|
|
133
|
+
export type WorkspaceFrame = {
|
|
134
134
|
/** The analysis id. The sandbox mounts the read-only analysis tree at `/{analysisId}`. */
|
|
135
135
|
readonly analysisId: string;
|
|
136
136
|
/** In-sandbox working directory — this step's writable artifact directory, and its cwd. */
|
|
137
137
|
readonly workingDir: string;
|
|
138
|
-
}
|
|
138
|
+
};
|
|
139
139
|
/** The in-sandbox analysis root of a frame — the read-only mount of the whole tree. */
|
|
140
140
|
export declare function analysisRootOf(frame: WorkspaceFrame): string;
|
|
141
141
|
export declare function renderWorkspace(frame: WorkspaceFrame): string;
|
|
@@ -159,7 +159,7 @@ export declare function renderOrientation(profile: DataProfileResult | null | un
|
|
|
159
159
|
* to the rest — an agent that needs more than the excerpt reads the summary at
|
|
160
160
|
* `summaryPath` rather than having the whole document pushed into its context.
|
|
161
161
|
*/
|
|
162
|
-
export
|
|
162
|
+
export type UpstreamHandoff = {
|
|
163
163
|
readonly stepId: string;
|
|
164
164
|
readonly agentId: string;
|
|
165
165
|
/** The dependency's step summary. Clamped to {@link UPSTREAM_SUMMARY_MAX_CHARS} here, not by the caller. */
|
|
@@ -170,10 +170,10 @@ export interface UpstreamHandoff {
|
|
|
170
170
|
readonly outputDir: string;
|
|
171
171
|
/** In-sandbox absolute paths of the artifacts the dependency registered. */
|
|
172
172
|
readonly artifacts: readonly string[];
|
|
173
|
-
}
|
|
173
|
+
};
|
|
174
174
|
export declare function renderUpstream(handoffs: readonly UpstreamHandoff[]): string;
|
|
175
175
|
/** Everything one step's seed is composed from — all of it known at dispatch time. */
|
|
176
|
-
export
|
|
176
|
+
export type StepBriefing = {
|
|
177
177
|
readonly step: AnalysisStep;
|
|
178
178
|
readonly workspace: WorkspaceFrame;
|
|
179
179
|
/** The analysis's persisted data profile; `null` when never profiled or still pending. */
|
|
@@ -190,7 +190,7 @@ export interface StepBriefing {
|
|
|
190
190
|
* service does not hold the template. Read only when `template` is absent.
|
|
191
191
|
*/
|
|
192
192
|
readonly templateNotRetrieved?: string;
|
|
193
|
-
}
|
|
193
|
+
};
|
|
194
194
|
/**
|
|
195
195
|
* Compose the seed. Absent sections collapse out entirely — an independent step
|
|
196
196
|
* with no profile and an empty memory yields exactly the task and workspace sections, byte-identical
|
package/dist/prompts/briefing.js
CHANGED
|
@@ -118,7 +118,7 @@ export function renderTask(step, contract = {}) {
|
|
|
118
118
|
if (step.constraints && step.constraints.length > 0) {
|
|
119
119
|
parts.push(section("Constraints (each one is a requirement of this step)", bullets(step.constraints)));
|
|
120
120
|
}
|
|
121
|
-
if (step.acceptance_criteria
|
|
121
|
+
if (step.acceptance_criteria.length > 0) {
|
|
122
122
|
parts.push(section("Acceptance criteria (the result must satisfy all of these)", bullets(step.acceptance_criteria)));
|
|
123
123
|
}
|
|
124
124
|
if (step.caveats && step.caveats.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const synthesisAgentPrompt = "# Run Synthesizer\n\nYou are a cross-step synthesizer for a completed bioinformatics analysis\nrun. You receive the plan's analytical narrative and a block of per-step\nsummaries (markdown). Your job is to distill them into a concise,\nliterature-grounded **interpretation** \u2014 not a catalog of what each step\nproduced.\n\nYou are task-oriented \u2014 you do not interact with the user. You receive\nthe run's context, investigate what you need via your research sub-agent,\nand return a structured synthesis.\n\n## How Your Work Reaches the User\n\nThe orchestrator reads only your tool calls, so text you write reaches no\none. A synthesis reaches the user through `submit_synthesis`, and a\nblocker through `report_blocker`. End the session with an accepted\n`submit_synthesis` or a `report_blocker`.\n\n## Your Mission\n\nThe reader of your synthesis is a scientist who already has the step\nsummaries. They do not need you to repeat what each step found \u2014 they\ncan read that themselves. What they need from you is:\n\n1. **Interpretation** \u2014 what do the results mean taken together?\n2. **Conclusions** \u2014 what can we confidently conclude? What is novel vs\n confirmatory? What is actionable from a translational perspective?\n3. **Limitations** \u2014 what caveats apply? Where should the reader be\n skeptical? What confounds exist?\n4. **Evidence** \u2014 key literature references that support, challenge, or\n contextualize the findings.\n\nThink like a senior reviewer writing the Discussion section of a paper,\nnot like a scribe summarizing the Results section.\n\n## Your Tools\n\n### literature_reviewer (research sub-agent \u2014 delegate focused research)\nA task-oriented sub-agent that holds the bio-lookup and literature tools.\nDelegate to it when you need evidence \u2014 you have no bio-lookup tools of\nyour own.\n\nDelegations must be **focused**:\n- One well-scoped research brief per call (e.g., \"Investigate FOXM1 and\n MKI67 in the context of proliferation signatures in bulk RNA-seq of\n breast tumor vs normal. Assess novelty and find supporting PMIDs.\")\n- Include the experimental context the sub-agent needs (conditions, modality,\n what the computational finding showed).\n- Do NOT send the whole summary block and ask for \"a literature review\".\n The sub-agent will produce shallow results on diffuse briefs.\n\nYou may delegate again after an initial pass if a\ntheme becomes apparent and needs its own evidence sweep.\n\n###
|
|
1
|
+
export declare const synthesisAgentPrompt = "# Run Synthesizer\n\nYou are a cross-step synthesizer for a completed bioinformatics analysis\nrun. You receive the plan's analytical narrative and a block of per-step\nsummaries (markdown). Your job is to distill them into a concise,\nliterature-grounded **interpretation** \u2014 not a catalog of what each step\nproduced.\n\nYou are task-oriented \u2014 you do not interact with the user. You receive\nthe run's context, investigate what you need via your research sub-agent,\nand return a structured synthesis.\n\n## How Your Work Reaches the User\n\nThe orchestrator reads only your tool calls, so text you write reaches no\none. A synthesis reaches the user through `submit_synthesis`, and a\nblocker through `report_blocker`. End the session with an accepted\n`submit_synthesis` or a `report_blocker`.\n\n## Your Mission\n\nThe reader of your synthesis is a scientist who already has the step\nsummaries. They do not need you to repeat what each step found \u2014 they\ncan read that themselves. What they need from you is:\n\n1. **Interpretation** \u2014 what do the results mean taken together?\n2. **Conclusions** \u2014 what can we confidently conclude? What is novel vs\n confirmatory? What is actionable from a translational perspective?\n3. **Limitations** \u2014 what caveats apply? Where should the reader be\n skeptical? What confounds exist?\n4. **Evidence** \u2014 key literature references that support, challenge, or\n contextualize the findings.\n\nThink like a senior reviewer writing the Discussion section of a paper,\nnot like a scribe summarizing the Results section.\n\n## Your Tools\n\n### literature_reviewer (research sub-agent \u2014 delegate focused research)\nA task-oriented sub-agent that holds the bio-lookup and literature tools.\nDelegate to it when you need evidence \u2014 you have no bio-lookup tools of\nyour own.\n\nDelegations must be **focused**:\n- One well-scoped research brief per call (e.g., \"Investigate FOXM1 and\n MKI67 in the context of proliferation signatures in bulk RNA-seq of\n breast tumor vs normal. Assess novelty and find supporting PMIDs.\")\n- Include the experimental context the sub-agent needs (conditions, modality,\n what the computational finding showed).\n- Do NOT send the whole summary block and ask for \"a literature review\".\n The sub-agent will produce shallow results on diffuse briefs.\n\nYou may delegate again after an initial pass if a\ntheme becomes apparent and needs its own evidence sweep.\n\n### submit_synthesis (success path)\nSubmit the synthesis. Checks the payload; returns either\n`{accepted: true}` (DONE \u2014 stop) or `{accepted: false, issues}` (fix\nspecific fields per issue path and call again, OR switch to\n`report_blocker` if the synthesis cannot be made valid). The last accepted\nsubmission is the synthesis.\n\n### report_blocker (terminal \u2014 cannot produce a synthesis)\nCall ONLY when the run produced no synthesizable content \u2014 every summary is\nempty, or the summaries are contradictory to the point of incoherence.\n\"No findings worth surfacing\" is NOT a blocker: with non-empty summaries you\ncan always submit a synthesis (overview + conclusions) with an empty\n`findings[]`. Pass a short reason, then stop.\n\n## Canonical Flow\n\nGround the novel findings, the contradictions, and the cross-step themes\nin literature before you draft. Then call `submit_synthesis`. If it is\nrejected, fix the cited issue paths and call again. If it cannot be made\nvalid, call `report_blocker`.\n\n## Writing the Synthesis\n\nThe `submit_synthesis` arg schema defines every field, its enum values,\nand its size expectations \u2014 read it, and follow it. This section is the\ncraft the schema cannot carry.\n\n**An empty `findings[]` is a valid submission.** `findings` is SELECTIVE,\nnot required \u2014 a run whose summaries yield nothing individually notable is\nstill synthesized: write the `overview` and `conclusions` from the\nsummaries and submit with `findings: []`. \"Nothing worth a finding\" is a\nreason to submit a lean synthesis, never a reason to `report_blocker`.\n\n**`conclusions` is the \"Discussion\" of the synthesis** \u2014 the part the\nreader will actually want to read. Be opinionated and interpretive, not\ndescriptive. Say where computational predictions agree or disagree with\nclinical evidence, and be honest about the translational distance: is this\ninteresting biology, or a validated target with a measurable biomarker and\na known drug?\n\n**Assigning `preclinical-validation`** \u2014 cite IMPC mouse-KO phenotypes for\nloss-of-function consequences and cross-species baseline expression for\ntissue-of-action context (both come back from\n`gene_preclinical_profile`), when the literature reviewer's report\nincludes them.\n\n**What a good `limitation` looks like** \u2014 it names what it affects and\nwhy it matters:\n- \"Signatures derive from a single cohort (n=57); cross-validation in\n independent NASH datasets was not performed.\"\n- \"CMap-style scoring cannot distinguish targeted pathway reversal from\n non-specific cytotoxic transcriptional disruption.\"\n- \"Biomarker candidates identified computationally; analytical validation\n (assay performance, reproducibility) and clinical validation (outcome\n association in independent cohorts) not performed.\"\n- \"Target druggability not assessed \u2014 pathway importance does not imply\n tractability.\"\n\n## Cross-Field Invariants (enforced at submit_synthesis)\n\n- `finding.stepId` must match a stepId present in the input summaries.\n- Every `theme.findings[]` entry must reference a finding that exists\n in `findings[]` (same stepId + title).\n- Every `keyReferences[].pmid` must appear in at least one\n `finding.references[]` entry \u2014 the cross-run list summarizes what's\n already cited per finding.\n\nEvery `pmid` you write comes from a `literature_reviewer` response.\n`submit_synthesis` cannot check this, and nothing after you re-checks a\nPMID, so an invented one reaches the reader as a real citation.\n\n## Investigation Strategy\n\n**Which findings need delegation?**\n- Findings labeled high-confidence in the summary but potentially novel \u2014\n needs literature check to confirm or challenge novelty.\n- Findings that could map to a known disease or pathway context \u2014 needs\n a PubMed sweep for the gene+condition combination.\n- Candidate themes spanning 2+ steps \u2014 delegate a theme-level brief to\n get references that tie the findings together.\n\n**Which findings do NOT need delegation?**\n- Trivial / expected results (QC passed, dimensions as expected).\n- Technical findings with no biological claim (batch effect detected,\n normalization applied).\n\n**Composing a delegation brief** \u2014 include:\n1. The specific genes/pathways/features to investigate (from the summary).\n2. The experimental context (conditions, modality, organism if known).\n3. What the computational finding showed (one sentence).\n4. What you want back (novelty assessment? supporting PMIDs? pathway\n context? interaction partners?).\n\nExample:\n> \"Investigate SPP1, TREM2, and APOE in the context of microglia\n> activation in Alzheimer's disease single-cell RNA-seq. Finding:\n> these three genes form a co-expression module enriched in\n> disease-associated microglia. Return: novelty assessment, 3-5 key\n> PMIDs supporting or challenging the DAM signature, and any known\n> interactions among the three.\"\n\n## Do NOT\n\n- **Reiterate step results.** The reader has the step summaries. Do not\n repeat gene lists, sample counts, table dimensions, method parameters,\n or per-step results in the synthesis. Refer to findings by their\n biological meaning, not their technical details.\n- **Create one finding per step.** That is a catalog, not a synthesis.\n Cross-reference across steps and surface only what matters.\n- **Write a long overview.** The conclusions field is where interpretation goes.\n- **Include methodology findings.** Gene intersection sizes, normalization\n choices, platform coverage \u2014 these are technical housekeeping, not\n synthesis findings.\n- **Include expected or confirmatory findings.** Canonical pathway\n enrichments, QC metrics, and well-established biology do not warrant a\n finding \u2014 unless the confirmation itself is noteworthy (e.g., a new\n dataset independently confirming a contested result).\n- **Inflate translational relevance.** A differentially expressed gene is\n NOT automatically a therapeutic target. A survival association is NOT\n automatically a predictive biomarker (it may be prognostic only) \u2014\n predictive requires evidence of treatment x marker interaction,\n prognostic only requires association with outcome.\n- Force findings into themes. If findings don't converge, return fewer (or zero) themes.\n- Call `submit_synthesis` before delegating at least once when findings need\n literature grounding. (A run with only technical/QC findings may skip delegation\n and submit directly, but state that clearly in the overview.)\n- Submit a placeholder or stub payload to \"see what happens\". A degenerate\n payload that passes the schema is recorded as the run's result.\n";
|
|
@@ -53,20 +53,12 @@ Delegations must be **focused**:
|
|
|
53
53
|
You may delegate again after an initial pass if a
|
|
54
54
|
theme becomes apparent and needs its own evidence sweep.
|
|
55
55
|
|
|
56
|
-
###
|
|
57
|
-
|
|
58
|
-
ANY shape — a partial, malformed, or wrong-typed draft is reported, not
|
|
59
|
-
rejected — and returns \`{valid, issues}\` covering both schema problems
|
|
60
|
-
and the cross-field invariants below. Call it as often as you need: it
|
|
61
|
-
records nothing and never ends the session. \`submit_synthesis\` runs the
|
|
62
|
-
same checks, so a dry run is optional.
|
|
63
|
-
|
|
64
|
-
### submit_synthesis (terminal — success path)
|
|
65
|
-
Persist the synthesis. Re-validates the payload; returns either
|
|
56
|
+
### submit_synthesis (success path)
|
|
57
|
+
Submit the synthesis. Checks the payload; returns either
|
|
66
58
|
\`{accepted: true}\` (DONE — stop) or \`{accepted: false, issues}\` (fix
|
|
67
59
|
specific fields per issue path and call again, OR switch to
|
|
68
|
-
\`report_blocker\` if the synthesis cannot be made valid).
|
|
69
|
-
submission
|
|
60
|
+
\`report_blocker\` if the synthesis cannot be made valid). The last accepted
|
|
61
|
+
submission is the synthesis.
|
|
70
62
|
|
|
71
63
|
### report_blocker (terminal — cannot produce a synthesis)
|
|
72
64
|
Call ONLY when the run produced no synthesizable content — every summary is
|
|
@@ -119,7 +111,7 @@ why it matters:
|
|
|
119
111
|
- "Target druggability not assessed — pathway importance does not imply
|
|
120
112
|
tractability."
|
|
121
113
|
|
|
122
|
-
## Cross-Field Invariants (
|
|
114
|
+
## Cross-Field Invariants (enforced at submit_synthesis)
|
|
123
115
|
|
|
124
116
|
- \`finding.stepId\` must match a stepId present in the input summaries.
|
|
125
117
|
- Every \`theme.findings[]\` entry must reference a finding that exists
|
|
@@ -129,7 +121,7 @@ why it matters:
|
|
|
129
121
|
already cited per finding.
|
|
130
122
|
|
|
131
123
|
Every \`pmid\` you write comes from a \`literature_reviewer\` response.
|
|
132
|
-
\`
|
|
124
|
+
\`submit_synthesis\` cannot check this, and nothing after you re-checks a
|
|
133
125
|
PMID, so an invented one reaches the reader as a real citation.
|
|
134
126
|
|
|
135
127
|
## Investigation Strategy
|
|
@@ -23,22 +23,22 @@ import type { ProvenanceRecord, InputRef, InputSource } from "./types.js";
|
|
|
23
23
|
* and stable (e.g., `recordFileToolWrite` for in-process agent tool
|
|
24
24
|
* writes) may pass a non-empty hash directly.
|
|
25
25
|
*/
|
|
26
|
-
export
|
|
26
|
+
export type ObservedWrite = {
|
|
27
27
|
/** Analysis-relative path (e.g., "runs/run-001/step-de/output/results.csv") */
|
|
28
28
|
path: string;
|
|
29
29
|
/** SHA-256 hash of the file content. Empty string when deferred to reconcile. */
|
|
30
30
|
hash: string;
|
|
31
31
|
/** File size in bytes. */
|
|
32
32
|
size: number;
|
|
33
|
-
}
|
|
33
|
+
};
|
|
34
34
|
/** Explicit classification context for a file read. Callers build this
|
|
35
35
|
* from the step's own coordinates (stepId/runId/dependsOn) instead of the
|
|
36
36
|
* collector parsing paths. */
|
|
37
|
-
export
|
|
37
|
+
export type InputClassificationContext = {
|
|
38
38
|
source: InputSource;
|
|
39
39
|
stepId?: string;
|
|
40
40
|
runId?: string;
|
|
41
|
-
}
|
|
41
|
+
};
|
|
42
42
|
/**
|
|
43
43
|
* The outcome of classifying one read: an input edge the step may assert, or
|
|
44
44
|
* an explicit refusal naming the producing step it would have pointed at.
|
|
@@ -70,12 +70,12 @@ export type ReadClassification = {
|
|
|
70
70
|
* prior-run branch below for why.
|
|
71
71
|
*/
|
|
72
72
|
export declare function classifyReadPath(relativePath: string, ownStepId: string, ownRunId: string, dependsOn?: string[]): ReadClassification;
|
|
73
|
-
export
|
|
73
|
+
export type ProvenanceCollectorOptions = {
|
|
74
74
|
stepId: string;
|
|
75
75
|
runId: string;
|
|
76
76
|
/** Step IDs this step depends on (for upstream mount enumeration). */
|
|
77
77
|
dependsOn?: string[];
|
|
78
|
-
}
|
|
78
|
+
};
|
|
79
79
|
export declare class ProvenanceCollector {
|
|
80
80
|
readonly stepId: string;
|
|
81
81
|
readonly runId: string;
|
|
@@ -11,21 +11,28 @@
|
|
|
11
11
|
* tool reads are not tracked here — they're exploratory and would
|
|
12
12
|
* pollute the lineage graph.
|
|
13
13
|
*/
|
|
14
|
+
import { presentFirst } from "../lib/present.js";
|
|
15
|
+
import { collapseWhitespace, hasWhitespace } from "../lib/text.js";
|
|
14
16
|
// ── Script path inference ───────────────────────────────────────────
|
|
15
|
-
/** Known interpreter prefixes for script path extraction. */
|
|
16
|
-
const
|
|
17
|
+
/** Known interpreter prefixes for script path extraction. The two python spellings sit first, so the longer prefix wins. */
|
|
18
|
+
const INTERPRETER_PREFIXES = ["python3", "python", "Rscript", "bash", "sh"];
|
|
17
19
|
/**
|
|
18
20
|
* Attempt to extract the script path from a command string.
|
|
19
21
|
* Returns the first argument that looks like a file path for known interpreters.
|
|
20
22
|
*/
|
|
21
23
|
function inferScriptPath(command, args) {
|
|
22
24
|
const fullCommand = args?.length ? `${command} ${args.join(" ")}` : command;
|
|
23
|
-
for (const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
for (const prefix of INTERPRETER_PREFIXES) {
|
|
26
|
+
if (!fullCommand.startsWith(prefix))
|
|
27
|
+
continue;
|
|
28
|
+
const rest = fullCommand.slice(prefix.length);
|
|
29
|
+
if (!hasWhitespace(rest.charAt(0)))
|
|
30
|
+
continue;
|
|
31
|
+
const argumentsText = collapseWhitespace(rest);
|
|
32
|
+
if (argumentsText === "")
|
|
33
|
+
continue;
|
|
34
|
+
// Take the first token (the script path), ignoring further args
|
|
35
|
+
return presentFirst(argumentsText.split(" "), "the script path");
|
|
29
36
|
}
|
|
30
37
|
return null;
|
|
31
38
|
}
|
|
@@ -32,7 +32,7 @@ import { type ProvenanceCollector } from "./collector.js";
|
|
|
32
32
|
* verbatim (see `trackInputAccess`).
|
|
33
33
|
*/
|
|
34
34
|
export declare function stripMountPrefix(mountRoot: string, absPath: string): string;
|
|
35
|
-
export
|
|
35
|
+
export type FeedExecFrameArgs = {
|
|
36
36
|
readonly collector: ProvenanceCollector;
|
|
37
37
|
/** Analysis resource mount root, e.g. `/{resourceId}`. */
|
|
38
38
|
readonly mountRoot: string;
|
|
@@ -44,7 +44,7 @@ export interface FeedExecFrameArgs {
|
|
|
44
44
|
readonly provenance?: ProvenanceFrame;
|
|
45
45
|
/** Diagnostics seam. Left unwired, refusals still happen but go unnarrated. */
|
|
46
46
|
readonly logger?: Logger;
|
|
47
|
-
}
|
|
47
|
+
};
|
|
48
48
|
/**
|
|
49
49
|
* Translate one exec's frame into a collector record. Per-command input
|
|
50
50
|
* scoping: only the reads observed for THIS exec are attached to its
|
|
@@ -32,7 +32,12 @@ import { classifyReadPath } from "./collector.js";
|
|
|
32
32
|
*/
|
|
33
33
|
export function stripMountPrefix(mountRoot, absPath) {
|
|
34
34
|
const prefix = mountRoot.endsWith("/") ? mountRoot : `${mountRoot}/`;
|
|
35
|
-
|
|
35
|
+
if (!absPath.startsWith(prefix))
|
|
36
|
+
return absPath;
|
|
37
|
+
let start = prefix.length;
|
|
38
|
+
while (start < absPath.length && absPath.charAt(start) === "/")
|
|
39
|
+
start++;
|
|
40
|
+
return absPath.slice(start);
|
|
36
41
|
}
|
|
37
42
|
/**
|
|
38
43
|
* Translate one exec's frame into a collector record. Per-command input
|
|
@@ -74,10 +74,7 @@ export type RunProvenanceEvent = {
|
|
|
74
74
|
type: "run_completed";
|
|
75
75
|
analysisId: string;
|
|
76
76
|
runId: string;
|
|
77
|
-
/**
|
|
78
|
-
* The body's terminal status, resolved through `deriveFinalStatus`. A suspension is
|
|
79
|
-
* `"suspended_insufficient_funds"`.
|
|
80
|
-
*/
|
|
77
|
+
/** The body's terminal status, resolved through `deriveFinalStatus`. */
|
|
81
78
|
status: Exclude<ExecuteAnalysisFinalStatus, "running">;
|
|
82
79
|
atMs: number;
|
|
83
80
|
/** `atMs − run_started.atMs`: the workflow-observed run span in ms. */
|
|
@@ -42,10 +42,10 @@ export declare const ProducerSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
42
42
|
export type Producer = z.infer<typeof ProducerSchema>;
|
|
43
43
|
/** Classification of an input source based on mount semantics. */
|
|
44
44
|
export declare const InputSourceSchema: z.ZodEnum<{
|
|
45
|
+
artifacts: "artifacts";
|
|
45
46
|
data: "data";
|
|
46
|
-
upstream: "upstream";
|
|
47
47
|
prior: "prior";
|
|
48
|
-
|
|
48
|
+
upstream: "upstream";
|
|
49
49
|
}>;
|
|
50
50
|
export type InputSource = z.infer<typeof InputSourceSchema>;
|
|
51
51
|
/** A single input reference in a lineage chain. */
|
|
@@ -53,10 +53,10 @@ export declare const InputRefSchema: z.ZodObject<{
|
|
|
53
53
|
path: z.ZodString;
|
|
54
54
|
hash: z.ZodString;
|
|
55
55
|
source: z.ZodEnum<{
|
|
56
|
+
artifacts: "artifacts";
|
|
56
57
|
data: "data";
|
|
57
|
-
upstream: "upstream";
|
|
58
58
|
prior: "prior";
|
|
59
|
-
|
|
59
|
+
upstream: "upstream";
|
|
60
60
|
}>;
|
|
61
61
|
stepId: z.ZodOptional<z.ZodString>;
|
|
62
62
|
runId: z.ZodOptional<z.ZodString>;
|
|
@@ -84,10 +84,10 @@ export declare const ProvenanceRecordSchema: z.ZodObject<{
|
|
|
84
84
|
path: z.ZodString;
|
|
85
85
|
hash: z.ZodString;
|
|
86
86
|
source: z.ZodEnum<{
|
|
87
|
+
artifacts: "artifacts";
|
|
87
88
|
data: "data";
|
|
88
|
-
upstream: "upstream";
|
|
89
89
|
prior: "prior";
|
|
90
|
-
|
|
90
|
+
upstream: "upstream";
|
|
91
91
|
}>;
|
|
92
92
|
stepId: z.ZodOptional<z.ZodString>;
|
|
93
93
|
runId: z.ZodOptional<z.ZodString>;
|