@inflexa-ai/harness 0.45.1 → 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 +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +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 +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +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 +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -3,23 +3,68 @@
|
|
|
3
3
|
* shared by every embedder. Host-neutral: it references only DBOS and the OTel
|
|
4
4
|
* API, which the harness already depends on, so it ships in the harness.
|
|
5
5
|
*
|
|
6
|
+
* Outside a workflow the launch starts the run with `DBOS.startWorkflow`. A
|
|
7
|
+
* tool call of a chat turn runs inside a step, and DBOS refuses a start or an
|
|
8
|
+
* enqueue from a step. Thus inside a workflow the launch enqueues the run
|
|
9
|
+
* through a `DBOSClient` on the run queue, which no step check covers, and
|
|
10
|
+
* which keeps the run out of the children of the caller. Both paths take the
|
|
11
|
+
* run id as the workflow id, and DBOS gives back the existing workflow for an
|
|
12
|
+
* id that it holds. Thus a second launch of one run id starts nothing. A launch
|
|
13
|
+
* that fails while a workflow of its run id exists resolves, because the run is
|
|
14
|
+
* durably started.
|
|
15
|
+
*
|
|
6
16
|
* A launch detaches the run from the caller's trace. The DBOS workflow span
|
|
7
17
|
* takes the active context as its parent, and the caller is a chat request
|
|
8
18
|
* (or another short-lived operation) whose span ends in milliseconds while the
|
|
9
19
|
* run lasts hours. So the launch opens a root span of its own, runs
|
|
10
20
|
* `startWorkflow` under it, and joins the two traces by a span link back to
|
|
11
|
-
* the originating span plus `inflexa.run_id` on both sides.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
21
|
+
* the originating span plus `inflexa.run_id` on both sides. An enqueued run
|
|
22
|
+
* starts on the dispatch loop of the queue, in no trace of the launch, and
|
|
23
|
+
* `inflexa.run_id` joins it. With no TracerProvider registered every call here
|
|
24
|
+
* is a no-op on the API's non-recording span.
|
|
14
25
|
*/
|
|
15
26
|
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
16
27
|
import { context, isSpanContextValid, ROOT_CONTEXT, trace } from "@opentelemetry/api";
|
|
28
|
+
import { createNoopLogger } from "../lib/console-logger.js";
|
|
29
|
+
import { dbosClientFor } from "./dbos-workflow-purger.js";
|
|
17
30
|
/** Attribute carrying the run id on the originating span and on the run's root span. */
|
|
18
31
|
export const ATTR_INFLEXA_RUN_ID = "inflexa.run_id";
|
|
32
|
+
/** The queue of a run that a launch inside a workflow enqueues. It has no limit, thus a run waits only for the poll of the queue. */
|
|
33
|
+
export const RUN_QUEUE = "analysis-runs";
|
|
19
34
|
const TRACER_NAME = "inflexa.harness.run-launcher";
|
|
20
|
-
export function createDbosRunLauncher() {
|
|
35
|
+
export function createDbosRunLauncher(deps) {
|
|
36
|
+
const logger = (deps.logger ?? createNoopLogger()).named("run-launcher");
|
|
37
|
+
let queueRegistered;
|
|
38
|
+
const registerRunQueue = (client) => {
|
|
39
|
+
queueRegistered ??= client.registerQueue(RUN_QUEUE, { onConflict: "never_update" }).catch((cause) => {
|
|
40
|
+
queueRegistered = undefined;
|
|
41
|
+
throw cause;
|
|
42
|
+
});
|
|
43
|
+
return queueRegistered;
|
|
44
|
+
};
|
|
45
|
+
const enqueue = async (workflow, opts, input) => {
|
|
46
|
+
const client = await dbosClientFor(deps.pool, logger);
|
|
47
|
+
await registerRunQueue(client);
|
|
48
|
+
// The run runs the code of this version, the same as a start in this process.
|
|
49
|
+
await client.enqueue({ workflowName: workflow.name, queueName: RUN_QUEUE, workflowID: opts.workflowId, appVersion: DBOS.applicationVersion }, input);
|
|
50
|
+
};
|
|
51
|
+
// An earlier launch of the run id can start the run, and a later launch can then fail for a transient reason.
|
|
52
|
+
// The run is durably started, thus the fault is not a fault of the launch. The read goes through the client,
|
|
53
|
+
// because a status read of `DBOS` in a workflow body takes a checkpoint, and only this failure path reads.
|
|
54
|
+
// A failed read keeps the fault of the start, because the existence of the run is then unknown.
|
|
55
|
+
const workflowExists = async (workflowId) => {
|
|
56
|
+
try {
|
|
57
|
+
const client = await dbosClientFor(deps.pool, logger);
|
|
58
|
+
return (await client.getWorkflow(workflowId)) !== undefined;
|
|
59
|
+
}
|
|
60
|
+
catch (cause) {
|
|
61
|
+
logger.warn("the workflow of a run whose launch failed was not read", { runId: workflowId, ...logger.errorFields(cause) });
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
21
65
|
return {
|
|
22
66
|
async launch(workflow, opts, input) {
|
|
67
|
+
const inWorkflow = DBOS.isWithinWorkflow();
|
|
23
68
|
const originating = trace.getSpan(context.active());
|
|
24
69
|
const links = [];
|
|
25
70
|
if (originating !== undefined && isSpanContextValid(originating.spanContext())) {
|
|
@@ -28,8 +73,17 @@ export function createDbosRunLauncher() {
|
|
|
28
73
|
}
|
|
29
74
|
const root = trace.getTracer(TRACER_NAME).startSpan("launch run", { links, attributes: { [ATTR_INFLEXA_RUN_ID]: opts.workflowId } }, ROOT_CONTEXT);
|
|
30
75
|
try {
|
|
76
|
+
if (inWorkflow) {
|
|
77
|
+
await enqueue(workflow, opts, input);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
31
80
|
await context.with(trace.setSpan(ROOT_CONTEXT, root), () => DBOS.startWorkflow(workflow, { workflowID: opts.workflowId })(input));
|
|
32
81
|
}
|
|
82
|
+
catch (cause) {
|
|
83
|
+
if (await workflowExists(opts.workflowId))
|
|
84
|
+
return;
|
|
85
|
+
throw cause;
|
|
86
|
+
}
|
|
33
87
|
finally {
|
|
34
88
|
root.end();
|
|
35
89
|
}
|
|
@@ -13,20 +13,19 @@
|
|
|
13
13
|
* injected pool already reaches the ledger.
|
|
14
14
|
*
|
|
15
15
|
* The engine owns the deletion itself, including the breadth-first walk over
|
|
16
|
-
* `parent_workflow_id` that reaches child step workflows.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* and queue rows each hold an `ON DELETE CASCADE` foreign key to
|
|
16
|
+
* `parent_workflow_id` that reaches child step workflows. It deletes the step
|
|
17
|
+
* outputs, the inputs, and the output of each workflow by name. The streams, the
|
|
18
|
+
* events, and the notifications each hold an `ON DELETE CASCADE` foreign key to
|
|
20
19
|
* `workflow_status`, so they go with the status row.
|
|
21
20
|
*/
|
|
22
21
|
import { DBOSClient } from "@dbos-inc/dbos-sdk";
|
|
23
22
|
import type { Pool } from "pg";
|
|
24
23
|
import type { Logger } from "../lib/logger.js";
|
|
25
24
|
import type { WorkflowPurger } from "./workflow-purger.js";
|
|
26
|
-
export
|
|
25
|
+
export type DbosWorkflowPurgerDeps = {
|
|
27
26
|
/** Pool onto the engine's system database — the same database the application pool holds. */
|
|
28
27
|
readonly pool: Pool;
|
|
29
28
|
readonly logger?: Logger;
|
|
30
|
-
}
|
|
29
|
+
};
|
|
31
30
|
export declare function dbosClientFor(pool: Pool, logger: Logger): Promise<DBOSClient>;
|
|
32
31
|
export declare function createDbosWorkflowPurger({ pool, logger: injected }: DbosWorkflowPurgerDeps): WorkflowPurger;
|
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
* injected pool already reaches the ledger.
|
|
14
14
|
*
|
|
15
15
|
* The engine owns the deletion itself, including the breadth-first walk over
|
|
16
|
-
* `parent_workflow_id` that reaches child step workflows.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* and queue rows each hold an `ON DELETE CASCADE` foreign key to
|
|
16
|
+
* `parent_workflow_id` that reaches child step workflows. It deletes the step
|
|
17
|
+
* outputs, the inputs, and the output of each workflow by name. The streams, the
|
|
18
|
+
* events, and the notifications each hold an `ON DELETE CASCADE` foreign key to
|
|
20
19
|
* `workflow_status`, so they go with the status row.
|
|
21
20
|
*/
|
|
21
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
22
|
+
import { z } from "zod";
|
|
22
23
|
import { DBOSClient } from "@dbos-inc/dbos-sdk";
|
|
23
24
|
import { errAsync, okAsync } from "neverthrow";
|
|
24
25
|
import { createNoopLogger } from "../lib/console-logger.js";
|
|
@@ -36,9 +37,9 @@ const SYSTEM_SCHEMA = "dbos";
|
|
|
36
37
|
* the first is nothing to purge, so the code on its own settles nothing.
|
|
37
38
|
*/
|
|
38
39
|
const UNDEFINED_TABLE = "42P01";
|
|
40
|
+
const UndefinedTableCause = z.object({ code: z.literal(UNDEFINED_TABLE) });
|
|
39
41
|
function isUndefinedTable(e) {
|
|
40
|
-
|
|
41
|
-
return cause !== null && typeof cause === "object" && "code" in cause && cause.code === UNDEFINED_TABLE;
|
|
42
|
+
return UndefinedTableCause.safeParse(e.cause).success;
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
45
|
* Route the client's own diagnostics — pool errors and idle-client errors — onto
|
|
@@ -56,7 +57,7 @@ function isUndefinedTable(e) {
|
|
|
56
57
|
* message and drops the one stack the SDK bothered to hand over.
|
|
57
58
|
*/
|
|
58
59
|
function asEngineLogger(logger) {
|
|
59
|
-
const render = (entry) => (typeof entry === "string" ? entry :
|
|
60
|
+
const render = (entry) => (typeof entry === "string" ? entry : textOf(entry));
|
|
60
61
|
return {
|
|
61
62
|
debug: (entry) => logger.debug(render(entry)),
|
|
62
63
|
info: (entry) => logger.info(render(entry)),
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { DataProfileInputSignature } from "../state/data-profile.js";
|
|
16
16
|
import type { StagedInput } from "./staged-input.js";
|
|
17
17
|
/** The fields a signature covers. A manifest entry satisfies it structurally. */
|
|
18
|
-
export
|
|
18
|
+
export type SignableInput = {
|
|
19
19
|
readonly fileId: string;
|
|
20
20
|
readonly size: number;
|
|
21
21
|
readonly mtimeMs?: number;
|
|
@@ -25,7 +25,7 @@ export interface SignableInput {
|
|
|
25
25
|
* not junk, and dropping it would be the one outcome worse than including it.
|
|
26
26
|
*/
|
|
27
27
|
readonly relativePath?: string;
|
|
28
|
-
}
|
|
28
|
+
};
|
|
29
29
|
/**
|
|
30
30
|
* Digest a staged input set, quarantine first.
|
|
31
31
|
*
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* fail-fast vs. best-effort. This module owns only the stage bodies.
|
|
13
13
|
*/
|
|
14
14
|
import { type Result } from "neverthrow";
|
|
15
|
-
import type {
|
|
15
|
+
import type { Querier } from "../state/db.js";
|
|
16
16
|
import type { ToolOutputStore } from "../loop/tool-output.js";
|
|
17
17
|
import type { LoopMessage } from "../loop/types.js";
|
|
18
|
-
import type {
|
|
18
|
+
import type { ChatProvider, EmbeddingProvider } from "../providers/types.js";
|
|
19
19
|
import type { ResolveWorkspaceRoot } from "../workspace/paths.js";
|
|
20
20
|
import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
|
|
21
21
|
import type { StepSummary } from "../schemas/step-summary.js";
|
|
@@ -29,24 +29,24 @@ import type { PostStepArtifacts, PostStepContext, StepOutputs } from "../workflo
|
|
|
29
29
|
* The subset of `SandboxStepDeps` the post-step stages consume. The sandbox-step
|
|
30
30
|
* body passes its own `deps` straight through (it is a structural superset).
|
|
31
31
|
*/
|
|
32
|
-
export
|
|
33
|
-
readonly pool:
|
|
32
|
+
export type PostStepPipelineDeps = {
|
|
33
|
+
readonly pool: Querier;
|
|
34
34
|
/** Operational logging seam; omitted falls back to no-op. */
|
|
35
35
|
readonly logger?: Logger;
|
|
36
36
|
/** LLM usage-accounting seam for the metadata + summary continuations; omitted falls back to the no-op recorder. */
|
|
37
37
|
readonly usageRecorder?: UsageRecorder;
|
|
38
38
|
/** The store of the task, thus a reference of the task stays readable in the metadata + summary continuations. */
|
|
39
39
|
readonly toolOutputStore?: ToolOutputStore;
|
|
40
|
-
/**
|
|
41
|
-
readonly provider:
|
|
40
|
+
/** The provider of the task, which the metadata and summary follow-up requests extend. */
|
|
41
|
+
readonly provider: ChatProvider;
|
|
42
42
|
/** Write-side embedder for the vector index. */
|
|
43
43
|
readonly embedding: EmbeddingProvider;
|
|
44
44
|
readonly artifactRegistry: ArtifactRegistry;
|
|
45
45
|
/** Workspace-root resolution seam (see workspace/paths.ts). */
|
|
46
46
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
47
|
-
}
|
|
47
|
+
};
|
|
48
48
|
/** The product of the file-metadata stage, as its `DBOS.runStep` checkpoints it. */
|
|
49
|
-
export
|
|
49
|
+
export type StepFileMetadata = {
|
|
50
50
|
/** One entry per manifest file, described or fallback. */
|
|
51
51
|
readonly entries: readonly FileMetadataEntry[];
|
|
52
52
|
/**
|
|
@@ -54,7 +54,7 @@ export interface StepFileMetadata {
|
|
|
54
54
|
* `DBOS.runStep`, so a replay must give the summary the same prefix.
|
|
55
55
|
*/
|
|
56
56
|
readonly messages: readonly LoopMessage[];
|
|
57
|
-
}
|
|
57
|
+
};
|
|
58
58
|
/** Describes each manifest file; a file the model cannot describe gets a deterministic fallback, never a dropped entry. */
|
|
59
59
|
export declare function generateStepFileMetadata(deps: PostStepPipelineDeps, postCtx: PostStepContext, manifest: readonly ArtifactManifestEntry[]): Promise<StepFileMetadata>;
|
|
60
60
|
/**
|
|
@@ -123,7 +123,7 @@ export async function reconcileAndRegisterStepArtifacts(deps, postCtx, manifest)
|
|
|
123
123
|
agentId: input.agentId,
|
|
124
124
|
manifest: [...manifest],
|
|
125
125
|
collector: lineageCollector,
|
|
126
|
-
|
|
126
|
+
logger: deps.logger,
|
|
127
127
|
});
|
|
128
128
|
if (reconciled.manifest.length === 0)
|
|
129
129
|
return ok(reconciled.manifest);
|
|
@@ -12,6 +12,7 @@ import { join, relative } from "node:path";
|
|
|
12
12
|
import { inferArtifactType } from "../schemas/artifact-manifest.js";
|
|
13
13
|
import { computeSha256File } from "../lib/fs-helpers.js";
|
|
14
14
|
import { IGNORED_DIRS } from "../sandbox/ignored-dirs.js";
|
|
15
|
+
import { errnoOf } from "../lib/fs-result.js";
|
|
15
16
|
/**
|
|
16
17
|
* Walk a step's writable artifact directory and produce a fully-hashed
|
|
17
18
|
* `ArtifactManifestEntry[]`. Skips IGNORED_DIRS. Paths are relative to
|
|
@@ -26,8 +27,7 @@ export async function walkStepArtifacts(args) {
|
|
|
26
27
|
entries = await readdir(dir, { withFileTypes: true });
|
|
27
28
|
}
|
|
28
29
|
catch (err) {
|
|
29
|
-
|
|
30
|
-
if (code === "ENOENT")
|
|
30
|
+
if (errnoOf(err) === "ENOENT")
|
|
31
31
|
return;
|
|
32
32
|
throw err;
|
|
33
33
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ArtifactManifestEntry } from "../schemas/artifact-manifest.js";
|
|
2
2
|
import type { ProvenanceCollector } from "../provenance/collector.js";
|
|
3
3
|
import type { Logger } from "../lib/logger.js";
|
|
4
|
-
export
|
|
4
|
+
export type ReconcileManifestInput = {
|
|
5
5
|
/** Absolute host root of the analysis's workspace tree. */
|
|
6
6
|
workspaceRoot: string;
|
|
7
7
|
/** Analysis (resource) ID. */
|
|
@@ -22,11 +22,11 @@ export interface ReconcileManifestInput {
|
|
|
22
22
|
* the sole account of why lineage changed or a step died.
|
|
23
23
|
*/
|
|
24
24
|
logger?: Logger;
|
|
25
|
-
}
|
|
26
|
-
export
|
|
25
|
+
};
|
|
26
|
+
export type ReconcileManifestResult = {
|
|
27
27
|
/** Reconciled manifest — phantoms removed, every entry rehashed from disk. */
|
|
28
28
|
manifest: ArtifactManifestEntry[];
|
|
29
29
|
/** Number of entries dropped because their file was missing. */
|
|
30
30
|
droppedCount: number;
|
|
31
|
-
}
|
|
31
|
+
};
|
|
32
32
|
export declare function reconcileManifestWithDisk(input: ReconcileManifestInput): Promise<ReconcileManifestResult>;
|
|
@@ -24,6 +24,7 @@ import path from "node:path";
|
|
|
24
24
|
import { createNoopLogger } from "../lib/console-logger.js";
|
|
25
25
|
import { classifyWithinRoot, computeSha256File, hasValidContentHash } from "../lib/fs-helpers.js";
|
|
26
26
|
import { recordArtifactReconcileDropped, recordLineageInputDropped } from "../lib/metrics.js";
|
|
27
|
+
import { errnoOf } from "../lib/fs-result.js";
|
|
27
28
|
export async function reconcileManifestWithDisk(input) {
|
|
28
29
|
const { workspaceRoot, resourceId, runId, stepId, agentId, manifest, collector } = input;
|
|
29
30
|
const logger = (input.logger ?? createNoopLogger()).named("reconcile-manifest").with({ runId, stepId, agentId });
|
|
@@ -58,7 +59,7 @@ export async function reconcileManifestWithDisk(input) {
|
|
|
58
59
|
info = await stat(absPath);
|
|
59
60
|
}
|
|
60
61
|
catch (err) {
|
|
61
|
-
if (err
|
|
62
|
+
if (errnoOf(err) === "ENOENT") {
|
|
62
63
|
logger.debug("dropping phantom entry", { path: entry.path });
|
|
63
64
|
collector.removeRecord(entry.path);
|
|
64
65
|
droppedCount++;
|
|
@@ -168,7 +169,7 @@ async function fillInputHashesFromDisk(collector, workspaceRoot, resourceId, run
|
|
|
168
169
|
info = await stat(hostPath);
|
|
169
170
|
}
|
|
170
171
|
catch (err) {
|
|
171
|
-
if (err
|
|
172
|
+
if (errnoOf(err) === "ENOENT") {
|
|
172
173
|
// Warn, not debug: a capture layer named a file this step never
|
|
173
174
|
// consumed, and the count of those is how a reader tells a noisy
|
|
174
175
|
// hook from an artifact that genuinely vanished under the step.
|
|
@@ -1,63 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RunAuthorizer — the async
|
|
2
|
+
* RunAuthorizer — run authorization at the async edge.
|
|
3
3
|
*
|
|
4
4
|
* Every async edge that starts durable work (`execute_analysis`,
|
|
5
5
|
* data-profile) must turn the caller's opaque auth into a durable `RunSession`
|
|
6
6
|
* before dispatching a workflow. That turning is the ONE place the credential
|
|
7
|
-
* kind matters (a live caller credential →
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* kind matters (a live caller credential → create a run credential; a run
|
|
8
|
+
* credential handed over by the caller → take it) — so it lives in this
|
|
9
|
+
* interface, not in the harness tools. Either way the work owns the credential.
|
|
10
|
+
* An OSS impl issues a local `RunSession` with no host call and nothing to
|
|
11
|
+
* revoke. The harness's tools depend only on this interface and never read a
|
|
12
|
+
* credential.
|
|
13
13
|
*
|
|
14
|
-
* Mirrors
|
|
14
|
+
* Mirrors `SessionPagePublisher`: a narrow interface in the harness, the managed
|
|
15
15
|
* realization injected at the composition root.
|
|
16
16
|
*/
|
|
17
17
|
import type { ResultAsync } from "neverthrow";
|
|
18
18
|
import type { AuthContext, Provenance, RunFrame, RunSession, Scope } from "../auth/types.js";
|
|
19
19
|
import type { GateFailure, NoticeFailure } from "../lib/hooks.js";
|
|
20
20
|
/**
|
|
21
|
-
* Locates a run credential when no `
|
|
22
|
-
*
|
|
23
|
-
* carrier of credential/org behind a session, downcast only by managed
|
|
21
|
+
* Locates a run credential when no `RunSession` exists: the persisted
|
|
22
|
+
* mandate id from `cortex_runs` plus the revoking caller's opaque `auth` — the
|
|
23
|
+
* sole carrier of credential/org behind a session, downcast only by managed
|
|
24
24
|
* realizations.
|
|
25
25
|
*/
|
|
26
|
-
export
|
|
27
|
-
readonly
|
|
26
|
+
export type RevokeByMandateRef = {
|
|
27
|
+
readonly mandateId: string;
|
|
28
28
|
readonly auth: AuthContext;
|
|
29
|
-
}
|
|
29
|
+
};
|
|
30
30
|
/** What an async edge knows when it authorizes a run: the opaque caller auth,
|
|
31
31
|
* the scope + provenance to stamp on the run, and the run frame to mint for. */
|
|
32
|
-
export
|
|
32
|
+
export type AuthorizeRunInput = {
|
|
33
33
|
readonly auth: AuthContext;
|
|
34
34
|
readonly scope: Scope;
|
|
35
35
|
readonly provenance: Provenance;
|
|
36
36
|
readonly frame: RunFrame;
|
|
37
|
-
}
|
|
38
|
-
export interface RunAuthorization {
|
|
39
|
-
readonly runSession: RunSession;
|
|
40
|
-
/**
|
|
41
|
-
* True when this authorizer minted the run credential and therefore owns its
|
|
42
|
-
* lifecycle — the run's terminal path must `revoke`. False when an existing
|
|
43
|
-
* run credential was reused (the caller owns it; `revoke` is a no-op).
|
|
44
|
-
*/
|
|
45
|
-
readonly ownsMandate: boolean;
|
|
46
|
-
}
|
|
37
|
+
};
|
|
47
38
|
/**
|
|
48
39
|
* Authorize durable work at the async edge. `authorize` produces the durable
|
|
49
|
-
* `RunSession
|
|
50
|
-
*
|
|
40
|
+
* `RunSession`. The terminal path of the work revokes the mandate that the work
|
|
41
|
+
* holds, whoever created it; a realization with no mandate does nothing in
|
|
42
|
+
* `revoke`.
|
|
43
|
+
*
|
|
44
|
+
* The `RunSession` is a durable reference to the run credential, not a
|
|
45
|
+
* time-bound secret: the work has no time limit, and a pause can last days. A
|
|
46
|
+
* realization resolves the reference to a short-lived credential where it
|
|
47
|
+
* calls its host, and `suspend` and `renew` follow the pause of the work.
|
|
51
48
|
*/
|
|
52
|
-
export
|
|
53
|
-
authorize(input: AuthorizeRunInput): ResultAsync<
|
|
54
|
-
revoke(
|
|
49
|
+
export type RunAuthorizer = {
|
|
50
|
+
authorize(input: AuthorizeRunInput): ResultAsync<RunSession, GateFailure>;
|
|
51
|
+
revoke(runSession: RunSession, reason: string): ResultAsync<void, NoticeFailure>;
|
|
52
|
+
/**
|
|
53
|
+
* Out-of-band revocation for paths holding no `RunSession`. Normal
|
|
54
|
+
* terminal paths use `revoke(runSession, reason)` under the run
|
|
55
|
+
* credential; `revokeByMandateId` covers external cancellation, where only
|
|
56
|
+
* the reference on `cortex_runs` survives. Local/OSS authorizers no-op —
|
|
57
|
+
* they record no reference.
|
|
58
|
+
*/
|
|
59
|
+
revokeByMandateId(ref: RevokeByMandateRef, reason: string): ResultAsync<void, NoticeFailure>;
|
|
60
|
+
/**
|
|
61
|
+
* The work paused and waits for a person: stop the run credential until a
|
|
62
|
+
* renewal. A notice — the work waits whatever the outcome. A wait that only
|
|
63
|
+
* a timer ends does not suspend, because no person resumes it.
|
|
64
|
+
*/
|
|
65
|
+
suspend(runSession: RunSession, reason: string): ResultAsync<void, NoticeFailure>;
|
|
55
66
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* credential's JWT was never persisted and only its jti survives on
|
|
60
|
-
* `cortex_runs`. Local/OSS authorizers no-op — they mint no jti.
|
|
67
|
+
* A person resumes paused work: renew the run credential under the opaque
|
|
68
|
+
* `auth` of that person. A gate — a refusal keeps the work paused and sends
|
|
69
|
+
* no resume.
|
|
61
70
|
*/
|
|
62
|
-
|
|
63
|
-
}
|
|
71
|
+
renew(runSession: RunSession, auth: AuthContext): ResultAsync<void, GateFailure>;
|
|
72
|
+
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* RunAuthorizer — the async
|
|
2
|
+
* RunAuthorizer — run authorization at the async edge.
|
|
3
3
|
*
|
|
4
4
|
* Every async edge that starts durable work (`execute_analysis`,
|
|
5
5
|
* data-profile) must turn the caller's opaque auth into a durable `RunSession`
|
|
6
6
|
* before dispatching a workflow. That turning is the ONE place the credential
|
|
7
|
-
* kind matters (a live caller credential →
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* kind matters (a live caller credential → create a run credential; a run
|
|
8
|
+
* credential handed over by the caller → take it) — so it lives in this
|
|
9
|
+
* interface, not in the harness tools. Either way the work owns the credential.
|
|
10
|
+
* An OSS impl issues a local `RunSession` with no host call and nothing to
|
|
11
|
+
* revoke. The harness's tools depend only on this interface and never read a
|
|
12
|
+
* credential.
|
|
13
13
|
*
|
|
14
|
-
* Mirrors
|
|
14
|
+
* Mirrors `SessionPagePublisher`: a narrow interface in the harness, the managed
|
|
15
15
|
* realization injected at the composition root.
|
|
16
16
|
*/
|
|
17
17
|
export {};
|
|
@@ -43,7 +43,7 @@ export declare class UnknownRunError extends Error {
|
|
|
43
43
|
readonly runId: string;
|
|
44
44
|
constructor(runId: string);
|
|
45
45
|
}
|
|
46
|
-
export
|
|
46
|
+
export type CancelRunResult = {
|
|
47
47
|
readonly runId: string;
|
|
48
48
|
/** The DBOS parent workflow id — equal to `runId` by the launch contract
|
|
49
49
|
* (`execute_analysis` launches with `workflowId: runId`). */
|
|
@@ -57,15 +57,15 @@ export interface CancelRunResult {
|
|
|
57
57
|
readonly finalStatus: RunStatus;
|
|
58
58
|
/** What actually converged. `charge` and `mandate` are vacuously true when
|
|
59
59
|
* there is nothing for this cancel to converge — a refused terminal write
|
|
60
|
-
* (the body owns them) and, for `mandate`, a row with no persisted
|
|
60
|
+
* (the body owns them) and, for `mandate`, a row with no persisted mandate id — so
|
|
61
61
|
* hosts alert on any false flag. */
|
|
62
62
|
readonly converged: {
|
|
63
63
|
readonly steps: boolean;
|
|
64
64
|
readonly charge: boolean;
|
|
65
65
|
readonly mandate: boolean;
|
|
66
66
|
};
|
|
67
|
-
}
|
|
68
|
-
export
|
|
67
|
+
};
|
|
68
|
+
export type RunCancelerDeps = {
|
|
69
69
|
readonly pool: Pool;
|
|
70
70
|
readonly runCharge: RunCharge;
|
|
71
71
|
readonly runAuthorizer: RunAuthorizer;
|
|
@@ -78,13 +78,13 @@ export interface RunCancelerDeps {
|
|
|
78
78
|
/** The run end that the body recorded: `null` when it recorded none, a rejection when the read fails.
|
|
79
79
|
* The value is unchecked engine data. Production default: `DBOSClient.getEvent` with a zero timeout. */
|
|
80
80
|
readonly readRecordedRunEnd?: (runId: string) => Promise<unknown>;
|
|
81
|
-
}
|
|
82
|
-
export
|
|
81
|
+
};
|
|
82
|
+
export type RunCanceler = {
|
|
83
83
|
/**
|
|
84
84
|
* Cancel the run's workflows and converge its ledgers. Rejects when the
|
|
85
85
|
* engine cancel itself fails (retry-safe: nothing converged) or the run is
|
|
86
86
|
* unknown; convergence-phase failures resolve with their flag false.
|
|
87
87
|
*/
|
|
88
88
|
cancel(runId: string, session: AgentSession): Promise<CancelRunResult>;
|
|
89
|
-
}
|
|
89
|
+
};
|
|
90
90
|
export declare function createRunCanceler(deps: RunCancelerDeps): RunCanceler;
|
|
@@ -38,6 +38,7 @@ import { elapsedSinceIso, recordRunCompleted, recordStepCompleted } from "../lib
|
|
|
38
38
|
import { unwrapOrThrow } from "../lib/result.js";
|
|
39
39
|
import { markRunCanceledIfActive, queryRun, updateRunStatus } from "../state/runs.js";
|
|
40
40
|
import { cancelRunningStepExecutions, queryStepsByRun, sweepPendingStepExecutions } from "../state/step-executions.js";
|
|
41
|
+
import { clearPausesOfWork } from "../state/paused-work.js";
|
|
41
42
|
import { createDbosWorkflowPurger, dbosClientFor } from "./dbos-workflow-purger.js";
|
|
42
43
|
import { parseRecordedRunEnd, RUN_END_EVENT_KEY } from "./run-end-record.js";
|
|
43
44
|
/** The reason stamped on the run row and the revoke — the same literal
|
|
@@ -51,7 +52,7 @@ export class UnknownRunError extends Error {
|
|
|
51
52
|
this.name = "UnknownRunError";
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
|
-
const TERMINAL = new Set(["completed", "partial", "failed", "canceled"
|
|
55
|
+
const TERMINAL = new Set(["completed", "partial", "failed", "canceled"]);
|
|
55
56
|
export function createRunCanceler(deps) {
|
|
56
57
|
const { pool, runCharge, runAuthorizer } = deps;
|
|
57
58
|
const logger = (deps.logger ?? createNoopLogger()).named("run-canceler");
|
|
@@ -117,6 +118,10 @@ export function createRunCanceler(deps) {
|
|
|
117
118
|
catch (err) {
|
|
118
119
|
logger.error("late-child cancel sweep failed", { runId, ...logger.errorFields(err) });
|
|
119
120
|
}
|
|
121
|
+
// The cancel ended each wait of a paused step, and no workflow of the run deletes its row again.
|
|
122
|
+
const cleared = await clearPausesOfWork(pool, runId);
|
|
123
|
+
if (cleared.isErr())
|
|
124
|
+
logger.error("the pauses of the run did not clear", { runId, op: cleared.error.op });
|
|
120
125
|
// The run end that the body recorded after a failed status write. A value
|
|
121
126
|
// that is not a recorded run end counts as a failed read.
|
|
122
127
|
let recorded = null;
|
|
@@ -171,15 +176,17 @@ export function createRunCanceler(deps) {
|
|
|
171
176
|
const atMs = Date.now();
|
|
172
177
|
for (const step of cutSteps ?? []) {
|
|
173
178
|
const durationMs = elapsedSinceIso(step.startedAt, atMs);
|
|
174
|
-
|
|
179
|
+
const event = {
|
|
175
180
|
type: "step_completed",
|
|
176
181
|
analysisId: row.analysisId,
|
|
177
182
|
runId,
|
|
178
183
|
stepId: step.stepId,
|
|
179
184
|
status: "canceled",
|
|
180
|
-
...(durationMs !== undefined ? { durationMs } : {}),
|
|
181
185
|
atMs,
|
|
182
|
-
}
|
|
186
|
+
};
|
|
187
|
+
if (durationMs !== undefined)
|
|
188
|
+
event.durationMs = durationMs;
|
|
189
|
+
emitGuarded(event, session);
|
|
183
190
|
}
|
|
184
191
|
emitGuarded({
|
|
185
192
|
type: "run_completed",
|
|
@@ -213,12 +220,12 @@ export function createRunCanceler(deps) {
|
|
|
213
220
|
// because there is nothing for this cancel to converge. With a recorded run
|
|
214
221
|
// end the body did both acts, and the flags are its results.
|
|
215
222
|
let charge = recorded !== null ? recorded.closed : writeOutcome === "refused";
|
|
216
|
-
let mandate = recorded !== null ? recorded.revoked : writeOutcome === "refused" || (writeOutcome === "failed" && row.
|
|
223
|
+
let mandate = recorded !== null ? recorded.revoked : writeOutcome === "refused" || (writeOutcome === "failed" && row.mandateId === null);
|
|
217
224
|
if (transitioned && recorded === null) {
|
|
218
225
|
charge = await deliverNotice(logger.with({ runId }), "RunCharge.close", runCharge.close({ analysisId: row.analysisId, runId, outcome: { kind: "canceled" }, session }));
|
|
219
226
|
mandate =
|
|
220
|
-
row.
|
|
221
|
-
(await deliverNotice(logger.with({ runId,
|
|
227
|
+
row.mandateId === null ||
|
|
228
|
+
(await deliverNotice(logger.with({ runId, mandateId: row.mandateId }), "RunAuthorizer.revokeByMandateId", runAuthorizer.revokeByMandateId({ mandateId: row.mandateId, auth: session.auth }, EXTERNAL_CANCEL_REASON)));
|
|
222
229
|
}
|
|
223
230
|
// No transition means the run reached a terminal state on its own (or the
|
|
224
231
|
// write failed) — report the row as it stands rather than claiming `canceled`.
|
|
@@ -12,11 +12,10 @@ export declare const RUN_END_EVENT_KEY = "run-end";
|
|
|
12
12
|
*/
|
|
13
13
|
export declare const RecordedRunEndSchema: z.ZodObject<{
|
|
14
14
|
status: z.ZodEnum<{
|
|
15
|
-
|
|
15
|
+
canceled: "canceled";
|
|
16
16
|
completed: "completed";
|
|
17
|
+
failed: "failed";
|
|
17
18
|
partial: "partial";
|
|
18
|
-
canceled: "canceled";
|
|
19
|
-
suspended_insufficient_funds: "suspended_insufficient_funds";
|
|
20
19
|
}>;
|
|
21
20
|
error: z.ZodNullable<z.ZodString>;
|
|
22
21
|
closed: z.ZodBoolean;
|
|
@@ -17,14 +17,6 @@ import type { ChatPart } from "../contracts/chat-parts.js";
|
|
|
17
17
|
* contract is the `ChatPart` union, so anything the registry does not
|
|
18
18
|
* classify is not deliverable — which also covers a part written by a producer
|
|
19
19
|
* newer than the reader.
|
|
20
|
-
*
|
|
21
|
-
* The registry is keyed by the discriminant alone, so this validates `type` and
|
|
22
|
-
* trusts the producer for the payload. The part schemas in `contracts/schemas/`
|
|
23
|
-
* are for a consumer at the edge of the package, which parses what it receives.
|
|
24
|
-
* Both ends of this stream are typed against the same union inside this package,
|
|
25
|
-
* so the discriminant is the boundary that can drift (a producer that emits
|
|
26
|
-
* something else entirely), and a part that fails its schema still reaches the
|
|
27
|
-
* consumer for its own check.
|
|
28
20
|
*/
|
|
29
21
|
export declare function parseRunEventPart(value: unknown): ChatPart | null;
|
|
30
22
|
/**
|