@inflexa-ai/harness 0.45.0 → 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 +19 -3
- package/dist/agents/conversation-agent.js +49 -30
- 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 +35 -16
- package/dist/agents/sandbox/shared.js +63 -24
- package/dist/agents/sandbox/translational-safety-agent.js +26 -0
- package/dist/agents/sandbox/types.d.ts +26 -3
- 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 +16 -2
- package/dist/agents/sandbox-catalog.js +22 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/approve-plan.d.ts +5 -2
- package/dist/app/approve-plan.js +1 -1
- 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 +125 -99
- 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 +10 -8
- 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 +46 -22
- package/dist/contracts/chat-events.js +1 -1
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +67 -40
- 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 +3 -3
- 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 +45 -6
- package/dist/contracts/schemas/chat-events.js +16 -0
- package/dist/contracts/schemas/chat-parts.d.ts +214 -102
- package/dist/contracts/schemas/chat-parts.js +50 -7
- package/dist/contracts/schemas/index.d.ts +1 -1
- package/dist/contracts/schemas/index.js +1 -1
- 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 +7 -6
- package/dist/execution/dbos-workflow-purger.js +29 -21
- 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 +39 -17
- package/dist/execution/run-canceler.js +137 -28
- package/dist/execution/run-end-record.d.ts +29 -0
- package/dist/execution/run-end-record.js +27 -0
- 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 +25 -24
- package/dist/index.js +36 -37
- 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 +14 -9
- package/dist/loop/compaction.js +17 -0
- 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 +34 -37
- 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 -6
- package/dist/memory/conversation-display-recorder.js +64 -20
- 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 +66 -24
- package/dist/memory/thread-history.js +212 -79
- 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 +63 -9
- package/dist/prompts/briefing.js +130 -3
- package/dist/prompts/planner.js +13 -2
- 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 +24 -19
- package/dist/provenance/seam.js +7 -5
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +303 -458
- 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 +59 -92
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +166 -10
- 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 +209 -231
- 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.d.ts +26 -4
- package/dist/sandbox/image-packages.js +29 -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 +351 -306
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +79 -25
- package/dist/schemas/plan-schemas.js +1 -1
- 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 +127 -14
- package/dist/schemas/workflow-state.js +56 -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 +47 -18
- package/dist/state/artifacts.js +48 -7
- 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 +5 -5
- package/dist/state/index.js +3 -3
- 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 +70 -25
- package/dist/state/runs.js +127 -64
- 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 +29 -8
- package/dist/state/step-executions.js +28 -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 +11 -9
- package/dist/tools/ad-hoc-router.js +80 -51
- 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 +40 -0
- package/dist/tools/capability-data.js +74 -0
- 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 +54 -17
- package/dist/tools/execute-analysis.js +193 -62
- package/dist/tools/knowledge/check.d.ts +182 -0
- package/dist/tools/knowledge/check.js +94 -0
- package/dist/tools/knowledge/client.d.ts +351 -0
- package/dist/tools/knowledge/client.js +319 -0
- package/dist/tools/knowledge/environment.d.ts +78 -0
- package/dist/tools/knowledge/environment.js +116 -0
- package/dist/tools/knowledge/index.d.ts +49 -0
- package/dist/tools/knowledge/index.js +70 -0
- package/dist/tools/knowledge/local-slots.d.ts +62 -0
- package/dist/tools/knowledge/local-slots.js +184 -0
- package/dist/tools/knowledge/pin.d.ts +14 -0
- package/dist/tools/knowledge/pin.js +17 -0
- package/dist/tools/knowledge/recommend.d.ts +67 -0
- package/dist/tools/knowledge/recommend.js +106 -0
- package/dist/tools/knowledge/situation.d.ts +143 -0
- package/dist/tools/knowledge/situation.js +157 -0
- package/dist/tools/knowledge/skeleton.d.ts +69 -0
- package/dist/tools/knowledge/skeleton.js +201 -0
- package/dist/tools/knowledge/template.d.ts +139 -0
- package/dist/tools/knowledge/template.js +273 -0
- 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 +39 -16
- package/dist/tools/research/generate-plan.js +565 -338
- package/dist/tools/research/guarded-address.d.ts +20 -0
- package/dist/tools/research/guarded-address.js +149 -0
- 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 +40 -0
- package/dist/tools/research/searxng-engine.js +122 -0
- package/dist/tools/research/web-fetch.d.ts +127 -0
- package/dist/tools/research/web-fetch.js +618 -0
- package/dist/tools/research/web-search.d.ts +84 -0
- package/dist/tools/research/web-search.js +117 -0
- 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 +24 -12
- package/dist/tools/sandbox/list-available-packages.js +43 -29
- package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
- package/dist/tools/sandbox/list-available-refs.js +119 -37
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +22 -68
- 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 +14 -0
- package/dist/tools/terminal-text.js +51 -0
- package/dist/tools/workspace/decision-record.d.ts +81 -0
- package/dist/tools/workspace/decision-record.js +127 -0
- package/dist/tools/workspace/edit-file.d.ts +59 -18
- package/dist/tools/workspace/edit-file.js +98 -15
- package/dist/tools/workspace/execute-command.d.ts +31 -12
- package/dist/tools/workspace/execute-command.js +37 -8
- 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/index.d.ts +1 -0
- package/dist/tools/workspace/index.js +1 -0
- 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 +100 -76
- package/dist/workflows/execute-analysis.js +380 -247
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +50 -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 +25 -22
- 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 -236
- package/dist/loop/run-agent.js +0 -1110
- 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 -90
- 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
|
@@ -44,8 +44,9 @@
|
|
|
44
44
|
* so it does not enforce that.
|
|
45
45
|
*/
|
|
46
46
|
import { type ResultAsync } from "neverthrow";
|
|
47
|
-
import type
|
|
48
|
-
import {
|
|
47
|
+
import { type DbError, type Connectable } from "../lib/db-result.js";
|
|
48
|
+
import type { Querier } from "../state/db.js";
|
|
49
|
+
import { type ConversationTurn } from "./thread-history.js";
|
|
49
50
|
/**
|
|
50
51
|
* The kind of session a thread holds. `conversation` is the analysis
|
|
51
52
|
* conversation the product has always had; `report` is a report session spawned
|
|
@@ -65,7 +66,7 @@ import { type DbError } from "../lib/db-result.js";
|
|
|
65
66
|
declare const THREAD_TYPES: readonly ["conversation", "report"];
|
|
66
67
|
export type ThreadType = (typeof THREAD_TYPES)[number];
|
|
67
68
|
/** One conversation thread's metadata, as returned by the store. */
|
|
68
|
-
export
|
|
69
|
+
export type Thread = {
|
|
69
70
|
readonly threadId: string;
|
|
70
71
|
readonly analysisId: string;
|
|
71
72
|
readonly title: string | null;
|
|
@@ -93,13 +94,13 @@ export interface Thread {
|
|
|
93
94
|
* fall through and render a tombstoned conversation as live.
|
|
94
95
|
*/
|
|
95
96
|
readonly deletedAt: Date | null;
|
|
96
|
-
}
|
|
97
|
-
export
|
|
97
|
+
};
|
|
98
|
+
export type CreateThreadInput = {
|
|
98
99
|
readonly threadId: string;
|
|
99
100
|
readonly analysisId: string;
|
|
100
101
|
readonly title?: string | null;
|
|
101
|
-
/** Omitted is `conversation` — what a thread is when nothing says otherwise. */
|
|
102
|
-
readonly type?:
|
|
102
|
+
/** Omitted is `conversation` — what a thread is when nothing says otherwise. The store refuses a value outside the closed set at runtime: an untyped caller (a JSON body across a package boundary) can hand in any string, and `unknown_thread_type` is the declared refusal for it. */
|
|
103
|
+
readonly type?: string;
|
|
103
104
|
/**
|
|
104
105
|
* The thread this one is spawned from. It must belong to the same analysis
|
|
105
106
|
* as the child; whether it exists at all is the foreign key's verdict, not
|
|
@@ -112,7 +113,13 @@ export interface CreateThreadInput {
|
|
|
112
113
|
* and either half alone describes no place.
|
|
113
114
|
*/
|
|
114
115
|
readonly parentSeq?: number;
|
|
115
|
-
|
|
116
|
+
/**
|
|
117
|
+
* The first turn of the new thread. The row and the turn commit in one
|
|
118
|
+
* transaction. A create that finds the row already there writes no turn,
|
|
119
|
+
* thus a second create with the same id gives the thread with one turn.
|
|
120
|
+
*/
|
|
121
|
+
readonly firstTurn?: ConversationTurn;
|
|
122
|
+
};
|
|
116
123
|
/**
|
|
117
124
|
* A create the store refuses on its own, before any row is written. Distinct
|
|
118
125
|
* from `DbError`: nothing failed at the driver — the request described a thread
|
|
@@ -143,7 +150,7 @@ export type ThreadInputError = {
|
|
|
143
150
|
readonly threadId: string;
|
|
144
151
|
readonly threadType: string;
|
|
145
152
|
};
|
|
146
|
-
export
|
|
153
|
+
export type ListThreadsInput = {
|
|
147
154
|
readonly analysisId: string;
|
|
148
155
|
readonly page?: number;
|
|
149
156
|
readonly perPage?: number;
|
|
@@ -168,21 +175,21 @@ export interface ListThreadsInput {
|
|
|
168
175
|
readonly type?: ThreadType;
|
|
169
176
|
/** Narrow to one thread's direct children, exact match. Same polarity as `type`: omitting it narrows nothing. */
|
|
170
177
|
readonly parentThreadId?: string;
|
|
171
|
-
}
|
|
172
|
-
export
|
|
178
|
+
};
|
|
179
|
+
export type ListRecentThreadsInput = {
|
|
173
180
|
/** The most threads to give. It clamps to 1 to 200, the bounds of a page of `listThreads`. */
|
|
174
181
|
readonly limit: number;
|
|
175
182
|
/** Narrow to one kind of session, exact match. Omitting it narrows nothing. */
|
|
176
183
|
readonly type?: ThreadType;
|
|
177
|
-
}
|
|
178
|
-
export
|
|
184
|
+
};
|
|
185
|
+
export type ThreadPage = {
|
|
179
186
|
readonly threads: Thread[];
|
|
180
187
|
readonly total: number;
|
|
181
188
|
readonly page: number;
|
|
182
189
|
readonly perPage: number;
|
|
183
190
|
readonly hasMore: boolean;
|
|
184
|
-
}
|
|
185
|
-
export
|
|
191
|
+
};
|
|
192
|
+
export type ThreadStore = {
|
|
186
193
|
/**
|
|
187
194
|
* Create a thread row. Idempotent on `thread_id` — a second create for an
|
|
188
195
|
* existing id is a no-op that preserves the existing row (including its
|
|
@@ -260,11 +267,13 @@ export interface ThreadStore {
|
|
|
260
267
|
* archived thread is never in it.
|
|
261
268
|
*/
|
|
262
269
|
listRecentThreads(input: ListRecentThreadsInput): ResultAsync<Thread[], DbError>;
|
|
263
|
-
}
|
|
270
|
+
};
|
|
264
271
|
/**
|
|
265
272
|
* Create a `ThreadStore` bound to a Postgres pool — a factory closure
|
|
266
273
|
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The
|
|
267
274
|
* `cortex_analysis_threads` table is provisioned by the state-init DDL.
|
|
268
275
|
*/
|
|
269
|
-
|
|
276
|
+
/** What this module reads of the pool: the direct `query` plus the transactional `connect`. */
|
|
277
|
+
type ThreadStorePool = Querier & Connectable;
|
|
278
|
+
export declare function createThreadStore(pool: ThreadStorePool): ThreadStore;
|
|
270
279
|
export {};
|
|
@@ -45,6 +45,8 @@
|
|
|
45
45
|
*/
|
|
46
46
|
import { errAsync, okAsync } from "neverthrow";
|
|
47
47
|
import { tryMutation, tryQuery, withTransaction } from "../lib/db-result.js";
|
|
48
|
+
import { presentFirst } from "../lib/present.js";
|
|
49
|
+
import { appendTurnIn } from "./thread-history.js";
|
|
48
50
|
/**
|
|
49
51
|
* The kind of session a thread holds. `conversation` is the analysis
|
|
50
52
|
* conversation the product has always had; `report` is a report session spawned
|
|
@@ -106,11 +108,6 @@ function toThread(row) {
|
|
|
106
108
|
}
|
|
107
109
|
const DEFAULT_PER_PAGE = 100;
|
|
108
110
|
const MAX_PER_PAGE = 200;
|
|
109
|
-
/**
|
|
110
|
-
* Create a `ThreadStore` bound to a Postgres pool — a factory closure
|
|
111
|
-
* capturing `pool` (dependency injection per the harness-durable-runtime spec). The
|
|
112
|
-
* `cortex_analysis_threads` table is provisioned by the state-init DDL.
|
|
113
|
-
*/
|
|
114
111
|
export function createThreadStore(pool) {
|
|
115
112
|
/**
|
|
116
113
|
* The parent's own analysis scope, or `null` when no such row exists.
|
|
@@ -141,16 +138,22 @@ export function createThreadStore(pool) {
|
|
|
141
138
|
* returned row.
|
|
142
139
|
*/
|
|
143
140
|
function insertThread(input) {
|
|
144
|
-
|
|
141
|
+
const { firstTurn } = input;
|
|
142
|
+
if (firstTurn === undefined)
|
|
143
|
+
return insertRow(pool, input).map(({ thread }) => thread);
|
|
144
|
+
return withTransaction(pool, "thread-store.createThread", (client) => insertRow(client, input).andThen(({ thread, inserted }) => inserted ? appendTurnIn(client, thread.threadId, firstTurn).map(() => thread) : okAsync(thread)));
|
|
145
|
+
}
|
|
146
|
+
function insertRow(querier, input) {
|
|
147
|
+
return tryMutation("thread-store.createThread.insert", () => querier.query(`INSERT INTO cortex_analysis_threads (thread_id, analysis_id, title, thread_type, parent_thread_id, parent_seq)
|
|
145
148
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
146
149
|
ON CONFLICT (thread_id) DO NOTHING
|
|
147
150
|
RETURNING ${THREAD_COLUMNS}`, [input.threadId, input.analysisId, input.title ?? null, input.type ?? "conversation", input.parentThreadId ?? null, input.parentSeq ?? null])).andThen(({ rows }) => {
|
|
148
151
|
if (rows[0])
|
|
149
|
-
return okAsync(toThread(rows[0]));
|
|
152
|
+
return okAsync({ thread: toThread(rows[0]), inserted: true });
|
|
150
153
|
// Row already existed — ON CONFLICT DO NOTHING returns nothing. Read it
|
|
151
154
|
// back (it may be archived; return it regardless so the caller sees
|
|
152
155
|
// the existing row's identity).
|
|
153
|
-
return tryQuery("thread-store.createThread.readback", () =>
|
|
156
|
+
return tryQuery("thread-store.createThread.readback", () => querier.query(`SELECT ${THREAD_COLUMNS} FROM cortex_analysis_threads WHERE thread_id = $1`, [input.threadId])).map(({ rows: existing }) => ({ thread: toThread(presentFirst(existing, "the thread row read back")), inserted: false }));
|
|
154
157
|
});
|
|
155
158
|
}
|
|
156
159
|
function createThread(input) {
|
|
@@ -289,6 +292,7 @@ export function createThreadStore(pool) {
|
|
|
289
292
|
// `cortex_analysis_threads` either, so the cascade cannot reach it. Its row
|
|
290
293
|
// holds a whole draft document, and a purged thread can never be composed
|
|
291
294
|
// again, so a row left behind is dead weight until the analysis purge runs.
|
|
295
|
+
// The stored results of its authoring calls go with it, for the same reason.
|
|
292
296
|
//
|
|
293
297
|
// Messages go first, and the thread rows go last: the walk every statement
|
|
294
298
|
// shares reads the very rows the last one removes. Thus a thread delete before
|
|
@@ -305,6 +309,8 @@ export function createThreadStore(pool) {
|
|
|
305
309
|
DELETE FROM cortex_thread_turns WHERE thread_id IN (SELECT thread_id FROM subtree)`, [threadId])))
|
|
306
310
|
.andThen(() => tryMutation("thread-store.purgeThread.reportSessionState", () => client.query(`${SUBTREE_CTE}
|
|
307
311
|
DELETE FROM cortex_report_session_state WHERE thread_id IN (SELECT thread_id FROM subtree)`, [threadId])))
|
|
312
|
+
.andThen(() => tryMutation("thread-store.purgeThread.authoringResults", () => client.query(`${SUBTREE_CTE}
|
|
313
|
+
DELETE FROM cortex_authoring_results WHERE thread_id IN (SELECT thread_id FROM subtree)`, [threadId])))
|
|
308
314
|
// A kept text of a run names no thread, thus it stays for the analysis purge.
|
|
309
315
|
.andThen(() => tryMutation("thread-store.purgeThread.toolOutputs", () => client.query(`${SUBTREE_CTE}
|
|
310
316
|
DELETE FROM cortex_tool_outputs WHERE thread_id IN (SELECT thread_id FROM subtree)`, [threadId])))
|
|
@@ -352,7 +358,7 @@ export function createThreadStore(pool) {
|
|
|
352
358
|
return tryQuery("thread-store.listThreads.count", () => pool.query(`SELECT COUNT(*)::text AS count
|
|
353
359
|
FROM cortex_analysis_threads
|
|
354
360
|
WHERE ${scope}`, scopeValues)).andThen((totalResult) => {
|
|
355
|
-
const total = Number(totalResult.rows
|
|
361
|
+
const total = Number(presentFirst(totalResult.rows, "the thread count row").count);
|
|
356
362
|
return tryQuery("thread-store.listThreads.page", () => pool.query(`SELECT ${THREAD_COLUMNS}
|
|
357
363
|
FROM cortex_analysis_threads
|
|
358
364
|
WHERE ${scope}
|
|
@@ -18,10 +18,10 @@ import type { ModelMessage, ToolCallPart, ToolResultPart } from "ai";
|
|
|
18
18
|
export declare const NOT_RUN_TOOL_RESULT = "Not run: the turn ended before this call ran.";
|
|
19
19
|
export declare function notRunResult(call: Pick<ToolCallPart, "toolCallId" | "toolName">): ToolResultPart;
|
|
20
20
|
/** One tool call that {@link answerUnansweredToolCalls} answered, identified for the caller's diagnostic record. */
|
|
21
|
-
export
|
|
21
|
+
export type AnsweredToolCall = {
|
|
22
22
|
readonly toolCallId: string;
|
|
23
23
|
readonly toolName: string;
|
|
24
|
-
}
|
|
24
|
+
};
|
|
25
25
|
/**
|
|
26
26
|
* Answer, in place, every tool call at or past `fromIndex` that has no matching
|
|
27
27
|
* tool result anywhere in `messages`. No message is removed or changed. Returns
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* because a signed thinking block and the prompt cache both key on the exact
|
|
15
15
|
* prior prefix.
|
|
16
16
|
*/
|
|
17
|
+
import { presentAt } from "../lib/present.js";
|
|
17
18
|
export const NOT_RUN_TOOL_RESULT = "Not run: the turn ended before this call ran.";
|
|
18
19
|
export function notRunResult(call) {
|
|
19
20
|
return {
|
|
@@ -67,14 +68,14 @@ export function answerUnansweredToolCalls(messages, fromIndex = 0) {
|
|
|
67
68
|
// Backward, so an insertion after a message cannot shift an index this walk
|
|
68
69
|
// has yet to visit.
|
|
69
70
|
for (let idx = messages.length - 1; idx >= fromIndex; idx--) {
|
|
70
|
-
const message = messages
|
|
71
|
+
const message = presentAt(messages, idx, "the message at the index");
|
|
71
72
|
if (message.role !== "assistant" || typeof message.content === "string")
|
|
72
73
|
continue;
|
|
73
|
-
const unanswered = message.content.
|
|
74
|
+
const unanswered = message.content.flatMap((part) => part.type === "tool-call" && needsClientResult(part) && !resultIds.has(part.toolCallId) ? [part] : []);
|
|
74
75
|
if (unanswered.length === 0)
|
|
75
76
|
continue;
|
|
76
77
|
let insertAt = idx + 1;
|
|
77
|
-
while (insertAt < messages.length && messages
|
|
78
|
+
while (insertAt < messages.length && presentAt(messages, insertAt, "the message at the insert point").role === "tool")
|
|
78
79
|
insertAt++;
|
|
79
80
|
messages.splice(insertAt, 0, { role: "tool", content: unanswered.map((part) => notRunResult(part)) });
|
|
80
81
|
// Prepended as a batch: the walk visits messages tail-first, but the
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
* list; the run's detail stays retrievable via `inspect_run`.
|
|
29
29
|
*/
|
|
30
30
|
import { type ResultAsync } from "neverthrow";
|
|
31
|
-
import type { Pool } from "pg";
|
|
32
31
|
import { z } from "zod";
|
|
33
|
-
import { type DbError } from "../lib/db-result.js";
|
|
32
|
+
import { type Connectable, type DbError } from "../lib/db-result.js";
|
|
33
|
+
import type { Querier } from "../state/db.js";
|
|
34
34
|
/**
|
|
35
35
|
* The write-time bounds on working memory. `updateSection` enforces them, the
|
|
36
36
|
* `update_working_memory` input schema declares them to the model (importing
|
|
@@ -53,8 +53,8 @@ export declare const constraintSchema: z.ZodObject<{
|
|
|
53
53
|
id: z.ZodString;
|
|
54
54
|
text: z.ZodString;
|
|
55
55
|
origin: z.ZodEnum<{
|
|
56
|
-
user: "user";
|
|
57
56
|
agent: "agent";
|
|
57
|
+
user: "user";
|
|
58
58
|
}>;
|
|
59
59
|
}, z.core.$strip>;
|
|
60
60
|
export type Constraint = z.infer<typeof constraintSchema>;
|
|
@@ -85,8 +85,8 @@ export declare const workingMemorySchema: z.ZodObject<{
|
|
|
85
85
|
id: z.ZodString;
|
|
86
86
|
text: z.ZodString;
|
|
87
87
|
origin: z.ZodEnum<{
|
|
88
|
-
user: "user";
|
|
89
88
|
agent: "agent";
|
|
89
|
+
user: "user";
|
|
90
90
|
}>;
|
|
91
91
|
}, z.core.$strip>>;
|
|
92
92
|
hypotheses: z.ZodArray<z.ZodObject<{
|
|
@@ -107,10 +107,10 @@ export declare function emptyWorkingMemory(): WorkingMemory;
|
|
|
107
107
|
* written for the model and says what to do next (shorten this, retire that).
|
|
108
108
|
* The tool surfaces it as an `is_error` tool result; the row is untouched.
|
|
109
109
|
*/
|
|
110
|
-
export
|
|
110
|
+
export type WorkingMemoryRejection = {
|
|
111
111
|
readonly type: "working_memory_rejected";
|
|
112
112
|
readonly message: string;
|
|
113
|
-
}
|
|
113
|
+
};
|
|
114
114
|
/** `updateSection`'s error channel: a storage failure, or a refused write. */
|
|
115
115
|
export type WorkingMemoryError = DbError | WorkingMemoryRejection;
|
|
116
116
|
/** Narrow a `WorkingMemoryError` to the model-correctable branch. */
|
|
@@ -162,21 +162,21 @@ export type FindingOp = {
|
|
|
162
162
|
readonly id: string;
|
|
163
163
|
};
|
|
164
164
|
/** The `value` argument of `updateSection`, keyed by the `section` name. */
|
|
165
|
-
export
|
|
165
|
+
export type SectionValue = {
|
|
166
166
|
readonly goal: {
|
|
167
167
|
readonly text: string;
|
|
168
168
|
};
|
|
169
169
|
readonly constraint: ConstraintOp;
|
|
170
170
|
readonly hypothesis: ListOp;
|
|
171
171
|
readonly finding: FindingOp;
|
|
172
|
-
}
|
|
172
|
+
};
|
|
173
173
|
export type Section = keyof SectionValue;
|
|
174
174
|
/**
|
|
175
175
|
* The working-memory store. Three methods — `load` reads the structured
|
|
176
176
|
* shape, `updateSection` amends one section, `render` serializes to the
|
|
177
177
|
* Markdown the chat route injects.
|
|
178
178
|
*/
|
|
179
|
-
export
|
|
179
|
+
export type WorkingMemoryStore = {
|
|
180
180
|
/** Read the row; return the empty shape if absent (no lazy insert). */
|
|
181
181
|
load(analysisId: string): ResultAsync<WorkingMemory, DbError>;
|
|
182
182
|
/**
|
|
@@ -184,11 +184,15 @@ export interface WorkingMemoryStore {
|
|
|
184
184
|
* left byte-identical; the row is upserted if absent. A write that breaks a
|
|
185
185
|
* cap or addresses an unknown id is refused — `err(WorkingMemoryRejection)`,
|
|
186
186
|
* and the row is left exactly as it was.
|
|
187
|
+
*
|
|
188
|
+
* `callKey` names the durable step of the call. The edit records it in its
|
|
189
|
+
* own transaction, and an edit whose key is recorded already changes nothing
|
|
190
|
+
* and gives ok. Thus a rerun of the step applies the edit one time.
|
|
187
191
|
*/
|
|
188
|
-
updateSection<S extends Section>(analysisId: string, section: S, value: SectionValue[S]): ResultAsync<void, WorkingMemoryError>;
|
|
192
|
+
updateSection<S extends Section>(analysisId: string, section: S, value: SectionValue[S], callKey?: string): ResultAsync<void, WorkingMemoryError>;
|
|
189
193
|
/** Serialize working memory to a Markdown document for injection. */
|
|
190
194
|
render(analysisId: string): ResultAsync<string, DbError>;
|
|
191
|
-
}
|
|
195
|
+
};
|
|
192
196
|
/**
|
|
193
197
|
* Serialize working memory to the Markdown document of the working-memory context record.
|
|
194
198
|
*
|
|
@@ -212,4 +216,4 @@ export declare function renderWorkingMemory(wm: WorkingMemory): string;
|
|
|
212
216
|
* `cortex_working_memory` table is provisioned by the project's state-init
|
|
213
217
|
* DDL.
|
|
214
218
|
*/
|
|
215
|
-
export declare function createWorkingMemory(pool:
|
|
219
|
+
export declare function createWorkingMemory(pool: Querier & Connectable): WorkingMemoryStore;
|
|
@@ -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);
|
|
@@ -24,14 +24,20 @@
|
|
|
24
24
|
import { type WorkingMemory } from "../memory/working-memory.js";
|
|
25
25
|
import type { DataProfileResult } from "../state/data-profile.js";
|
|
26
26
|
import type { AnalysisStep } from "../schemas/workflow-state.js";
|
|
27
|
+
import type { TemplateParameter } from "../tools/knowledge/client.js";
|
|
28
|
+
import type { TemplateBindingValue } from "../tools/knowledge/template.js";
|
|
27
29
|
/** Completed dependencies rendered as upstream blocks; the tail is counted, not rendered. */
|
|
28
30
|
export declare const MAX_UPSTREAM_DEPS = 5;
|
|
29
31
|
/** Characters of each dependency's summary carried in the seed — the gist, not the document. */
|
|
30
32
|
export declare const UPSTREAM_SUMMARY_MAX_CHARS = 500;
|
|
31
33
|
/** Artifact paths listed per dependency; the rest are reachable from its output directory. */
|
|
32
34
|
export declare const MAX_UPSTREAM_ARTIFACTS = 8;
|
|
35
|
+
/** Adaptable slots rendered in the Template contract section; the tail is counted, not rendered. */
|
|
36
|
+
export declare const MAX_TEMPLATE_SLOTS = 24;
|
|
37
|
+
/** Characters of one slot description carried in the seed — the constraint, not the manual. */
|
|
38
|
+
export declare const TEMPLATE_SLOT_DESCRIPTION_MAX_CHARS = 160;
|
|
33
39
|
/** Fields whose content is agent-facing and MUST appear in the rendered task. */
|
|
34
|
-
export declare const STEP_TASK_FIELDS: readonly ["name", "question", "description", "context", "constraints", "acceptance_criteria", "caveats"];
|
|
40
|
+
export declare const STEP_TASK_FIELDS: readonly ["name", "question", "description", "context", "constraints", "acceptance_criteria", "caveats", "grounding"];
|
|
35
41
|
/**
|
|
36
42
|
* Fields deliberately excluded from the task section: identity/DAG structure
|
|
37
43
|
* threaded separately through the workflow input, execution knobs, and result
|
|
@@ -41,7 +47,7 @@ export declare const STEP_TASK_FIELDS: readonly ["name", "question", "descriptio
|
|
|
41
47
|
* {@link renderResources} section, because the budget is an execution bound,
|
|
42
48
|
* not a task instruction.
|
|
43
49
|
*/
|
|
44
|
-
export declare const STEP_NON_TASK_FIELDS: readonly ["id", "track", "step_type", "depends_on", "status", "resources", "agent", "timeout", "maxSteps", "summary", "artifactIds", "error", "packages"];
|
|
50
|
+
export declare const STEP_NON_TASK_FIELDS: readonly ["id", "track", "step_type", "depends_on", "status", "resources", "agent", "timeout", "maxSteps", "summary", "artifactIds", "error", "packages", "capability"];
|
|
45
51
|
/**
|
|
46
52
|
* The step's own instructions. Only `question` is guaranteed present; the
|
|
47
53
|
* remaining task fields are appended as dedicated sections when populated, so a
|
|
@@ -50,7 +56,7 @@ export declare const STEP_NON_TASK_FIELDS: readonly ["id", "track", "step_type",
|
|
|
50
56
|
* folded in here — otherwise the agent runs against the bare question and
|
|
51
57
|
* improvises the rest.
|
|
52
58
|
*/
|
|
53
|
-
export declare function renderTask(step: AnalysisStep): string;
|
|
59
|
+
export declare function renderTask(step: AnalysisStep, contract?: Pick<StepBriefing, "template" | "templateNotRetrieved">): string;
|
|
54
60
|
/**
|
|
55
61
|
* The heading of the analysis-memory section. The orient core of the sandbox
|
|
56
62
|
* prompt names this same text, thus a test pins the two together.
|
|
@@ -75,6 +81,46 @@ export declare function emptyStepMemory(): StepMemory;
|
|
|
75
81
|
* entry — it has no memory tool.
|
|
76
82
|
*/
|
|
77
83
|
export declare function renderMemory(memory: StepMemory): string;
|
|
84
|
+
/** A file the script of the template reads. `path` names the slot that gives it, for example `{{counts_path}}`. */
|
|
85
|
+
export type TemplateBriefInput = {
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly path: string;
|
|
88
|
+
readonly description?: string;
|
|
89
|
+
};
|
|
90
|
+
/** One plan setting bound to an adaptable slot of the template. */
|
|
91
|
+
export type TemplateBoundSetting = {
|
|
92
|
+
readonly name: string;
|
|
93
|
+
readonly value: TemplateBindingValue;
|
|
94
|
+
/** The source of the value (a doi or a document), or `plan` when the procedure names none. */
|
|
95
|
+
readonly source: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The contract of the template a step renders, projected for the seed. The
|
|
99
|
+
* parent fetches it at dispatch and binds the plan settings to it; the
|
|
100
|
+
* section is what lets an agent that has never seen the template make one
|
|
101
|
+
* valid render call.
|
|
102
|
+
*/
|
|
103
|
+
export type TemplateBrief = {
|
|
104
|
+
/** The template reference of the plan step, with its version when the plan names one. */
|
|
105
|
+
readonly ref: string;
|
|
106
|
+
/** The version the service serves. Differs from the version of `ref` when the snapshot moved on. */
|
|
107
|
+
readonly version_served: string;
|
|
108
|
+
/** The adaptable slots of the contract, in the order the template declares them. A pinned slot is never rendered. */
|
|
109
|
+
readonly slots: readonly TemplateParameter[];
|
|
110
|
+
readonly inputs: readonly TemplateBriefInput[];
|
|
111
|
+
/** The plan settings bound to a slot, in plan order. Empty when the served version differs from the plan. */
|
|
112
|
+
readonly bound: readonly TemplateBoundSetting[];
|
|
113
|
+
/** The plan settings no bound slot carries, one line each with the reason. */
|
|
114
|
+
readonly unbound_settings: readonly string[];
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* The Template contract section. Only the adaptable slots render, bounded by
|
|
118
|
+
* {@link MAX_TEMPLATE_SLOTS} and the description clamp, so a wide template
|
|
119
|
+
* cannot blow the seed. A served version that differs from the plan renders
|
|
120
|
+
* as a caveat: the render refuses the plan version, and the settings are not
|
|
121
|
+
* bound to a version the plan did not name.
|
|
122
|
+
*/
|
|
123
|
+
export declare function renderTemplateContract(brief: TemplateBrief | undefined): string;
|
|
78
124
|
/**
|
|
79
125
|
* What anchors every path the agent writes or reads: the id the tree is mounted
|
|
80
126
|
* at, and the step's writable directory.
|
|
@@ -84,12 +130,12 @@ export declare function renderMemory(memory: StepMemory): string;
|
|
|
84
130
|
* every other path in the briefing is rooted with, thus one field serves the
|
|
85
131
|
* workspace section and the orientation alike.
|
|
86
132
|
*/
|
|
87
|
-
export
|
|
133
|
+
export type WorkspaceFrame = {
|
|
88
134
|
/** The analysis id. The sandbox mounts the read-only analysis tree at `/{analysisId}`. */
|
|
89
135
|
readonly analysisId: string;
|
|
90
136
|
/** In-sandbox working directory — this step's writable artifact directory, and its cwd. */
|
|
91
137
|
readonly workingDir: string;
|
|
92
|
-
}
|
|
138
|
+
};
|
|
93
139
|
/** The in-sandbox analysis root of a frame — the read-only mount of the whole tree. */
|
|
94
140
|
export declare function analysisRootOf(frame: WorkspaceFrame): string;
|
|
95
141
|
export declare function renderWorkspace(frame: WorkspaceFrame): string;
|
|
@@ -113,7 +159,7 @@ export declare function renderOrientation(profile: DataProfileResult | null | un
|
|
|
113
159
|
* to the rest — an agent that needs more than the excerpt reads the summary at
|
|
114
160
|
* `summaryPath` rather than having the whole document pushed into its context.
|
|
115
161
|
*/
|
|
116
|
-
export
|
|
162
|
+
export type UpstreamHandoff = {
|
|
117
163
|
readonly stepId: string;
|
|
118
164
|
readonly agentId: string;
|
|
119
165
|
/** The dependency's step summary. Clamped to {@link UPSTREAM_SUMMARY_MAX_CHARS} here, not by the caller. */
|
|
@@ -124,10 +170,10 @@ export interface UpstreamHandoff {
|
|
|
124
170
|
readonly outputDir: string;
|
|
125
171
|
/** In-sandbox absolute paths of the artifacts the dependency registered. */
|
|
126
172
|
readonly artifacts: readonly string[];
|
|
127
|
-
}
|
|
173
|
+
};
|
|
128
174
|
export declare function renderUpstream(handoffs: readonly UpstreamHandoff[]): string;
|
|
129
175
|
/** Everything one step's seed is composed from — all of it known at dispatch time. */
|
|
130
|
-
export
|
|
176
|
+
export type StepBriefing = {
|
|
131
177
|
readonly step: AnalysisStep;
|
|
132
178
|
readonly workspace: WorkspaceFrame;
|
|
133
179
|
/** The analysis's persisted data profile; `null` when never profiled or still pending. */
|
|
@@ -136,7 +182,15 @@ export interface StepBriefing {
|
|
|
136
182
|
readonly upstream: readonly UpstreamHandoff[];
|
|
137
183
|
/** The goal and the constraints of the analysis, read from the working memory at dispatch. */
|
|
138
184
|
readonly memory: StepMemory;
|
|
139
|
-
|
|
185
|
+
/** The contract of the template the step renders, with the plan settings bound to it. Absent when none was retrieved. */
|
|
186
|
+
readonly template?: TemplateBrief;
|
|
187
|
+
/**
|
|
188
|
+
* Why the seed carries no template contract for a step whose grounding
|
|
189
|
+
* names one: no client is bound, the service did not answer, or the
|
|
190
|
+
* service does not hold the template. Read only when `template` is absent.
|
|
191
|
+
*/
|
|
192
|
+
readonly templateNotRetrieved?: string;
|
|
193
|
+
};
|
|
140
194
|
/**
|
|
141
195
|
* Compose the seed. Absent sections collapse out entirely — an independent step
|
|
142
196
|
* with no profile and an empty memory yields exactly the task and workspace sections, byte-identical
|