@sema-agent/server 7.147.0 → 7.149.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/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
|
@@ -1,45 +1,50 @@
|
|
|
1
1
|
import { redactErrorMessage, redactHead, redactTerminalResult } from "../../observability/run-terminal.js";
|
|
2
2
|
import { runWithVerification, runCascade, taskNotificationDedupKey, uuidv7 } from "@sema-agent/core";
|
|
3
3
|
import { heldFor } from "../../peer-seat.js";
|
|
4
|
-
import { graftParkToolCallId, markChildrenStoppedByUserOnAbort, syncRefusalHttpStatus, zeroWorkRefusalFacts, releaseKeyIfZeroWorkRefusal, createPromptCommitReader, settleResumeAnchor, HEARTBEAT_MS } from "../../runs.js";
|
|
5
|
-
import {
|
|
4
|
+
import { beatRunHeartbeat, graftParkToolCallId, heldParkOf, markChildrenStoppedByUserOnAbort, syncRefusalHttpStatus, zeroWorkRefusalFacts, releaseKeyIfZeroWorkRefusal, createPromptCommitReader, settleResumeAnchor, TurnAnchorCapture, HEARTBEAT_MS } from "../../runs.js";
|
|
5
|
+
import { commitParkRow } from "../../park-row-commit.js";
|
|
6
|
+
import { atHostBoundary, failureCodeOf, sealResultForExit, outwardPlane } from "../../terminal.js";
|
|
6
7
|
import { voidVerifierPauseCard } from "../../verifier-pause-card.js";
|
|
7
|
-
import {
|
|
8
|
+
import { withSubject } from "../../observability/principal-context.js";
|
|
8
9
|
import { fleetRunPublisher, fleetRunLabels, fleetRunResiduals, nameFleetRowOnDelivery } from "../../fleet/fleet-bus.js";
|
|
9
10
|
import { defaultSubagentTailBus } from "../../fleet/subagent-tail-bus.js";
|
|
10
11
|
import { createLiveModelText, modelStreamOfTask } from "../../trace/model-segment.js";
|
|
11
12
|
import { emitPendingWorkflowCompletions, taskNotificationInboxEntry, taskNotificationStreamKeyOf, NotifiedKeys } from "../../orchestration/workflow-completion-inbox.js";
|
|
12
|
-
import { createForwardAppendFailedNote, createLedgerSink
|
|
13
|
+
import { createForwardAppendFailedNote, createLedgerSink } from "../../trace/ledger-sink.js";
|
|
14
|
+
import { createHitlTransport } from "../../hitl-delivery.js";
|
|
13
15
|
import { registerEngineNoticeLeg } from "../../trace/engine-notice-wire.js";
|
|
14
16
|
import { clearTurnActivity, readTurnActivityMs, recordTurnActivity } from "../../turn-activity.js";
|
|
15
17
|
import { buildCancelledLedgerRow, createRunAbort, mintCancelledResult } from "../../run-cancel-context.js";
|
|
16
18
|
import { recordResourceWindow } from "../../resource-window.js";
|
|
17
19
|
import { redactSecrets } from "../../trace/redact.js";
|
|
18
20
|
import { writeLiveFrame, writeLiveHeartbeat } from "../live-frame.js";
|
|
19
|
-
import { contextUsageEventData, turnEndEventData, toolStartEventData, toolEndEventData, taskProgressEventData, taskStartedEventData, taskNotificationEventData, compactedEventData, diagnosticsEventData, brainStatusEventData, steeringInjectedEventData, compactionOutcomeEventData, compactionStartedEventData, workspaceChangedEventData, wiringManifestFaceEventData, toolRosterDeltaEventData, toolProgressEventData, toolDisclosureEventData, humanInputEventData, appendModelUsageDelta, attachModelUsage, createPromptManifestSeat,
|
|
21
|
+
import { contextUsageEventData, turnEndEventData, toolStartEventData, toolEndEventData, taskProgressEventData, taskStartedEventData, taskNotificationEventData, compactedEventData, diagnosticsEventData, brainStatusEventData, steeringInjectedEventData, compactionOutcomeEventData, compactionStartedEventData, workspaceChangedEventData, wiringManifestFaceEventData, toolRosterDeltaEventData, toolProgressEventData, toolDisclosureEventData, humanInputEventData, appendModelUsageDelta, attachModelUsage, createPromptManifestSeat, identityFields } from "../../trace/project.js";
|
|
20
22
|
import { cascadeConfig, fillRunPreviewOnDelivery, runMeta } from "../run-meta.js";
|
|
21
23
|
import { idemCallerOf, inflightKeyOf, submissionIdemOf } from "../idempotency.js";
|
|
22
|
-
import { replayOfExistingRun } from "../submit-replay.js";
|
|
23
|
-
import { httpErrorCode, sendJson,
|
|
24
|
+
import { isReplayedOutcome, replayedOutcome, replayOfExistingRun } from "../submit-replay.js";
|
|
25
|
+
import { httpErrorCode, sendJson, sseHeaders } from "../send.js";
|
|
24
26
|
import { collectSsePreamble } from "../sse-log.js";
|
|
25
27
|
import { buildApprovalPreamble } from "../../approval-card.js";
|
|
26
|
-
import {
|
|
28
|
+
import { approvalLegOriginOf } from "../../approval-leg-origin.js";
|
|
29
|
+
import { approvalPreambleReplays, declaredApprovalFrameFamilies, resolveApprovalLeg, resolveStreamApprovalGate } from "../../tool-approval.js";
|
|
27
30
|
import { buildActiveRunConflict, isActiveRunConflictBody, toDoneFrameResult } from "../active-run-conflict.js";
|
|
28
|
-
import { commitExecutionContext } from "../execution-context.js";
|
|
31
|
+
import { SUBMISSION_CLAIM_FACE, commitExecutionContext, faultedAnswerOf } from "../execution-context.js";
|
|
29
32
|
import { rootSessionAbsentAnswer } from "../execution-context.js";
|
|
33
|
+
import { recheckClaimBeforeLaunch, startClaimHeartbeat } from "../claim-heartbeat.js";
|
|
30
34
|
import { timeClaim } from "../claim-latency.js";
|
|
31
35
|
import { commitSessionInheritEnv } from "../session-inherit-env.js";
|
|
32
|
-
import { headerStr,
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
36
|
+
import { headerStr, gatedPerson, gatedSubject, explicitOperatorOk, runIdentityOf } from "../principal-gate.js";
|
|
37
|
+
import { recoveredSubject } from "../../owner-faces.js";
|
|
38
|
+
import { recordFailOpen } from "../../observability/fail-open.js";
|
|
39
|
+
import { buildSyncSubmitBody, syncSubmitBodyOfRow } from "../sync-submit-body.js";
|
|
35
40
|
import { assertNever } from "../route-ctx.js";
|
|
36
41
|
import * as facts from "../../capability-facts.js";
|
|
37
|
-
import { persistSubmissionCtx } from "../submit-ctx.js";
|
|
42
|
+
import { persistSubmissionCtx, SUBMIT_CTX_CLAIM_LOST } from "../submit-ctx.js";
|
|
38
43
|
import { withModelReachScope } from "../../model-reach-scope.js";
|
|
39
44
|
import { createInstructionSelectionLeg } from "../../instruction-selection.js";
|
|
40
|
-
import { fieldConflictFacts } from "../../field-conflict.js";
|
|
41
45
|
import { refusalBody } from "../refusal-body.js";
|
|
42
46
|
import { heldWorkflowParkDecisions } from "../../parked-decide.js";
|
|
47
|
+
import { compositionLegRoot } from "../../task-cwd.js";
|
|
43
48
|
import { createSessionWorkspaceRecorder, sessionWorkspaceStoreOf } from "../../session-workspace.js";
|
|
44
49
|
const DISCONNECT_PARK_GRACE_MS = 10_000;
|
|
45
50
|
async function mintSubmitExitResult(result, checkpoints) {
|
|
@@ -70,8 +75,8 @@ function refusalDoneResult(body) {
|
|
|
70
75
|
const b = body;
|
|
71
76
|
return { status: "failed", errorCode: String(b.errorCode), errorMessage: String(b.error) };
|
|
72
77
|
}
|
|
73
|
-
function
|
|
74
|
-
return resp.status === 200 ? resp.body : refusalDoneResult(resp.body);
|
|
78
|
+
function doneFrameOfOutcome(resp) {
|
|
79
|
+
return { type: "done", result: resp.status === 200 ? resp.body : refusalDoneResult(resp.body), ...(isReplayedOutcome(resp) ? { replay: true } : {}) };
|
|
75
80
|
}
|
|
76
81
|
const MULTI_ATTEMPT_NO_EVENT_CHANNEL_NOTICE = "verify / cascade ran with their normal multi-attempt semantics, but the synchronous /v1/tasks endpoint has no event channel — no status/progress frames exist to replay on this shape. For status / progress / delegated-child frames and the terminal done, submit via POST /v1/runs and read GET /v1/runs/:id/events; note that verify / cascade legs carry no per-turn stream there either (no wiring_manifest / text / turn_end frames — the engine runs those legs as result-returning attempts).";
|
|
77
82
|
export async function handleTasks(req, res, match, ctx) {
|
|
@@ -99,18 +104,18 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
99
104
|
const liveStream = match.decl.id === "tasks-submit-stream";
|
|
100
105
|
{
|
|
101
106
|
const rawIdem = headerStr(req.headers["idempotency-key"]);
|
|
102
|
-
const submitter =
|
|
107
|
+
const submitter = gatedSubject(req, deps.config);
|
|
103
108
|
const keyedBody = rawIdem ? await readJson(req) : undefined;
|
|
104
109
|
const idem = rawIdem ? submissionIdemOf(rawIdem, idemCallerOf(req, ctx), keyedBody) : undefined;
|
|
105
110
|
const inflightKey = idem ? inflightKeyOf(idem, "sync") : undefined;
|
|
106
111
|
const cached = inflightKey ? idemCache.peek(inflightKey) : undefined;
|
|
107
112
|
const keyedRow = idem && !cached && deps.runStore ? await deps.runStore.getRunByIdem(idem.key) : undefined;
|
|
108
113
|
if (keyedRow && deps.runStore) {
|
|
109
|
-
const replay = await replayOfExistingRun(keyedRow, {
|
|
114
|
+
const replay = await replayOfExistingRun(keyedRow, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
110
115
|
if (liveStream && replay.status === 200) {
|
|
111
116
|
sseHeaders(res, { "x-task-id": keyedRow.taskId });
|
|
112
117
|
writeMetaFrame(res, keyedRow.taskId, keyedRow.sessionId);
|
|
113
|
-
writeLiveFrame(res,
|
|
118
|
+
writeLiveFrame(res, doneFrameOfOutcome(replay));
|
|
114
119
|
res.end();
|
|
115
120
|
}
|
|
116
121
|
else {
|
|
@@ -128,9 +133,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
128
133
|
hb.unref?.();
|
|
129
134
|
res.on("close", () => clearInterval(hb));
|
|
130
135
|
try {
|
|
131
|
-
const resp = await cached;
|
|
136
|
+
const resp = replayedOutcome(await cached);
|
|
132
137
|
if (!res.writableEnded)
|
|
133
|
-
writeLiveFrame(res,
|
|
138
|
+
writeLiveFrame(res, doneFrameOfOutcome(resp));
|
|
134
139
|
}
|
|
135
140
|
finally {
|
|
136
141
|
clearInterval(hb);
|
|
@@ -138,7 +143,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
138
143
|
res.end();
|
|
139
144
|
}
|
|
140
145
|
else {
|
|
141
|
-
const resp = await cached;
|
|
146
|
+
const resp = replayedOutcome(await cached);
|
|
142
147
|
sendSubmitResult(res, resp);
|
|
143
148
|
}
|
|
144
149
|
return;
|
|
@@ -150,7 +155,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
150
155
|
if (!prepared)
|
|
151
156
|
return;
|
|
152
157
|
try {
|
|
153
|
-
runSlot = admitRun(req, res);
|
|
158
|
+
runSlot = await admitRun(req, res, prepared.seat);
|
|
154
159
|
if (runSlot === undefined)
|
|
155
160
|
return;
|
|
156
161
|
const declaredFamilies = declaredApprovalFrameFamilies(prepared.body.settings);
|
|
@@ -165,32 +170,32 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
165
170
|
};
|
|
166
171
|
};
|
|
167
172
|
const assembleApprovalLeg = (streamApprovalOn) => resolveApprovalLeg({ ...approvalLegInput(streamApprovalOn), nowMonotonicMs: performance.now() });
|
|
168
|
-
const principal = prepared.auth?.
|
|
169
|
-
const wiringOperatorFace = explicitOperatorOk(
|
|
173
|
+
const principal = prepared.auth?.subject;
|
|
174
|
+
const wiringOperatorFace = explicitOperatorOk(gatedPerson(req, deps.config), deps.config);
|
|
170
175
|
let wiringReceipt;
|
|
171
176
|
const instructionLeg = createInstructionSelectionLeg();
|
|
172
177
|
const legWiringSections = () => ({ instructions: instructionLeg.segment(), skills: prepared.legFacts?.skills });
|
|
173
178
|
const withRunReceipt = (out) => wiringReceipt !== undefined ? { ...out, wiringManifest: wiringReceipt } : out;
|
|
174
179
|
if (liveStream) {
|
|
175
|
-
if (prepared.verify || prepared.cascade) {
|
|
176
|
-
sendError(res, 400, "request.field_conflict", "verify / cascade are not supported on /v1/tasks/stream (both are multi-attempt, not a single stream) — use /v1/tasks or /v1/runs", fieldConflictFacts("cascade_verify", prepared.verify ? (prepared.cascade ? ["verify", "cascade"] : ["verify"]) : ["cascade"]));
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
180
|
const earlyDurableTid = facts.durableRuns(deps).available ? uuidv7() : undefined;
|
|
180
181
|
const streamLegStartedAt = Date.now();
|
|
181
182
|
const detachOnDisconnect = headerStr(req.headers["x-detach-on-disconnect"]) === "true";
|
|
182
|
-
if (detachOnDisconnect && earlyDurableTid === undefined) {
|
|
183
|
-
sendError(res, 400, "request.precondition_unmet", "x-detach-on-disconnect requires a durable run (a run store + sessionId) — without one the detached result would be unqueryable");
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
183
|
reqState.streamTaskId = earlyDurableTid;
|
|
187
184
|
let usageKey;
|
|
188
185
|
let manifestSeat;
|
|
189
186
|
reqState.streamDetached = detachOnDisconnect;
|
|
187
|
+
let heldTerminal;
|
|
188
|
+
const writeTerminalFrame = (frame) => {
|
|
189
|
+
if (heldTerminal === undefined && prepared.seat.keepsWithoutWithdraw)
|
|
190
|
+
writeLiveFrame(res, frame);
|
|
191
|
+
else
|
|
192
|
+
heldTerminal = frame;
|
|
193
|
+
};
|
|
194
|
+
let stopClaimHeartbeat;
|
|
190
195
|
sseHeaders(res, earlyDurableTid ? { "x-task-id": earlyDurableTid } : undefined);
|
|
191
196
|
if (earlyDurableTid)
|
|
192
197
|
writeMetaFrame(res, earlyDurableTid, prepared.spec.sessionId, prepared.warnings);
|
|
193
|
-
const ac = createRunAbort(prepared.auth?.
|
|
198
|
+
const ac = createRunAbort(prepared.auth?.subject ?? null);
|
|
194
199
|
let closed = false;
|
|
195
200
|
let detachLogged = false;
|
|
196
201
|
let disconnectParkGrace;
|
|
@@ -235,18 +240,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
235
240
|
checkpointStore: deps.checkpointStore,
|
|
236
241
|
});
|
|
237
242
|
const replaySessionId = approvalPreambleReplays(approvalLegInput(replayGate.active)) ? prepared.spec.sessionId : undefined;
|
|
238
|
-
|
|
239
|
-
const presentedCompleted = new Set();
|
|
240
|
-
const admitPresentedComplete = (askId) => {
|
|
241
|
-
if (!presentedOnConnection.has(askId))
|
|
242
|
-
return true;
|
|
243
|
-
if (presentedCompleted.has(askId))
|
|
244
|
-
return false;
|
|
245
|
-
presentedCompleted.add(askId);
|
|
246
|
-
return true;
|
|
247
|
-
};
|
|
243
|
+
let connectionTransport;
|
|
248
244
|
if (replaySessionId) {
|
|
249
|
-
const replayOwner =
|
|
245
|
+
const replayOwner = gatedSubject(req, deps.config) ?? null;
|
|
250
246
|
const askStore = replayGate.active ? replayGate.askStore : undefined;
|
|
251
247
|
let presentedAskIds = [];
|
|
252
248
|
const preambleFrames = await collectSsePreamble(async (signal) => {
|
|
@@ -265,13 +261,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
265
261
|
for (const f of preambleFrames)
|
|
266
262
|
writeLiveFrame(res, { ...f });
|
|
267
263
|
if (deps.toolApproval && preambleFrames.length > 0) {
|
|
268
|
-
for (const askId of presentedAskIds)
|
|
269
|
-
presentedOnConnection.add(askId);
|
|
270
264
|
const unwatch = deps.toolApproval.watchPresentedCards(presentedAskIds, (frame) => {
|
|
271
|
-
if (res.writableEnded || res.destroyed
|
|
265
|
+
if (res.writableEnded || res.destroyed)
|
|
272
266
|
return;
|
|
273
267
|
writeLiveFrame(res, { ...frame });
|
|
274
|
-
});
|
|
268
|
+
}, () => connectionTransport);
|
|
275
269
|
res.once("close", unwatch);
|
|
276
270
|
}
|
|
277
271
|
}
|
|
@@ -286,8 +280,14 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
286
280
|
const runStreamSubmitLeg = async () => {
|
|
287
281
|
ranLive = true;
|
|
288
282
|
let finalResult;
|
|
283
|
+
let heldCard;
|
|
284
|
+
const commitSyncPark = (runStore, runId, word, parkResult, cardToken) => commitParkRow({
|
|
285
|
+
runStore, taskId: runId, word, result: parkResult, card: { token: cardToken, sessionId: prepared.spec.sessionId }, cards: deps.checkpointStore, leg: "sync",
|
|
286
|
+
legId: heldLegOf(durableLegId, runId), staleWindowMs: deps.config.runStaleSec * 1000,
|
|
287
|
+
});
|
|
289
288
|
let runRowSettled = false;
|
|
290
289
|
let durableTaskId;
|
|
290
|
+
let durableLegId;
|
|
291
291
|
let durableHeartbeat;
|
|
292
292
|
const cancelledResult = (errorMessage, cause) => mintCancelledResult({ taskId: durableTaskId ?? "", sessionId: prepared.spec.sessionId, startedAtMs: streamLegStartedAt, message: errorMessage, cause });
|
|
293
293
|
let userMsgEntryId;
|
|
@@ -302,46 +302,63 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
302
302
|
anchorPut = true;
|
|
303
303
|
await settleResumeAnchor(() => store.put(prepared.spec.sessionId, key, entryId, principal ?? null), { leg: "stream", kind: "prompt" });
|
|
304
304
|
};
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
305
|
+
try {
|
|
306
|
+
if (deps.runStore) {
|
|
307
|
+
const tid = earlyDurableTid ?? uuidv7();
|
|
308
|
+
const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
|
|
309
|
+
if (created.ok)
|
|
310
|
+
clearTurnActivity(tid);
|
|
311
|
+
if (created.ok)
|
|
312
|
+
recordResourceWindow(tid, prepared.spec.resourceSuspend);
|
|
313
|
+
if (created.existing) {
|
|
314
|
+
const replay = await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
315
|
+
writeTerminalFrame(doneFrameOfOutcome(replay));
|
|
316
|
+
return replay;
|
|
317
|
+
}
|
|
318
|
+
if (created.sessionAbsent) {
|
|
319
|
+
const refused = rootSessionAbsentAnswer();
|
|
320
|
+
writeTerminalFrame(doneFrameOfOutcome(refused));
|
|
321
|
+
return refused;
|
|
322
|
+
}
|
|
323
|
+
if (!created.ok) {
|
|
324
|
+
const conflict = await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId);
|
|
325
|
+
const refused = { status: 409, body: conflict };
|
|
326
|
+
writeTerminalFrame(doneFrameOfOutcome(refused));
|
|
327
|
+
return refused;
|
|
328
|
+
}
|
|
329
|
+
prepared.seat.noteOwnRun(tid);
|
|
330
|
+
stopClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
|
|
331
|
+
const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid, legId: created.legId }, prepared.execution);
|
|
332
|
+
if (placementReject) {
|
|
333
|
+
writeTerminalFrame(doneFrameOfOutcome(placementReject));
|
|
334
|
+
return placementReject;
|
|
335
|
+
}
|
|
336
|
+
durableTaskId = tid;
|
|
337
|
+
durableLegId = created.legId;
|
|
338
|
+
fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
|
|
321
339
|
}
|
|
322
|
-
if (
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
340
|
+
if (deps.checkpointStore) {
|
|
341
|
+
const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId, legId: heldLegOf(durableLegId, durableTaskId) } : undefined, prepared);
|
|
342
|
+
if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST) {
|
|
343
|
+
writeTerminalFrame(doneFrameOfOutcome(ctxRefusal));
|
|
344
|
+
return ctxRefusal;
|
|
345
|
+
}
|
|
327
346
|
}
|
|
328
|
-
const
|
|
329
|
-
if (
|
|
330
|
-
|
|
331
|
-
return
|
|
347
|
+
const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId, heldLegOf(durableLegId, durableTaskId)) : undefined;
|
|
348
|
+
if (lostClaim !== undefined) {
|
|
349
|
+
writeTerminalFrame(doneFrameOfOutcome(lostClaim));
|
|
350
|
+
return lostClaim;
|
|
332
351
|
}
|
|
333
|
-
durableTaskId
|
|
334
|
-
|
|
352
|
+
if (durableTaskId !== undefined && detachOnDisconnect)
|
|
353
|
+
prepared.seat.markRecord();
|
|
335
354
|
}
|
|
336
|
-
|
|
337
|
-
const
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
return ctxRefusal;
|
|
341
|
-
}
|
|
355
|
+
catch (e) {
|
|
356
|
+
const claimFault = faultedAnswerOf(e, SUBMISSION_CLAIM_FACE.faulted);
|
|
357
|
+
writeTerminalFrame(doneFrameOfOutcome(claimFault));
|
|
358
|
+
return claimFault;
|
|
342
359
|
}
|
|
343
360
|
commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
|
|
344
|
-
markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.
|
|
361
|
+
markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
|
|
345
362
|
let ledgerSink;
|
|
346
363
|
let ledgerTerminal = false;
|
|
347
364
|
if (durableTaskId && deps.runStore) {
|
|
@@ -353,8 +370,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
353
370
|
manifestSeat = createPromptManifestSeat(deps.promptManifests, tid);
|
|
354
371
|
const owner = principal ?? null;
|
|
355
372
|
const abortFromVerb = () => ac.abort("cancel_verb");
|
|
373
|
+
stopClaimHeartbeat?.();
|
|
356
374
|
durableHeartbeat = setInterval(() => {
|
|
357
|
-
|
|
375
|
+
beatRunHeartbeat(rs, tid, owner, () => ac.abort("stall_verdict"), () => undefined);
|
|
358
376
|
if (!ac.signal.aborted) {
|
|
359
377
|
void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
|
|
360
378
|
abortFromVerb(); }).catch(() => undefined);
|
|
@@ -369,7 +387,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
369
387
|
let fleetPub;
|
|
370
388
|
try {
|
|
371
389
|
fleetPub = durableTaskId
|
|
372
|
-
? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope:
|
|
390
|
+
? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope: gatedSubject(req, deps.config) ?? "default", rootTaskId: durableTaskId, sessionId: prepared.spec.sessionId, ...fleetRunLabels(prepared.acceptance.objectiveAtSubmit) })
|
|
373
391
|
: undefined;
|
|
374
392
|
if (fleetPub)
|
|
375
393
|
nameFleetRowOnDelivery(prepared.acceptance, fleetPub);
|
|
@@ -406,11 +424,12 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
406
424
|
const noticeLedger = ledgerSink;
|
|
407
425
|
const unregisterEngineNotice = registerEngineNoticeLeg({
|
|
408
426
|
sessionId: prepared.spec.sessionId,
|
|
427
|
+
...(durableTaskId !== undefined ? { taskId: durableTaskId } : {}),
|
|
409
428
|
...(prepared.engineNotices !== undefined ? { pending: prepared.engineNotices } : {}),
|
|
410
429
|
live: (row) => {
|
|
411
430
|
if (res.writableEnded || res.destroyed) {
|
|
412
431
|
if (noticeLedger === undefined)
|
|
413
|
-
recordFailOpen(
|
|
432
|
+
recordFailOpen("server.stream.frame-dropped-stream-closed", "frame=engine_notice");
|
|
414
433
|
return;
|
|
415
434
|
}
|
|
416
435
|
writeLiveFrame(res, { type: "engine_notice", ...row });
|
|
@@ -425,7 +444,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
425
444
|
await deps.userInputLedger.announceUndrained({ sessionId: prepared.spec.sessionId, taskId: durableTaskId });
|
|
426
445
|
try {
|
|
427
446
|
const streamBody = async () => {
|
|
428
|
-
await
|
|
447
|
+
await withSubject(recoveredSubject(principal), async () => {
|
|
429
448
|
const tailContentMode = prepared.spec.forwardSubagentEvents === true ? "on" : "progress_only";
|
|
430
449
|
const childText = createLiveModelText();
|
|
431
450
|
const topText = createLiveModelText();
|
|
@@ -510,10 +529,13 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
510
529
|
const causeAtDone = ev.type === "done" ? ac.cause() : undefined;
|
|
511
530
|
await deps.userInputLedger?.observeLegEvent(liveStream, ev);
|
|
512
531
|
await prepared.acceptance.observe(ev);
|
|
532
|
+
if (ev.type === "done")
|
|
533
|
+
prepared.acceptance.settle(ev.result);
|
|
513
534
|
await liveWorkspace.observe(ev);
|
|
514
535
|
if (ledgerSink)
|
|
515
536
|
await manifestSeat?.drain(ledgerSink.append);
|
|
516
537
|
if (ev.type === "done") {
|
|
538
|
+
heldCard = heldParkOf(ev.result);
|
|
517
539
|
finalResult = await mintSubmitExitResult(ev.result, deps.checkpointStore);
|
|
518
540
|
if (durableTaskId && finalResult)
|
|
519
541
|
finalResult = { ...finalResult, taskId: durableTaskId };
|
|
@@ -523,7 +545,8 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
523
545
|
finalizeTaskResult(ev.result, principal, prepared.spec.objective);
|
|
524
546
|
noteRunOutcome(finalResult);
|
|
525
547
|
await putRewindAnchor();
|
|
526
|
-
|
|
548
|
+
if (!(durableTaskId && deps.runStore && deps.checkpointStore && heldCard !== undefined))
|
|
549
|
+
settleFleet(outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
|
|
527
550
|
if (ledgerSink && finalResult) {
|
|
528
551
|
if (usageKey && deps.modelUsage && deps.runStore && durableTaskId) {
|
|
529
552
|
const rs2 = deps.runStore;
|
|
@@ -534,7 +557,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
534
557
|
await ledgerSink.onDone(finalResult);
|
|
535
558
|
ledgerTerminal = true;
|
|
536
559
|
}
|
|
537
|
-
|
|
560
|
+
writeTerminalFrame({ ...ev, result: finalResult });
|
|
538
561
|
continue;
|
|
539
562
|
}
|
|
540
563
|
if (ledgerSink) {
|
|
@@ -617,12 +640,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
617
640
|
}
|
|
618
641
|
else if (ev.type === "turn_end" || ev.type === "message_committed" || ev.type === "context_usage") {
|
|
619
642
|
const e = ev;
|
|
620
|
-
const ident = liveIdentityFields(e);
|
|
621
643
|
const arm = ev.type === "turn_end"
|
|
622
|
-
? { type: "turn_end", ...turnEndEventData(ev)
|
|
644
|
+
? { type: "turn_end", ...turnEndEventData(ev) }
|
|
623
645
|
: ev.type === "message_committed"
|
|
624
|
-
? { type: "message_committed", entryId: e.entryId, role: e.role, ...(e.toolCallId !== undefined ? { toolCallId: e.toolCallId } : {}), ...
|
|
625
|
-
: { type: "context_usage", ...contextUsageEventData(ev)
|
|
646
|
+
? { type: "message_committed", entryId: e.entryId, role: e.role, ...(e.toolCallId !== undefined ? { toolCallId: e.toolCallId } : {}), ...identityFields(e) }
|
|
647
|
+
: { type: "context_usage", ...contextUsageEventData(ev) };
|
|
626
648
|
writeLiveFrame(res, arm);
|
|
627
649
|
}
|
|
628
650
|
else {
|
|
@@ -633,22 +655,20 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
633
655
|
});
|
|
634
656
|
};
|
|
635
657
|
const askTaskId = durableTaskId ?? uuidv7();
|
|
636
|
-
const askOwner =
|
|
658
|
+
const askOwner = gatedSubject(req, deps.config) ?? null;
|
|
637
659
|
const emitAsk = (frame) => {
|
|
638
660
|
if (res.writableEnded || res.destroyed) {
|
|
639
|
-
recordFailOpen(
|
|
661
|
+
recordFailOpen("server.stream.frame-dropped-stream-closed", `frame=${frame.type}`);
|
|
640
662
|
return;
|
|
641
663
|
}
|
|
642
664
|
writeLiveFrame(res, { ...frame });
|
|
643
665
|
};
|
|
644
666
|
const faceAlive = () => !res.writableEnded && !res.destroyed;
|
|
645
|
-
const
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
};
|
|
651
|
-
const emitQuestion = createLedgerTwinEmit({ sink: ledgerSink, writeLive: writeQuestionLive, liveReachable: faceAlive });
|
|
667
|
+
const hitlTransport = createHitlTransport({
|
|
668
|
+
...(ledgerSink ? { ledger: ledgerSink.append } : {}),
|
|
669
|
+
live: { write: (frame) => writeLiveFrame(res, { ...frame }), alive: faceAlive },
|
|
670
|
+
});
|
|
671
|
+
connectionTransport = hitlTransport;
|
|
652
672
|
await emitPendingWorkflowCompletions(deps.workflowCompletionInbox, prepared.spec.sessionId, askOwner, (frame) => {
|
|
653
673
|
if (closed || res.writableEnded || res.destroyed)
|
|
654
674
|
throw new Error("stream ended before the completion frame was written");
|
|
@@ -659,16 +679,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
659
679
|
writeLiveFrame(res, frame);
|
|
660
680
|
}, { route: "sync-stream-open", connection: "live-sse", log: (m, x) => deps.logger?.info?.(m, x) });
|
|
661
681
|
const withElicit = deps.elicitation
|
|
662
|
-
? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner,
|
|
682
|
+
? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, streamBody)
|
|
663
683
|
: streamBody;
|
|
664
684
|
const withQuestion = () => deps.question
|
|
665
|
-
? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner,
|
|
685
|
+
? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, withElicit)
|
|
666
686
|
: withElicit();
|
|
667
|
-
const emitApproval = (frame) => {
|
|
668
|
-
if (res.writableEnded || res.destroyed)
|
|
669
|
-
throw new Error("live stream ended — approval card undeliverable");
|
|
670
|
-
emitAsk(frame);
|
|
671
|
-
};
|
|
672
687
|
const streamApprovalOn = resolveStreamApprovalGate({
|
|
673
688
|
toolApprovalEnabled: Boolean(deps.toolApproval),
|
|
674
689
|
streamApprovalEnabled: deps.config.streamApproval?.enabled === true,
|
|
@@ -678,53 +693,32 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
678
693
|
const approvalLeg = assembleApprovalLeg(streamApprovalOn);
|
|
679
694
|
const legDeadlineMonotonic = approvalLeg.legDeadlineMonotonic;
|
|
680
695
|
const unattended = approvalLeg.unattended;
|
|
681
|
-
const emitCard = createApprovalCardEmitter({
|
|
682
|
-
...(ledgerSink
|
|
683
|
-
? {
|
|
684
|
-
appendDurable: async (frame) => {
|
|
685
|
-
const { type, ...rest } = frame;
|
|
686
|
-
await ledgerSink.append(type, rest);
|
|
687
|
-
},
|
|
688
|
-
}
|
|
689
|
-
: {}),
|
|
690
|
-
writeLive: (frame) => {
|
|
691
|
-
if (res.writableEnded || res.destroyed)
|
|
692
|
-
throw new Error("live stream ended");
|
|
693
|
-
if (frame.type === "approval_complete" && !admitPresentedComplete(frame.askId))
|
|
694
|
-
return;
|
|
695
|
-
emitAsk(frame);
|
|
696
|
-
},
|
|
697
|
-
});
|
|
698
|
-
const emitRevokeLive = (frame) => {
|
|
699
|
-
if (!res.writableEnded && !res.destroyed)
|
|
700
|
-
emitAsk(frame);
|
|
701
|
-
};
|
|
702
696
|
const approvalCtx = deps.toolApproval && unattended === undefined
|
|
703
697
|
? {
|
|
704
698
|
taskId: askTaskId,
|
|
705
699
|
owner: askOwner,
|
|
706
700
|
abortSignal: ac.signal,
|
|
707
701
|
sessionId: prepared.spec.sessionId,
|
|
708
|
-
|
|
702
|
+
...approvalLegOriginOf(prepared.execution),
|
|
709
703
|
...(streamApprovalOn
|
|
710
704
|
? {
|
|
711
|
-
|
|
712
|
-
|
|
705
|
+
family: "approval_request",
|
|
706
|
+
transport: hitlTransport,
|
|
713
707
|
legKey: "",
|
|
714
708
|
...(legDeadlineMonotonic !== undefined ? { legDeadlineMonotonic } : {}),
|
|
715
709
|
}
|
|
716
|
-
: {
|
|
710
|
+
: { family: "tool_approval", transport: hitlTransport }),
|
|
717
711
|
}
|
|
718
712
|
: undefined;
|
|
719
713
|
if (deps.toolApproval) {
|
|
720
714
|
const toolApproval = deps.toolApproval;
|
|
721
715
|
prepared.spec.onAsk = unattended
|
|
722
|
-
? toolApproval.boundUnattendedAsk({ owner: askOwner, taskId: askTaskId, sessionId: prepared.spec.sessionId,
|
|
716
|
+
? toolApproval.boundUnattendedAsk({ owner: askOwner, taskId: askTaskId, sessionId: prepared.spec.sessionId, ...approvalLegOriginOf(prepared.execution) }, unattended)
|
|
723
717
|
: toolApproval.boundAsk({
|
|
724
718
|
owner: askOwner,
|
|
725
719
|
taskId: askTaskId,
|
|
726
720
|
sessionId: prepared.spec.sessionId,
|
|
727
|
-
|
|
721
|
+
...approvalLegOriginOf(prepared.execution),
|
|
728
722
|
...(streamApprovalOn ? { legKey: "", ...(legDeadlineMonotonic !== undefined ? { legDeadlineMonotonic } : {}) } : {}),
|
|
729
723
|
});
|
|
730
724
|
}
|
|
@@ -744,17 +738,17 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
744
738
|
: withApproval()));
|
|
745
739
|
if (durableTaskId && deps.runStore) {
|
|
746
740
|
const finalPlane = finalResult ? outwardPlane(finalResult.terminal) : undefined;
|
|
747
|
-
if (finalResult &&
|
|
748
|
-
await deps.runStore
|
|
749
|
-
|
|
750
|
-
|
|
741
|
+
if (finalResult && heldCard !== undefined && deps.checkpointStore) {
|
|
742
|
+
const parked = await commitSyncPark(deps.runStore, durableTaskId, heldCard.word, finalResult, heldCard.token);
|
|
743
|
+
settleFleet(parked.kind === "ended" ? "failed" : outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
|
|
744
|
+
}
|
|
751
745
|
else if (finalResult && finalPlane) {
|
|
752
746
|
await deps.runStore.setTerminal(durableTaskId, finalPlane.status, finalResult, finalPlane.errorMessage ?? null);
|
|
753
747
|
await releaseKeyIfZeroWorkRefusal(deps.runStore, durableTaskId, finalResult);
|
|
754
748
|
}
|
|
755
749
|
else {
|
|
756
750
|
await putRewindAnchor();
|
|
757
|
-
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
|
|
751
|
+
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
|
|
758
752
|
const dcCause = ac.cause();
|
|
759
753
|
if (pending) {
|
|
760
754
|
if (ledgerSink && !ledgerTerminal) {
|
|
@@ -762,8 +756,8 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
762
756
|
await ledgerSink.flush().catch(() => undefined);
|
|
763
757
|
await ledgerSink.appendParked("suspended", {}).catch(() => undefined);
|
|
764
758
|
}
|
|
765
|
-
await deps.runStore
|
|
766
|
-
settleFleet("suspended");
|
|
759
|
+
const parked = await commitSyncPark(deps.runStore, durableTaskId, "suspended", null, pending);
|
|
760
|
+
settleFleet(parked.kind === "ended" ? "failed" : "suspended");
|
|
767
761
|
}
|
|
768
762
|
else if (dcCause !== undefined) {
|
|
769
763
|
const dcErr = "stream client disconnected before completion (run aborted)";
|
|
@@ -808,7 +802,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
808
802
|
try {
|
|
809
803
|
const row = await deps.runStore.getRun(durableTaskId);
|
|
810
804
|
if (row?.status === "running") {
|
|
811
|
-
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
|
|
805
|
+
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
|
|
812
806
|
const backstopCause = ac.cause();
|
|
813
807
|
if (pending) {
|
|
814
808
|
if (ledgerSink && !ledgerTerminal) {
|
|
@@ -816,8 +810,8 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
816
810
|
await ledgerSink.flush().catch(() => undefined);
|
|
817
811
|
await ledgerSink.appendParked("suspended", {}).catch(() => undefined);
|
|
818
812
|
}
|
|
819
|
-
await deps.runStore
|
|
820
|
-
settleFleet("suspended");
|
|
813
|
+
const parked = await commitSyncPark(deps.runStore, durableTaskId, "suspended", null, pending);
|
|
814
|
+
settleFleet(parked.kind === "ended" ? "failed" : "suspended");
|
|
821
815
|
}
|
|
822
816
|
else if (finalResult) {
|
|
823
817
|
if (ledgerSink && !ledgerTerminal) {
|
|
@@ -827,7 +821,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
827
821
|
const retryPlane = outwardPlane(finalResult.terminal);
|
|
828
822
|
await deps.runStore.setTerminal(durableTaskId, retryPlane.status, finalResult, retryPlane.errorMessage ?? null);
|
|
829
823
|
await releaseKeyIfZeroWorkRefusal(deps.runStore, durableTaskId, finalResult);
|
|
830
|
-
settleFleet(retryPlane.status, fleetRunResiduals(finalResult));
|
|
824
|
+
settleFleet(retryPlane.status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
|
|
831
825
|
}
|
|
832
826
|
else if (backstopCause !== undefined) {
|
|
833
827
|
const err = "stream aborted before completion (run cancelled)";
|
|
@@ -859,7 +853,14 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
859
853
|
};
|
|
860
854
|
counters.uncountedBillableInflight++;
|
|
861
855
|
try {
|
|
862
|
-
const settling = idemCache.run(inflightKey, async () =>
|
|
856
|
+
const settling = idemCache.run(inflightKey, async () => {
|
|
857
|
+
try {
|
|
858
|
+
return withRunReceipt(await runStreamSubmitLeg());
|
|
859
|
+
}
|
|
860
|
+
finally {
|
|
861
|
+
await prepared.seat.close();
|
|
862
|
+
}
|
|
863
|
+
});
|
|
863
864
|
if (!ranLive)
|
|
864
865
|
runSlot?.release();
|
|
865
866
|
resp = await settling;
|
|
@@ -872,16 +873,24 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
872
873
|
finally {
|
|
873
874
|
counters.uncountedBillableInflight--;
|
|
874
875
|
clearInterval(hb);
|
|
876
|
+
stopClaimHeartbeat?.();
|
|
875
877
|
if (usageKey)
|
|
876
878
|
deps.modelUsage?.clear(usageKey);
|
|
877
879
|
manifestSeat?.release();
|
|
878
880
|
}
|
|
879
881
|
if (!ranLive && resp && !res.writableEnded) {
|
|
880
|
-
|
|
882
|
+
writeTerminalFrame(doneFrameOfOutcome(replayedOutcome(resp)));
|
|
881
883
|
}
|
|
884
|
+
await prepared.seat.deliverTerminal(() => {
|
|
885
|
+
const frame = heldTerminal;
|
|
886
|
+
heldTerminal = undefined;
|
|
887
|
+
if (frame !== undefined && !res.writableEnded)
|
|
888
|
+
writeLiveFrame(res, frame);
|
|
889
|
+
});
|
|
882
890
|
res.end();
|
|
883
891
|
}
|
|
884
892
|
else {
|
|
893
|
+
let stopSyncClaimHeartbeat;
|
|
885
894
|
const withSyncSubmitKeys = (body) => {
|
|
886
895
|
const extra = {
|
|
887
896
|
...(prepared.verify || prepared.cascade ? { notice: MULTI_ATTEMPT_NO_EVENT_CHANNEL_NOTICE } : {}),
|
|
@@ -892,41 +901,54 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
892
901
|
const runSyncSubmitLeg = async () => {
|
|
893
902
|
const syncLegStartedAt = Date.now();
|
|
894
903
|
let durableTaskId;
|
|
904
|
+
let durableLegId;
|
|
895
905
|
let durableHeartbeat;
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
906
|
+
try {
|
|
907
|
+
if (deps.runStore) {
|
|
908
|
+
const tid = uuidv7();
|
|
909
|
+
const created = await timeClaim(deps.metrics, "run_claim", deps.runStore.createRun(tid, prepared.spec.sessionId, principal ?? null, deps.instanceId ?? "default", { ...runMeta(prepared, source), identity: runIdentityOf(req, deps.config, principal ?? null), idem: idem ?? null }));
|
|
910
|
+
if (created.ok)
|
|
911
|
+
clearTurnActivity(tid);
|
|
912
|
+
if (created.ok)
|
|
913
|
+
recordResourceWindow(tid, prepared.spec.resourceSuspend);
|
|
914
|
+
if (created.existing)
|
|
915
|
+
return await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
916
|
+
if (created.sessionAbsent)
|
|
917
|
+
return rootSessionAbsentAnswer();
|
|
918
|
+
if (!created.ok)
|
|
919
|
+
return { status: 409, body: await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId) };
|
|
920
|
+
prepared.seat.noteOwnRun(tid);
|
|
921
|
+
stopSyncClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
|
|
922
|
+
const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid, legId: created.legId }, prepared.execution);
|
|
923
|
+
if (placementReject)
|
|
924
|
+
return placementReject;
|
|
925
|
+
durableTaskId = tid;
|
|
926
|
+
durableLegId = created.legId;
|
|
927
|
+
fillRunPreviewOnDelivery(prepared.acceptance, deps.runStore, tid);
|
|
928
|
+
}
|
|
929
|
+
if (deps.checkpointStore) {
|
|
930
|
+
const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId, legId: heldLegOf(durableLegId, durableTaskId) } : undefined, prepared);
|
|
931
|
+
if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST)
|
|
932
|
+
return ctxRefusal;
|
|
933
|
+
}
|
|
934
|
+
const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId, heldLegOf(durableLegId, durableTaskId)) : undefined;
|
|
935
|
+
if (lostClaim !== undefined)
|
|
936
|
+
return lostClaim;
|
|
914
937
|
}
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
if (ctxRefusal)
|
|
918
|
-
return ctxRefusal;
|
|
938
|
+
catch (e) {
|
|
939
|
+
return faultedAnswerOf(e, SUBMISSION_CLAIM_FACE.faulted);
|
|
919
940
|
}
|
|
920
941
|
commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
|
|
921
942
|
const syncCancelCtrl = createRunAbort(principal ?? null);
|
|
922
|
-
markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.
|
|
943
|
+
markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
|
|
923
944
|
if (durableTaskId && deps.runStore) {
|
|
924
945
|
const rs = deps.runStore;
|
|
925
946
|
const tid = durableTaskId;
|
|
926
947
|
const owner = principal ?? null;
|
|
927
948
|
const abortFromVerb = () => syncCancelCtrl.abort("cancel_verb");
|
|
949
|
+
stopSyncClaimHeartbeat?.();
|
|
928
950
|
durableHeartbeat = setInterval(() => {
|
|
929
|
-
|
|
951
|
+
beatRunHeartbeat(rs, tid, owner, () => syncCancelCtrl.abort("stall_verdict"), () => undefined);
|
|
930
952
|
if (!syncCancelCtrl.signal.aborted) {
|
|
931
953
|
void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
|
|
932
954
|
abortFromVerb(); }).catch(() => undefined);
|
|
@@ -952,19 +974,34 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
952
974
|
counters.uncountedBillableInflight++;
|
|
953
975
|
try {
|
|
954
976
|
const heldDecisions = await heldWorkflowParkDecisions(deps, prepared.spec.sessionId);
|
|
955
|
-
const
|
|
956
|
-
const
|
|
977
|
+
const compositionInternals = { ...heldDecisions, ...compositionLegRoot(prepared.legFacts?.registeredCwd) };
|
|
978
|
+
const verifyLeg = (v) => runWithVerification(prepared.runner, specWithSignal, v, compositionInternals);
|
|
979
|
+
const cascadeLeg = () => runCascade(prepared.runner, specWithSignal, cascadeConfig(deps.config.cascadeLadder, prepared.spec.limits?.maxCostUsd), compositionInternals);
|
|
957
980
|
const plainLeg = async () => {
|
|
958
981
|
const stream = prepared.runner.runTaskStream(specWithSignal, undefined, heldDecisions);
|
|
959
982
|
const syncWorkspace = createSessionWorkspaceRecorder(sessionWorkspaceStoreOf(deps.sessionStorage), prepared.legFacts?.sessionWitness);
|
|
983
|
+
const anchorKey = durableTaskId;
|
|
984
|
+
const anchorStore = deps.resumeAnchorStore;
|
|
985
|
+
const anchor = new TurnAnchorCapture(undefined, "sync", anchorStore && anchorKey ? async (entryId) => { await anchorStore.put(prepared.spec.sessionId, anchorKey, entryId, principal ?? null); } : undefined);
|
|
960
986
|
for await (const ev of stream) {
|
|
961
987
|
observeSyncLegEvent(ev);
|
|
988
|
+
switch (ev.type) {
|
|
989
|
+
case "human_input":
|
|
990
|
+
anchor.onHumanInput(ev);
|
|
991
|
+
break;
|
|
992
|
+
case "message_committed":
|
|
993
|
+
await anchor.onMessageCommitted(ev.role, ev.entryId);
|
|
994
|
+
break;
|
|
995
|
+
case "turn_end":
|
|
996
|
+
await anchor.onTurnEnd();
|
|
997
|
+
break;
|
|
998
|
+
}
|
|
962
999
|
await prepared.acceptance.observe(ev);
|
|
963
1000
|
await syncWorkspace.observe(ev);
|
|
964
1001
|
}
|
|
965
1002
|
return stream.result();
|
|
966
1003
|
};
|
|
967
|
-
result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () =>
|
|
1004
|
+
result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () => withSubject(recoveredSubject(principal), () => prepared.verify ? verifyLeg(prepared.verify) : prepared.cascade ? cascadeLeg() : plainLeg())));
|
|
968
1005
|
}
|
|
969
1006
|
finally {
|
|
970
1007
|
counters.uncountedBillableInflight--;
|
|
@@ -1000,15 +1037,16 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
1000
1037
|
}
|
|
1001
1038
|
const exitResult = await mintSubmitExitResult(result, deps.checkpointStore);
|
|
1002
1039
|
const syncPlane = outwardPlane(result.terminal);
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
await deps.runStore.setNeedsReview(durableTaskId, exitResult);
|
|
1040
|
+
const syncHeld = heldParkOf(result);
|
|
1041
|
+
if (syncHeld !== undefined && deps.checkpointStore && deps.runStore && durableTaskId) {
|
|
1042
|
+
const parked = await commitParkRow({
|
|
1043
|
+
runStore: deps.runStore, taskId: durableTaskId, word: syncHeld.word, result: exitResult, card: { token: syncHeld.token, sessionId: prepared.spec.sessionId }, cards: deps.checkpointStore, leg: "sync",
|
|
1044
|
+
legId: heldLegOf(durableLegId, durableTaskId), staleWindowMs: deps.config.runStaleSec * 1000,
|
|
1045
|
+
});
|
|
1010
1046
|
prepared.acceptance.settle(result);
|
|
1011
|
-
|
|
1047
|
+
if (parked.kind === "ended")
|
|
1048
|
+
return { status: 200, body: withSyncSubmitKeys(parked.row !== undefined ? syncSubmitBodyOfRow(parked.row) : { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: "failed" }) };
|
|
1049
|
+
return { status: 200, body: withSyncSubmitKeys(buildSyncSubmitBody(exitResult, { taskId: durableTaskId, sessionId: prepared.spec.sessionId, status: syncHeld.word })) };
|
|
1012
1050
|
}
|
|
1013
1051
|
if (durableTaskId && deps.runStore)
|
|
1014
1052
|
await deps.runStore.setTerminal(durableTaskId, syncPlane.status, exitResult, syncPlane.errorMessage ?? null);
|
|
@@ -1020,18 +1058,25 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
1020
1058
|
let ranSyncLeg = false;
|
|
1021
1059
|
const settling = idemCache.run(inflightKey, async () => {
|
|
1022
1060
|
ranSyncLeg = true;
|
|
1023
|
-
|
|
1061
|
+
try {
|
|
1062
|
+
return withRunReceipt(await runSyncSubmitLeg());
|
|
1063
|
+
}
|
|
1064
|
+
finally {
|
|
1065
|
+
await prepared.seat.close();
|
|
1066
|
+
}
|
|
1024
1067
|
});
|
|
1025
1068
|
if (!ranSyncLeg)
|
|
1026
1069
|
runSlot?.release();
|
|
1027
|
-
const
|
|
1028
|
-
|
|
1070
|
+
const settled = await settling.finally(() => stopSyncClaimHeartbeat?.());
|
|
1071
|
+
const resp = ranSyncLeg ? settled : replayedOutcome(settled);
|
|
1072
|
+
await prepared.seat.deliverTerminal(() => sendSubmitResult(res, resp));
|
|
1029
1073
|
}
|
|
1030
1074
|
return;
|
|
1031
1075
|
}
|
|
1032
1076
|
finally {
|
|
1033
1077
|
runSlot?.release();
|
|
1034
1078
|
prepared.peerLease.release();
|
|
1079
|
+
await prepared.seat.close();
|
|
1035
1080
|
}
|
|
1036
1081
|
}
|
|
1037
1082
|
}
|
|
@@ -1039,4 +1084,9 @@ export const TASKS_ROUTES = [
|
|
|
1039
1084
|
{ id: "tasks-submit", path: "/v1/tasks", billable: "submit", methods: ["POST"] },
|
|
1040
1085
|
{ id: "tasks-submit-stream", path: "/v1/tasks/stream", billable: "submit", methods: ["POST"] },
|
|
1041
1086
|
];
|
|
1087
|
+
function heldLegOf(legId, taskId) {
|
|
1088
|
+
if (legId === undefined)
|
|
1089
|
+
throw new Error(`tasks route: run ${taskId} has no record of the holding leg its createRun handed back — wiring error, nothing keyed on the leg can be written`);
|
|
1090
|
+
return legId;
|
|
1091
|
+
}
|
|
1042
1092
|
//# sourceMappingURL=tasks.js.map
|