@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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The turn that runs on a thread. The open of a turn claims the thread, and the
|
|
3
|
+
* end of the turn releases it. A claim whose turn no longer runs, for example
|
|
4
|
+
* after a cancel, gives way to the next turn.
|
|
5
|
+
*/
|
|
6
|
+
import type { ResultAsync } from "neverthrow";
|
|
7
|
+
import { type DbError } from "../lib/db-result.js";
|
|
8
|
+
import type { Querier } from "./db.js";
|
|
9
|
+
/** The outcome of a claim: the thread is the turn's, another turn that still runs holds it, or no live thread exists. */
|
|
10
|
+
export type TurnClaim = {
|
|
11
|
+
readonly kind: "claimed";
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: "held";
|
|
14
|
+
readonly turnId: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: "no_thread";
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
|
|
20
|
+
* run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
|
|
21
|
+
*/
|
|
22
|
+
export declare function claimThreadForTurn(pool: Querier, threadId: string, turnId: string, stillRuns: (turnId: string) => Promise<boolean>): ResultAsync<TurnClaim, DbError>;
|
|
23
|
+
/**
|
|
24
|
+
* Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
|
|
25
|
+
* code, thus the harness closes its record here. A record that is closed already does not change.
|
|
26
|
+
*/
|
|
27
|
+
export declare function closeOpenTurnRecords(pool: Querier, threadId: string): ResultAsync<void, DbError>;
|
|
28
|
+
/** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
|
|
29
|
+
export declare function turnOfAsk(pool: Querier, askId: string): ResultAsync<string | undefined, DbError>;
|
|
30
|
+
/** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
|
|
31
|
+
export declare function queryTurnsOfAnalysis(pool: Querier, analysisId: string): ResultAsync<{
|
|
32
|
+
readonly threadId: string;
|
|
33
|
+
readonly turnId: string;
|
|
34
|
+
}[], DbError>;
|
|
35
|
+
/** Release the thread, when the turn still holds it. A second release changes nothing. */
|
|
36
|
+
export declare function releaseThreadOfTurn(pool: Querier, threadId: string, turnId: string): ResultAsync<void, DbError>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The turn that runs on a thread. The open of a turn claims the thread, and the
|
|
3
|
+
* end of the turn releases it. A claim whose turn no longer runs, for example
|
|
4
|
+
* after a cancel, gives way to the next turn.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
8
|
+
const HolderRowSchema = z.object({ active_turn_id: z.string().nullable() });
|
|
9
|
+
/** Each attempt reads the holder one time. A holder that changes between two reads takes one more attempt. */
|
|
10
|
+
const CLAIM_ATTEMPTS = 3;
|
|
11
|
+
/**
|
|
12
|
+
* Claim the thread for a turn. `stillRuns` decides if the turn that holds the thread runs. A holder that does not
|
|
13
|
+
* run gives way. Each update names the holder that it replaces, thus two opens cannot both take the thread.
|
|
14
|
+
*/
|
|
15
|
+
export function claimThreadForTurn(pool, threadId, turnId, stillRuns) {
|
|
16
|
+
return tryQuery("activeTurns.claim", async () => {
|
|
17
|
+
let holder = null;
|
|
18
|
+
for (let attempt = 0; attempt < CLAIM_ATTEMPTS; attempt++) {
|
|
19
|
+
const { rows } = await pool.query("SELECT active_turn_id FROM cortex_analysis_threads WHERE thread_id = $1 AND deleted_at IS NULL", [threadId]);
|
|
20
|
+
const row = rows[0];
|
|
21
|
+
if (row === undefined)
|
|
22
|
+
return { kind: "no_thread" };
|
|
23
|
+
holder = HolderRowSchema.parse(row).active_turn_id;
|
|
24
|
+
if (holder !== null && holder !== turnId && (await stillRuns(holder)))
|
|
25
|
+
return { kind: "held", turnId: holder };
|
|
26
|
+
const taken = await pool.query(`UPDATE cortex_analysis_threads SET active_turn_id = $2
|
|
27
|
+
WHERE thread_id = $1 AND active_turn_id IS NOT DISTINCT FROM $3`, [threadId, turnId, holder]);
|
|
28
|
+
if ((taken.rowCount ?? 0) > 0)
|
|
29
|
+
return { kind: "claimed" };
|
|
30
|
+
}
|
|
31
|
+
return { kind: "held", turnId: holder ?? "" };
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Close each turn record of the thread that is still `open`, as `aborted`. A turn that a cancel ended runs no more
|
|
36
|
+
* code, thus the harness closes its record here. A record that is closed already does not change.
|
|
37
|
+
*/
|
|
38
|
+
export function closeOpenTurnRecords(pool, threadId) {
|
|
39
|
+
return tryMutation("activeTurns.closeOpen", () => pool.query("UPDATE cortex_thread_turns SET status = 'aborted', closed_at = NOW() WHERE thread_id = $1 AND status = 'open'", [threadId])).map(() => undefined);
|
|
40
|
+
}
|
|
41
|
+
const AskTurnRowSchema = z.object({ active_turn_id: z.string().nullable() });
|
|
42
|
+
/** The turn that runs on the thread of an ask, which waits for its answer. `undefined` when no turn runs there. */
|
|
43
|
+
export function turnOfAsk(pool, askId) {
|
|
44
|
+
return tryQuery("activeTurns.turnOfAsk", async () => {
|
|
45
|
+
const { rows } = await pool.query(`SELECT threads.active_turn_id FROM cortex_asks asks
|
|
46
|
+
JOIN cortex_analysis_threads threads ON threads.thread_id = asks.thread_id
|
|
47
|
+
WHERE asks.id = $1`, [askId]);
|
|
48
|
+
const row = rows[0];
|
|
49
|
+
return row === undefined ? undefined : (AskTurnRowSchema.parse(row).active_turn_id ?? undefined);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const TurnOfThreadRowSchema = z.object({ thread_id: z.string(), active_turn_id: z.string() });
|
|
53
|
+
/** The turn that holds each live thread of an analysis. A claim can outlive its turn, thus a caller checks that the turn runs. */
|
|
54
|
+
export function queryTurnsOfAnalysis(pool, analysisId) {
|
|
55
|
+
return tryQuery("activeTurns.ofAnalysis", async () => {
|
|
56
|
+
const { rows } = await pool.query(`SELECT thread_id, active_turn_id FROM cortex_analysis_threads
|
|
57
|
+
WHERE analysis_id = $1 AND active_turn_id IS NOT NULL AND deleted_at IS NULL`, [analysisId]);
|
|
58
|
+
return rows.map((row) => {
|
|
59
|
+
const parsed = TurnOfThreadRowSchema.parse(row);
|
|
60
|
+
return { threadId: parsed.thread_id, turnId: parsed.active_turn_id };
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Release the thread, when the turn still holds it. A second release changes nothing. */
|
|
65
|
+
export function releaseThreadOfTurn(pool, threadId, turnId) {
|
|
66
|
+
return tryMutation("activeTurns.release", () => pool.query("UPDATE cortex_analysis_threads SET active_turn_id = NULL WHERE thread_id = $1 AND active_turn_id = $2", [threadId, turnId])).map(() => undefined);
|
|
67
|
+
}
|
|
@@ -10,7 +10,7 @@ import { type DbError } from "../lib/db-result.js";
|
|
|
10
10
|
import type { Querier } from "./db.js";
|
|
11
11
|
import type { RunStatus, TerminalRunStatus } from "./schema.js";
|
|
12
12
|
/** The newest run of one analysis, with the title of its plan and the counts of its step rows. */
|
|
13
|
-
export
|
|
13
|
+
export type LatestRunSummary = {
|
|
14
14
|
readonly analysisId: string;
|
|
15
15
|
readonly runId: string;
|
|
16
16
|
readonly status: RunStatus;
|
|
@@ -19,26 +19,26 @@ export interface LatestRunSummary {
|
|
|
19
19
|
readonly totalSteps: number;
|
|
20
20
|
readonly startedAt: string;
|
|
21
21
|
readonly completedAt: string | null;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
/** A run of a list of run ids, with the fields of the newest-run read and the thread of the run. */
|
|
24
|
-
export
|
|
24
|
+
export type RunProgressSummary = LatestRunSummary & {
|
|
25
25
|
/** The thread of the run as the ledger stores it, or `null`. */
|
|
26
26
|
readonly threadId: string | null;
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
/** A terminal run that ended at or after a time. */
|
|
29
|
-
export
|
|
29
|
+
export type EndedRunSummary = {
|
|
30
30
|
readonly analysisId: string;
|
|
31
31
|
readonly runId: string;
|
|
32
32
|
readonly status: TerminalRunStatus;
|
|
33
33
|
readonly completedAt: string;
|
|
34
|
-
}
|
|
34
|
+
};
|
|
35
35
|
/** The data profile state of one analysis that has a profile status. */
|
|
36
|
-
export
|
|
36
|
+
export type DataProfileSummary = {
|
|
37
37
|
readonly analysisId: string;
|
|
38
38
|
readonly status: DataProfileLifecycleStatus;
|
|
39
39
|
readonly completedAt: string | null;
|
|
40
40
|
readonly profiledFiles: number | null;
|
|
41
|
-
}
|
|
41
|
+
};
|
|
42
42
|
export declare function queryRunCountsByAnalyses(pool: Querier, analysisIds: string[]): ResultAsync<Array<{
|
|
43
43
|
analysisId: string;
|
|
44
44
|
status: string;
|
|
@@ -146,7 +146,7 @@ export function queryRunsEndedSince(pool, input) {
|
|
|
146
146
|
const result = await pool.query({
|
|
147
147
|
text: `SELECT analysis_id, run_id, status, completed_at
|
|
148
148
|
FROM cortex_runs
|
|
149
|
-
WHERE status IN ('completed', 'partial', 'failed', 'canceled'
|
|
149
|
+
WHERE status IN ('completed', 'partial', 'failed', 'canceled')
|
|
150
150
|
AND completed_at >= $1
|
|
151
151
|
ORDER BY completed_at DESC, run_id DESC
|
|
152
152
|
LIMIT $2`,
|
|
@@ -185,9 +185,9 @@ export function queryDataProfileStatusByAnalyses(pool, analysisIds) {
|
|
|
185
185
|
status: r.data_profile_status,
|
|
186
186
|
completedAt: r.data_profile_completed_at ?? null,
|
|
187
187
|
profiledFiles: profileDatasetFileCount({
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
partition: r.partition ?? undefined,
|
|
189
|
+
coverage: r.coverage ?? undefined,
|
|
190
|
+
kinds: r.kinds ?? undefined,
|
|
191
191
|
}),
|
|
192
192
|
}));
|
|
193
193
|
});
|
package/dist/state/analyses.d.ts
CHANGED
|
@@ -19,17 +19,3 @@ export declare function loadAnalysisStatus(pool: Querier, resourceId: string): R
|
|
|
19
19
|
status: string;
|
|
20
20
|
context: string | null;
|
|
21
21
|
} | null, DbError>;
|
|
22
|
-
/**
|
|
23
|
-
* Mark an analysis as suspended.
|
|
24
|
-
* Idempotent — no-op if already suspended.
|
|
25
|
-
*
|
|
26
|
-
* `suspended_insufficient_funds` is the name of the one suspended state, for
|
|
27
|
-
* each reason of the host, thus no reason is persisted. A chat turn never calls
|
|
28
|
-
* it.
|
|
29
|
-
*/
|
|
30
|
-
export declare function suspendAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
|
|
31
|
-
/**
|
|
32
|
-
* Resume a suspended analysis after the user tops up.
|
|
33
|
-
* Only transitions from `suspended_insufficient_funds` → `active`.
|
|
34
|
-
*/
|
|
35
|
-
export declare function resumeAnalysis(pool: Querier, analysisId: string): ResultAsync<void, DbError>;
|
package/dist/state/analyses.js
CHANGED
|
@@ -40,35 +40,3 @@ export function loadAnalysisStatus(pool, resourceId) {
|
|
|
40
40
|
return { status: row.status, context: row.context ?? null };
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Mark an analysis as suspended.
|
|
45
|
-
* Idempotent — no-op if already suspended.
|
|
46
|
-
*
|
|
47
|
-
* `suspended_insufficient_funds` is the name of the one suspended state, for
|
|
48
|
-
* each reason of the host, thus no reason is persisted. A chat turn never calls
|
|
49
|
-
* it.
|
|
50
|
-
*/
|
|
51
|
-
export function suspendAnalysis(pool, analysisId) {
|
|
52
|
-
return tryMutation("analyses.suspendAnalysis", async () => {
|
|
53
|
-
await pool.query({
|
|
54
|
-
text: `UPDATE cortex_analysis_state
|
|
55
|
-
SET status = 'suspended_insufficient_funds', updated_at = $1
|
|
56
|
-
WHERE analysis_id = $2 AND status != 'suspended_insufficient_funds'`,
|
|
57
|
-
values: [new Date().toISOString(), analysisId],
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Resume a suspended analysis after the user tops up.
|
|
63
|
-
* Only transitions from `suspended_insufficient_funds` → `active`.
|
|
64
|
-
*/
|
|
65
|
-
export function resumeAnalysis(pool, analysisId) {
|
|
66
|
-
return tryMutation("analyses.resumeAnalysis", async () => {
|
|
67
|
-
await pool.query({
|
|
68
|
-
text: `UPDATE cortex_analysis_state
|
|
69
|
-
SET status = 'active', updated_at = $1
|
|
70
|
-
WHERE analysis_id = $2 AND status = 'suspended_insufficient_funds'`,
|
|
71
|
-
values: [new Date().toISOString(), analysisId],
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import type { ResultAsync } from "neverthrow";
|
|
6
6
|
import { type DbError } from "../lib/db-result.js";
|
|
7
7
|
import type { Querier } from "./db.js";
|
|
8
|
-
import
|
|
9
|
-
export
|
|
8
|
+
import { ArtifactRole, type ArtifactRow } from "./schema.js";
|
|
9
|
+
export type RegisterArtifactInput = {
|
|
10
10
|
resourceId: string;
|
|
11
11
|
path: string;
|
|
12
12
|
hash: string;
|
|
@@ -21,7 +21,7 @@ export interface RegisterArtifactInput {
|
|
|
21
21
|
* `step_output` rows (their `file_id` is assigned after upload-sync).
|
|
22
22
|
*/
|
|
23
23
|
fileId?: string | null;
|
|
24
|
-
}
|
|
24
|
+
};
|
|
25
25
|
export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInput): ResultAsync<void, DbError>;
|
|
26
26
|
/**
|
|
27
27
|
* Batched upsert — writes entries in multi-row `INSERT ... VALUES` statements
|
|
@@ -34,12 +34,12 @@ export declare function upsertArtifact(pool: Querier, entry: RegisterArtifactInp
|
|
|
34
34
|
*/
|
|
35
35
|
export declare function upsertArtifacts(pool: Querier, entries: RegisterArtifactInput[]): ResultAsync<void, DbError>;
|
|
36
36
|
/** Result type for input artifact metadata lookups. */
|
|
37
|
-
export
|
|
37
|
+
export type InputArtifactMeta = {
|
|
38
38
|
path: string;
|
|
39
39
|
hash: string;
|
|
40
40
|
size: number;
|
|
41
41
|
fileId: string | null;
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
43
|
/**
|
|
44
44
|
* Query cortex_artifacts for input-role rows matching the given paths.
|
|
45
45
|
* Used at the registration boundary to resolve metadata for data-source inputs.
|
|
@@ -47,11 +47,11 @@ export interface InputArtifactMeta {
|
|
|
47
47
|
export declare function queryInputArtifacts(pool: Querier, analysisId: string, paths: string[]): ResultAsync<InputArtifactMeta[], DbError>;
|
|
48
48
|
export declare function queryUnsyncedStepArtifacts(pool: Querier, resourceId: string, runId: string, stepId: string): ResultAsync<ArtifactRow[], DbError>;
|
|
49
49
|
/** One registered step output, as a downstream consumer needs to name it. */
|
|
50
|
-
export
|
|
50
|
+
export type StepArtifactRef = {
|
|
51
51
|
/** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
|
|
52
52
|
path: string;
|
|
53
53
|
fileType: string | null;
|
|
54
|
-
}
|
|
54
|
+
};
|
|
55
55
|
/**
|
|
56
56
|
* The artifacts a completed step registered, most consequential first. Ordered
|
|
57
57
|
* by artifact kind (outputs, then figures, notebooks, scripts, logs) and then by
|
|
@@ -60,12 +60,12 @@ export interface StepArtifactRef {
|
|
|
60
60
|
*/
|
|
61
61
|
export declare function queryStepArtifactPaths(pool: Querier, resourceId: string, runId: string, stepId: string, limit: number): ResultAsync<StepArtifactRef[], DbError>;
|
|
62
62
|
/** One registered artifact of an analysis, as a reader of the full artifact set names it. */
|
|
63
|
-
export
|
|
63
|
+
export type AnalysisArtifactRef = {
|
|
64
64
|
/** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
|
|
65
65
|
path: string;
|
|
66
66
|
hash: string;
|
|
67
67
|
fileType: string | null;
|
|
68
|
-
}
|
|
68
|
+
};
|
|
69
69
|
/**
|
|
70
70
|
* Every artifact of one analysis, ordered by path so the same call gives the same rows.
|
|
71
71
|
*
|
|
@@ -78,7 +78,7 @@ export declare function queryAnalysisArtifacts(pool: Querier, analysisId: string
|
|
|
78
78
|
/** The sort of {@link queryArtifactPage}: `path` is path order, `recent` is newest registration first. */
|
|
79
79
|
export type ArtifactPageSort = "path" | "recent";
|
|
80
80
|
/** The filters, the sort, and the window of {@link queryArtifactPage}. A filter that is absent selects each row. */
|
|
81
|
-
export
|
|
81
|
+
export type ArtifactPageQuery = {
|
|
82
82
|
runId?: string;
|
|
83
83
|
stepId?: string;
|
|
84
84
|
fileType?: string;
|
|
@@ -94,9 +94,9 @@ export interface ArtifactPageQuery {
|
|
|
94
94
|
sort: ArtifactPageSort;
|
|
95
95
|
limit: number;
|
|
96
96
|
offset: number;
|
|
97
|
-
}
|
|
97
|
+
};
|
|
98
98
|
/** One ledger row of {@link queryArtifactPage}. */
|
|
99
|
-
export
|
|
99
|
+
export type ArtifactPageEntry = {
|
|
100
100
|
/** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
|
|
101
101
|
path: string;
|
|
102
102
|
/** Bytes. */
|
|
@@ -106,20 +106,20 @@ export interface ArtifactPageEntry {
|
|
|
106
106
|
runId: string | null;
|
|
107
107
|
stepId: string | null;
|
|
108
108
|
createdAt: string;
|
|
109
|
-
}
|
|
109
|
+
};
|
|
110
110
|
/** The count of the selected rows that have one extension. */
|
|
111
|
-
export
|
|
111
|
+
export type ArtifactExtensionCount = {
|
|
112
112
|
/** The extension in lower case with no dot, or `null` for the rows that have no extension. */
|
|
113
113
|
extension: string | null;
|
|
114
114
|
count: number;
|
|
115
|
-
}
|
|
115
|
+
};
|
|
116
116
|
/** One page of the ledger, and the count of the rows that the filters select. */
|
|
117
|
-
export
|
|
117
|
+
export type ArtifactPage = {
|
|
118
118
|
entries: ArtifactPageEntry[];
|
|
119
119
|
total: number;
|
|
120
120
|
/** The selected rows by extension, in the order of the extension with `null` last. The counts sum to `total`. */
|
|
121
121
|
extensionCounts: ArtifactExtensionCount[];
|
|
122
|
-
}
|
|
122
|
+
};
|
|
123
123
|
/**
|
|
124
124
|
* One page of the artifact ledger of an analysis, in two statements: the count of the rows that the filters
|
|
125
125
|
* select, grouped by extension, and the page. The count is a separate statement because a page past the end has no
|
|
@@ -129,11 +129,24 @@ export interface ArtifactPage {
|
|
|
129
129
|
* grows with the ledger of the one analysis, because the count reads each filtered row.
|
|
130
130
|
*/
|
|
131
131
|
export declare function queryArtifactPage(pool: Querier, analysisId: string, query: ArtifactPageQuery): ResultAsync<ArtifactPage, DbError>;
|
|
132
|
+
/** The run and the step that wrote one path, from {@link queryArtifactOrigins}. Both are `null` for an `input` row. */
|
|
133
|
+
export type ArtifactOrigin = {
|
|
134
|
+
/** Workspace-root-relative path (`runs/{runId}/{stepId}/output/de.csv`). */
|
|
135
|
+
path: string;
|
|
136
|
+
runId: string | null;
|
|
137
|
+
stepId: string | null;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* The run and the step of each path of a list that has a ledger row of the analysis, in one statement through the key
|
|
141
|
+
* `(analysis_id, path)`. A path with no row has no entry, and the order of the entries is not defined. An empty list
|
|
142
|
+
* gives `[]` and sends no statement. The cost grows with the length of the list, thus the caller bounds it.
|
|
143
|
+
*/
|
|
144
|
+
export declare function queryArtifactOrigins(pool: Querier, analysisId: string, paths: readonly string[]): ResultAsync<ArtifactOrigin[], DbError>;
|
|
132
145
|
/** The step-output count of one run, from {@link countArtifactsByRuns}. */
|
|
133
|
-
export
|
|
146
|
+
export type RunArtifactCount = {
|
|
134
147
|
runId: string;
|
|
135
148
|
count: number;
|
|
136
|
-
}
|
|
149
|
+
};
|
|
137
150
|
/**
|
|
138
151
|
* The step-output count of each run of a list, in one statement. A run with no step output has no entry,
|
|
139
152
|
* and a caller reads it as 0. An `input` row never counts. The run-completed card and a list of runs use
|
package/dist/state/artifacts.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* reconciliation.
|
|
4
4
|
*/
|
|
5
5
|
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
6
|
+
import { presentAt } from "../lib/present.js";
|
|
7
|
+
import { ArtifactRowSchema } from "./schema.js";
|
|
6
8
|
export function upsertArtifact(pool, entry) {
|
|
7
9
|
const now = new Date().toISOString();
|
|
8
10
|
return tryMutation("artifacts.upsertArtifact", async () => {
|
|
@@ -110,6 +112,7 @@ export function queryInputArtifacts(pool, analysisId, paths) {
|
|
|
110
112
|
return result.rows.map((r) => ({
|
|
111
113
|
path: r.path,
|
|
112
114
|
hash: r.hash,
|
|
115
|
+
// oxlint-disable-next-line typescript/no-unnecessary-type-conversion -- pg returns a bigint column as text; the row annotation says number, the driver gives a string, and the conversion is real.
|
|
113
116
|
size: Number(r.size),
|
|
114
117
|
fileId: r.file_id ?? null,
|
|
115
118
|
}));
|
|
@@ -224,7 +227,7 @@ export function queryArtifactPage(pool, analysisId, query) {
|
|
|
224
227
|
ORDER BY 1 ASC NULLS LAST`,
|
|
225
228
|
values,
|
|
226
229
|
});
|
|
227
|
-
const extensionCounts = countResult.rows.map((r) => ({ extension: r.extension ?? null, count:
|
|
230
|
+
const extensionCounts = countResult.rows.map((r) => ({ extension: r.extension ?? null, count: r.n }));
|
|
228
231
|
// `path` is unique in one analysis, thus it breaks each tie and two pages never overlap.
|
|
229
232
|
const order = query.sort === "recent" ? "created_at DESC, path ASC" : "path ASC";
|
|
230
233
|
const rowsResult = await pool.query({
|
|
@@ -250,6 +253,24 @@ export function queryArtifactPage(pool, analysisId, query) {
|
|
|
250
253
|
};
|
|
251
254
|
});
|
|
252
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* The run and the step of each path of a list that has a ledger row of the analysis, in one statement through the key
|
|
258
|
+
* `(analysis_id, path)`. A path with no row has no entry, and the order of the entries is not defined. An empty list
|
|
259
|
+
* gives `[]` and sends no statement. The cost grows with the length of the list, thus the caller bounds it.
|
|
260
|
+
*/
|
|
261
|
+
export function queryArtifactOrigins(pool, analysisId, paths) {
|
|
262
|
+
return tryQuery("artifacts.queryArtifactOrigins", async () => {
|
|
263
|
+
if (paths.length === 0)
|
|
264
|
+
return [];
|
|
265
|
+
const result = await pool.query({
|
|
266
|
+
text: `SELECT path, source_run, source_step
|
|
267
|
+
FROM cortex_artifacts
|
|
268
|
+
WHERE analysis_id = $1 AND path = ANY($2::text[])`,
|
|
269
|
+
values: [analysisId, [...paths]],
|
|
270
|
+
});
|
|
271
|
+
return result.rows.map((r) => ({ path: r.path, runId: r.source_run ?? null, stepId: r.source_step ?? null }));
|
|
272
|
+
});
|
|
273
|
+
}
|
|
253
274
|
/**
|
|
254
275
|
* The step-output count of each run of a list, in one statement. A run with no step output has no entry,
|
|
255
276
|
* and a caller reads it as 0. An `input` row never counts. The run-completed card and a list of runs use
|
|
@@ -266,7 +287,7 @@ export function countArtifactsByRuns(pool, analysisId, runIds) {
|
|
|
266
287
|
GROUP BY source_run`,
|
|
267
288
|
values: [analysisId, [...runIds]],
|
|
268
289
|
});
|
|
269
|
-
return result.rows.map((r) => ({ runId: r.source_run, count:
|
|
290
|
+
return result.rows.map((r) => ({ runId: r.source_run, count: r.n }));
|
|
270
291
|
});
|
|
271
292
|
}
|
|
272
293
|
export function updateArtifactId(pool, resourceId, path, artifactId, fileType) {
|
|
@@ -287,8 +308,9 @@ export function updateFileIds(pool, pairs) {
|
|
|
287
308
|
const tuples = [];
|
|
288
309
|
for (let i = 0; i < pairs.length; i++) {
|
|
289
310
|
const base = i * 2;
|
|
311
|
+
const pair = presentAt(pairs, i, "the artifact/file pair at the index");
|
|
290
312
|
tuples.push(`($${base + 1}::text, $${base + 2}::text)`);
|
|
291
|
-
values.push(
|
|
313
|
+
values.push(pair.artifactId, pair.fileId);
|
|
292
314
|
}
|
|
293
315
|
await pool.query({
|
|
294
316
|
text: `UPDATE cortex_artifacts AS a
|
|
@@ -300,12 +322,13 @@ export function updateFileIds(pool, pairs) {
|
|
|
300
322
|
});
|
|
301
323
|
}
|
|
302
324
|
function mapArtifactRow(row) {
|
|
303
|
-
return {
|
|
325
|
+
return ArtifactRowSchema.parse({
|
|
304
326
|
resourceId: row.analysis_id,
|
|
305
327
|
path: row.path,
|
|
306
328
|
artifactId: row.artifact_id ?? null,
|
|
307
329
|
fileId: row.file_id ?? null,
|
|
308
330
|
hash: row.hash,
|
|
331
|
+
// `size` is bigint, which `pg` delivers as a string; the schema wants the number.
|
|
309
332
|
size: Number(row.size),
|
|
310
333
|
role: row.role,
|
|
311
334
|
sourceStep: row.source_step ?? null,
|
|
@@ -313,5 +336,5 @@ function mapArtifactRow(row) {
|
|
|
313
336
|
createdAt: row.created_at,
|
|
314
337
|
unrecoverableAt: row.unrecoverable_at ?? null,
|
|
315
338
|
fileType: row.file_type ?? null,
|
|
316
|
-
};
|
|
339
|
+
});
|
|
317
340
|
}
|
|
@@ -14,7 +14,7 @@ import type { Querier } from "./db.js";
|
|
|
14
14
|
* call sites keep one import.
|
|
15
15
|
*/
|
|
16
16
|
export type { DataProfileAxis, DataProfileChecked, DataProfileCompanionCompleteness, DataProfileCoverage, DataProfileDimension, DataProfileFile, DataProfileGroup, DataProfileGroupSlot, DataProfileInputSignature, DataProfileKind, DataProfileMemberAnnotation, DataProfileObservation, DataProfileOrganism, DataProfilePartition, DataProfileProbeReport, DataProfileQualityAssessment, DataProfileQuarantine, DataProfileRecipeStep, DataProfileLifecycleStatus, DataProfileResult, DataProfileSubjectSource, } from "../contracts/data-profile.js";
|
|
17
|
-
export
|
|
17
|
+
export type DataProfileStatus = {
|
|
18
18
|
status: DataProfileLifecycleStatus;
|
|
19
19
|
error: string | null;
|
|
20
20
|
startedAt: string | null;
|
|
@@ -28,7 +28,7 @@ export interface DataProfileStatus {
|
|
|
28
28
|
*/
|
|
29
29
|
workflowId: string | null;
|
|
30
30
|
seedInputFileIds: string[] | null;
|
|
31
|
-
}
|
|
31
|
+
};
|
|
32
32
|
/**
|
|
33
33
|
* Try to claim a startable row into `running`. Startable means `'pending'` (seeded,
|
|
34
34
|
* not yet run) or NULL (no profile: never profiled, or cleared by `clearDataProfile`).
|
package/dist/state/db.d.ts
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
* same operation works against the harness's connection pool or a
|
|
6
6
|
* single-transaction `PoolClient`. Lifted here to keep the type declared in
|
|
7
7
|
* one place instead of redeclared per file.
|
|
8
|
+
*
|
|
9
|
+
* The type is structural and states exactly what the state modules read: one
|
|
10
|
+
* `query` over the text or config form, returning `rows` and `rowCount`. A
|
|
11
|
+
* real `Pool` and `PoolClient` satisfy it, and so does a test double that
|
|
12
|
+
* answers `query` alone; nothing else of `pg`'s surface is claimed here.
|
|
8
13
|
*/
|
|
9
|
-
import type {
|
|
10
|
-
export type Querier =
|
|
14
|
+
import type { QueryConfig, QueryResultRow } from "pg";
|
|
15
|
+
export type Querier = {
|
|
16
|
+
query<R extends QueryResultRow = Record<string, unknown>>(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
|
|
17
|
+
rows: R[];
|
|
18
|
+
rowCount: number | null;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
package/dist/state/db.js
CHANGED
|
@@ -5,5 +5,10 @@
|
|
|
5
5
|
* same operation works against the harness's connection pool or a
|
|
6
6
|
* single-transaction `PoolClient`. Lifted here to keep the type declared in
|
|
7
7
|
* one place instead of redeclared per file.
|
|
8
|
+
*
|
|
9
|
+
* The type is structural and states exactly what the state modules read: one
|
|
10
|
+
* `query` over the text or config form, returning `rows` and `rowCount`. A
|
|
11
|
+
* real `Pool` and `PoolClient` satisfy it, and so does a test double that
|
|
12
|
+
* answers `query` alone; nothing else of `pg`'s surface is claimed here.
|
|
8
13
|
*/
|
|
9
14
|
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The Postgres realization of the intent store of `edit_file`, over `cortex_edit_intents`. */
|
|
2
|
+
import type { Querier } from "./db.js";
|
|
3
|
+
import type { EditIntentStore } from "../tools/workspace/edit-file.js";
|
|
4
|
+
export declare function createEditIntentStore(pool: Querier): EditIntentStore;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** The Postgres realization of the intent store of `edit_file`, over `cortex_edit_intents`. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { tryMutation, tryQuery } from "../lib/db-result.js";
|
|
4
|
+
import { MUTATE_TOOL_NAMES } from "../tools/workspace/mutator.js";
|
|
5
|
+
const WriteRecordSchema = z.object({
|
|
6
|
+
analysisId: z.string(),
|
|
7
|
+
threadId: z.string().optional(),
|
|
8
|
+
path: z.string(),
|
|
9
|
+
hash: z.string(),
|
|
10
|
+
size: z.number(),
|
|
11
|
+
toolName: z.enum(MUTATE_TOOL_NAMES),
|
|
12
|
+
invocationId: z.string(),
|
|
13
|
+
});
|
|
14
|
+
const EditFileOkSchema = z.object({
|
|
15
|
+
status: z.literal("ok"),
|
|
16
|
+
path: z.string(),
|
|
17
|
+
replacements: z.number(),
|
|
18
|
+
bytesWritten: z.number(),
|
|
19
|
+
lines: z.array(z.number()).optional(),
|
|
20
|
+
decision_record_noted: z.literal(true).optional(),
|
|
21
|
+
});
|
|
22
|
+
const EditIntentRowSchema = z.object({
|
|
23
|
+
step_key: z.string(),
|
|
24
|
+
analysis_id: z.string(),
|
|
25
|
+
path: z.string(),
|
|
26
|
+
hash_before: z.string(),
|
|
27
|
+
hash_after: z.string(),
|
|
28
|
+
result: EditFileOkSchema,
|
|
29
|
+
call_record: z.array(WriteRecordSchema),
|
|
30
|
+
});
|
|
31
|
+
function toEditIntent(raw) {
|
|
32
|
+
const row = EditIntentRowSchema.parse(raw);
|
|
33
|
+
return {
|
|
34
|
+
key: row.step_key,
|
|
35
|
+
analysisId: row.analysis_id,
|
|
36
|
+
path: row.path,
|
|
37
|
+
hashBefore: row.hash_before,
|
|
38
|
+
hashAfter: row.hash_after,
|
|
39
|
+
result: row.result,
|
|
40
|
+
callRecord: row.call_record,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function createEditIntentStore(pool) {
|
|
44
|
+
return {
|
|
45
|
+
put: (intent) => tryMutation("editIntents.put", () => pool.query(
|
|
46
|
+
// The update sets no `created_at`, thus the row keeps the time of its first put.
|
|
47
|
+
`INSERT INTO cortex_edit_intents (step_key, analysis_id, path, hash_before, hash_after, result, call_record)
|
|
48
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
49
|
+
ON CONFLICT (step_key) DO UPDATE SET
|
|
50
|
+
analysis_id = EXCLUDED.analysis_id,
|
|
51
|
+
path = EXCLUDED.path,
|
|
52
|
+
hash_before = EXCLUDED.hash_before,
|
|
53
|
+
hash_after = EXCLUDED.hash_after,
|
|
54
|
+
result = EXCLUDED.result,
|
|
55
|
+
call_record = EXCLUDED.call_record`, [
|
|
56
|
+
intent.key,
|
|
57
|
+
intent.analysisId,
|
|
58
|
+
intent.path,
|
|
59
|
+
intent.hashBefore,
|
|
60
|
+
intent.hashAfter,
|
|
61
|
+
JSON.stringify(intent.result),
|
|
62
|
+
JSON.stringify(intent.callRecord),
|
|
63
|
+
])).map(() => undefined),
|
|
64
|
+
get: (key) => tryQuery("editIntents.get", async () => {
|
|
65
|
+
const { rows } = await pool.query(`SELECT step_key, analysis_id, path, hash_before, hash_after, result, call_record
|
|
66
|
+
FROM cortex_edit_intents
|
|
67
|
+
WHERE step_key = $1`, [key]);
|
|
68
|
+
return rows[0] === undefined ? null : toEditIntent(rows[0]);
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
}
|
package/dist/state/index.d.ts
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { initCortexState } from "./init.js";
|
|
10
10
|
export type { Querier } from "./db.js";
|
|
11
|
-
export { upsertAnalysis,
|
|
12
|
-
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, countArtifactsByRuns, } from "./artifacts.js";
|
|
13
|
-
export type { RegisterArtifactInput, InputArtifactMeta, StepArtifactRef, ArtifactExtensionCount, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount, } from "./artifacts.js";
|
|
11
|
+
export { upsertAnalysis, loadAnalysisStatus } from "./analyses.js";
|
|
12
|
+
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns, } from "./artifacts.js";
|
|
13
|
+
export type { RegisterArtifactInput, ArtifactOrigin, InputArtifactMeta, StepArtifactRef, ArtifactExtensionCount, ArtifactPage, ArtifactPageEntry, ArtifactPageQuery, ArtifactPageSort, RunArtifactCount, } from "./artifacts.js";
|
|
14
14
|
export { insertRun, reserveRunById, RunDedupCollisionError, RunIdentityCollisionError, updateRunStatus, reconcileOrphanedRuns, ORPHANED_RUN_GRACE_MS, markRunCanceledIfActive, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
|
|
15
15
|
setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, countRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, queryNewestPlanRun, } from "./runs.js";
|
|
16
16
|
export type { InsertRunInput, RunPage, RunReservation } from "./runs.js";
|
|
@@ -18,7 +18,7 @@ export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, up
|
|
|
18
18
|
export type { InsertStepExecutionInput, SeedStepExecutionRow, UpdateStepExecutionInput } from "./step-executions.js";
|
|
19
19
|
export { setSandboxRef, clearSandboxRef, reconcileReapedSandbox } from "./active-sandboxes.js";
|
|
20
20
|
export { insertPlan, upsertPlan, loadPlan, loadPlanRecord } from "./plans.js";
|
|
21
|
-
export type { InsertPlanInput, UpsertPlanInput, PlanRecord } from "./plans.js";
|
|
21
|
+
export type { InsertPlanInput, UpsertPlanInput, PlanRecord, PlanRowQuerier } from "./plans.js";
|
|
22
22
|
export { tryStartDataProfile, tryRetryDataProfile, tryRerunDataProfile, completeDataProfile, failDataProfile, expireStaleDataProfile, reconcileOrphanedDataProfile, clearDataProfile, completeEmptyDataProfile, loadDataProfileStatus, loadSeedInputFileIds, recordDataProfileWorkflowId, } from "./data-profile.js";
|
|
23
23
|
export type { DataProfileStatus, DataProfileTerminalWrite, DataProfileResult, DataProfileChecked, DataProfileCompanionCompleteness, DataProfileDimension, DataProfileGroup, DataProfileGroupSlot, DataProfileFile, DataProfileMemberAnnotation, DataProfileObservation, DataProfilePartition, DataProfileProbeReport, DataProfileQualityAssessment, DataProfileQuarantine, DataProfileRecipeStep, DataProfileKind, DataProfileAxis, DataProfileInputSignature, DataProfileCoverage, } from "./data-profile.js";
|
|
24
24
|
export { queryRunCountsByAnalyses, queryThreadCountsByAnalyses, queryDataProfileStatusByAnalyses, queryLatestRunsByAnalyses, queryRunProgressByRuns, queryRunsEndedSince, } from "./analyses-metrics.js";
|
package/dist/state/index.js
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* specific entity module (e.g. `./state/runs.js`) when narrow.
|
|
8
8
|
*/
|
|
9
9
|
export { initCortexState } from "./init.js";
|
|
10
|
-
export { upsertAnalysis,
|
|
11
|
-
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, countArtifactsByRuns, } from "./artifacts.js";
|
|
10
|
+
export { upsertAnalysis, loadAnalysisStatus } from "./analyses.js";
|
|
11
|
+
export { upsertArtifact, upsertArtifacts, queryInputArtifacts, queryStepArtifactPaths, queryUnsyncedStepArtifacts, updateArtifactId, updateFileIds, queryArtifactPage, queryArtifactOrigins, countArtifactsByRuns, } from "./artifacts.js";
|
|
12
12
|
export { insertRun, reserveRunById, RunDedupCollisionError, RunIdentityCollisionError, updateRunStatus, reconcileOrphanedRuns, ORPHANED_RUN_GRACE_MS, markRunCanceledIfActive, promoteFailedToPartial, setRunMandate, // oss-core-managed-ok: run-mandate ledger (nullable; OSS leaves null)
|
|
13
13
|
setRunSynthesisOutcome, queryRun, queryActiveRun, queryNonTerminalRunsByAnalysis, queryRunsForInspection, queryRunsByAnalysis, countRunsByAnalysis, queryRunsByThread, queryRunIdsByPlan, queryNewestPlanRun, } from "./runs.js";
|
|
14
14
|
export { insertStepExecution, seedStepExecutions, sweepPendingStepExecutions, updateStepExecution, queryStepsByRun } from "./step-executions.js";
|
package/dist/state/init.d.ts
CHANGED
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
* takes no lock on a Cortex table.
|
|
9
9
|
*/
|
|
10
10
|
import type { Pool } from "pg";
|
|
11
|
+
import type { Querier } from "./db.js";
|
|
11
12
|
import type { Logger } from "../lib/logger.js";
|
|
12
13
|
/**
|
|
13
14
|
* Apply the pending migrations of the Cortex state tables. Safe to call on every
|
|
14
15
|
* startup and across concurrent replicas.
|
|
15
16
|
*/
|
|
16
|
-
export declare function initCortexState(pool: Pool, injected?: Logger): Promise<void>;
|
|
17
|
+
export declare function initCortexState(pool: Querier & Pick<Pool, "connect" | "options">, injected?: Logger): Promise<void>;
|