@sema-agent/server 7.147.0 → 7.148.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 +1039 -24
- package/README.md +20 -7
- package/README.zh-CN.md +14 -8
- package/USAGE.md +380 -163
- 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/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +28 -30
- package/dist/approval-gate-currency.js +3 -2
- 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 +0 -14
- package/dist/auth-bridge.js +0 -7
- 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 +37 -31
- 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-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 +55 -67
- 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 +11 -4
- 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.js +9 -1
- package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
- package/dist/boot/stage-02-web-admin-pull.js +6 -1
- package/dist/boot/stage-03-store-backend.d.ts +3 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +2 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +7 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +10 -12
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +11 -8
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +11 -8
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +12 -15
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +12 -15
- 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 +3 -0
- package/dist/boot/stores.js +21 -10
- 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 +38 -11
- package/dist/capability-facts.js +47 -8
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +62 -56
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +42 -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 +26 -17
- package/dist/config.d.ts +8 -16
- package/dist/config.js +113 -47
- 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 +30 -4
- package/dist/deployment-shape.js +7 -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-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +5 -18
- package/dist/execution-lane-caps.js +0 -22
- 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/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +67 -57
- package/dist/hooks/hook-runner.js +260 -186
- 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 +75 -78
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +54 -30
- 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 +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +76 -30
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +17 -12
- package/dist/http/execution-context.d.ts +17 -43
- package/dist/http/execution-context.js +7 -5
- 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 +391 -67
- package/dist/http/owner-access.js +371 -35
- package/dist/http/principal-gate.d.ts +24 -81
- package/dist/http/principal-gate.js +24 -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 +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +21 -18
- package/dist/http/resume-legs.js +189 -129
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +25 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -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 +70 -65
- 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 +15 -18
- 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 +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- 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 +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- 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 +146 -231
- 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 +4 -2
- package/dist/http/routes/session-sync.js +21 -20
- 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 +136 -120
- 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 +39 -40
- package/dist/http/server.js +36 -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 +16 -8
- package/dist/http/submit-ctx.js +6 -2
- 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 +1 -0
- package/dist/index.js +1 -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/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +29 -2
- package/dist/memory-scope.js +64 -15
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +6 -3
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -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 +35 -16
- package/dist/model-entry-refusal.js +40 -27
- 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-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 +58 -38
- package/dist/observability/fail-open.js +60 -38
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +3 -4
- 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 +5 -2
- 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 +5 -4
- package/dist/org-delivery-gate.js +7 -6
- 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 +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +67 -5
- package/dist/parked-decide.js +127 -5
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- 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 +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- 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 +39 -20
- package/dist/plugins/approval-ask-store-sql.js +41 -10
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- 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 +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/file-run-store.d.ts +63 -23
- package/dist/plugins/file-run-store.js +138 -83
- 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 +58 -23
- package/dist/plugins/local-checkpoint-store.js +195 -76
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- 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 +4 -2
- package/dist/plugins/local-engine-high-water.js +4 -1
- package/dist/plugins/local-session-store.d.ts +358 -125
- package/dist/plugins/local-session-store.js +824 -251
- 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 +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +186 -45
- package/dist/plugins/one-time-migrations.js +442 -119
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +1 -31
- package/dist/plugins/pg-pool.js +16 -7
- package/dist/plugins/remote-env-e2b.d.ts +7 -25
- package/dist/plugins/remote-env-e2b.js +34 -25
- package/dist/plugins/remote-env-host.d.ts +2 -9
- package/dist/plugins/remote-env-host.js +34 -22
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +107 -58
- package/dist/plugins/remote-env-local-docker.d.ts +148 -14
- package/dist/plugins/remote-env-local-docker.js +367 -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 +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- 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 +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -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 +42 -9
- package/dist/plugins/schema-consistency.js +212 -11
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- 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 +22 -16
- 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 +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -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/store-backend.d.ts +84 -15
- package/dist/plugins/store-backend.js +186 -55
- package/dist/plugins/store-contracts.d.ts +90 -30
- package/dist/plugins/store-contracts.js +22 -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.js +23 -8
- 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/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/question.d.ts +13 -23
- package/dist/question.js +21 -39
- 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-local.d.ts +14 -6
- package/dist/run-local.js +92 -80
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +26 -15
- package/dist/runs.js +39 -27
- 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 +21 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- 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/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +136 -20
- package/dist/store-posture.js +188 -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 +33 -28
- package/dist/stores-sql/checkpoint-store-sql.js +75 -44
- 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/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 +1 -1
- package/dist/task-a2a.js +3 -3
- package/dist/task-cwd.d.ts +20 -0
- package/dist/task-cwd.js +8 -0
- package/dist/task-mcp.d.ts +1 -1
- package/dist/task-mcp.js +3 -3
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +18 -7
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +131 -129
- package/dist/tool-approval.js +189 -193
- 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/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 +1 -30
- 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 +55 -42
- package/dist/trace/project.js +52 -19
- package/dist/trace/redact.d.ts +123 -27
- package/dist/trace/redact.js +880 -260
- package/dist/trace/self-minted-wire.d.ts +487 -19
- package/dist/trace/self-minted-wire.js +172 -23
- 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 +13 -16
- 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/package.json +6 -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/wire-changes/server@7.148.0.json +1517 -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
|
@@ -1,43 +1,45 @@
|
|
|
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 { atHostBoundary, sealResultForExit, outwardPlane } from "../../terminal.js";
|
|
4
|
+
import { beatRunHeartbeat, graftParkToolCallId, markChildrenStoppedByUserOnAbort, syncRefusalHttpStatus, zeroWorkRefusalFacts, releaseKeyIfZeroWorkRefusal, createPromptCommitReader, settleResumeAnchor, TurnAnchorCapture, HEARTBEAT_MS } from "../../runs.js";
|
|
5
|
+
import { atHostBoundary, failureCodeOf, sealResultForExit, outwardPlane } from "../../terminal.js";
|
|
6
6
|
import { voidVerifierPauseCard } from "../../verifier-pause-card.js";
|
|
7
|
-
import {
|
|
7
|
+
import { withSubject } from "../../observability/principal-context.js";
|
|
8
8
|
import { fleetRunPublisher, fleetRunLabels, fleetRunResiduals, nameFleetRowOnDelivery } from "../../fleet/fleet-bus.js";
|
|
9
9
|
import { defaultSubagentTailBus } from "../../fleet/subagent-tail-bus.js";
|
|
10
10
|
import { createLiveModelText, modelStreamOfTask } from "../../trace/model-segment.js";
|
|
11
11
|
import { emitPendingWorkflowCompletions, taskNotificationInboxEntry, taskNotificationStreamKeyOf, NotifiedKeys } from "../../orchestration/workflow-completion-inbox.js";
|
|
12
|
-
import { createForwardAppendFailedNote, createLedgerSink
|
|
12
|
+
import { createForwardAppendFailedNote, createLedgerSink } from "../../trace/ledger-sink.js";
|
|
13
|
+
import { createHitlTransport } from "../../hitl-delivery.js";
|
|
13
14
|
import { registerEngineNoticeLeg } from "../../trace/engine-notice-wire.js";
|
|
14
15
|
import { clearTurnActivity, readTurnActivityMs, recordTurnActivity } from "../../turn-activity.js";
|
|
15
16
|
import { buildCancelledLedgerRow, createRunAbort, mintCancelledResult } from "../../run-cancel-context.js";
|
|
16
17
|
import { recordResourceWindow } from "../../resource-window.js";
|
|
17
18
|
import { redactSecrets } from "../../trace/redact.js";
|
|
18
19
|
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,
|
|
20
|
+
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
21
|
import { cascadeConfig, fillRunPreviewOnDelivery, runMeta } from "../run-meta.js";
|
|
21
22
|
import { idemCallerOf, inflightKeyOf, submissionIdemOf } from "../idempotency.js";
|
|
22
|
-
import { replayOfExistingRun } from "../submit-replay.js";
|
|
23
|
-
import { httpErrorCode, sendJson,
|
|
23
|
+
import { isReplayedOutcome, replayedOutcome, replayOfExistingRun } from "../submit-replay.js";
|
|
24
|
+
import { httpErrorCode, sendJson, sseHeaders } from "../send.js";
|
|
24
25
|
import { collectSsePreamble } from "../sse-log.js";
|
|
25
26
|
import { buildApprovalPreamble } from "../../approval-card.js";
|
|
26
|
-
import { approvalPreambleReplays,
|
|
27
|
+
import { approvalPreambleReplays, declaredApprovalFrameFamilies, resolveApprovalLeg, resolveStreamApprovalGate } from "../../tool-approval.js";
|
|
27
28
|
import { buildActiveRunConflict, isActiveRunConflictBody, toDoneFrameResult } from "../active-run-conflict.js";
|
|
28
29
|
import { commitExecutionContext } from "../execution-context.js";
|
|
29
30
|
import { rootSessionAbsentAnswer } from "../execution-context.js";
|
|
31
|
+
import { recheckClaimBeforeLaunch, startClaimHeartbeat } from "../claim-heartbeat.js";
|
|
30
32
|
import { timeClaim } from "../claim-latency.js";
|
|
31
33
|
import { commitSessionInheritEnv } from "../session-inherit-env.js";
|
|
32
|
-
import { headerStr,
|
|
33
|
-
import {
|
|
34
|
+
import { headerStr, gatedPerson, gatedSubject, explicitOperatorOk, runIdentityOf } from "../principal-gate.js";
|
|
35
|
+
import { recoveredSubject } from "../../owner-faces.js";
|
|
36
|
+
import { recordFailOpen } from "../../observability/fail-open.js";
|
|
34
37
|
import { buildSyncSubmitBody } from "../sync-submit-body.js";
|
|
35
38
|
import { assertNever } from "../route-ctx.js";
|
|
36
39
|
import * as facts from "../../capability-facts.js";
|
|
37
|
-
import { persistSubmissionCtx } from "../submit-ctx.js";
|
|
40
|
+
import { persistSubmissionCtx, SUBMIT_CTX_CLAIM_LOST } from "../submit-ctx.js";
|
|
38
41
|
import { withModelReachScope } from "../../model-reach-scope.js";
|
|
39
42
|
import { createInstructionSelectionLeg } from "../../instruction-selection.js";
|
|
40
|
-
import { fieldConflictFacts } from "../../field-conflict.js";
|
|
41
43
|
import { refusalBody } from "../refusal-body.js";
|
|
42
44
|
import { heldWorkflowParkDecisions } from "../../parked-decide.js";
|
|
43
45
|
import { createSessionWorkspaceRecorder, sessionWorkspaceStoreOf } from "../../session-workspace.js";
|
|
@@ -70,8 +72,8 @@ function refusalDoneResult(body) {
|
|
|
70
72
|
const b = body;
|
|
71
73
|
return { status: "failed", errorCode: String(b.errorCode), errorMessage: String(b.error) };
|
|
72
74
|
}
|
|
73
|
-
function
|
|
74
|
-
return resp.status === 200 ? resp.body : refusalDoneResult(resp.body);
|
|
75
|
+
function doneFrameOfOutcome(resp) {
|
|
76
|
+
return { type: "done", result: resp.status === 200 ? resp.body : refusalDoneResult(resp.body), ...(isReplayedOutcome(resp) ? { replay: true } : {}) };
|
|
75
77
|
}
|
|
76
78
|
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
79
|
export async function handleTasks(req, res, match, ctx) {
|
|
@@ -99,18 +101,18 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
99
101
|
const liveStream = match.decl.id === "tasks-submit-stream";
|
|
100
102
|
{
|
|
101
103
|
const rawIdem = headerStr(req.headers["idempotency-key"]);
|
|
102
|
-
const submitter =
|
|
104
|
+
const submitter = gatedSubject(req, deps.config);
|
|
103
105
|
const keyedBody = rawIdem ? await readJson(req) : undefined;
|
|
104
106
|
const idem = rawIdem ? submissionIdemOf(rawIdem, idemCallerOf(req, ctx), keyedBody) : undefined;
|
|
105
107
|
const inflightKey = idem ? inflightKeyOf(idem, "sync") : undefined;
|
|
106
108
|
const cached = inflightKey ? idemCache.peek(inflightKey) : undefined;
|
|
107
109
|
const keyedRow = idem && !cached && deps.runStore ? await deps.runStore.getRunByIdem(idem.key) : undefined;
|
|
108
110
|
if (keyedRow && deps.runStore) {
|
|
109
|
-
const replay = await replayOfExistingRun(keyedRow, {
|
|
111
|
+
const replay = await replayOfExistingRun(keyedRow, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
110
112
|
if (liveStream && replay.status === 200) {
|
|
111
113
|
sseHeaders(res, { "x-task-id": keyedRow.taskId });
|
|
112
114
|
writeMetaFrame(res, keyedRow.taskId, keyedRow.sessionId);
|
|
113
|
-
writeLiveFrame(res,
|
|
115
|
+
writeLiveFrame(res, doneFrameOfOutcome(replay));
|
|
114
116
|
res.end();
|
|
115
117
|
}
|
|
116
118
|
else {
|
|
@@ -128,9 +130,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
128
130
|
hb.unref?.();
|
|
129
131
|
res.on("close", () => clearInterval(hb));
|
|
130
132
|
try {
|
|
131
|
-
const resp = await cached;
|
|
133
|
+
const resp = replayedOutcome(await cached);
|
|
132
134
|
if (!res.writableEnded)
|
|
133
|
-
writeLiveFrame(res,
|
|
135
|
+
writeLiveFrame(res, doneFrameOfOutcome(resp));
|
|
134
136
|
}
|
|
135
137
|
finally {
|
|
136
138
|
clearInterval(hb);
|
|
@@ -138,7 +140,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
138
140
|
res.end();
|
|
139
141
|
}
|
|
140
142
|
else {
|
|
141
|
-
const resp = await cached;
|
|
143
|
+
const resp = replayedOutcome(await cached);
|
|
142
144
|
sendSubmitResult(res, resp);
|
|
143
145
|
}
|
|
144
146
|
return;
|
|
@@ -150,7 +152,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
150
152
|
if (!prepared)
|
|
151
153
|
return;
|
|
152
154
|
try {
|
|
153
|
-
runSlot = admitRun(req, res);
|
|
155
|
+
runSlot = await admitRun(req, res, prepared.seat);
|
|
154
156
|
if (runSlot === undefined)
|
|
155
157
|
return;
|
|
156
158
|
const declaredFamilies = declaredApprovalFrameFamilies(prepared.body.settings);
|
|
@@ -165,32 +167,32 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
165
167
|
};
|
|
166
168
|
};
|
|
167
169
|
const assembleApprovalLeg = (streamApprovalOn) => resolveApprovalLeg({ ...approvalLegInput(streamApprovalOn), nowMonotonicMs: performance.now() });
|
|
168
|
-
const principal = prepared.auth?.
|
|
169
|
-
const wiringOperatorFace = explicitOperatorOk(
|
|
170
|
+
const principal = prepared.auth?.subject;
|
|
171
|
+
const wiringOperatorFace = explicitOperatorOk(gatedPerson(req, deps.config), deps.config);
|
|
170
172
|
let wiringReceipt;
|
|
171
173
|
const instructionLeg = createInstructionSelectionLeg();
|
|
172
174
|
const legWiringSections = () => ({ instructions: instructionLeg.segment(), skills: prepared.legFacts?.skills });
|
|
173
175
|
const withRunReceipt = (out) => wiringReceipt !== undefined ? { ...out, wiringManifest: wiringReceipt } : out;
|
|
174
176
|
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
177
|
const earlyDurableTid = facts.durableRuns(deps).available ? uuidv7() : undefined;
|
|
180
178
|
const streamLegStartedAt = Date.now();
|
|
181
179
|
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
180
|
reqState.streamTaskId = earlyDurableTid;
|
|
187
181
|
let usageKey;
|
|
188
182
|
let manifestSeat;
|
|
189
183
|
reqState.streamDetached = detachOnDisconnect;
|
|
184
|
+
let heldTerminal;
|
|
185
|
+
const writeTerminalFrame = (frame) => {
|
|
186
|
+
if (heldTerminal === undefined && prepared.seat.keepsWithoutWithdraw)
|
|
187
|
+
writeLiveFrame(res, frame);
|
|
188
|
+
else
|
|
189
|
+
heldTerminal = frame;
|
|
190
|
+
};
|
|
191
|
+
let stopClaimHeartbeat;
|
|
190
192
|
sseHeaders(res, earlyDurableTid ? { "x-task-id": earlyDurableTid } : undefined);
|
|
191
193
|
if (earlyDurableTid)
|
|
192
194
|
writeMetaFrame(res, earlyDurableTid, prepared.spec.sessionId, prepared.warnings);
|
|
193
|
-
const ac = createRunAbort(prepared.auth?.
|
|
195
|
+
const ac = createRunAbort(prepared.auth?.subject ?? null);
|
|
194
196
|
let closed = false;
|
|
195
197
|
let detachLogged = false;
|
|
196
198
|
let disconnectParkGrace;
|
|
@@ -235,18 +237,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
235
237
|
checkpointStore: deps.checkpointStore,
|
|
236
238
|
});
|
|
237
239
|
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
|
-
};
|
|
240
|
+
let connectionTransport;
|
|
248
241
|
if (replaySessionId) {
|
|
249
|
-
const replayOwner =
|
|
242
|
+
const replayOwner = gatedSubject(req, deps.config) ?? null;
|
|
250
243
|
const askStore = replayGate.active ? replayGate.askStore : undefined;
|
|
251
244
|
let presentedAskIds = [];
|
|
252
245
|
const preambleFrames = await collectSsePreamble(async (signal) => {
|
|
@@ -265,13 +258,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
265
258
|
for (const f of preambleFrames)
|
|
266
259
|
writeLiveFrame(res, { ...f });
|
|
267
260
|
if (deps.toolApproval && preambleFrames.length > 0) {
|
|
268
|
-
for (const askId of presentedAskIds)
|
|
269
|
-
presentedOnConnection.add(askId);
|
|
270
261
|
const unwatch = deps.toolApproval.watchPresentedCards(presentedAskIds, (frame) => {
|
|
271
|
-
if (res.writableEnded || res.destroyed
|
|
262
|
+
if (res.writableEnded || res.destroyed)
|
|
272
263
|
return;
|
|
273
264
|
writeLiveFrame(res, { ...frame });
|
|
274
|
-
});
|
|
265
|
+
}, () => connectionTransport);
|
|
275
266
|
res.once("close", unwatch);
|
|
276
267
|
}
|
|
277
268
|
}
|
|
@@ -310,24 +301,28 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
310
301
|
if (created.ok)
|
|
311
302
|
recordResourceWindow(tid, prepared.spec.resourceSuspend);
|
|
312
303
|
if (created.existing) {
|
|
313
|
-
const replay = await replayOfExistingRun(created.existing, {
|
|
314
|
-
|
|
304
|
+
const replay = await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
305
|
+
writeTerminalFrame(doneFrameOfOutcome(replay));
|
|
315
306
|
return replay;
|
|
316
307
|
}
|
|
317
308
|
if (created.sessionAbsent) {
|
|
318
309
|
const refused = rootSessionAbsentAnswer();
|
|
319
|
-
|
|
310
|
+
writeTerminalFrame(doneFrameOfOutcome(refused));
|
|
320
311
|
return refused;
|
|
321
312
|
}
|
|
322
313
|
if (!created.ok) {
|
|
323
|
-
const conflict = await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config,
|
|
314
|
+
const conflict = await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId);
|
|
324
315
|
const refused = { status: 409, body: conflict };
|
|
325
|
-
|
|
316
|
+
writeTerminalFrame(doneFrameOfOutcome(refused));
|
|
326
317
|
return refused;
|
|
327
318
|
}
|
|
319
|
+
prepared.seat.noteOwnRun(tid);
|
|
320
|
+
if (detachOnDisconnect)
|
|
321
|
+
prepared.seat.markRecord();
|
|
322
|
+
stopClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
|
|
328
323
|
const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid }, prepared.execution);
|
|
329
324
|
if (placementReject) {
|
|
330
|
-
|
|
325
|
+
writeTerminalFrame(doneFrameOfOutcome(placementReject));
|
|
331
326
|
return placementReject;
|
|
332
327
|
}
|
|
333
328
|
durableTaskId = tid;
|
|
@@ -335,13 +330,18 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
335
330
|
}
|
|
336
331
|
if (deps.checkpointStore) {
|
|
337
332
|
const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId } : undefined, prepared);
|
|
338
|
-
if (ctxRefusal) {
|
|
339
|
-
|
|
333
|
+
if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST) {
|
|
334
|
+
writeTerminalFrame(doneFrameOfOutcome(ctxRefusal));
|
|
340
335
|
return ctxRefusal;
|
|
341
336
|
}
|
|
342
337
|
}
|
|
338
|
+
const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId) : undefined;
|
|
339
|
+
if (lostClaim !== undefined) {
|
|
340
|
+
writeTerminalFrame(doneFrameOfOutcome(lostClaim));
|
|
341
|
+
return lostClaim;
|
|
342
|
+
}
|
|
343
343
|
commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
|
|
344
|
-
markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.
|
|
344
|
+
markChildrenStoppedByUserOnAbort(ac.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
|
|
345
345
|
let ledgerSink;
|
|
346
346
|
let ledgerTerminal = false;
|
|
347
347
|
if (durableTaskId && deps.runStore) {
|
|
@@ -353,8 +353,9 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
353
353
|
manifestSeat = createPromptManifestSeat(deps.promptManifests, tid);
|
|
354
354
|
const owner = principal ?? null;
|
|
355
355
|
const abortFromVerb = () => ac.abort("cancel_verb");
|
|
356
|
+
stopClaimHeartbeat?.();
|
|
356
357
|
durableHeartbeat = setInterval(() => {
|
|
357
|
-
|
|
358
|
+
beatRunHeartbeat(rs, tid, owner, () => ac.abort("stall_verdict"), () => undefined);
|
|
358
359
|
if (!ac.signal.aborted) {
|
|
359
360
|
void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
|
|
360
361
|
abortFromVerb(); }).catch(() => undefined);
|
|
@@ -369,7 +370,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
369
370
|
let fleetPub;
|
|
370
371
|
try {
|
|
371
372
|
fleetPub = durableTaskId
|
|
372
|
-
? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope:
|
|
373
|
+
? fleetRunPublisher(deps.fleetBus, { runId: durableTaskId, scope: gatedSubject(req, deps.config) ?? "default", rootTaskId: durableTaskId, sessionId: prepared.spec.sessionId, ...fleetRunLabels(prepared.acceptance.objectiveAtSubmit) })
|
|
373
374
|
: undefined;
|
|
374
375
|
if (fleetPub)
|
|
375
376
|
nameFleetRowOnDelivery(prepared.acceptance, fleetPub);
|
|
@@ -410,7 +411,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
410
411
|
live: (row) => {
|
|
411
412
|
if (res.writableEnded || res.destroyed) {
|
|
412
413
|
if (noticeLedger === undefined)
|
|
413
|
-
recordFailOpen(
|
|
414
|
+
recordFailOpen("server.stream.frame-dropped-stream-closed", "frame=engine_notice");
|
|
414
415
|
return;
|
|
415
416
|
}
|
|
416
417
|
writeLiveFrame(res, { type: "engine_notice", ...row });
|
|
@@ -425,7 +426,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
425
426
|
await deps.userInputLedger.announceUndrained({ sessionId: prepared.spec.sessionId, taskId: durableTaskId });
|
|
426
427
|
try {
|
|
427
428
|
const streamBody = async () => {
|
|
428
|
-
await
|
|
429
|
+
await withSubject(recoveredSubject(principal), async () => {
|
|
429
430
|
const tailContentMode = prepared.spec.forwardSubagentEvents === true ? "on" : "progress_only";
|
|
430
431
|
const childText = createLiveModelText();
|
|
431
432
|
const topText = createLiveModelText();
|
|
@@ -510,6 +511,8 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
510
511
|
const causeAtDone = ev.type === "done" ? ac.cause() : undefined;
|
|
511
512
|
await deps.userInputLedger?.observeLegEvent(liveStream, ev);
|
|
512
513
|
await prepared.acceptance.observe(ev);
|
|
514
|
+
if (ev.type === "done")
|
|
515
|
+
prepared.acceptance.settle(ev.result);
|
|
513
516
|
await liveWorkspace.observe(ev);
|
|
514
517
|
if (ledgerSink)
|
|
515
518
|
await manifestSeat?.drain(ledgerSink.append);
|
|
@@ -523,7 +526,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
523
526
|
finalizeTaskResult(ev.result, principal, prepared.spec.objective);
|
|
524
527
|
noteRunOutcome(finalResult);
|
|
525
528
|
await putRewindAnchor();
|
|
526
|
-
settleFleet(outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult));
|
|
529
|
+
settleFleet(outwardPlane(finalResult.terminal).status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
|
|
527
530
|
if (ledgerSink && finalResult) {
|
|
528
531
|
if (usageKey && deps.modelUsage && deps.runStore && durableTaskId) {
|
|
529
532
|
const rs2 = deps.runStore;
|
|
@@ -534,7 +537,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
534
537
|
await ledgerSink.onDone(finalResult);
|
|
535
538
|
ledgerTerminal = true;
|
|
536
539
|
}
|
|
537
|
-
|
|
540
|
+
writeTerminalFrame({ ...ev, result: finalResult });
|
|
538
541
|
continue;
|
|
539
542
|
}
|
|
540
543
|
if (ledgerSink) {
|
|
@@ -617,12 +620,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
617
620
|
}
|
|
618
621
|
else if (ev.type === "turn_end" || ev.type === "message_committed" || ev.type === "context_usage") {
|
|
619
622
|
const e = ev;
|
|
620
|
-
const ident = liveIdentityFields(e);
|
|
621
623
|
const arm = ev.type === "turn_end"
|
|
622
|
-
? { type: "turn_end", ...turnEndEventData(ev)
|
|
624
|
+
? { type: "turn_end", ...turnEndEventData(ev) }
|
|
623
625
|
: 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)
|
|
626
|
+
? { type: "message_committed", entryId: e.entryId, role: e.role, ...(e.toolCallId !== undefined ? { toolCallId: e.toolCallId } : {}), ...identityFields(e) }
|
|
627
|
+
: { type: "context_usage", ...contextUsageEventData(ev) };
|
|
626
628
|
writeLiveFrame(res, arm);
|
|
627
629
|
}
|
|
628
630
|
else {
|
|
@@ -633,22 +635,20 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
633
635
|
});
|
|
634
636
|
};
|
|
635
637
|
const askTaskId = durableTaskId ?? uuidv7();
|
|
636
|
-
const askOwner =
|
|
638
|
+
const askOwner = gatedSubject(req, deps.config) ?? null;
|
|
637
639
|
const emitAsk = (frame) => {
|
|
638
640
|
if (res.writableEnded || res.destroyed) {
|
|
639
|
-
recordFailOpen(
|
|
641
|
+
recordFailOpen("server.stream.frame-dropped-stream-closed", `frame=${frame.type}`);
|
|
640
642
|
return;
|
|
641
643
|
}
|
|
642
644
|
writeLiveFrame(res, { ...frame });
|
|
643
645
|
};
|
|
644
646
|
const faceAlive = () => !res.writableEnded && !res.destroyed;
|
|
645
|
-
const
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
};
|
|
651
|
-
const emitQuestion = createLedgerTwinEmit({ sink: ledgerSink, writeLive: writeQuestionLive, liveReachable: faceAlive });
|
|
647
|
+
const hitlTransport = createHitlTransport({
|
|
648
|
+
...(ledgerSink ? { ledger: ledgerSink.append } : {}),
|
|
649
|
+
live: { write: (frame) => writeLiveFrame(res, { ...frame }), alive: faceAlive },
|
|
650
|
+
});
|
|
651
|
+
connectionTransport = hitlTransport;
|
|
652
652
|
await emitPendingWorkflowCompletions(deps.workflowCompletionInbox, prepared.spec.sessionId, askOwner, (frame) => {
|
|
653
653
|
if (closed || res.writableEnded || res.destroyed)
|
|
654
654
|
throw new Error("stream ended before the completion frame was written");
|
|
@@ -659,16 +659,11 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
659
659
|
writeLiveFrame(res, frame);
|
|
660
660
|
}, { route: "sync-stream-open", connection: "live-sse", log: (m, x) => deps.logger?.info?.(m, x) });
|
|
661
661
|
const withElicit = deps.elicitation
|
|
662
|
-
? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner,
|
|
662
|
+
? () => deps.elicitation.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, streamBody)
|
|
663
663
|
: streamBody;
|
|
664
664
|
const withQuestion = () => deps.question
|
|
665
|
-
? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner,
|
|
665
|
+
? deps.question.runWithContext({ taskId: askTaskId, owner: askOwner, transport: hitlTransport, abortSignal: ac.signal }, withElicit)
|
|
666
666
|
: 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
667
|
const streamApprovalOn = resolveStreamApprovalGate({
|
|
673
668
|
toolApprovalEnabled: Boolean(deps.toolApproval),
|
|
674
669
|
streamApprovalEnabled: deps.config.streamApproval?.enabled === true,
|
|
@@ -678,27 +673,6 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
678
673
|
const approvalLeg = assembleApprovalLeg(streamApprovalOn);
|
|
679
674
|
const legDeadlineMonotonic = approvalLeg.legDeadlineMonotonic;
|
|
680
675
|
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
676
|
const approvalCtx = deps.toolApproval && unattended === undefined
|
|
703
677
|
? {
|
|
704
678
|
taskId: askTaskId,
|
|
@@ -708,12 +682,12 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
708
682
|
executionLane: prepared.execution.lane,
|
|
709
683
|
...(streamApprovalOn
|
|
710
684
|
? {
|
|
711
|
-
|
|
712
|
-
|
|
685
|
+
family: "approval_request",
|
|
686
|
+
transport: hitlTransport,
|
|
713
687
|
legKey: "",
|
|
714
688
|
...(legDeadlineMonotonic !== undefined ? { legDeadlineMonotonic } : {}),
|
|
715
689
|
}
|
|
716
|
-
: {
|
|
690
|
+
: { family: "tool_approval", transport: hitlTransport }),
|
|
717
691
|
}
|
|
718
692
|
: undefined;
|
|
719
693
|
if (deps.toolApproval) {
|
|
@@ -754,7 +728,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
754
728
|
}
|
|
755
729
|
else {
|
|
756
730
|
await putRewindAnchor();
|
|
757
|
-
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
|
|
731
|
+
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
|
|
758
732
|
const dcCause = ac.cause();
|
|
759
733
|
if (pending) {
|
|
760
734
|
if (ledgerSink && !ledgerTerminal) {
|
|
@@ -808,7 +782,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
808
782
|
try {
|
|
809
783
|
const row = await deps.runStore.getRun(durableTaskId);
|
|
810
784
|
if (row?.status === "running") {
|
|
811
|
-
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId);
|
|
785
|
+
const pending = await deps.checkpointStore?.findPendingTokenBySession(prepared.spec.sessionId, undefined, { axis: "run" });
|
|
812
786
|
const backstopCause = ac.cause();
|
|
813
787
|
if (pending) {
|
|
814
788
|
if (ledgerSink && !ledgerTerminal) {
|
|
@@ -827,7 +801,7 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
827
801
|
const retryPlane = outwardPlane(finalResult.terminal);
|
|
828
802
|
await deps.runStore.setTerminal(durableTaskId, retryPlane.status, finalResult, retryPlane.errorMessage ?? null);
|
|
829
803
|
await releaseKeyIfZeroWorkRefusal(deps.runStore, durableTaskId, finalResult);
|
|
830
|
-
settleFleet(retryPlane.status, fleetRunResiduals(finalResult));
|
|
804
|
+
settleFleet(retryPlane.status, fleetRunResiduals(finalResult, failureCodeOf(finalResult.terminal)));
|
|
831
805
|
}
|
|
832
806
|
else if (backstopCause !== undefined) {
|
|
833
807
|
const err = "stream aborted before completion (run cancelled)";
|
|
@@ -859,7 +833,14 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
859
833
|
};
|
|
860
834
|
counters.uncountedBillableInflight++;
|
|
861
835
|
try {
|
|
862
|
-
const settling = idemCache.run(inflightKey, async () =>
|
|
836
|
+
const settling = idemCache.run(inflightKey, async () => {
|
|
837
|
+
try {
|
|
838
|
+
return withRunReceipt(await runStreamSubmitLeg());
|
|
839
|
+
}
|
|
840
|
+
finally {
|
|
841
|
+
await prepared.seat.close();
|
|
842
|
+
}
|
|
843
|
+
});
|
|
863
844
|
if (!ranLive)
|
|
864
845
|
runSlot?.release();
|
|
865
846
|
resp = await settling;
|
|
@@ -872,16 +853,24 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
872
853
|
finally {
|
|
873
854
|
counters.uncountedBillableInflight--;
|
|
874
855
|
clearInterval(hb);
|
|
856
|
+
stopClaimHeartbeat?.();
|
|
875
857
|
if (usageKey)
|
|
876
858
|
deps.modelUsage?.clear(usageKey);
|
|
877
859
|
manifestSeat?.release();
|
|
878
860
|
}
|
|
879
861
|
if (!ranLive && resp && !res.writableEnded) {
|
|
880
|
-
|
|
862
|
+
writeTerminalFrame(doneFrameOfOutcome(replayedOutcome(resp)));
|
|
881
863
|
}
|
|
864
|
+
await prepared.seat.deliverTerminal(() => {
|
|
865
|
+
const frame = heldTerminal;
|
|
866
|
+
heldTerminal = undefined;
|
|
867
|
+
if (frame !== undefined && !res.writableEnded)
|
|
868
|
+
writeLiveFrame(res, frame);
|
|
869
|
+
});
|
|
882
870
|
res.end();
|
|
883
871
|
}
|
|
884
872
|
else {
|
|
873
|
+
let stopSyncClaimHeartbeat;
|
|
885
874
|
const withSyncSubmitKeys = (body) => {
|
|
886
875
|
const extra = {
|
|
887
876
|
...(prepared.verify || prepared.cascade ? { notice: MULTI_ATTEMPT_NO_EVENT_CHANNEL_NOTICE } : {}),
|
|
@@ -901,11 +890,13 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
901
890
|
if (created.ok)
|
|
902
891
|
recordResourceWindow(tid, prepared.spec.resourceSuspend);
|
|
903
892
|
if (created.existing)
|
|
904
|
-
return await replayOfExistingRun(created.existing, {
|
|
893
|
+
return await replayOfExistingRun(created.existing, { subject: submitter, idem }, "sync", deps, deps.runStore);
|
|
905
894
|
if (created.sessionAbsent)
|
|
906
895
|
return rootSessionAbsentAnswer();
|
|
907
896
|
if (!created.ok)
|
|
908
|
-
return { status: 409, body: await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config,
|
|
897
|
+
return { status: 409, body: await buildActiveRunConflict({ runStore: deps.runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, prepared.spec.sessionId, created.activeTaskId) };
|
|
898
|
+
prepared.seat.noteOwnRun(tid);
|
|
899
|
+
stopSyncClaimHeartbeat = startClaimHeartbeat(deps.runStore, tid, principal ?? null, deps.metrics);
|
|
909
900
|
const placementReject = await commitExecutionContext(deps, { kind: "run", runStore: deps.runStore, taskId: tid }, prepared.execution);
|
|
910
901
|
if (placementReject)
|
|
911
902
|
return placementReject;
|
|
@@ -914,19 +905,23 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
914
905
|
}
|
|
915
906
|
if (deps.checkpointStore) {
|
|
916
907
|
const ctxRefusal = await persistSubmissionCtx(deps.checkpointStore, deps, durableTaskId !== undefined && deps.runStore ? { runStore: deps.runStore, taskId: durableTaskId } : undefined, prepared);
|
|
917
|
-
if (ctxRefusal)
|
|
908
|
+
if (ctxRefusal !== undefined && ctxRefusal !== SUBMIT_CTX_CLAIM_LOST)
|
|
918
909
|
return ctxRefusal;
|
|
919
910
|
}
|
|
911
|
+
const lostClaim = durableTaskId !== undefined && deps.runStore ? await recheckClaimBeforeLaunch(deps, deps.runStore, prepared.spec.sessionId, durableTaskId) : undefined;
|
|
912
|
+
if (lostClaim !== undefined)
|
|
913
|
+
return lostClaim;
|
|
920
914
|
commitSessionInheritEnv(deps, prepared.spec.sessionId, prepared.body);
|
|
921
915
|
const syncCancelCtrl = createRunAbort(principal ?? null);
|
|
922
|
-
markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.
|
|
916
|
+
markChildrenStoppedByUserOnAbort(syncCancelCtrl.signal, durableTaskId ?? prepared.spec.sessionId, prepared.auth?.subject);
|
|
923
917
|
if (durableTaskId && deps.runStore) {
|
|
924
918
|
const rs = deps.runStore;
|
|
925
919
|
const tid = durableTaskId;
|
|
926
920
|
const owner = principal ?? null;
|
|
927
921
|
const abortFromVerb = () => syncCancelCtrl.abort("cancel_verb");
|
|
922
|
+
stopSyncClaimHeartbeat?.();
|
|
928
923
|
durableHeartbeat = setInterval(() => {
|
|
929
|
-
|
|
924
|
+
beatRunHeartbeat(rs, tid, owner, () => syncCancelCtrl.abort("stall_verdict"), () => undefined);
|
|
930
925
|
if (!syncCancelCtrl.signal.aborted) {
|
|
931
926
|
void Promise.resolve(rs.isCancelRequested?.(tid, owner)).then((c) => { if (c)
|
|
932
927
|
abortFromVerb(); }).catch(() => undefined);
|
|
@@ -957,14 +952,28 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
957
952
|
const plainLeg = async () => {
|
|
958
953
|
const stream = prepared.runner.runTaskStream(specWithSignal, undefined, heldDecisions);
|
|
959
954
|
const syncWorkspace = createSessionWorkspaceRecorder(sessionWorkspaceStoreOf(deps.sessionStorage), prepared.legFacts?.sessionWitness);
|
|
955
|
+
const anchorKey = durableTaskId;
|
|
956
|
+
const anchorStore = deps.resumeAnchorStore;
|
|
957
|
+
const anchor = new TurnAnchorCapture(undefined, "sync", anchorStore && anchorKey ? async (entryId) => { await anchorStore.put(prepared.spec.sessionId, anchorKey, entryId, principal ?? null); } : undefined);
|
|
960
958
|
for await (const ev of stream) {
|
|
961
959
|
observeSyncLegEvent(ev);
|
|
960
|
+
switch (ev.type) {
|
|
961
|
+
case "human_input":
|
|
962
|
+
anchor.onHumanInput(ev);
|
|
963
|
+
break;
|
|
964
|
+
case "message_committed":
|
|
965
|
+
await anchor.onMessageCommitted(ev.role, ev.entryId);
|
|
966
|
+
break;
|
|
967
|
+
case "turn_end":
|
|
968
|
+
await anchor.onTurnEnd();
|
|
969
|
+
break;
|
|
970
|
+
}
|
|
962
971
|
await prepared.acceptance.observe(ev);
|
|
963
972
|
await syncWorkspace.observe(ev);
|
|
964
973
|
}
|
|
965
974
|
return stream.result();
|
|
966
975
|
};
|
|
967
|
-
result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () =>
|
|
976
|
+
result = atHostBoundary(await instructionLeg.run(prepared.spec.sessionId, () => withSubject(recoveredSubject(principal), () => prepared.verify ? verifyLeg(prepared.verify) : prepared.cascade ? cascadeLeg() : plainLeg())));
|
|
968
977
|
}
|
|
969
978
|
finally {
|
|
970
979
|
counters.uncountedBillableInflight--;
|
|
@@ -1020,18 +1029,25 @@ export async function handleTasks(req, res, match, ctx) {
|
|
|
1020
1029
|
let ranSyncLeg = false;
|
|
1021
1030
|
const settling = idemCache.run(inflightKey, async () => {
|
|
1022
1031
|
ranSyncLeg = true;
|
|
1023
|
-
|
|
1032
|
+
try {
|
|
1033
|
+
return withRunReceipt(await runSyncSubmitLeg());
|
|
1034
|
+
}
|
|
1035
|
+
finally {
|
|
1036
|
+
await prepared.seat.close();
|
|
1037
|
+
}
|
|
1024
1038
|
});
|
|
1025
1039
|
if (!ranSyncLeg)
|
|
1026
1040
|
runSlot?.release();
|
|
1027
|
-
const
|
|
1028
|
-
|
|
1041
|
+
const settled = await settling.finally(() => stopSyncClaimHeartbeat?.());
|
|
1042
|
+
const resp = ranSyncLeg ? settled : replayedOutcome(settled);
|
|
1043
|
+
await prepared.seat.deliverTerminal(() => sendSubmitResult(res, resp));
|
|
1029
1044
|
}
|
|
1030
1045
|
return;
|
|
1031
1046
|
}
|
|
1032
1047
|
finally {
|
|
1033
1048
|
runSlot?.release();
|
|
1034
1049
|
prepared.peerLease.release();
|
|
1050
|
+
await prepared.seat.close();
|
|
1035
1051
|
}
|
|
1036
1052
|
}
|
|
1037
1053
|
}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* [ref] A9 域模块 —— Task Trace 只读面 + 用量统计面。
|
|
3
|
-
*
|
|
4
|
-
* 路由:`GET /v1/tasks/source-summary`(跨租户 door 汇总,ops-only)、`GET /v1/tasks[/:id/{turns,stream,artifacts}]`
|
|
5
|
-
* (S1 Task Trace API)、`GET /v1/usage/{summary,series,breakdown}`(web P4 / registry AnalyticsSource)。
|
|
6
|
-
*
|
|
7
|
-
* ⚠️ 三块都跑在全局 service-credential 门**之前**(与 /metrics 同款待遇)——只读 traceToken 单凭据的调用方
|
|
8
|
-
* (registry 中继的姿势)在全局门会被 401,挂门后=门内 traceToken 支持成死代码(1.148 a2 实机抓获)。
|
|
9
|
-
* [ref](7.105.0):门前不等于不设防 —— 本域坐在读路谓词段,先过 `dispatch.ts` 的 `readCredentialOk`
|
|
10
|
-
* (部署配了 service 凭据时要「service token / traceToken / 已验 principal」之一),块内这几道门在它之后。
|
|
11
|
-
* 因此本域在 `handle()` 里的位置就是契约的一部分:必须留在鉴权门上方,顺序不可与其他域对调。本域零可变状态。
|
|
12
|
-
*/
|
|
13
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
14
2
|
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
15
3
|
/** 路由体 = 从 `server.ts` 的 `handle()` 里**整段剪切**过来的原文(唯一改动:统一去缩进两格)。裸 `return;`
|