@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
|
@@ -49,18 +49,28 @@ export type ConversationUIData = {
|
|
|
49
49
|
})[];
|
|
50
50
|
};
|
|
51
51
|
};
|
|
52
|
-
export
|
|
52
|
+
export type ConversationDisplayMetadata = {
|
|
53
53
|
interrupted?: boolean;
|
|
54
|
-
}
|
|
54
|
+
};
|
|
55
55
|
export type ConversationUIMessage = UIMessage<ConversationDisplayMetadata, ConversationUIData>;
|
|
56
|
-
export
|
|
56
|
+
export type StoredDisplayEnvelope = {
|
|
57
57
|
readonly kind: "ai-sdk-ui-messages";
|
|
58
58
|
readonly aiSdkMajor: 7;
|
|
59
59
|
readonly schemaVersion: typeof SUPPORTED_DISPLAY_SCHEMA_VERSION;
|
|
60
60
|
readonly messages: ConversationUIMessage[];
|
|
61
|
-
}
|
|
61
|
+
};
|
|
62
62
|
export declare function envelopeDisplayMessages(messages: readonly ConversationUIMessage[]): StoredDisplayEnvelope;
|
|
63
63
|
export declare function parseStoredDisplayEnvelope(value: unknown, identity: string, logger?: Logger): Promise<StoredDisplayEnvelope>;
|
|
64
|
+
/** The message-part arm a stored data part round-trips from: the payload is the arm minus its discriminant. */
|
|
65
|
+
export type StoredSourcePart = Extract<Exclude<MessagePart, {
|
|
66
|
+
type: "text";
|
|
67
|
+
}>, {
|
|
68
|
+
type: ToolCallPart["type"] | PresentationPart["type"] | PlanPart["type"] | RunCardPart["type"] | PlanApprovalPart["type"] | FileReferencePart["type"] | AskPart["type"] | ChildSessionStartedPart["type"] | ReportRenderedPart["type"] | CompactionPart["type"] | SubAgentActivityPart["type"];
|
|
69
|
+
}>;
|
|
70
|
+
/** Whether `part` is an arm the stored vocabulary can hold; anything else cannot become a stored card. */
|
|
71
|
+
export declare function isStoredSourcePart(part: Exclude<MessagePart, {
|
|
72
|
+
type: "text";
|
|
73
|
+
}>): part is StoredSourcePart;
|
|
64
74
|
/**
|
|
65
75
|
* Build the stored form of one non-text message part.
|
|
66
76
|
*
|
|
@@ -72,9 +82,7 @@ export declare function parseStoredDisplayEnvelope(value: unknown, identity: str
|
|
|
72
82
|
* lifetime changes — rather than at each reader. An entry of a sub-agent call
|
|
73
83
|
* closes the same way, and an `incomplete` entry has no end time.
|
|
74
84
|
*/
|
|
75
|
-
export declare function conversationDisplayPart(part:
|
|
76
|
-
type: "text";
|
|
77
|
-
}>): DataUIPart<ConversationUIData>;
|
|
85
|
+
export declare function conversationDisplayPart(part: StoredSourcePart): DataUIPart<ConversationUIData>;
|
|
78
86
|
/**
|
|
79
87
|
* Read the durable representation back as chat messages.
|
|
80
88
|
*
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
* ({@link conversationUIToChatMessages}) is a near-identity rather than a
|
|
15
15
|
* reconstruction.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { errorMessageOf } from "../lib/thrown.js";
|
|
18
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
19
|
+
import { isDataUIPart, validateUIMessages } from "ai";
|
|
18
20
|
import { z } from "zod";
|
|
21
|
+
import { parseUnknownRecord } from "../lib/unknown-containers.js";
|
|
19
22
|
import { AskPartSchema, ChildSessionStartedPartSchema, CompactionPartSchema, FileReferencePartSchema, PlanApprovalPartSchema, PlanPartSchema, PresentationPartSchema, ReportRenderedPartSchema, RunCardPartSchema, SubAgentActivityEntrySchema, SubAgentActivityPartSchema, } from "../contracts/schemas/chat-parts.js";
|
|
20
23
|
import { ToolCallOutcomeSchema } from "../contracts/schemas/chat-events.js";
|
|
21
24
|
export const SUPPORTED_DISPLAY_SCHEMA_VERSION = 1;
|
|
@@ -82,12 +85,9 @@ export function envelopeDisplayMessages(messages) {
|
|
|
82
85
|
kind: "ai-sdk-ui-messages",
|
|
83
86
|
aiSdkMajor: 7,
|
|
84
87
|
schemaVersion: SUPPORTED_DISPLAY_SCHEMA_VERSION,
|
|
85
|
-
messages: structuredClone(messages),
|
|
88
|
+
messages: structuredClone([...messages]),
|
|
86
89
|
};
|
|
87
90
|
}
|
|
88
|
-
function isRecord(value) {
|
|
89
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
90
|
-
}
|
|
91
91
|
/**
|
|
92
92
|
* Strip every `data-*` part the current vocabulary cannot render.
|
|
93
93
|
*
|
|
@@ -109,36 +109,47 @@ function dropUnrenderableDataParts(messages, identity, logger) {
|
|
|
109
109
|
const unknownKey = [];
|
|
110
110
|
const schemaMismatch = [];
|
|
111
111
|
const filtered = messages.map((message) => {
|
|
112
|
-
|
|
112
|
+
const record = parseUnknownRecord(message);
|
|
113
|
+
if (record === undefined || !Array.isArray(record.parts))
|
|
113
114
|
return message;
|
|
114
|
-
const parts =
|
|
115
|
-
|
|
115
|
+
const parts = record.parts.filter((part) => {
|
|
116
|
+
const partRecord = parseUnknownRecord(part);
|
|
117
|
+
if (partRecord === undefined || typeof partRecord.type !== "string" || !partRecord.type.startsWith("data-"))
|
|
116
118
|
return true;
|
|
117
|
-
const key =
|
|
119
|
+
const key = partRecord.type.slice("data-".length);
|
|
118
120
|
// `Object.hasOwn` before the index: a part typed `data-constructor`
|
|
119
121
|
// would otherwise resolve up the prototype chain to something that is
|
|
120
122
|
// not a schema at all, and throw where it should have been dropped.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
+
// `Object.entries` lists own keys only, so the lookup refuses a
|
|
124
|
+
// prototype name the same way.
|
|
125
|
+
const schema = dataSchemaOf(key);
|
|
126
|
+
if (schema === undefined) {
|
|
127
|
+
unknownKey.push(partRecord.type);
|
|
123
128
|
return false;
|
|
124
129
|
}
|
|
125
|
-
if (!
|
|
126
|
-
schemaMismatch.push(
|
|
130
|
+
if (!schema.safeParse(partRecord.data).success) {
|
|
131
|
+
schemaMismatch.push(partRecord.type);
|
|
127
132
|
return false;
|
|
128
133
|
}
|
|
129
134
|
return true;
|
|
130
135
|
});
|
|
131
|
-
return parts.length ===
|
|
136
|
+
return parts.length === record.parts.length ? message : { ...record, parts };
|
|
132
137
|
});
|
|
133
138
|
if (unknownKey.length > 0 || schemaMismatch.length > 0) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
const fields = { identity };
|
|
140
|
+
if (unknownKey.length > 0)
|
|
141
|
+
fields.unknownKey = [...new Set(unknownKey)];
|
|
142
|
+
if (schemaMismatch.length > 0)
|
|
143
|
+
fields.schemaMismatch = [...new Set(schemaMismatch)];
|
|
144
|
+
logger?.warn("dropped unrenderable stored display parts", fields);
|
|
139
145
|
}
|
|
140
146
|
return filtered;
|
|
141
147
|
}
|
|
148
|
+
/** The schema behind one stored data-part key, or `undefined` when the key was retired or never stood. */
|
|
149
|
+
function dataSchemaOf(key) {
|
|
150
|
+
const entry = Object.entries(dataSchemas).find(([name]) => name === key);
|
|
151
|
+
return entry?.[1];
|
|
152
|
+
}
|
|
142
153
|
export async function parseStoredDisplayEnvelope(value, identity, logger) {
|
|
143
154
|
const header = DisplayEnvelopeHeaderSchema.safeParse(value);
|
|
144
155
|
if (!header.success) {
|
|
@@ -153,13 +164,27 @@ export async function parseStoredDisplayEnvelope(value, identity, logger) {
|
|
|
153
164
|
return { ...header.data, messages };
|
|
154
165
|
}
|
|
155
166
|
catch (error) {
|
|
156
|
-
const message = error
|
|
167
|
+
const message = errorMessageOf(error) ?? textOf(error);
|
|
157
168
|
throw new Error(`Invalid stored conversation display envelope at ${identity}: ${message}`, { cause: error });
|
|
158
169
|
}
|
|
159
170
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
171
|
+
const STORED_SOURCE_TYPES = [
|
|
172
|
+
"tool-call",
|
|
173
|
+
"data-presentation",
|
|
174
|
+
"data-plan",
|
|
175
|
+
"data-run-card",
|
|
176
|
+
"data-plan-approval",
|
|
177
|
+
"data-file-reference",
|
|
178
|
+
"data-ask",
|
|
179
|
+
"data-child-session-started",
|
|
180
|
+
"data-report-rendered",
|
|
181
|
+
"data-compaction",
|
|
182
|
+
"data-subagent-activity",
|
|
183
|
+
];
|
|
184
|
+
const STORED_SOURCE_TYPE_SET = new Set(STORED_SOURCE_TYPES);
|
|
185
|
+
/** Whether `part` is an arm the stored vocabulary can hold; anything else cannot become a stored card. */
|
|
186
|
+
export function isStoredSourcePart(part) {
|
|
187
|
+
return STORED_SOURCE_TYPE_SET.has(part.type);
|
|
163
188
|
}
|
|
164
189
|
function closedEntry(entry) {
|
|
165
190
|
if (entry.outcome !== undefined)
|
|
@@ -185,13 +210,57 @@ function displayPartId(part) {
|
|
|
185
210
|
* closes the same way, and an `incomplete` entry has no end time.
|
|
186
211
|
*/
|
|
187
212
|
export function conversationDisplayPart(part) {
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
213
|
+
const id = displayPartId(part);
|
|
214
|
+
switch (part.type) {
|
|
215
|
+
case "tool-call": {
|
|
216
|
+
const { type: _type, ...payload } = part;
|
|
217
|
+
return { type: "data-tool-call", id, data: { ...payload, outcome: part.outcome ?? "incomplete" } };
|
|
218
|
+
}
|
|
219
|
+
case "data-presentation": {
|
|
220
|
+
const { type: _type, ...data } = part;
|
|
221
|
+
return { type: "data-presentation", id, data };
|
|
222
|
+
}
|
|
223
|
+
case "data-plan": {
|
|
224
|
+
const { type: _type, ...data } = part;
|
|
225
|
+
return { type: "data-plan", id, data };
|
|
226
|
+
}
|
|
227
|
+
case "data-run-card": {
|
|
228
|
+
const { type: _type, ...data } = part;
|
|
229
|
+
return { type: "data-run-card", id, data };
|
|
230
|
+
}
|
|
231
|
+
case "data-plan-approval": {
|
|
232
|
+
const { type: _type, ...data } = part;
|
|
233
|
+
return { type: "data-plan-approval", id, data };
|
|
234
|
+
}
|
|
235
|
+
case "data-file-reference": {
|
|
236
|
+
const { type: _type, ...data } = part;
|
|
237
|
+
return { type: "data-file-reference", id, data };
|
|
238
|
+
}
|
|
239
|
+
case "data-ask": {
|
|
240
|
+
const { type: _type, ...data } = part;
|
|
241
|
+
return { type: "data-ask", id, data };
|
|
242
|
+
}
|
|
243
|
+
case "data-child-session-started": {
|
|
244
|
+
const { type: _type, ...data } = part;
|
|
245
|
+
return { type: "data-child-session-started", id, data };
|
|
246
|
+
}
|
|
247
|
+
case "data-report-rendered": {
|
|
248
|
+
const { type: _type, ...data } = part;
|
|
249
|
+
return { type: "data-report-rendered", id, data };
|
|
250
|
+
}
|
|
251
|
+
case "data-compaction": {
|
|
252
|
+
const { type: _type, ...data } = part;
|
|
253
|
+
return { type: "data-compaction", id, data };
|
|
254
|
+
}
|
|
255
|
+
case "data-subagent-activity": {
|
|
256
|
+
const { type: _type, ...payload } = part;
|
|
257
|
+
return { type: "data-subagent-activity", id, data: { ...payload, entries: part.entries.map(closedEntry) } };
|
|
258
|
+
}
|
|
259
|
+
default: {
|
|
260
|
+
const unreachable = part;
|
|
261
|
+
return unreachable;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
195
264
|
}
|
|
196
265
|
/**
|
|
197
266
|
* Read the durable representation back as chat messages.
|
|
@@ -214,19 +283,55 @@ export function conversationUIToChatMessages(messages) {
|
|
|
214
283
|
parts.push({ type: "tool-call", ...part.data });
|
|
215
284
|
continue;
|
|
216
285
|
}
|
|
217
|
-
if (part
|
|
218
|
-
|
|
219
|
-
|
|
286
|
+
if (isDataUIPart(part)) {
|
|
287
|
+
switch (part.type) {
|
|
288
|
+
case "data-presentation":
|
|
289
|
+
parts.push({ type: "data-presentation", ...part.data });
|
|
290
|
+
break;
|
|
291
|
+
case "data-plan":
|
|
292
|
+
parts.push({ type: "data-plan", ...part.data });
|
|
293
|
+
break;
|
|
294
|
+
case "data-run-card":
|
|
295
|
+
parts.push({ type: "data-run-card", ...part.data });
|
|
296
|
+
break;
|
|
297
|
+
case "data-plan-approval":
|
|
298
|
+
parts.push({ type: "data-plan-approval", ...part.data });
|
|
299
|
+
break;
|
|
300
|
+
case "data-file-reference":
|
|
301
|
+
parts.push({ type: "data-file-reference", ...part.data });
|
|
302
|
+
break;
|
|
303
|
+
case "data-ask":
|
|
304
|
+
parts.push({ type: "data-ask", ...part.data });
|
|
305
|
+
break;
|
|
306
|
+
case "data-child-session-started":
|
|
307
|
+
parts.push({ type: "data-child-session-started", ...part.data });
|
|
308
|
+
break;
|
|
309
|
+
case "data-report-rendered":
|
|
310
|
+
parts.push({ type: "data-report-rendered", ...part.data });
|
|
311
|
+
break;
|
|
312
|
+
case "data-compaction":
|
|
313
|
+
parts.push({ type: "data-compaction", ...part.data });
|
|
314
|
+
break;
|
|
315
|
+
case "data-subagent-activity":
|
|
316
|
+
parts.push({ type: "data-subagent-activity", ...part.data });
|
|
317
|
+
break;
|
|
318
|
+
default: {
|
|
319
|
+
const unhandled = part;
|
|
320
|
+
throw new Error(`stored display part has no chat-part arm: ${String(unhandled)}`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
220
323
|
}
|
|
221
324
|
}
|
|
222
325
|
if (parts.length === 0)
|
|
223
326
|
continue;
|
|
224
|
-
|
|
327
|
+
const chat = {
|
|
225
328
|
id: message.id,
|
|
226
329
|
role: message.role,
|
|
227
330
|
parts,
|
|
228
|
-
|
|
229
|
-
|
|
331
|
+
};
|
|
332
|
+
if (message.metadata?.interrupted)
|
|
333
|
+
chat.interrupted = true;
|
|
334
|
+
out.push(chat);
|
|
230
335
|
}
|
|
231
336
|
return out;
|
|
232
337
|
}
|
|
@@ -35,15 +35,15 @@ export declare function isGenuineUserStart(message: ModelMessage): boolean;
|
|
|
35
35
|
* (`loadAll`) share it, each supplying its own start predicate.
|
|
36
36
|
*/
|
|
37
37
|
export declare function groupTurns<T>(rows: readonly T[], isStart: (row: T) => boolean): T[][];
|
|
38
|
-
export
|
|
38
|
+
export type ConversationViewOptions = {
|
|
39
39
|
/** Keep the first turn in front of the view: the seed of a report thread. */
|
|
40
40
|
readonly keepFirstTurn?: boolean;
|
|
41
|
-
}
|
|
42
|
-
export
|
|
41
|
+
};
|
|
42
|
+
export type ConversationView = {
|
|
43
43
|
readonly messages: ModelMessage[];
|
|
44
44
|
/** `sources[i]` is the index of the input message that gives `messages[i]`. */
|
|
45
45
|
readonly sources: number[];
|
|
46
|
-
}
|
|
46
|
+
};
|
|
47
47
|
export declare function conversationView(messages: readonly ModelMessage[], options: ConversationViewOptions): ConversationView;
|
|
48
48
|
/** The message with no reasoning part, or `undefined` for an assistant message with no part left. */
|
|
49
49
|
export declare function withoutReasoning(message: ModelMessage): ModelMessage | undefined;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* turns of the body without their reasoning. The loop and the reader call this one function, thus the
|
|
5
5
|
* next turn reads back the prefix that the last request sent.
|
|
6
6
|
*/
|
|
7
|
+
import { presentAt, presentLast } from "../lib/present.js";
|
|
7
8
|
import { compactionExchangeOf, compactionMarkerOf, isSyntheticUserMessage, requestInputTokensOf } from "./ai-sdk-message-storage.js";
|
|
8
9
|
/**
|
|
9
10
|
* A turn starts on a `user` message that a human actually sent. Two kinds of
|
|
@@ -43,7 +44,7 @@ export function groupTurns(rows, isStart) {
|
|
|
43
44
|
turns.push([row]);
|
|
44
45
|
}
|
|
45
46
|
else {
|
|
46
|
-
turns
|
|
47
|
+
presentLast(turns, "the open turn").push(row);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
return turns;
|
|
@@ -66,7 +67,7 @@ function viewParts(messages, options) {
|
|
|
66
67
|
let headEnd = 0;
|
|
67
68
|
if (options.keepFirstTurn === true) {
|
|
68
69
|
while (headEnd < messages.length) {
|
|
69
|
-
const message = messages
|
|
70
|
+
const message = presentAt(messages, headEnd, "the head message");
|
|
70
71
|
if (isCompactionMessage(message) || (headEnd > 0 && isGenuineUserStart(message)))
|
|
71
72
|
break;
|
|
72
73
|
headEnd++;
|
|
@@ -76,7 +77,7 @@ function viewParts(messages, options) {
|
|
|
76
77
|
let front;
|
|
77
78
|
let body = [];
|
|
78
79
|
for (let source = headEnd; source < messages.length; source++) {
|
|
79
|
-
const message = messages
|
|
80
|
+
const message = presentAt(messages, source, "the message at the source index");
|
|
80
81
|
if (compactionExchangeOf(message) !== undefined)
|
|
81
82
|
continue;
|
|
82
83
|
const marker = compactionMarkerOf(message);
|
|
@@ -115,7 +116,7 @@ export function withoutReasoning(message) {
|
|
|
115
116
|
*/
|
|
116
117
|
export function lastRequestInputTokens(messages) {
|
|
117
118
|
for (let at = messages.length - 1; at >= 0; at--) {
|
|
118
|
-
const message = messages
|
|
119
|
+
const message = presentAt(messages, at, "the message at the index");
|
|
119
120
|
if (compactionMarkerOf(message) !== undefined)
|
|
120
121
|
return undefined;
|
|
121
122
|
const tokens = requestInputTokensOf(message);
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* callers treat the budget as a soft target with a safety margin below the
|
|
9
9
|
* true context limit.
|
|
10
10
|
*/
|
|
11
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
11
12
|
import { getEncoding } from "js-tiktoken";
|
|
13
|
+
import { parseUnknownRecord } from "../lib/unknown-containers.js";
|
|
12
14
|
let encoder;
|
|
13
15
|
function enc() {
|
|
14
16
|
encoder ??= getEncoding("cl100k_base");
|
|
@@ -27,16 +29,16 @@ function enc() {
|
|
|
27
29
|
* Each other output arm is plain JSON, thus it is stringified whole.
|
|
28
30
|
*/
|
|
29
31
|
function toolResultText(output) {
|
|
30
|
-
|
|
32
|
+
const out = parseUnknownRecord(output);
|
|
33
|
+
if (out === undefined)
|
|
31
34
|
return JSON.stringify(output ?? {});
|
|
32
|
-
const out = output;
|
|
33
35
|
if (out.type !== "content" || !Array.isArray(out.value))
|
|
34
36
|
return JSON.stringify(out);
|
|
35
37
|
const texts = [];
|
|
36
38
|
for (const item of out.value) {
|
|
37
|
-
|
|
39
|
+
const nested = parseUnknownRecord(item);
|
|
40
|
+
if (nested === undefined)
|
|
38
41
|
continue;
|
|
39
|
-
const nested = item;
|
|
40
42
|
if (nested.type === "text" && typeof nested.text === "string")
|
|
41
43
|
texts.push(nested.text);
|
|
42
44
|
}
|
|
@@ -52,9 +54,9 @@ function toolResultText(output) {
|
|
|
52
54
|
function tokenizableText(block) {
|
|
53
55
|
if (typeof block === "string")
|
|
54
56
|
return block;
|
|
55
|
-
|
|
57
|
+
const part = parseUnknownRecord(block);
|
|
58
|
+
if (part === undefined)
|
|
56
59
|
return JSON.stringify(block);
|
|
57
|
-
const part = block;
|
|
58
60
|
switch (part.type) {
|
|
59
61
|
case "text":
|
|
60
62
|
return typeof part.text === "string" ? part.text : "";
|
|
@@ -66,9 +68,9 @@ function tokenizableText(block) {
|
|
|
66
68
|
case "image":
|
|
67
69
|
return "";
|
|
68
70
|
case "tool-call":
|
|
69
|
-
return `${
|
|
71
|
+
return `${textOf(part.toolName ?? "")} ${JSON.stringify(part.input ?? {})}`;
|
|
70
72
|
case "tool-result": {
|
|
71
|
-
return `${
|
|
73
|
+
return `${textOf(part.toolName ?? "")} ${toolResultText(part.output)}`;
|
|
72
74
|
}
|
|
73
75
|
default:
|
|
74
76
|
return JSON.stringify(part);
|
|
@@ -1,14 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Derive a deterministic thread title from the user's first message.
|
|
3
|
-
* Pure function — no I/O, no global state.
|
|
4
|
-
*
|
|
5
|
-
* Rules:
|
|
6
|
-
* 1. Collapse runs of whitespace to a single space.
|
|
7
|
-
* 2. Trim.
|
|
8
|
-
* 3. Empty / whitespace-only input → `"Untitled"`.
|
|
9
|
-
* 4. If length ≤ `max`, return unchanged.
|
|
10
|
-
* 5. Else slice to `max`, walk back to the last space (word boundary),
|
|
11
|
-
* append the real ellipsis `…` (U+2026). If no space exists inside
|
|
12
|
-
* the window, hard-slice at `max` and append `…`.
|
|
13
|
-
*/
|
|
14
1
|
export declare function deriveThreadTitle(text: string, max?: number): string;
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* append the real ellipsis `…` (U+2026). If no space exists inside
|
|
12
12
|
* the window, hard-slice at `max` and append `…`.
|
|
13
13
|
*/
|
|
14
|
+
import { collapseWhitespace } from "../lib/text.js";
|
|
14
15
|
export function deriveThreadTitle(text, max = 40) {
|
|
15
|
-
const normalized = text
|
|
16
|
+
const normalized = collapseWhitespace(text);
|
|
16
17
|
if (normalized.length === 0)
|
|
17
18
|
return "Untitled";
|
|
18
19
|
if (normalized.length <= max)
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import type { QueryResultRow } from "pg";
|
|
2
2
|
/** The query method of a `pg` client, which the migration transaction also supplies. */
|
|
3
|
-
export
|
|
4
|
-
query
|
|
5
|
-
rows:
|
|
3
|
+
export type BackfillClient<Row extends QueryResultRow = QueryResultRow> = {
|
|
4
|
+
query(text: string, values?: unknown[]): Promise<{
|
|
5
|
+
rows: Row[];
|
|
6
6
|
}>;
|
|
7
|
-
}
|
|
8
|
-
|
|
7
|
+
};
|
|
8
|
+
type LegacyRow = {
|
|
9
|
+
readonly thread_id: string;
|
|
10
|
+
readonly seq: string;
|
|
11
|
+
readonly role: string;
|
|
12
|
+
readonly content_jsonb: string | Array<Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
export declare function backfillAiSdkMessageEnvelopes(client: BackfillClient<LegacyRow>): Promise<void>;
|
|
15
|
+
export {};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { errorMessageOf } from "../lib/thrown.js";
|
|
2
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
1
3
|
import { envelopeMessage, legacyAnthropicToModelMessage } from "./ai-sdk-message-storage.js";
|
|
2
4
|
export async function backfillAiSdkMessageEnvelopes(client) {
|
|
3
5
|
// Legacy Anthropic columns (`role`, `content_jsonb`) are temporary and
|
|
@@ -22,7 +24,7 @@ export async function backfillAiSdkMessageEnvelopes(client) {
|
|
|
22
24
|
]);
|
|
23
25
|
}
|
|
24
26
|
catch (err) {
|
|
25
|
-
const message = err
|
|
27
|
+
const message = errorMessageOf(err) ?? textOf(err);
|
|
26
28
|
throw new Error(`Failed to backfill AI SDK message envelope for ${identity}: ${message}`, { cause: err });
|
|
27
29
|
}
|
|
28
30
|
}
|
|
@@ -31,8 +33,8 @@ export async function backfillAiSdkMessageEnvelopes(client) {
|
|
|
31
33
|
WHERE message_envelope IS NULL
|
|
32
34
|
ORDER BY thread_id, seq
|
|
33
35
|
LIMIT 1`);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
const [row] = remaining.rows;
|
|
37
|
+
if (row !== undefined) {
|
|
36
38
|
throw new Error(`AI SDK message backfill left an unmigrated row at ${row.thread_id}/${row.seq}`);
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import type { ModelMessage } from "ai";
|
|
24
24
|
import { ResultAsync } from "neverthrow";
|
|
25
|
-
import type { Pool } from "pg";
|
|
26
25
|
import type { TokenUsageRollup } from "../contracts/usage.js";
|
|
27
|
-
import { type DbError } from "../lib/db-result.js";
|
|
26
|
+
import { type Connectable, type DbError, type TransactionQuerier } from "../lib/db-result.js";
|
|
28
27
|
import type { Logger } from "../lib/logger.js";
|
|
28
|
+
import type { Querier } from "../state/db.js";
|
|
29
29
|
import { type StoredMessageEnvelope } from "./ai-sdk-message-storage.js";
|
|
30
30
|
import type { MessagePart } from "../contracts/message.js";
|
|
31
31
|
import { type ConversationUIMessage, type StoredDisplayEnvelope } from "./conversation-display-storage.js";
|
|
32
32
|
/** One stored message, as returned by the display reads (`loadAll` and `loadPage`). */
|
|
33
|
-
export
|
|
33
|
+
export type StoredMessage = {
|
|
34
34
|
readonly seq: number;
|
|
35
35
|
readonly envelope: StoredMessageEnvelope;
|
|
36
36
|
readonly message: ModelMessage;
|
|
@@ -69,7 +69,7 @@ export interface StoredMessage {
|
|
|
69
69
|
* behind it.
|
|
70
70
|
*/
|
|
71
71
|
readonly createdAt?: Date;
|
|
72
|
-
}
|
|
72
|
+
};
|
|
73
73
|
/**
|
|
74
74
|
* One atomic group of rows: the exact provider-facing history, and the display
|
|
75
75
|
* projection of what the user was shown.
|
|
@@ -79,7 +79,7 @@ export interface StoredMessage {
|
|
|
79
79
|
* what the transcript replays. Neither is derived from the other, and a failed
|
|
80
80
|
* write commits neither.
|
|
81
81
|
*/
|
|
82
|
-
export
|
|
82
|
+
export type ConversationTurn = {
|
|
83
83
|
/** Exact provider-facing history; token accounting and model reads use only this projection. */
|
|
84
84
|
readonly modelMessages: readonly ModelMessage[];
|
|
85
85
|
/** Complete ordered AI SDK UI messages recorded from the live display event stream. */
|
|
@@ -94,7 +94,12 @@ export interface ConversationTurn {
|
|
|
94
94
|
* envelope, because a `text` parameter carrying 0x00 fails the statement.
|
|
95
95
|
*/
|
|
96
96
|
readonly author?: string;
|
|
97
|
-
|
|
97
|
+
/**
|
|
98
|
+
* The key of the group in its turn, stored on its first row. A turn workflow gives each group a key, thus a
|
|
99
|
+
* write that runs again after its commit finds the key and stores nothing.
|
|
100
|
+
*/
|
|
101
|
+
readonly key?: string;
|
|
102
|
+
};
|
|
98
103
|
/**
|
|
99
104
|
* The append a host uses to record out-of-band work in a thread — an analysis
|
|
100
105
|
* run's outcome, typically.
|
|
@@ -116,7 +121,7 @@ export declare function conversationRecordTurn(text: string, displayParts?: read
|
|
|
116
121
|
/** The status of a chat turn: `open` while it runs, then its outcome. */
|
|
117
122
|
export type TurnStatus = "open" | "done" | "aborted" | "failed";
|
|
118
123
|
/** The close of a chat turn. It sets the outcome on the turn record, one time. */
|
|
119
|
-
export
|
|
124
|
+
export type TurnClose = {
|
|
120
125
|
readonly status: Exclude<TurnStatus, "open">;
|
|
121
126
|
/** The reason of a failure. */
|
|
122
127
|
readonly reason?: string;
|
|
@@ -125,7 +130,7 @@ export interface TurnClose {
|
|
|
125
130
|
readonly turnDurationMs?: number;
|
|
126
131
|
/** The note of a failure or of an abort, stored after the rounds. */
|
|
127
132
|
readonly note?: ConversationTurn;
|
|
128
|
-
}
|
|
133
|
+
};
|
|
129
134
|
/**
|
|
130
135
|
* One write of a chat turn. The opening adds the turn record, and a later write names the turn by
|
|
131
136
|
* `startSeq`. The `never` members make a write with both keys fail to compile.
|
|
@@ -141,17 +146,17 @@ export type TurnWrite = {
|
|
|
141
146
|
readonly rounds: readonly ConversationTurn[];
|
|
142
147
|
readonly close?: TurnClose;
|
|
143
148
|
};
|
|
144
|
-
export
|
|
149
|
+
export type TurnWriteResult = {
|
|
145
150
|
/** The `seq` of the user row that opens the turn, which keys its turn record. */
|
|
146
151
|
readonly startSeq: number;
|
|
147
|
-
}
|
|
152
|
+
};
|
|
148
153
|
/** The turn record of a chat turn, as the display read gives it. */
|
|
149
|
-
export
|
|
154
|
+
export type StoredTurnRecord = {
|
|
150
155
|
readonly status: TurnStatus;
|
|
151
156
|
readonly reason?: string;
|
|
152
157
|
readonly usage?: TokenUsageRollup;
|
|
153
158
|
readonly durationMs?: number;
|
|
154
|
-
}
|
|
159
|
+
};
|
|
155
160
|
/**
|
|
156
161
|
* The result of `retractLastTurn`. `retracted` carries `messages` — the number
|
|
157
162
|
* of rows removed — so a caller can assert exactly what came off the tail. The
|
|
@@ -168,29 +173,34 @@ export type RetractOutcome = {
|
|
|
168
173
|
kind: "no-user-turn";
|
|
169
174
|
};
|
|
170
175
|
/** The read options of {@link ThreadHistory.loadRecent}. */
|
|
171
|
-
export
|
|
176
|
+
export type LoadRecentOptions = {
|
|
172
177
|
/** Keep the first turn of the thread, the seed of a report thread, in front of the latest summary. */
|
|
173
178
|
readonly keepFirstTurn?: boolean;
|
|
174
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Read the rows up to this `seq` only. A row never changes after its write, thus a turn workflow that reads up
|
|
181
|
+
* to the last row before its turn reads the same view on a replay.
|
|
182
|
+
*/
|
|
183
|
+
readonly throughSeq?: number;
|
|
184
|
+
};
|
|
175
185
|
/** The options of {@link ThreadHistory.loadPage}. */
|
|
176
|
-
export
|
|
186
|
+
export type LoadPageOptions = {
|
|
177
187
|
/** The cursor that the previous page gave. Absent for the newest page. */
|
|
178
188
|
readonly before?: number;
|
|
179
189
|
/** The maximum count of turns in the page. */
|
|
180
190
|
readonly limit: number;
|
|
181
|
-
}
|
|
191
|
+
};
|
|
182
192
|
/** One page of the display read, as {@link ThreadHistory.loadPage} gives it. */
|
|
183
|
-
export
|
|
193
|
+
export type TurnPage = {
|
|
184
194
|
/** The whole turns of the page, oldest-first. */
|
|
185
195
|
readonly turns: StoredMessage[][];
|
|
186
196
|
/** The cursor of the next older page, or `null` when the page holds the oldest row of the thread. */
|
|
187
197
|
readonly before: number | null;
|
|
188
|
-
}
|
|
198
|
+
};
|
|
189
199
|
/**
|
|
190
200
|
* The conversation message store. Two methods, by design — no generic row
|
|
191
201
|
* insert (see the harness-thread-store spec). `threadId` is the conversation scope — one UI thread.
|
|
192
202
|
*/
|
|
193
|
-
export
|
|
203
|
+
export type ThreadHistory = {
|
|
194
204
|
/**
|
|
195
205
|
* Append one group, for example a record of a host — every message written in a
|
|
196
206
|
* single transaction with a `seq` monotonically increasing per thread.
|
|
@@ -286,7 +296,7 @@ export interface ThreadHistory {
|
|
|
286
296
|
* one adds to the count.
|
|
287
297
|
*/
|
|
288
298
|
countUserTurnsAfter(threadId: string, seq: number): ResultAsync<number, DbError>;
|
|
289
|
-
}
|
|
299
|
+
};
|
|
290
300
|
/**
|
|
291
301
|
* Drop the memoized instruments so the next `loadRecent` rebinds to a
|
|
292
302
|
* freshly-registered `MeterProvider`. Test-only.
|
|
@@ -302,4 +312,9 @@ export declare function __resetThreadHistoryMetricsForTest(): void;
|
|
|
302
312
|
* same messages either way — the drop reports a deploy, not a failed read — and
|
|
303
313
|
* requiring it would break every call site over a diagnostic.
|
|
304
314
|
*/
|
|
305
|
-
|
|
315
|
+
/** What this module reads of the pool: the direct `query` plus the transactional `connect`. */
|
|
316
|
+
type ThreadHistoryPool = Querier & Connectable;
|
|
317
|
+
/** `appendTurn` inside the transaction of the caller, thus another write of the caller commits with the turn or not at all. */
|
|
318
|
+
export declare function appendTurnIn(client: TransactionQuerier, threadId: string, turn: ConversationTurn): ResultAsync<void, DbError>;
|
|
319
|
+
export declare function createThreadHistory(pool: ThreadHistoryPool, logger?: Logger): ThreadHistory;
|
|
320
|
+
export {};
|