@inflexa-ai/harness 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +19 -3
- package/dist/agents/conversation-agent.js +49 -30
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +35 -16
- package/dist/agents/sandbox/shared.js +63 -24
- package/dist/agents/sandbox/translational-safety-agent.js +26 -0
- package/dist/agents/sandbox/types.d.ts +26 -3
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +16 -2
- package/dist/agents/sandbox-catalog.js +22 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/approve-plan.d.ts +5 -2
- package/dist/app/approve-plan.js +1 -1
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +125 -99
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +10 -8
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +46 -22
- package/dist/contracts/chat-events.js +1 -1
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +67 -40
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +3 -3
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +45 -6
- package/dist/contracts/schemas/chat-events.js +16 -0
- package/dist/contracts/schemas/chat-parts.d.ts +214 -102
- package/dist/contracts/schemas/chat-parts.js +50 -7
- package/dist/contracts/schemas/index.d.ts +1 -1
- package/dist/contracts/schemas/index.js +1 -1
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +7 -6
- package/dist/execution/dbos-workflow-purger.js +29 -21
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +39 -17
- package/dist/execution/run-canceler.js +137 -28
- package/dist/execution/run-end-record.d.ts +29 -0
- package/dist/execution/run-end-record.js +27 -0
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +25 -24
- package/dist/index.js +36 -37
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +14 -9
- package/dist/loop/compaction.js +17 -0
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +34 -37
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -6
- package/dist/memory/conversation-display-recorder.js +64 -20
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +66 -24
- package/dist/memory/thread-history.js +212 -79
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +63 -9
- package/dist/prompts/briefing.js +130 -3
- package/dist/prompts/planner.js +13 -2
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +24 -19
- package/dist/provenance/seam.js +7 -5
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +303 -458
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +59 -92
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +166 -10
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +209 -231
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.d.ts +26 -4
- package/dist/sandbox/image-packages.js +29 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +351 -306
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +79 -25
- package/dist/schemas/plan-schemas.js +1 -1
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +127 -14
- package/dist/schemas/workflow-state.js +56 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +47 -18
- package/dist/state/artifacts.js +48 -7
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +5 -5
- package/dist/state/index.js +3 -3
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +70 -25
- package/dist/state/runs.js +127 -64
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +29 -8
- package/dist/state/step-executions.js +28 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +11 -9
- package/dist/tools/ad-hoc-router.js +80 -51
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +40 -0
- package/dist/tools/capability-data.js +74 -0
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +54 -17
- package/dist/tools/execute-analysis.js +193 -62
- package/dist/tools/knowledge/check.d.ts +182 -0
- package/dist/tools/knowledge/check.js +94 -0
- package/dist/tools/knowledge/client.d.ts +351 -0
- package/dist/tools/knowledge/client.js +319 -0
- package/dist/tools/knowledge/environment.d.ts +78 -0
- package/dist/tools/knowledge/environment.js +116 -0
- package/dist/tools/knowledge/index.d.ts +49 -0
- package/dist/tools/knowledge/index.js +70 -0
- package/dist/tools/knowledge/local-slots.d.ts +62 -0
- package/dist/tools/knowledge/local-slots.js +184 -0
- package/dist/tools/knowledge/pin.d.ts +14 -0
- package/dist/tools/knowledge/pin.js +17 -0
- package/dist/tools/knowledge/recommend.d.ts +67 -0
- package/dist/tools/knowledge/recommend.js +106 -0
- package/dist/tools/knowledge/situation.d.ts +143 -0
- package/dist/tools/knowledge/situation.js +157 -0
- package/dist/tools/knowledge/skeleton.d.ts +69 -0
- package/dist/tools/knowledge/skeleton.js +201 -0
- package/dist/tools/knowledge/template.d.ts +139 -0
- package/dist/tools/knowledge/template.js +273 -0
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +39 -16
- package/dist/tools/research/generate-plan.js +565 -338
- package/dist/tools/research/guarded-address.d.ts +20 -0
- package/dist/tools/research/guarded-address.js +149 -0
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +40 -0
- package/dist/tools/research/searxng-engine.js +122 -0
- package/dist/tools/research/web-fetch.d.ts +127 -0
- package/dist/tools/research/web-fetch.js +618 -0
- package/dist/tools/research/web-search.d.ts +84 -0
- package/dist/tools/research/web-search.js +117 -0
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
- package/dist/tools/sandbox/list-available-packages.js +43 -29
- package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
- package/dist/tools/sandbox/list-available-refs.js +119 -37
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +22 -68
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +14 -0
- package/dist/tools/terminal-text.js +51 -0
- package/dist/tools/workspace/decision-record.d.ts +81 -0
- package/dist/tools/workspace/decision-record.js +127 -0
- package/dist/tools/workspace/edit-file.d.ts +59 -18
- package/dist/tools/workspace/edit-file.js +98 -15
- package/dist/tools/workspace/execute-command.d.ts +31 -12
- package/dist/tools/workspace/execute-command.js +37 -8
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/index.d.ts +1 -0
- package/dist/tools/workspace/index.js +1 -0
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +100 -76
- package/dist/workflows/execute-analysis.js +380 -247
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +50 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +25 -22
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -236
- package/dist/loop/run-agent.js +0 -1110
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -90
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The chat turn as a DBOS workflow.
|
|
3
|
+
*
|
|
4
|
+
* The host opens a turn in its request: the harness checks the thread, resolves
|
|
5
|
+
* the agent, claims the thread for the turn, and starts the workflow. The
|
|
6
|
+
* workflow input holds ids and settings, the sanitized user text, and no
|
|
7
|
+
* credential. The live credential stays in the memory of the process, and the
|
|
8
|
+
* function of the host gives it to a turn that a recovery runs in a new process.
|
|
9
|
+
*
|
|
10
|
+
* The body prepares the opening in one step, reads the view of the thread up to
|
|
11
|
+
* the last row before the turn, and runs the turn of `chat-turn.ts` with the
|
|
12
|
+
* transport of a workflow: each model call and each tool call is a step, each
|
|
13
|
+
* write of the turn is a step with a key, and the frames go to the durable
|
|
14
|
+
* stream of the workflow. A host reads them with `read`.
|
|
15
|
+
*/
|
|
16
|
+
import { randomUUID } from "node:crypto";
|
|
17
|
+
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
18
|
+
import { closeDurableStream } from "@dbos-inc/vercel-ai";
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
import { createNoopLogger } from "../lib/console-logger.js";
|
|
21
|
+
import { unwrapOrThrow } from "../lib/result.js";
|
|
22
|
+
import { createConversationDisplayRecorder } from "../memory/conversation-display-recorder.js";
|
|
23
|
+
import { createThreadHistory } from "../memory/thread-history.js";
|
|
24
|
+
import { createWorkingMemory } from "../memory/working-memory.js";
|
|
25
|
+
import { claimThreadForTurn, closeOpenTurnRecords, releaseThreadOfTurn, turnOfAsk } from "../state/active-turns.js";
|
|
26
|
+
import { clearPausesOfWork } from "../state/paused-work.js";
|
|
27
|
+
import { workPause } from "../workflows/pause.js";
|
|
28
|
+
import { askPartOf } from "../tools/approval/gateway.js";
|
|
29
|
+
import { stepUuid } from "../tools/workspace/edit-file.js";
|
|
30
|
+
import { openThread, readTurnContext, runOpenTurn, userTextOf, } from "./chat-turn.js";
|
|
31
|
+
import { CHAT_STREAM_KEY, createTurnStreamWriter, readChatTurn } from "../loop/chat-stream.js";
|
|
32
|
+
import { credentialGuard, turnCredentials, withRootTurn } from "../loop/turn-credentials.js";
|
|
33
|
+
import { assembleMessages, loadHistoryView, sanitizedUserMessage } from "./message-assembly.js";
|
|
34
|
+
/** The name of the turn workflow. */
|
|
35
|
+
export const CHAT_TURN_WORKFLOW = "chat-turn";
|
|
36
|
+
/** A turn waits half an hour for the answer of an ask, and then the ask expires. */
|
|
37
|
+
export const DEFAULT_ASK_WAIT_SECONDS = 30 * 60;
|
|
38
|
+
const AskReplySchema = z.discriminatedUnion("kind", [
|
|
39
|
+
z.object({ kind: z.literal("once") }),
|
|
40
|
+
z.object({ kind: z.literal("always") }),
|
|
41
|
+
z.object({ kind: z.literal("reject"), feedback: z.string().optional() }),
|
|
42
|
+
]);
|
|
43
|
+
/** The topic of the message that carries the answer of one ask to its turn. */
|
|
44
|
+
function askTopic(askId) {
|
|
45
|
+
return `ask:${askId}`;
|
|
46
|
+
}
|
|
47
|
+
const ACTIVE_STATUSES = new Set(["PENDING", "ENQUEUED"]);
|
|
48
|
+
/** The part of the stored input of a turn workflow that the stop of a turn reads. */
|
|
49
|
+
const StoredTurnInputSchema = z.tuple([z.looseObject({ threadId: z.string() })]);
|
|
50
|
+
/**
|
|
51
|
+
* Register the turn workflow and give the chat turns of the runtime. Call it before DBOS launches, because DBOS
|
|
52
|
+
* finds the workflow of a recovery by its registered name.
|
|
53
|
+
*/
|
|
54
|
+
export function registerChatTurns(deps) {
|
|
55
|
+
const logger = (deps.logger ?? createNoopLogger()).named("harness.chat");
|
|
56
|
+
// The live credential of each turn that this process opened, and the stop of each turn that this process runs.
|
|
57
|
+
const controls = new Map();
|
|
58
|
+
turnCredentials.setHostCredential(deps.credentialFor);
|
|
59
|
+
const workflow = DBOS.registerWorkflow(async (input) => {
|
|
60
|
+
const controller = new AbortController();
|
|
61
|
+
controls.set(input.turnId, controller);
|
|
62
|
+
try {
|
|
63
|
+
return await withRootTurn(input.turnId, () => runTurnWorkflow(deps, input, controller.signal));
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
controls.delete(input.turnId);
|
|
67
|
+
turnCredentials.drop(input.turnId);
|
|
68
|
+
}
|
|
69
|
+
}, { name: CHAT_TURN_WORKFLOW });
|
|
70
|
+
const stillRuns = async (turnId) => {
|
|
71
|
+
const status = await DBOS.getWorkflowStatus(turnId);
|
|
72
|
+
return status !== null && ACTIVE_STATUSES.has(status.status);
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
async open(session, request) {
|
|
76
|
+
const startedAtMs = request.startedAtMs ?? Date.now();
|
|
77
|
+
let threadType;
|
|
78
|
+
try {
|
|
79
|
+
const opened = await openThread(deps, request);
|
|
80
|
+
if (opened.kind === "not_found")
|
|
81
|
+
return opened;
|
|
82
|
+
threadType = opened.threadType;
|
|
83
|
+
}
|
|
84
|
+
catch (cause) {
|
|
85
|
+
return { kind: "prepare_failed", cause };
|
|
86
|
+
}
|
|
87
|
+
const agent = deps.agents.forThread(threadType);
|
|
88
|
+
if (agent.isErr())
|
|
89
|
+
return { kind: "agent_unresolved", threadType };
|
|
90
|
+
const turnId = randomUUID();
|
|
91
|
+
const claim = await claimThreadForTurn(deps.pool, request.threadId, turnId, stillRuns);
|
|
92
|
+
if (claim.isErr())
|
|
93
|
+
return { kind: "prepare_failed", cause: claim.error };
|
|
94
|
+
if (claim.value.kind === "no_thread")
|
|
95
|
+
return { kind: "not_found" };
|
|
96
|
+
if (claim.value.kind === "held")
|
|
97
|
+
return { kind: "turn_in_progress" };
|
|
98
|
+
turnCredentials.put(turnId, session.auth);
|
|
99
|
+
const input = {
|
|
100
|
+
turnId,
|
|
101
|
+
analysisId: request.analysisId,
|
|
102
|
+
threadId: request.threadId,
|
|
103
|
+
threadType,
|
|
104
|
+
userText: userTextOf(sanitizedUserMessage(request.userInput)),
|
|
105
|
+
userId: session.identity.user,
|
|
106
|
+
author: request.author,
|
|
107
|
+
startedAtMs,
|
|
108
|
+
promptCache: request.promptCache,
|
|
109
|
+
};
|
|
110
|
+
try {
|
|
111
|
+
await DBOS.startWorkflow(workflow, { workflowID: turnId })(input);
|
|
112
|
+
}
|
|
113
|
+
catch (cause) {
|
|
114
|
+
turnCredentials.drop(turnId);
|
|
115
|
+
await releaseThreadOfTurn(deps.pool, request.threadId, turnId).unwrapOr(undefined);
|
|
116
|
+
return { kind: "prepare_failed", cause };
|
|
117
|
+
}
|
|
118
|
+
return { kind: "started", turnId, agent: agent.value };
|
|
119
|
+
},
|
|
120
|
+
read(turnId) {
|
|
121
|
+
return readChatTurn(turnId, {});
|
|
122
|
+
},
|
|
123
|
+
async stop(turnId) {
|
|
124
|
+
const controller = controls.get(turnId);
|
|
125
|
+
if (controller !== undefined) {
|
|
126
|
+
controller.abort(new DOMException("The user stopped the turn.", "AbortError"));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// No process of this host runs the turn: the cancel ends the workflow and its sub-agents, and the harness
|
|
130
|
+
// closes its records.
|
|
131
|
+
const status = await DBOS.getWorkflowStatus(turnId);
|
|
132
|
+
if (status === null || !ACTIVE_STATUSES.has(status.status))
|
|
133
|
+
return;
|
|
134
|
+
await DBOS.cancelWorkflow(turnId, { cancelChildren: true });
|
|
135
|
+
const cleared = await clearPausesOfWork(deps.pool, turnId);
|
|
136
|
+
if (cleared.isErr())
|
|
137
|
+
logger.warn("the pauses of a canceled turn did not clear", { turnId, op: cleared.error.op });
|
|
138
|
+
const input = StoredTurnInputSchema.safeParse(status.input);
|
|
139
|
+
if (!input.success)
|
|
140
|
+
return;
|
|
141
|
+
const [{ threadId }] = input.data;
|
|
142
|
+
const closed = await closeOpenTurnRecords(deps.pool, threadId);
|
|
143
|
+
if (closed.isErr())
|
|
144
|
+
logger.warn("the record of a canceled turn did not close", { turnId, op: closed.error.op });
|
|
145
|
+
await releaseThreadOfTurn(deps.pool, threadId, turnId).unwrapOr(undefined);
|
|
146
|
+
},
|
|
147
|
+
async answer(askId, reply) {
|
|
148
|
+
if (deps.askGateway === undefined)
|
|
149
|
+
return "not_found";
|
|
150
|
+
const outcome = await deps.askGateway.answer(askId, reply);
|
|
151
|
+
if (outcome !== "applied")
|
|
152
|
+
return outcome;
|
|
153
|
+
const turnId = await turnOfAsk(deps.pool, askId).unwrapOr(undefined);
|
|
154
|
+
if (turnId !== undefined)
|
|
155
|
+
await DBOS.send(turnId, reply, askTopic(askId));
|
|
156
|
+
return outcome;
|
|
157
|
+
},
|
|
158
|
+
async outcome(turnId) {
|
|
159
|
+
try {
|
|
160
|
+
return await DBOS.retrieveWorkflow(turnId).getResult();
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
// The stop of a turn in a different process cancels its workflow, and the stop closes its records.
|
|
164
|
+
logger.debug("a chat turn ended with no outcome", { turnId, ...logger.errorFields(err) });
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The approval of a turn workflow. The raise of the ask is a step, and the turn waits for the answer with a durable
|
|
172
|
+
* wait of its body, thus a recovery waits again for the same ask. A stop of the turn ends the wait.
|
|
173
|
+
*/
|
|
174
|
+
function workflowApproval(gateway, input, emitPart, signal, waitSeconds) {
|
|
175
|
+
return async (request, call) => {
|
|
176
|
+
const id = stepUuid(`${input.turnId}:ask:${call.toolCallId}`);
|
|
177
|
+
const scope = { analysisId: input.analysisId, userId: input.userId, threadId: input.threadId };
|
|
178
|
+
const raised = await DBOS.runStep(() => gateway.raise(id, request, scope), { name: "chat-turn.ask" });
|
|
179
|
+
if (raised === "granted") {
|
|
180
|
+
await emitPart(askPartOf(id, request, "resolved", "always"));
|
|
181
|
+
return { kind: "approved" };
|
|
182
|
+
}
|
|
183
|
+
await emitPart(askPartOf(id, request, "pending"));
|
|
184
|
+
const stopped = new Promise((resolve) => {
|
|
185
|
+
if (signal.aborted)
|
|
186
|
+
resolve("stopped");
|
|
187
|
+
signal.addEventListener("abort", () => resolve("stopped"), { once: true });
|
|
188
|
+
});
|
|
189
|
+
const answered = await Promise.race([DBOS.recv(askTopic(id), waitSeconds), stopped]);
|
|
190
|
+
if (answered === "stopped") {
|
|
191
|
+
await DBOS.runStep(() => gateway.abort(id), { name: "chat-turn.ask-abort" });
|
|
192
|
+
await emitPart(askPartOf(id, request, "aborted"));
|
|
193
|
+
throw signal.reason ?? new DOMException("The user stopped the turn.", "AbortError");
|
|
194
|
+
}
|
|
195
|
+
const reply = AskReplySchema.safeParse(answered);
|
|
196
|
+
if (!reply.success) {
|
|
197
|
+
await DBOS.runStep(() => gateway.expire(id), { name: "chat-turn.ask-expire" });
|
|
198
|
+
await emitPart(askPartOf(id, request, "expired"));
|
|
199
|
+
return { kind: "denied", feedback: "The approval expired unanswered." };
|
|
200
|
+
}
|
|
201
|
+
if (reply.data.kind === "reject") {
|
|
202
|
+
await emitPart(askPartOf(id, request, "rejected", "reject"));
|
|
203
|
+
return { kind: "denied", feedback: reply.data.feedback };
|
|
204
|
+
}
|
|
205
|
+
await emitPart(askPartOf(id, request, "resolved", reply.data.kind));
|
|
206
|
+
return { kind: "approved" };
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async function runTurnWorkflow(deps, input, signal) {
|
|
210
|
+
const agent = deps.agents.forThread(input.threadType);
|
|
211
|
+
if (agent.isErr())
|
|
212
|
+
throw new Error(`No agent is registered for the thread type "${input.threadType}".`);
|
|
213
|
+
const rootSource = { agentId: agent.value.id, callPath: [agent.value.id] };
|
|
214
|
+
const history = createThreadHistory(deps.pool, deps.logger);
|
|
215
|
+
const opening = await DBOS.runStep(async () => {
|
|
216
|
+
const endSeq = unwrapOrThrow(await history.latestSeq(input.threadId)) ?? -1;
|
|
217
|
+
const assembled = await assembleMessages({
|
|
218
|
+
threadId: input.threadId,
|
|
219
|
+
threadType: input.threadType,
|
|
220
|
+
analysisId: input.analysisId,
|
|
221
|
+
userInput: input.userText,
|
|
222
|
+
...(await readTurnContext(deps.pool, input.analysisId)),
|
|
223
|
+
history,
|
|
224
|
+
workingMemory: createWorkingMemory(deps.pool),
|
|
225
|
+
logger: deps.logger,
|
|
226
|
+
throughSeq: endSeq,
|
|
227
|
+
});
|
|
228
|
+
return { endSeq, userMessage: assembled.userMessage, contextRecords: assembled.contextRecords };
|
|
229
|
+
}, { name: "chat-turn.prepare" });
|
|
230
|
+
// The rows up to the turn never change, thus a replay reads the same view, and no checkpoint holds the thread.
|
|
231
|
+
const view = await loadHistoryView({ threadId: input.threadId, threadType: input.threadType, history, logger: deps.logger, throughSeq: opening.endSeq });
|
|
232
|
+
const userText = userTextOf(opening.userMessage);
|
|
233
|
+
const recorder = createConversationDisplayRecorder({
|
|
234
|
+
userText,
|
|
235
|
+
agentId: agent.value.id,
|
|
236
|
+
sink: () => undefined,
|
|
237
|
+
messageIds: { user: stepUuid(`${input.turnId}:user`), assistant: (index) => stepUuid(`${input.turnId}:assistant:${index}`) },
|
|
238
|
+
});
|
|
239
|
+
const writer = createTurnStreamWriter(rootSource, (frame) => recorder.observe(frame));
|
|
240
|
+
await writer.write({ type: "message-start", messageId: recorder.userMessageId(), role: "user", text: userText, source: rootSource });
|
|
241
|
+
await writer.write({ type: "message-start", messageId: recorder.assistantMessageId(), role: "assistant", source: rootSource });
|
|
242
|
+
const transport = {
|
|
243
|
+
signal,
|
|
244
|
+
emit: writer.emit,
|
|
245
|
+
chatStream: CHAT_STREAM_KEY,
|
|
246
|
+
toolWriter: writer.toolWriter,
|
|
247
|
+
recorder,
|
|
248
|
+
durably: (name, write) => DBOS.runStep(write, { name }),
|
|
249
|
+
groupKey: (index) => `${input.turnId}:${index}`,
|
|
250
|
+
announce: (messageId) => writer.write({ type: "message-start", messageId, role: "assistant", source: rootSource }),
|
|
251
|
+
modelMiddleware: [credentialGuard(() => turnCredentials.of(input.turnId))],
|
|
252
|
+
approve: deps.askGateway === undefined
|
|
253
|
+
? undefined
|
|
254
|
+
: workflowApproval(deps.askGateway, input, async (part) => {
|
|
255
|
+
await writer.emit({ type: "data-ask", data: part });
|
|
256
|
+
}, signal, deps.askWaitSeconds ?? DEFAULT_ASK_WAIT_SECONDS),
|
|
257
|
+
pause: workPause({
|
|
258
|
+
pool: deps.pool,
|
|
259
|
+
workId: input.turnId,
|
|
260
|
+
workKind: "turn",
|
|
261
|
+
analysisId: input.analysisId,
|
|
262
|
+
threadId: input.threadId,
|
|
263
|
+
emit: async (part) => {
|
|
264
|
+
await writer.emit({ type: "data-pause", source: rootSource, data: part });
|
|
265
|
+
},
|
|
266
|
+
retryDelaysMs: deps.pauseRetryDelaysMs,
|
|
267
|
+
logger: deps.logger,
|
|
268
|
+
}).afterFailure,
|
|
269
|
+
};
|
|
270
|
+
const session = {
|
|
271
|
+
identity: { user: input.userId },
|
|
272
|
+
scope: { kind: "analysis", analysisId: input.analysisId, threadId: input.threadId },
|
|
273
|
+
// The credential comes at each read, thus a call after a resume uses the credential that the resume put. A
|
|
274
|
+
// turn with no credential makes no model call, thus no adapter reads the empty value.
|
|
275
|
+
get auth() {
|
|
276
|
+
return turnCredentials.of(input.turnId) ?? {};
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
const ran = await runOpenTurn(deps, { analysisId: input.analysisId, threadId: input.threadId, userInput: input.userText }, { kind: "ok", threadType: input.threadType, history: view, userMessage: opening.userMessage, contextRecords: opening.contextRecords }, agent.value, { session, author: input.author, startedAtMs: input.startedAtMs, promptCache: input.promptCache }, transport);
|
|
280
|
+
const { outcome } = ran;
|
|
281
|
+
await writer.write(outcome.status === "failed"
|
|
282
|
+
? { type: "error", message: outcome.reason, reason: outcome.code, source: rootSource }
|
|
283
|
+
: { type: "finish", source: rootSource, turnUsage: ran.turnUsage });
|
|
284
|
+
await writer.settle();
|
|
285
|
+
await closeDurableStream(CHAT_STREAM_KEY, outcome.status === "done" ? "stop" : outcome.status === "aborted" ? "aborted" : "error");
|
|
286
|
+
// A sub-agent that a stop canceled in its pause leaves its row, thus the end of the turn clears each row of the turn.
|
|
287
|
+
await DBOS.runStep(async () => unwrapOrThrow(await clearPausesOfWork(deps.pool, input.turnId)), { name: "chat-turn.clear-pauses" });
|
|
288
|
+
await DBOS.runStep(async () => unwrapOrThrow(await releaseThreadOfTurn(deps.pool, input.threadId, input.turnId)), { name: "chat-turn.release" });
|
|
289
|
+
return chatTurnEndOf(ran);
|
|
290
|
+
}
|
|
291
|
+
/** How a turn that ran ended, as a host reads it. */
|
|
292
|
+
export function chatTurnEndOf(ran) {
|
|
293
|
+
const { outcome } = ran;
|
|
294
|
+
const finish = outcome.status === "failed" ? undefined : outcome.finish;
|
|
295
|
+
return {
|
|
296
|
+
status: outcome.status,
|
|
297
|
+
reason: outcome.status === "failed" ? outcome.reason : undefined,
|
|
298
|
+
code: outcome.status === "failed" ? outcome.code : undefined,
|
|
299
|
+
durationMs: ran.durationMs,
|
|
300
|
+
opened: ran.opened,
|
|
301
|
+
finishReason: finish?.reason,
|
|
302
|
+
rawFinishReason: finish?.rawFinishReason,
|
|
303
|
+
turnUsage: ran.turnUsage,
|
|
304
|
+
fallbackText: ran.fallbackText,
|
|
305
|
+
storeFailed: ran.storeError === undefined ? undefined : true,
|
|
306
|
+
};
|
|
307
|
+
}
|
package/dist/app/chat-turn.d.ts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The run of one chat turn: `runOpenTurn` runs the root loop over a prepared turn, stores the opening and each
|
|
3
|
+
* round, and closes the turn with its outcome. A transport gives the surface and the store of the turn. The turn
|
|
4
|
+
* workflow (`chat-turn-workflow.ts`) gives the transport of a workflow, and a host reaches the turn through it.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { LanguageModelMiddleware, ModelMessage, UIMessageStreamWriter } from "ai";
|
|
7
7
|
import type { RequestSession } from "../auth/types.js";
|
|
8
8
|
import type { UsageRecorder } from "../billing/usage-recorder.js";
|
|
9
9
|
import type { TokenUsageRollup } from "../contracts/usage.js";
|
|
10
|
-
import type
|
|
11
|
-
import {
|
|
10
|
+
import { type Connectable, type DbError } from "../lib/db-result.js";
|
|
11
|
+
import type { Querier } from "../state/db.js";
|
|
12
|
+
import { type AgentFinish, type LoopOptions } from "../loop/run-loop.js";
|
|
12
13
|
import type { AgentDefinition, EmitFn } from "../loop/types.js";
|
|
14
|
+
import type { ConversationDisplayRecorder } from "../memory/conversation-display-recorder.js";
|
|
13
15
|
import { type ThreadType } from "../memory/thread-store.js";
|
|
14
|
-
import type {
|
|
16
|
+
import type { ChatProvider, PromptCachePolicy } from "../providers/types.js";
|
|
15
17
|
import type { ThreadAgentResolver } from "../runtime/assemble.js";
|
|
16
|
-
import type {
|
|
18
|
+
import type { AskGateway } from "../tools/approval/gateway.js";
|
|
17
19
|
import { type AssembledMessages } from "./message-assembly.js";
|
|
18
20
|
import type { Logger } from "../lib/logger.js";
|
|
19
21
|
import { type ProvenanceSeam } from "../provenance/seam.js";
|
|
20
|
-
export
|
|
22
|
+
export type PrepareChatTurnDeps = {
|
|
21
23
|
/** Operational logging seam; omitted falls back to no-op. */
|
|
22
24
|
readonly logger?: Logger;
|
|
23
|
-
readonly pool:
|
|
25
|
+
readonly pool: Querier & Connectable;
|
|
24
26
|
/**
|
|
25
27
|
* The provenance seam. The turn reads its session emit member, and no other
|
|
26
28
|
* member. The turn holds the one site that writes the conversation thread of
|
|
@@ -31,58 +33,65 @@ export interface PrepareChatTurnDeps {
|
|
|
31
33
|
* of a report session.
|
|
32
34
|
*/
|
|
33
35
|
readonly provenance?: ProvenanceSeam;
|
|
34
|
-
}
|
|
35
|
-
export
|
|
36
|
+
};
|
|
37
|
+
export type PrepareChatTurnParams = {
|
|
36
38
|
readonly analysisId: string;
|
|
37
39
|
readonly threadId: string;
|
|
38
40
|
readonly userInput: string;
|
|
39
|
-
}
|
|
41
|
+
};
|
|
40
42
|
export type PrepareChatTurnResult = ({
|
|
41
43
|
readonly kind: "ok";
|
|
42
44
|
readonly threadType: ThreadType;
|
|
43
45
|
} & AssembledMessages) | {
|
|
44
46
|
readonly kind: "not_found";
|
|
45
47
|
};
|
|
48
|
+
/** A prepared turn: the type of its thread, the view of the thread, and the opening. */
|
|
49
|
+
export type PreparedChatTurn = Extract<PrepareChatTurnResult, {
|
|
50
|
+
kind: "ok";
|
|
51
|
+
}>;
|
|
46
52
|
/**
|
|
47
53
|
* Prepare one chat turn: resolve thread ownership, seed the title, load
|
|
48
54
|
* analysis status, and assemble the message array. Input sanitization stays
|
|
49
55
|
* inside {@link assembleMessages} (applied once to the new user input only).
|
|
50
56
|
*/
|
|
51
57
|
export declare function prepareChatTurn(deps: PrepareChatTurnDeps, params: PrepareChatTurnParams): Promise<PrepareChatTurnResult>;
|
|
52
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Open the thread of a turn: check that the analysis owns it, make it when it is absent, and seed its title. A
|
|
60
|
+
* thread that a different analysis owns is `not_found`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function openThread(deps: PrepareChatTurnDeps, params: PrepareChatTurnParams): Promise<{
|
|
63
|
+
readonly kind: "ok";
|
|
64
|
+
readonly threadType: ThreadType;
|
|
65
|
+
} | {
|
|
66
|
+
readonly kind: "not_found";
|
|
67
|
+
}>;
|
|
68
|
+
/** The analysis context and the run activity of a turn. A failed read gives the fallback of its kind. */
|
|
69
|
+
export declare function readTurnContext(pool: Querier, analysisId: string): Promise<{
|
|
70
|
+
readonly analysisContext: string | null;
|
|
71
|
+
readonly runActivityContext: string;
|
|
72
|
+
}>;
|
|
73
|
+
/** The runtime values of a turn. `assembleCoreRuntime` gives them to the turn workflow. */
|
|
74
|
+
export type RunChatTurnDeps = PrepareChatTurnDeps & {
|
|
53
75
|
/** The agent of a turn comes from the thread type, which only the preparation knows. */
|
|
54
76
|
readonly agents: ThreadAgentResolver;
|
|
55
|
-
|
|
77
|
+
/** The model of the conversation. A host that switches the model swaps the provider between two turns. */
|
|
78
|
+
readonly provider: ChatProvider;
|
|
79
|
+
/** Each model call of the turn reaches it, the calls of a sub-agent included. */
|
|
80
|
+
readonly usageRecorder: UsageRecorder;
|
|
81
|
+
/** The ledger of the asks of a turn. Absent, the loop denies each call that asks for an approval. */
|
|
82
|
+
readonly askGateway?: AskGateway;
|
|
83
|
+
};
|
|
56
84
|
/**
|
|
57
85
|
* The session of a turn without its provenance. The harness sets the provenance from the agent that
|
|
58
86
|
* it resolves, because only the preparation knows the thread type.
|
|
59
87
|
*/
|
|
60
88
|
export type ChatTurnSession = Omit<RequestSession, "provenance">;
|
|
61
89
|
/** What opens a turn: the thread and the user input. */
|
|
62
|
-
export
|
|
90
|
+
export type OpenChatTurnParams = {
|
|
63
91
|
readonly analysisId: string;
|
|
64
92
|
readonly threadId: string;
|
|
65
93
|
readonly userInput: string;
|
|
66
|
-
}
|
|
67
|
-
/** The transport values of a turn that is open. */
|
|
68
|
-
export interface RunOpenChatTurnParams {
|
|
69
|
-
readonly session: ChatTurnSession;
|
|
70
|
-
/** Makes the provider of the turn over the emit sink of the display recorder. */
|
|
71
|
-
readonly chat: (emit: EmitFn) => AgentChat;
|
|
72
|
-
readonly emit: EmitFn;
|
|
73
|
-
readonly signal: AbortSignal;
|
|
74
|
-
readonly usageRecorder: UsageRecorder;
|
|
75
|
-
/** The approval binding. It gets the emit sink of the display recorder, thus the display records each `data-ask`. */
|
|
76
|
-
readonly ask?: (request: AskRequest, emit: EmitFn) => Promise<AskApproval>;
|
|
77
|
-
/** Who sent the user message. */
|
|
78
|
-
readonly author?: string;
|
|
79
|
-
/** When the host opened the turn. Absent counts from the call to {@link openChatTurn}. */
|
|
80
|
-
readonly startedAtMs?: number;
|
|
81
|
-
/** The cache policy of the root loop. Absent gives {@link CONVERSATION_PROMPT_CACHE}. */
|
|
82
|
-
readonly promptCache?: PromptCachePolicy;
|
|
83
|
-
}
|
|
84
|
-
/** The values of one whole turn. */
|
|
85
|
-
export type RunChatTurnParams = OpenChatTurnParams & RunOpenChatTurnParams;
|
|
94
|
+
};
|
|
86
95
|
export type ChatTurnOutcome = {
|
|
87
96
|
readonly status: "done";
|
|
88
97
|
readonly finish: AgentFinish;
|
|
@@ -92,6 +101,7 @@ export type ChatTurnOutcome = {
|
|
|
92
101
|
} | {
|
|
93
102
|
readonly status: "failed";
|
|
94
103
|
readonly reason: string;
|
|
104
|
+
readonly code: string;
|
|
95
105
|
readonly cause: unknown;
|
|
96
106
|
};
|
|
97
107
|
/** A turn that ended before its run. It wrote no row and no turn record. */
|
|
@@ -104,7 +114,7 @@ export type ChatTurnRefusal = {
|
|
|
104
114
|
readonly kind: "agent_unresolved";
|
|
105
115
|
readonly threadType: ThreadType;
|
|
106
116
|
};
|
|
107
|
-
export
|
|
117
|
+
export type ChatTurnRan = {
|
|
108
118
|
readonly kind: "ran";
|
|
109
119
|
readonly outcome: ChatTurnOutcome;
|
|
110
120
|
/** True when the opening of the turn landed. */
|
|
@@ -115,25 +125,43 @@ export interface ChatTurnRan {
|
|
|
115
125
|
readonly turnUsage?: TokenUsageRollup;
|
|
116
126
|
/** The final text of a run that returned. */
|
|
117
127
|
readonly fallbackText?: string;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
readonly
|
|
126
|
-
/** The
|
|
127
|
-
readonly
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
*/
|
|
134
|
-
|
|
128
|
+
};
|
|
129
|
+
/** How a turn reaches its surface and its store. A turn workflow streams to its durable stream and runs each write as a step. */
|
|
130
|
+
export type TurnTransport = {
|
|
131
|
+
readonly signal: AbortSignal;
|
|
132
|
+
/** The emit sink of the loop. */
|
|
133
|
+
readonly emit: EmitFn;
|
|
134
|
+
/** Receives each text delta of the root reply. A turn workflow gives none, because its model calls stream the text. */
|
|
135
|
+
readonly onText?: (text: string) => void | Promise<void>;
|
|
136
|
+
/** The durable stream that the model calls write their text to. */
|
|
137
|
+
readonly chatStream?: string;
|
|
138
|
+
/** Receives the chunks of each tool step, on a replay too. */
|
|
139
|
+
readonly toolWriter?: UIMessageStreamWriter;
|
|
140
|
+
readonly recorder: ConversationDisplayRecorder;
|
|
141
|
+
/** Runs one write of the turn. A turn workflow runs it as a step. */
|
|
142
|
+
readonly durably: <T>(name: string, write: () => Promise<T>) => Promise<T>;
|
|
143
|
+
/** The key of the group of the turn at an index, thus a write that runs again stores nothing. */
|
|
144
|
+
readonly groupKey?: (index: number) => string;
|
|
145
|
+
/** Called when the display starts a new assistant message, after a marker. */
|
|
146
|
+
readonly announce?: (messageId: string) => Promise<void>;
|
|
147
|
+
/** Model middleware inside the step of each model call. */
|
|
148
|
+
readonly modelMiddleware?: readonly LanguageModelMiddleware[];
|
|
149
|
+
/** The decision of the user on a call whose tool asks for approval. Absent: the loop denies such a call. */
|
|
150
|
+
readonly approve?: LoopOptions["approve"];
|
|
151
|
+
/** The pause of the turn. A turn workflow gives it. Absent: each failure of a request fails the turn. */
|
|
152
|
+
readonly pause?: LoopOptions["pause"];
|
|
153
|
+
};
|
|
154
|
+
/** The values of a turn that its run reads. */
|
|
155
|
+
export type TurnRunParams = {
|
|
156
|
+
readonly session: ChatTurnSession;
|
|
157
|
+
readonly author?: string;
|
|
158
|
+
readonly startedAtMs: number;
|
|
159
|
+
readonly promptCache?: PromptCachePolicy;
|
|
160
|
+
};
|
|
135
161
|
/**
|
|
136
|
-
* Run
|
|
137
|
-
*
|
|
162
|
+
* Run a prepared turn: store its opening, run the root loop with a round sink that stores each round, and close the
|
|
163
|
+
* turn with its outcome.
|
|
138
164
|
*/
|
|
139
|
-
export declare function
|
|
165
|
+
export declare function runOpenTurn(deps: RunChatTurnDeps, turn: OpenChatTurnParams, prepared: PreparedChatTurn, agent: AgentDefinition, params: TurnRunParams, transport: TurnTransport): Promise<ChatTurnRan>;
|
|
166
|
+
/** The sanitized text of the user message, thus the display never holds a secret that the model does not see. */
|
|
167
|
+
export declare function userTextOf(message: ModelMessage): string;
|