@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
package/dist/loop/run-step.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `RunStep` adapters.
|
|
3
|
-
*
|
|
4
|
-
* `runAgent` wraps every LLM and tool call in an injected `RunStep`. Two
|
|
5
|
-
* adapters cover the two execution modes:
|
|
6
|
-
*
|
|
7
|
-
* - `passthroughStep` — the chat route. In-process, single-replica, no
|
|
8
|
-
* durability. Just runs the function.
|
|
9
|
-
* - `durableStep` — workflow contexts. Wraps the call as a `DBOS.runStep`
|
|
10
|
-
* so a crashed workflow replays without re-issuing completed LLM/tool
|
|
11
|
-
* calls. The step name (`llm-${i}`, `tool-${name}-${toolUseId}`) is the
|
|
12
|
-
* cache key on replay (see the harness-thread-store spec) and must not be reformatted.
|
|
13
|
-
*
|
|
14
|
-
* The loop body never imports DBOS — it depends only on the `RunStep`
|
|
15
|
-
* shape, which is what lets the same `runAgent` serve chat and (in change
|
|
16
|
-
* 8) durable workflows.
|
|
17
|
-
*/
|
|
18
|
-
import type { Result } from "neverthrow";
|
|
19
|
-
import type { RunStep } from "./types.js";
|
|
20
|
-
export declare const passthroughStep: RunStep;
|
|
21
|
-
export declare const durableStep: RunStep;
|
|
22
|
-
/**
|
|
23
|
-
* Adapt a `RunStep` to a `Result`-returning body. This is THE seam where
|
|
24
|
-
* `Result` meets durability: a step is recorded as failed — and retried /
|
|
25
|
-
* fails fast — only when its body throws, so an `err` MUST become a throw at
|
|
26
|
-
* the step boundary. The body stays Result-shaped; `unwrapOrThrow` isolates
|
|
27
|
-
* the throw. Pass `durableStep` in workflows, `passthroughStep` in chat.
|
|
28
|
-
*/
|
|
29
|
-
export declare function resultStep(runStep: RunStep): <T, E>(name: string, fn: () => PromiseLike<Result<T, E>>) => Promise<T>;
|
package/dist/loop/run-step.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `RunStep` adapters.
|
|
3
|
-
*
|
|
4
|
-
* `runAgent` wraps every LLM and tool call in an injected `RunStep`. Two
|
|
5
|
-
* adapters cover the two execution modes:
|
|
6
|
-
*
|
|
7
|
-
* - `passthroughStep` — the chat route. In-process, single-replica, no
|
|
8
|
-
* durability. Just runs the function.
|
|
9
|
-
* - `durableStep` — workflow contexts. Wraps the call as a `DBOS.runStep`
|
|
10
|
-
* so a crashed workflow replays without re-issuing completed LLM/tool
|
|
11
|
-
* calls. The step name (`llm-${i}`, `tool-${name}-${toolUseId}`) is the
|
|
12
|
-
* cache key on replay (see the harness-thread-store spec) and must not be reformatted.
|
|
13
|
-
*
|
|
14
|
-
* The loop body never imports DBOS — it depends only on the `RunStep`
|
|
15
|
-
* shape, which is what lets the same `runAgent` serve chat and (in change
|
|
16
|
-
* 8) durable workflows.
|
|
17
|
-
*/
|
|
18
|
-
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
19
|
-
import { unwrapOrThrow } from "../lib/result.js";
|
|
20
|
-
export const passthroughStep = (_name, fn) => fn();
|
|
21
|
-
export const durableStep = (name, fn) => DBOS.runStep(fn, { name });
|
|
22
|
-
/**
|
|
23
|
-
* Adapt a `RunStep` to a `Result`-returning body. This is THE seam where
|
|
24
|
-
* `Result` meets durability: a step is recorded as failed — and retried /
|
|
25
|
-
* fails fast — only when its body throws, so an `err` MUST become a throw at
|
|
26
|
-
* the step boundary. The body stays Result-shaped; `unwrapOrThrow` isolates
|
|
27
|
-
* the throw. Pass `durableStep` in workflows, `passthroughStep` in chat.
|
|
28
|
-
*/
|
|
29
|
-
export function resultStep(runStep) {
|
|
30
|
-
return (name,
|
|
31
|
-
// `PromiseLike`, not `Promise` — a `ResultAsync` (what `provider.chat`
|
|
32
|
-
// returns) is a `PromiseLike<Result>`, awaited to its inner `Result`.
|
|
33
|
-
fn) => runStep(name, async () => unwrapOrThrow(await fn()));
|
|
34
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `runToTerminal` — terminal-salvage wrapper around `runAgent`.
|
|
3
|
-
*
|
|
4
|
-
* Some agents communicate their result EXCLUSIVELY through a terminal tool
|
|
5
|
-
* (`submit_plan`, `submit_profile`, `submit_synthesis`, …):
|
|
6
|
-
* the loop's text reply is discarded and the outcome is read from a closure
|
|
7
|
-
* cell the terminal tool writes. The wrap-up of a capped run lets no tool run,
|
|
8
|
-
* so an agent that burns its whole iteration budget — or simply stops on
|
|
9
|
-
* prose — without ever submitting leaves that cell empty and forces the caller
|
|
10
|
-
* to hard-fail.
|
|
11
|
-
*
|
|
12
|
-
* `runToTerminal` runs the agent, then — if the outcome cell is still empty
|
|
13
|
-
* and the run was not aborted — runs ONE salvage continuation of the same
|
|
14
|
-
* conversation (`continueAgent`), opened by a corrective nudge. The salvage
|
|
15
|
-
* still declares every tool of the agent, masked to the terminal tools only,
|
|
16
|
-
* because the tool set is part of the prefix a signed thinking block and the
|
|
17
|
-
* prompt cache bind to.
|
|
18
|
-
*
|
|
19
|
-
* Salvage steps are namespaced (`salvage:…`) so a durable (DBOS) caller does
|
|
20
|
-
* not collide the continuation's `llm-*` / `tool-*` cache keys with the first
|
|
21
|
-
* run's — replaying them would silently return the first run's cached results.
|
|
22
|
-
*/
|
|
23
|
-
import type { AgentSession } from "../auth/types.js";
|
|
24
|
-
import type { Tool } from "../tools/define-tool.js";
|
|
25
|
-
import { type AgentFinish, type RunAgentOptions, type RunAgentResult } from "./run-agent.js";
|
|
26
|
-
import type { AgentDefinition, LoopMessage } from "./types.js";
|
|
27
|
-
/** Default salvage budget: one submit plus a validation-fix retry or two. */
|
|
28
|
-
export declare const DEFAULT_SALVAGE_ITERATIONS = 3;
|
|
29
|
-
/**
|
|
30
|
-
* What a salvage continuation was and how it went — present only when one ran.
|
|
31
|
-
*
|
|
32
|
-
* The two finishes answer different questions and a diagnostician needs both: a
|
|
33
|
-
* first run that ended `max_iterations` spent its whole budget failing to submit,
|
|
34
|
-
* while one that ended `stop` gave up on prose after a single turn. Those call for
|
|
35
|
-
* opposite responses, and the returned `RunAgentResult` carries only the second
|
|
36
|
-
* run's finish, which is the same for either. Its token rollups are the sole
|
|
37
|
-
* exception — those are summed across both attempts, since they measure the run
|
|
38
|
-
* rather than diagnose it.
|
|
39
|
-
*/
|
|
40
|
-
export interface SalvageRecord {
|
|
41
|
-
/** How the FIRST run ended — the reason a salvage was needed at all. */
|
|
42
|
-
readonly firstFinish: AgentFinish;
|
|
43
|
-
/** How the salvage continuation itself ended. */
|
|
44
|
-
readonly finish: AgentFinish;
|
|
45
|
-
}
|
|
46
|
-
/** A `runToTerminal` outcome: the driving run's result, plus the salvage account. */
|
|
47
|
-
export interface RunToTerminalResult extends RunAgentResult {
|
|
48
|
-
/** Null when the first run reached its terminal tool and no salvage was needed. */
|
|
49
|
-
readonly salvage: SalvageRecord | null;
|
|
50
|
-
}
|
|
51
|
-
/** Describes how to salvage a run that never reached its terminal tool. */
|
|
52
|
-
export interface TerminalSalvage {
|
|
53
|
-
/** Their ids become the mask of the salvage continuation, so each must already be a declared tool of the agent. */
|
|
54
|
-
readonly tools: readonly Tool[];
|
|
55
|
-
/** Opens the salvage continuation as a synthetic user message. */
|
|
56
|
-
readonly nudge: string;
|
|
57
|
-
/** The cap of salvage requests. Defaults to {@link DEFAULT_SALVAGE_ITERATIONS}. */
|
|
58
|
-
readonly maxIterations?: number;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Drive `agent` to its terminal tool, salvaging once if it does not get there.
|
|
62
|
-
* A salvage result carries both runs' messages and summed rollups, with the
|
|
63
|
-
* salvage's own finish. Throws first if a terminal tool is not declared on the
|
|
64
|
-
* agent.
|
|
65
|
-
*/
|
|
66
|
-
export declare function runToTerminal(agent: AgentDefinition, initial: readonly LoopMessage[], session: AgentSession, opts: RunAgentOptions, salvage: TerminalSalvage): Promise<RunToTerminalResult>;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `runToTerminal` — terminal-salvage wrapper around `runAgent`.
|
|
3
|
-
*
|
|
4
|
-
* Some agents communicate their result EXCLUSIVELY through a terminal tool
|
|
5
|
-
* (`submit_plan`, `submit_profile`, `submit_synthesis`, …):
|
|
6
|
-
* the loop's text reply is discarded and the outcome is read from a closure
|
|
7
|
-
* cell the terminal tool writes. The wrap-up of a capped run lets no tool run,
|
|
8
|
-
* so an agent that burns its whole iteration budget — or simply stops on
|
|
9
|
-
* prose — without ever submitting leaves that cell empty and forces the caller
|
|
10
|
-
* to hard-fail.
|
|
11
|
-
*
|
|
12
|
-
* `runToTerminal` runs the agent, then — if the outcome cell is still empty
|
|
13
|
-
* and the run was not aborted — runs ONE salvage continuation of the same
|
|
14
|
-
* conversation (`continueAgent`), opened by a corrective nudge. The salvage
|
|
15
|
-
* still declares every tool of the agent, masked to the terminal tools only,
|
|
16
|
-
* because the tool set is part of the prefix a signed thinking block and the
|
|
17
|
-
* prompt cache bind to.
|
|
18
|
-
*
|
|
19
|
-
* Salvage steps are namespaced (`salvage:…`) so a durable (DBOS) caller does
|
|
20
|
-
* not collide the continuation's `llm-*` / `tool-*` cache keys with the first
|
|
21
|
-
* run's — replaying them would silently return the first run's cached results.
|
|
22
|
-
*/
|
|
23
|
-
import { createNoopLogger } from "../lib/console-logger.js";
|
|
24
|
-
import { continueAgent } from "./continue-agent.js";
|
|
25
|
-
import { addChatUsage } from "./metrics.js";
|
|
26
|
-
import { runAgent } from "./run-agent.js";
|
|
27
|
-
/** Default salvage budget: one submit plus a validation-fix retry or two. */
|
|
28
|
-
export const DEFAULT_SALVAGE_ITERATIONS = 3;
|
|
29
|
-
/**
|
|
30
|
-
* Drive `agent` to its terminal tool, salvaging once if it does not get there.
|
|
31
|
-
* A salvage result carries both runs' messages and summed rollups, with the
|
|
32
|
-
* salvage's own finish. Throws first if a terminal tool is not declared on the
|
|
33
|
-
* agent.
|
|
34
|
-
*/
|
|
35
|
-
export async function runToTerminal(agent, initial, session, opts, salvage) {
|
|
36
|
-
const undeclared = salvage.tools.find((terminal) => !agent.tools.some((tool) => tool.id === terminal.id));
|
|
37
|
-
if (undeclared !== undefined) {
|
|
38
|
-
throw new Error(`The terminal tool "${undeclared.id}" is not a declared tool of the agent "${agent.id}", thus the salvage mask cannot let it run.`);
|
|
39
|
-
}
|
|
40
|
-
const first = await runAgent(agent, initial, session, opts);
|
|
41
|
-
if (opts.resolved?.() || opts.signal.aborted)
|
|
42
|
-
return { ...first, salvage: null };
|
|
43
|
-
const salvageBudget = salvage.maxIterations ?? DEFAULT_SALVAGE_ITERATIONS;
|
|
44
|
-
// Reported here rather than in `runAgent` because the loop cannot know it is being
|
|
45
|
-
// salvaged: it sees a continuation with a small cap and a mask.
|
|
46
|
-
// Only this wrapper holds the fact that a first attempt ended without its outcome.
|
|
47
|
-
// The first run's finish rides along because it is the whole diagnosis of WHY a
|
|
48
|
-
// salvage was needed, and it is the field the second run's result overwrites.
|
|
49
|
-
(opts.logger ?? createNoopLogger()).named("loop").warn("salvaging a run that never reached its terminal tool", {
|
|
50
|
-
agentId: agent.id,
|
|
51
|
-
callPath: session.provenance.callPath,
|
|
52
|
-
firstFinishReason: first.finish.reason,
|
|
53
|
-
firstCappedOut: first.finish.cappedOut,
|
|
54
|
-
salvageTools: salvage.tools.map((t) => t.id),
|
|
55
|
-
salvageMaxIterations: salvageBudget,
|
|
56
|
-
});
|
|
57
|
-
const salvaged = await continueAgent(agent, first.messages, { text: salvage.nudge, mask: { allow: salvage.tools.map((t) => t.id) }, maxRequests: salvageBudget, stepNamespace: "salvage" }, session, opts);
|
|
58
|
-
// The continuation is the same logical run as the first attempt, so its
|
|
59
|
-
// rollups must cover both, or the caller reads the salvage's tokens as the whole cost.
|
|
60
|
-
//
|
|
61
|
-
// `salvage` deliberately keeps each attempt's OWN finish, unsummed: it is the
|
|
62
|
-
// per-attempt diagnosis, not a second accounting of the same tokens. The two
|
|
63
|
-
// views are therefore NOT additive — `finish` is the run's total and already
|
|
64
|
-
// covers everything `salvage.firstFinish` and `salvage.finish` report.
|
|
65
|
-
return {
|
|
66
|
-
messages: [...first.messages, ...salvaged.messages],
|
|
67
|
-
finish: {
|
|
68
|
-
...salvaged.finish,
|
|
69
|
-
...sumUsage("usage", first.finish, salvaged.finish),
|
|
70
|
-
...sumUsage("turnUsage", first.finish, salvaged.finish),
|
|
71
|
-
},
|
|
72
|
-
salvage: { firstFinish: first.finish, finish: salvaged.finish },
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Sum one rollup field across the two runs, keeping it absent when neither
|
|
77
|
-
* reported. Both runs are roots or neither is — `runToTerminal` forwards its
|
|
78
|
-
* caller's options unchanged — so summing `turnUsage` never mixes a turn total
|
|
79
|
-
* with a bare own-rollup.
|
|
80
|
-
*/
|
|
81
|
-
function sumUsage(field, first, second) {
|
|
82
|
-
const a = first[field];
|
|
83
|
-
const b = second[field];
|
|
84
|
-
if (a === undefined && b === undefined)
|
|
85
|
-
return {};
|
|
86
|
-
const total = {};
|
|
87
|
-
addChatUsage(total, a);
|
|
88
|
-
addChatUsage(total, b);
|
|
89
|
-
return { [field]: total };
|
|
90
|
-
}
|
package/dist/loop/tool-mask.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A signed thinking block is bound to the exact prefix of its request, so a
|
|
3
|
-
* request always declares the full tool set
|
|
4
|
-
* of its agent; the mask and the budget act at dispatch instead. Provider-native
|
|
5
|
-
* masking is out of scope, because the vendors do it differently and an
|
|
6
|
-
* OpenAI-compatible endpoint has neither form.
|
|
7
|
-
*/
|
|
8
|
-
import type { ToolCallPart } from "ai";
|
|
9
|
-
import type { Tool } from "../tools/define-tool.js";
|
|
10
|
-
/** An absent mask lets each declared tool run. */
|
|
11
|
-
export type ToolMask = "none" | {
|
|
12
|
-
readonly allow: readonly string[];
|
|
13
|
-
};
|
|
14
|
-
/** A tool with no entry has no limit. */
|
|
15
|
-
export type ToolBudget = Readonly<Record<string, number>>;
|
|
16
|
-
export declare function maskExcept(tools: readonly Tool[], ids: readonly string[]): ToolMask;
|
|
17
|
-
/**
|
|
18
|
-
* `undefined` for a call that passes, otherwise the model-visible refusal
|
|
19
|
-
* text. A passing call takes one unit from `used` regardless of its later
|
|
20
|
-
* result, because the check reads only the mask, the budget, and the run's
|
|
21
|
-
* calls — so a durable replay refuses the same calls again.
|
|
22
|
-
*/
|
|
23
|
-
export declare function refusalsFor(calls: readonly ToolCallPart[], mask: ToolMask | undefined, budget: ToolBudget | undefined, used: Map<string, number>): (string | undefined)[];
|
package/dist/loop/tool-mask.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A signed thinking block is bound to the exact prefix of its request, so a
|
|
3
|
-
* request always declares the full tool set
|
|
4
|
-
* of its agent; the mask and the budget act at dispatch instead. Provider-native
|
|
5
|
-
* masking is out of scope, because the vendors do it differently and an
|
|
6
|
-
* OpenAI-compatible endpoint has neither form.
|
|
7
|
-
*/
|
|
8
|
-
export function maskExcept(tools, ids) {
|
|
9
|
-
return { allow: tools.map((t) => t.id).filter((id) => !ids.includes(id)) };
|
|
10
|
-
}
|
|
11
|
-
function maskLets(mask, toolName) {
|
|
12
|
-
if (mask === undefined)
|
|
13
|
-
return true;
|
|
14
|
-
if (mask === "none")
|
|
15
|
-
return false;
|
|
16
|
-
return mask.allow.includes(toolName);
|
|
17
|
-
}
|
|
18
|
-
/** Matches the `{ error, retryable }` shape of every other tool error. */
|
|
19
|
-
function refusal(error) {
|
|
20
|
-
return JSON.stringify({ error, retryable: false });
|
|
21
|
-
}
|
|
22
|
-
function maskRefusal(mask, toolName) {
|
|
23
|
-
if (mask === "none")
|
|
24
|
-
return refusal(`No tool can run for this request, thus ${toolName} did not run. Answer in text.`);
|
|
25
|
-
const available = mask.allow.length === 0 ? "none" : mask.allow.join(", ");
|
|
26
|
-
return refusal(`The tool ${toolName} is not available for this request, thus it did not run. The tools that can run now: ${available}.`);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* `undefined` for a call that passes, otherwise the model-visible refusal
|
|
30
|
-
* text. A passing call takes one unit from `used` regardless of its later
|
|
31
|
-
* result, because the check reads only the mask, the budget, and the run's
|
|
32
|
-
* calls — so a durable replay refuses the same calls again.
|
|
33
|
-
*/
|
|
34
|
-
export function refusalsFor(calls, mask, budget, used) {
|
|
35
|
-
return calls.map((call) => {
|
|
36
|
-
if (mask !== undefined && !maskLets(mask, call.toolName))
|
|
37
|
-
return maskRefusal(mask, call.toolName);
|
|
38
|
-
const limit = budget?.[call.toolName];
|
|
39
|
-
const count = used.get(call.toolName) ?? 0;
|
|
40
|
-
if (limit !== undefined && count >= limit) {
|
|
41
|
-
return refusal(`The tool ${call.toolName} reached its limit of ${limit} calls in this run, thus this call did not run.`);
|
|
42
|
-
}
|
|
43
|
-
used.set(call.toolName, count + 1);
|
|
44
|
-
return undefined;
|
|
45
|
-
});
|
|
46
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `createStreamingChat` — a streaming `AgentChat`.
|
|
3
|
-
*
|
|
4
|
-
* The agent loop depends on `AgentChat`: one request in, one collapsed
|
|
5
|
-
* `ChatResponse` out. A `ChatProvider` satisfies that directly — its `chat`
|
|
6
|
-
* collapses the stream silently. This builds a SECOND `AgentChat` from the
|
|
7
|
-
* same provider's `chatStream` primitive: its `chat` drives the stream,
|
|
8
|
-
* forwards every text delta to `onText`, and returns the same collapsed
|
|
9
|
-
* `ChatResponse`. `runAgent` calls `chat` and never knows it streamed.
|
|
10
|
-
*
|
|
11
|
-
* The chat route is the one caller — it is the single place token streaming
|
|
12
|
-
* is wired. Sub-agent loops (planner, literature-reviewer) and workflow
|
|
13
|
-
* loops run on the plain `ChatProvider`, so they never stream.
|
|
14
|
-
*
|
|
15
|
-
* This wrapper is also where a client abort stops being control flow: it sees
|
|
16
|
-
* every delta, so it alone can assemble the partial. On the stream's abort it
|
|
17
|
-
* resolves an `"aborted"` `ChatResponse` carrying that partial rather than
|
|
18
|
-
* re-throwing, letting the interactive turn keep what the model produced. The
|
|
19
|
-
* plain provider keeps throwing on abort, so durable loops are untouched.
|
|
20
|
-
*/
|
|
21
|
-
import type { AgentChat, ChatProvider } from "./types.js";
|
|
22
|
-
/**
|
|
23
|
-
* Wrap a `ChatProvider` as a streaming `AgentChat`. `onText` is called once
|
|
24
|
-
* per text delta, in arrival order, as a side effect of `chat`. `chat` is
|
|
25
|
-
* Result-returning: it consumes the throwing `chatStream` and maps a thrown
|
|
26
|
-
* SDK failure to `err(ProviderError)`. A client abort is not an error here — it
|
|
27
|
-
* resolves `ok` with finish reason `"aborted"` and an assistant message holding
|
|
28
|
-
* exactly the deltas already forwarded (empty when the abort beat the first
|
|
29
|
-
* delta), so the interactive turn keeps the partial reply instead of losing it
|
|
30
|
-
* to a throw.
|
|
31
|
-
*/
|
|
32
|
-
export declare function createStreamingChat(provider: ChatProvider, onText: (text: string) => void): AgentChat;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `createStreamingChat` — a streaming `AgentChat`.
|
|
3
|
-
*
|
|
4
|
-
* The agent loop depends on `AgentChat`: one request in, one collapsed
|
|
5
|
-
* `ChatResponse` out. A `ChatProvider` satisfies that directly — its `chat`
|
|
6
|
-
* collapses the stream silently. This builds a SECOND `AgentChat` from the
|
|
7
|
-
* same provider's `chatStream` primitive: its `chat` drives the stream,
|
|
8
|
-
* forwards every text delta to `onText`, and returns the same collapsed
|
|
9
|
-
* `ChatResponse`. `runAgent` calls `chat` and never knows it streamed.
|
|
10
|
-
*
|
|
11
|
-
* The chat route is the one caller — it is the single place token streaming
|
|
12
|
-
* is wired. Sub-agent loops (planner, literature-reviewer) and workflow
|
|
13
|
-
* loops run on the plain `ChatProvider`, so they never stream.
|
|
14
|
-
*
|
|
15
|
-
* This wrapper is also where a client abort stops being control flow: it sees
|
|
16
|
-
* every delta, so it alone can assemble the partial. On the stream's abort it
|
|
17
|
-
* resolves an `"aborted"` `ChatResponse` carrying that partial rather than
|
|
18
|
-
* re-throwing, letting the interactive turn keep what the model produced. The
|
|
19
|
-
* plain provider keeps throwing on abort, so durable loops are untouched.
|
|
20
|
-
*/
|
|
21
|
-
import { ResultAsync, err, ok } from "neverthrow";
|
|
22
|
-
import { scopeWorkloadId } from "../auth/types.js";
|
|
23
|
-
import { toProviderError } from "./errors.js";
|
|
24
|
-
/**
|
|
25
|
-
* Wrap a `ChatProvider` as a streaming `AgentChat`. `onText` is called once
|
|
26
|
-
* per text delta, in arrival order, as a side effect of `chat`. `chat` is
|
|
27
|
-
* Result-returning: it consumes the throwing `chatStream` and maps a thrown
|
|
28
|
-
* SDK failure to `err(ProviderError)`. A client abort is not an error here — it
|
|
29
|
-
* resolves `ok` with finish reason `"aborted"` and an assistant message holding
|
|
30
|
-
* exactly the deltas already forwarded (empty when the abort beat the first
|
|
31
|
-
* delta), so the interactive turn keeps the partial reply instead of losing it
|
|
32
|
-
* to a throw.
|
|
33
|
-
*/
|
|
34
|
-
export function createStreamingChat(provider, onText) {
|
|
35
|
-
return {
|
|
36
|
-
capabilities: provider.capabilities,
|
|
37
|
-
chat(req, session, signal) {
|
|
38
|
-
const workload = `${session.scope.kind}:${scopeWorkloadId(session.scope)}`;
|
|
39
|
-
const run = async () => {
|
|
40
|
-
let final;
|
|
41
|
-
let partial = "";
|
|
42
|
-
try {
|
|
43
|
-
for await (const event of provider.chatStream(req, session, signal)) {
|
|
44
|
-
if (event.type === "text-delta") {
|
|
45
|
-
partial += event.text;
|
|
46
|
-
onText(event.text);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
final = event.response;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch (e) {
|
|
54
|
-
// A client abort resolves with what streamed so far, never through
|
|
55
|
-
// the error channel: the interactive turn persists the partial. The
|
|
56
|
-
// gate here must be at least as wide as the underlying provider's
|
|
57
|
-
// re-throw gate — an abort-named error OR an already-aborted client
|
|
58
|
-
// signal — or a transport failure that lands while the signal is
|
|
59
|
-
// aborted slips past into the error channel. Once the user has
|
|
60
|
-
// aborted, that raced failure is noise: resolving with the partial
|
|
61
|
-
// serves their intent, while an error banner would blame their own
|
|
62
|
-
// keypress.
|
|
63
|
-
const aborted = ((e instanceof DOMException || e instanceof Error) && e.name === "AbortError") || signal?.aborted === true;
|
|
64
|
-
if (aborted) {
|
|
65
|
-
// A complete response already in hand beats a partial reconstruction: if the
|
|
66
|
-
// stream had yielded its terminal `done` before the abort threw, that whole
|
|
67
|
-
// response is authoritative, so return it rather than the assembled deltas.
|
|
68
|
-
if (final !== undefined)
|
|
69
|
-
return ok(final);
|
|
70
|
-
// The partial carries no model identity and no usage: it is
|
|
71
|
-
// assembled from deltas rather than from a provider response, so
|
|
72
|
-
// nothing here reported which model answered or what it cost.
|
|
73
|
-
// Stamping the requested id would manufacture a claim the
|
|
74
|
-
// endpoint never made.
|
|
75
|
-
return ok({ message: { role: "assistant", content: partial }, finishReason: "aborted" });
|
|
76
|
-
}
|
|
77
|
-
return err(toProviderError(e, workload));
|
|
78
|
-
}
|
|
79
|
-
if (final === undefined) {
|
|
80
|
-
return err({
|
|
81
|
-
type: "provider",
|
|
82
|
-
retryable: false,
|
|
83
|
-
message: "createStreamingChat: chatStream ended without a final message",
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
return ok(final);
|
|
87
|
-
};
|
|
88
|
-
return new ResultAsync(run());
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The container of one report-session derivation, as a registered DBOS workflow.
|
|
3
|
-
*
|
|
4
|
-
* The `derive_table` tool runs inside one live chat turn, and a chat turn is not a workflow. An exec runs as
|
|
5
|
-
* a durable step of a workflow, and the reaper maps each container to the workflow that owns it. Thus the
|
|
6
|
-
* container lives here, behind a registered workflow, and the tool starts it and awaits the handle.
|
|
7
|
-
*
|
|
8
|
-
* The shape is the shape of `tasks/extract-values.ts`: a body that a test drives directly, a registration
|
|
9
|
-
* that closes over the construction-time deps, and a trigger that starts the workflow and gives the result
|
|
10
|
-
* back. The tool holds the trigger as a plain function, thus no module under `tools/` imports DBOS.
|
|
11
|
-
*
|
|
12
|
-
* The body owns the whole machine lifetime. It creates the container, runs one exec to its terminal
|
|
13
|
-
* result, and tears the container down on both paths. A teardown fault reaches the log alone, because the
|
|
14
|
-
* work is done by then.
|
|
15
|
-
*/
|
|
16
|
-
import { type Result } from "neverthrow";
|
|
17
|
-
import type { Logger } from "../lib/logger.js";
|
|
18
|
-
import type { SandboxClient } from "../sandbox/client.js";
|
|
19
|
-
import { type Suspension } from "../workflows/suspension.js";
|
|
20
|
-
import type { ExecResult } from "../sandbox/types.js";
|
|
21
|
-
import { type DeriveTableExecInput } from "../tools/report-session/derive-table.js";
|
|
22
|
-
/** The construction-time deps of the body. The registration closes over them, thus the trigger holds none. */
|
|
23
|
-
export interface DeriveTableExecDeps {
|
|
24
|
-
readonly sandboxClient: SandboxClient;
|
|
25
|
-
/**
|
|
26
|
-
* The checkpointed clock of the deadline. It defaults to `DBOS.now()`, which a replay reads again from
|
|
27
|
-
* the checkpoint. A test injects a fixed clock, thus it drives this body with no launched runtime.
|
|
28
|
-
*/
|
|
29
|
-
readonly now?: () => Promise<number>;
|
|
30
|
-
readonly logger?: Logger;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* The body, exported so a test drives it without a registered workflow.
|
|
34
|
-
*
|
|
35
|
-
* A fault of any seam call throws. The tool reads a rejection as one short detail. A chat turn awaits this
|
|
36
|
-
* workflow, thus a suspension is the `err` of the result, and the workflow does not cancel
|
|
37
|
-
* (workflow-suspension spec). The body does not mark the analysis: the tool reports the suspension to the
|
|
38
|
-
* conversation agent.
|
|
39
|
-
*/
|
|
40
|
-
export declare function runDeriveTableExecBody(input: DeriveTableExecInput, deps: DeriveTableExecDeps): Promise<Result<ExecResult, Suspension>>;
|
|
41
|
-
/**
|
|
42
|
-
* Register the derivation workflow with DBOS. It gives back the registered callable, thus a trigger
|
|
43
|
-
* dispatches with `DBOS.startWorkflow`.
|
|
44
|
-
*/
|
|
45
|
-
export declare function registerDeriveTableExecWorkflow(deps: DeriveTableExecDeps): (input: DeriveTableExecInput) => Promise<Result<ExecResult, Suspension>>;
|
|
46
|
-
/** The workflow id of one derivation. The execution id is unique already, thus no nonce joins it. */
|
|
47
|
-
export declare function deriveTableExecWorkflowId(executionId: string): string;
|
|
48
|
-
/**
|
|
49
|
-
* The async edge. It starts the registered workflow and it awaits the terminal result.
|
|
50
|
-
*
|
|
51
|
-
* The tool authorizes the derivation before this call and it revokes after, thus this edge holds no
|
|
52
|
-
* lifecycle of its own. A workflow fault rejects the returned promise, and a suspension is the `err`.
|
|
53
|
-
*/
|
|
54
|
-
export declare function triggerDeriveTableExec(workflow: (input: DeriveTableExecInput) => Promise<Result<ExecResult, Suspension>>, input: DeriveTableExecInput): Promise<Result<ExecResult, Suspension>>;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The container of one report-session derivation, as a registered DBOS workflow.
|
|
3
|
-
*
|
|
4
|
-
* The `derive_table` tool runs inside one live chat turn, and a chat turn is not a workflow. An exec runs as
|
|
5
|
-
* a durable step of a workflow, and the reaper maps each container to the workflow that owns it. Thus the
|
|
6
|
-
* container lives here, behind a registered workflow, and the tool starts it and awaits the handle.
|
|
7
|
-
*
|
|
8
|
-
* The shape is the shape of `tasks/extract-values.ts`: a body that a test drives directly, a registration
|
|
9
|
-
* that closes over the construction-time deps, and a trigger that starts the workflow and gives the result
|
|
10
|
-
* back. The tool holds the trigger as a plain function, thus no module under `tools/` imports DBOS.
|
|
11
|
-
*
|
|
12
|
-
* The body owns the whole machine lifetime. It creates the container, runs one exec to its terminal
|
|
13
|
-
* result, and tears the container down on both paths. A teardown fault reaches the log alone, because the
|
|
14
|
-
* work is done by then.
|
|
15
|
-
*/
|
|
16
|
-
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
17
|
-
import { err, ok } from "neverthrow";
|
|
18
|
-
import { forStep } from "../auth/types.js";
|
|
19
|
-
import { createNoopLogger } from "../lib/console-logger.js";
|
|
20
|
-
import { mintSandboxIdentity } from "../sandbox/identity.js";
|
|
21
|
-
import { keepSuspendingRefusal } from "../sandbox/sandbox-error.js";
|
|
22
|
-
import { suspensionOfSpawnRefusal } from "../workflows/suspension.js";
|
|
23
|
-
import { buildDerivationExec, DERIVATION_DEADLINE_MS, DERIVATION_RESOURCES, DERIVE_RUN_LITERAL, DERIVE_STEP_LITERAL, } from "../tools/report-session/derive-table.js";
|
|
24
|
-
/** The exec progress callback. A derivation reports no live activity, thus the callback drops each event. */
|
|
25
|
-
const noopEmit = () => { };
|
|
26
|
-
/**
|
|
27
|
-
* The body, exported so a test drives it without a registered workflow.
|
|
28
|
-
*
|
|
29
|
-
* A fault of any seam call throws. The tool reads a rejection as one short detail. A chat turn awaits this
|
|
30
|
-
* workflow, thus a suspension is the `err` of the result, and the workflow does not cancel
|
|
31
|
-
* (workflow-suspension spec). The body does not mark the analysis: the tool reports the suspension to the
|
|
32
|
-
* conversation agent.
|
|
33
|
-
*/
|
|
34
|
-
export async function runDeriveTableExecBody(input, deps) {
|
|
35
|
-
const logger = (deps.logger ?? createNoopLogger()).named("derive-table-exec").with({ analysisId: input.analysisId });
|
|
36
|
-
const workflowId = DBOS.workflowID ?? deriveTableExecWorkflowId(input.executionId);
|
|
37
|
-
const spawned = keepSuspendingRefusal(await deps.sandboxClient.createSandbox(forStep(input.runSession, DERIVE_STEP_LITERAL), { childWorkflowId: workflowId, resources: DERIVATION_RESOURCES, writableTail: input.writableTail }, mintSandboxIdentity(DERIVE_RUN_LITERAL)));
|
|
38
|
-
if (spawned.isErr()) {
|
|
39
|
-
const suspension = suspensionOfSpawnRefusal(spawned.error);
|
|
40
|
-
logger.warn("derivation suspended", { reason: suspension.reason });
|
|
41
|
-
return err(suspension);
|
|
42
|
-
}
|
|
43
|
-
const sandbox = spawned.value;
|
|
44
|
-
try {
|
|
45
|
-
// A checkpointed clock, not `Date.now()`: a wall-clock deadline would grow on each recovery.
|
|
46
|
-
const deadline = (await (deps.now ?? (() => DBOS.now()))()) + DERIVATION_DEADLINE_MS;
|
|
47
|
-
const request = buildDerivationExec({
|
|
48
|
-
script: input.script,
|
|
49
|
-
workingDir: input.workingDir,
|
|
50
|
-
inputs: input.inputs,
|
|
51
|
-
output: input.output,
|
|
52
|
-
});
|
|
53
|
-
return ok(await deps.sandboxClient.exec(sandbox, request, noopEmit, deadline));
|
|
54
|
-
}
|
|
55
|
-
finally {
|
|
56
|
-
try {
|
|
57
|
-
await deps.sandboxClient.teardown(sandbox);
|
|
58
|
-
}
|
|
59
|
-
catch (cause) {
|
|
60
|
-
logger.warn("the derivation sandbox did not tear down", logger.errorFields(cause));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Register the derivation workflow with DBOS. It gives back the registered callable, thus a trigger
|
|
66
|
-
* dispatches with `DBOS.startWorkflow`.
|
|
67
|
-
*/
|
|
68
|
-
export function registerDeriveTableExecWorkflow(deps) {
|
|
69
|
-
return DBOS.registerWorkflow((input) => runDeriveTableExecBody(input, deps), { name: "derive-table-exec" });
|
|
70
|
-
}
|
|
71
|
-
/** The workflow id of one derivation. The execution id is unique already, thus no nonce joins it. */
|
|
72
|
-
export function deriveTableExecWorkflowId(executionId) {
|
|
73
|
-
return `${DERIVE_RUN_LITERAL}:${executionId}`;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* The async edge. It starts the registered workflow and it awaits the terminal result.
|
|
77
|
-
*
|
|
78
|
-
* The tool authorizes the derivation before this call and it revokes after, thus this edge holds no
|
|
79
|
-
* lifecycle of its own. A workflow fault rejects the returned promise, and a suspension is the `err`.
|
|
80
|
-
*/
|
|
81
|
-
export async function triggerDeriveTableExec(workflow, input) {
|
|
82
|
-
const handle = (await DBOS.startWorkflow(workflow, {
|
|
83
|
-
workflowID: deriveTableExecWorkflowId(input.executionId),
|
|
84
|
-
})(input));
|
|
85
|
-
return handle.getResult();
|
|
86
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The suspension of work (workflow-suspension spec).
|
|
3
|
-
*
|
|
4
|
-
* A suspension starts only from a model request that fails with a `suspend`
|
|
5
|
-
* error, or from a gate that refuses with the suspend flag. The harness carries
|
|
6
|
-
* the reason of the host as it is and never reads it: no path compares a
|
|
7
|
-
* reason to a value, and no path reads the text of an error message.
|
|
8
|
-
*
|
|
9
|
-
* The owner of the result of a workflow selects the mechanism. A durable owner
|
|
10
|
-
* (`executeAnalysis`, `sandbox-step`, `data-profile`) records the reason in its
|
|
11
|
-
* stored state and ends in the DBOS state `CANCELLED`, which `resumeWorkflow`
|
|
12
|
-
* reads. A workflow with a live caller (`derive-table-exec`, `extract-values`)
|
|
13
|
-
* returns the suspension as the `err` of its result. A suspension of an
|
|
14
|
-
* analysis run or of a data profile marks the analysis through
|
|
15
|
-
* `suspendAnalysis` (`state/analyses.ts`). A workflow with a live caller does
|
|
16
|
-
* not mark it: the conversation agent reads the suspension as a tool result.
|
|
17
|
-
*/
|
|
18
|
-
import type { GateRefusal } from "../lib/hooks.js";
|
|
19
|
-
import type { SuspendingRefusal } from "../sandbox/sandbox-error.js";
|
|
20
|
-
/** Plain data, thus it crosses a DBOS checkpoint as it is. */
|
|
21
|
-
export interface Suspension {
|
|
22
|
-
readonly kind: "suspended";
|
|
23
|
-
readonly reason: string;
|
|
24
|
-
}
|
|
25
|
-
export declare function suspensionOfFailure(err: unknown): Suspension | undefined;
|
|
26
|
-
export declare function suspensionOfRefusal(refusal: GateRefusal): Suspension | undefined;
|
|
27
|
-
export declare function suspensionOfSpawnRefusal(refusal: SuspendingRefusal): Suspension;
|
|
28
|
-
/**
|
|
29
|
-
* The cancel lands at the next DBOS operation, thus the named step raises
|
|
30
|
-
* `DBOSWorkflowCancelledError` and nothing after it runs.
|
|
31
|
-
*/
|
|
32
|
-
export declare function cancelSelf(stepName: string): Promise<never>;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The suspension of work (workflow-suspension spec).
|
|
3
|
-
*
|
|
4
|
-
* A suspension starts only from a model request that fails with a `suspend`
|
|
5
|
-
* error, or from a gate that refuses with the suspend flag. The harness carries
|
|
6
|
-
* the reason of the host as it is and never reads it: no path compares a
|
|
7
|
-
* reason to a value, and no path reads the text of an error message.
|
|
8
|
-
*
|
|
9
|
-
* The owner of the result of a workflow selects the mechanism. A durable owner
|
|
10
|
-
* (`executeAnalysis`, `sandbox-step`, `data-profile`) records the reason in its
|
|
11
|
-
* stored state and ends in the DBOS state `CANCELLED`, which `resumeWorkflow`
|
|
12
|
-
* reads. A workflow with a live caller (`derive-table-exec`, `extract-values`)
|
|
13
|
-
* returns the suspension as the `err` of its result. A suspension of an
|
|
14
|
-
* analysis run or of a data profile marks the analysis through
|
|
15
|
-
* `suspendAnalysis` (`state/analyses.ts`). A workflow with a live caller does
|
|
16
|
-
* not mark it: the conversation agent reads the suspension as a tool result.
|
|
17
|
-
*/
|
|
18
|
-
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
19
|
-
import { findSuspendError } from "../providers/errors.js";
|
|
20
|
-
export function suspensionOfFailure(err) {
|
|
21
|
-
const found = findSuspendError(err);
|
|
22
|
-
return found === undefined ? undefined : { kind: "suspended", reason: found.reason };
|
|
23
|
-
}
|
|
24
|
-
export function suspensionOfRefusal(refusal) {
|
|
25
|
-
return refusal.kind === "suspended" ? { kind: "suspended", reason: refusal.reason } : undefined;
|
|
26
|
-
}
|
|
27
|
-
export function suspensionOfSpawnRefusal(refusal) {
|
|
28
|
-
return { kind: "suspended", reason: refusal.reason };
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* The cancel lands at the next DBOS operation, thus the named step raises
|
|
32
|
-
* `DBOSWorkflowCancelledError` and nothing after it runs.
|
|
33
|
-
*/
|
|
34
|
-
export async function cancelSelf(stepName) {
|
|
35
|
-
await DBOS.cancelWorkflow(DBOS.workflowID);
|
|
36
|
-
await DBOS.runStep(async () => undefined, { name: stepName });
|
|
37
|
-
throw new Error(`unreachable: ${stepName} did not raise the cancellation`);
|
|
38
|
-
}
|