@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
|
@@ -2,18 +2,22 @@ import { redactHead } from "../observability/run-terminal.js";
|
|
|
2
2
|
const errText = (e) => redactHead(e instanceof Error ? e.message : String(e), 2000);
|
|
3
3
|
import { checkpointRevOf } from "@sema-agent/core";
|
|
4
4
|
import { findParkOrigin } from "../parked-decide.js";
|
|
5
|
-
import {
|
|
5
|
+
import { recoveredSubject } from "../owner-faces.js";
|
|
6
6
|
import { hostDecisionFacts } from "../host-decision.js";
|
|
7
7
|
import {} from "../tool-approval.js";
|
|
8
8
|
import { APPROVAL_GATE_KINDS } from "../approval-content-kind.js";
|
|
9
9
|
import { createWallClockJumpGuard } from "../wall-clock-jump-guard.js";
|
|
10
|
-
import {
|
|
10
|
+
import { gatedPerson } from "./principal-gate.js";
|
|
11
|
+
import { hasServiceAuth } from "../identity-source.js";
|
|
11
12
|
import { costQuotaRefusalOf } from "./request-guards.js";
|
|
12
13
|
import { admissionRefusalOf, readinessOf } from "./readiness.js";
|
|
14
|
+
import { rowReadRefusalAnswer } from "./resume-legs.js";
|
|
13
15
|
import { readResumeCtx } from "./resume-ctx-read.js";
|
|
14
16
|
import { isResumeBlockedByPolicy } from "./checkpoint-ctx.js";
|
|
15
17
|
import { storedBodyReplayRefusal } from "./stored-body-replay.js";
|
|
16
18
|
import { refusalBody } from "./refusal-body.js";
|
|
19
|
+
import { CARD_EXPIRE_OUTCOME, expireCardUnderStoredScope } from "../card-settle-stored-scope.js";
|
|
20
|
+
import { DENY_SWEEP_PAGE_ROWS } from "../plugins/checkpoint-store-face.js";
|
|
17
21
|
const BLOCKED_SCALAR_KEYS = ["errorCode", "blockedBy", "field", "reason", "count", "cap", "index"];
|
|
18
22
|
function blockedScalars(body) {
|
|
19
23
|
const out = {};
|
|
@@ -28,14 +32,16 @@ function blockedScalars(body) {
|
|
|
28
32
|
}
|
|
29
33
|
const BLOCKED_WARNED_MAX = 1024;
|
|
30
34
|
export function createApprovalSweeps(ctx) {
|
|
31
|
-
const { deps, resumeCheckpoint,
|
|
35
|
+
const { deps, resumeCheckpoint, decisionRowAdmits } = ctx;
|
|
32
36
|
const blockedWarned = new Map();
|
|
37
|
+
let sweepAfter;
|
|
38
|
+
let sweepCycle = 0;
|
|
33
39
|
const noteResumeBlocked = (cardToken, sessionId, status, body) => {
|
|
34
40
|
deps.metrics?.inc("deny_sweep_resume_blocked_total");
|
|
35
41
|
const fields = { status, ...blockedScalars(body) };
|
|
36
42
|
if (cardToken !== undefined) {
|
|
37
43
|
const fingerprint = JSON.stringify(fields);
|
|
38
|
-
if (blockedWarned.get(cardToken) === fingerprint)
|
|
44
|
+
if (blockedWarned.get(cardToken)?.fingerprint === fingerprint)
|
|
39
45
|
return;
|
|
40
46
|
blockedWarned.delete(cardToken);
|
|
41
47
|
if (blockedWarned.size >= BLOCKED_WARNED_MAX) {
|
|
@@ -43,7 +49,7 @@ export function createApprovalSweeps(ctx) {
|
|
|
43
49
|
if (oldest.done !== true)
|
|
44
50
|
blockedWarned.delete(oldest.value);
|
|
45
51
|
}
|
|
46
|
-
blockedWarned.set(cardToken, fingerprint);
|
|
52
|
+
blockedWarned.set(cardToken, { fingerprint, cycle: sweepCycle });
|
|
47
53
|
}
|
|
48
54
|
deps.logger?.warn?.("deny_sweep_resume_blocked", { sessionId, ...fields });
|
|
49
55
|
};
|
|
@@ -70,7 +76,7 @@ export function createApprovalSweeps(ctx) {
|
|
|
70
76
|
return;
|
|
71
77
|
let expired;
|
|
72
78
|
try {
|
|
73
|
-
expired = await cs.listExpiredApprovalGates(now);
|
|
79
|
+
expired = await cs.listExpiredApprovalGates(now, DENY_SWEEP_PAGE_ROWS, sweepAfter);
|
|
74
80
|
}
|
|
75
81
|
catch (e) {
|
|
76
82
|
deps.metrics?.inc("deny_sweep_list_failed_total");
|
|
@@ -80,42 +86,50 @@ export function createApprovalSweeps(ctx) {
|
|
|
80
86
|
});
|
|
81
87
|
return;
|
|
82
88
|
}
|
|
89
|
+
const cycleEnds = expired.length < DENY_SWEEP_PAGE_ROWS;
|
|
90
|
+
sweepAfter = cycleEnds ? undefined : expired[expired.length - 1]?.position;
|
|
83
91
|
const parkSources = deps.backgroundAgentStore !== undefined || deps.workflowAgentSessionIndex !== undefined;
|
|
84
92
|
const cardOf = async (sessionId) => {
|
|
85
93
|
let token;
|
|
86
94
|
let binding = {};
|
|
95
|
+
let runSessionId;
|
|
87
96
|
try {
|
|
88
97
|
token = (await cs.findPendingTokenBySession(sessionId, undefined, { gateKinds: APPROVAL_GATE_KINDS })) ?? undefined;
|
|
89
98
|
if (!token)
|
|
90
|
-
return { token, parked: false, rev: undefined, binding };
|
|
99
|
+
return { token, parked: false, rev: undefined, binding, runSessionId };
|
|
100
|
+
runSessionId = (await cs.hostSessionOfCard(token)) ?? undefined;
|
|
91
101
|
const cp = await cs.get(token);
|
|
92
102
|
if (!cp)
|
|
93
|
-
return { token, parked: false, rev: undefined, binding };
|
|
103
|
+
return { token, parked: false, rev: undefined, binding, runSessionId };
|
|
94
104
|
const pa = cp.pendingAction;
|
|
95
105
|
binding = { checkpointToken: token, ...(pa.kind === "tool_approval" ? { boundCallId: pa.toolCallId, boundInputHash: pa.boundInputHash } : {}) };
|
|
96
106
|
const rev = checkpointRevOf(cp);
|
|
97
107
|
if (!parkSources)
|
|
98
|
-
return { token, parked: false, rev, binding };
|
|
108
|
+
return { token, parked: false, rev, binding, runSessionId };
|
|
99
109
|
const origin = await findParkOrigin({
|
|
100
110
|
...(deps.backgroundAgentStore !== undefined ? { agentStore: deps.backgroundAgentStore } : {}),
|
|
101
111
|
...(deps.workflowAgentSessionIndex !== undefined && deps.workflowRunStore !== undefined
|
|
102
112
|
? { workflowIndex: deps.workflowAgentSessionIndex, workflowRunStore: deps.workflowRunStore }
|
|
103
113
|
: {}),
|
|
104
114
|
}, { token, scope: cp.scope, sessionId: cp.sessionId });
|
|
105
|
-
return { token, parked: origin !== undefined, rev, binding };
|
|
115
|
+
return { token, parked: origin !== undefined, rev, binding, runSessionId };
|
|
106
116
|
}
|
|
107
117
|
catch {
|
|
108
|
-
return { token, parked: false, rev: undefined, binding };
|
|
118
|
+
return { token, parked: false, rev: undefined, binding, runSessionId };
|
|
109
119
|
}
|
|
110
120
|
};
|
|
111
|
-
const storedBodyUnservable = async (
|
|
112
|
-
|
|
121
|
+
const storedBodyUnservable = async (runSessionId) => {
|
|
122
|
+
if (runSessionId === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
const read = await readResumeCtx(cs.getCtx(runSessionId), { sessionId: runSessionId, opener: deps.checkpointCtxSealing });
|
|
113
125
|
if (read.kind === "corrupt")
|
|
114
126
|
return undefined;
|
|
115
127
|
if (read.kind === "unsealable")
|
|
116
128
|
return undefined;
|
|
117
129
|
if (read.kind === "absent")
|
|
118
130
|
return undefined;
|
|
131
|
+
if (read.kind === "unreadable")
|
|
132
|
+
return undefined;
|
|
119
133
|
return storedBodyReplayRefusal(read.ctx, deps.config);
|
|
120
134
|
};
|
|
121
135
|
const expirePolicyBlockedCard = async (cardToken, observedRev, sessionId, body) => {
|
|
@@ -128,7 +142,7 @@ export function createApprovalSweeps(ctx) {
|
|
|
128
142
|
deps.logger?.warn?.("deny_sweep_policy_blocked_expire_skipped", { sessionId, skipReason: cp.status !== "pending" ? "not_pending" : "card_changed", ...blockedScalars(body) });
|
|
129
143
|
return;
|
|
130
144
|
}
|
|
131
|
-
won = await cs
|
|
145
|
+
won = (await expireCardUnderStoredScope(cs, cardToken)) === CARD_EXPIRE_OUTCOME.expired;
|
|
132
146
|
}
|
|
133
147
|
catch (e) {
|
|
134
148
|
deps.logger?.warn?.("deny_sweep_policy_blocked_expire_failed", { sessionId, err: errText(e) });
|
|
@@ -141,16 +155,24 @@ export function createApprovalSweeps(ctx) {
|
|
|
141
155
|
};
|
|
142
156
|
let parkedSkipped = 0;
|
|
143
157
|
const replaySkipped = [];
|
|
144
|
-
const seenCards = new Set();
|
|
145
158
|
for (const { sessionId } of expired) {
|
|
146
|
-
const { token: cardToken, parked, rev: cardRev, binding: cardBinding } = await cardOf(sessionId);
|
|
147
|
-
|
|
148
|
-
|
|
159
|
+
const { token: cardToken, parked, rev: cardRev, binding: cardBinding, runSessionId } = await cardOf(sessionId);
|
|
160
|
+
const warned = cardToken === undefined ? undefined : blockedWarned.get(cardToken);
|
|
161
|
+
if (warned !== undefined)
|
|
162
|
+
warned.cycle = sweepCycle;
|
|
149
163
|
if (parked) {
|
|
150
164
|
parkedSkipped += 1;
|
|
151
165
|
continue;
|
|
152
166
|
}
|
|
153
|
-
|
|
167
|
+
let unservable;
|
|
168
|
+
try {
|
|
169
|
+
unservable = await storedBodyUnservable(runSessionId);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
deps.metrics?.inc("deny_sweep_row_failed_total");
|
|
173
|
+
deps.logger?.warn?.("deny_sweep_row_failed", { sessionId, err: errText(e), note: "reading this expired approval's stored request threw, so it was not resumed this tick; the rest of the page was swept, and this row is tried again when the sweep comes round to it" });
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
154
176
|
if (unservable !== undefined) {
|
|
155
177
|
replaySkipped.push({ sessionId, kind: unservable.kind });
|
|
156
178
|
continue;
|
|
@@ -172,9 +194,12 @@ export function createApprovalSweeps(ctx) {
|
|
|
172
194
|
if (isResumeBlockedByPolicy(out) && cardToken !== undefined && cardRev !== undefined)
|
|
173
195
|
await expirePolicyBlockedCard(cardToken, cardRev, sessionId, out.body);
|
|
174
196
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
197
|
+
if (cycleEnds) {
|
|
198
|
+
for (const [token, warned] of [...blockedWarned])
|
|
199
|
+
if (warned.cycle !== sweepCycle)
|
|
200
|
+
blockedWarned.delete(token);
|
|
201
|
+
sweepCycle += 1;
|
|
202
|
+
}
|
|
178
203
|
if (parkedSkipped > 0)
|
|
179
204
|
deps.logger?.info?.("deny_sweep_parked_skipped", { count: parkedSkipped });
|
|
180
205
|
if (replaySkipped.length > 0) {
|
|
@@ -197,31 +222,31 @@ export function createApprovalSweeps(ctx) {
|
|
|
197
222
|
if (refusal !== undefined)
|
|
198
223
|
return { status: refusal.status, body: refusal.body };
|
|
199
224
|
if (deps.costQuota && req.httpReq) {
|
|
200
|
-
const
|
|
201
|
-
if (
|
|
202
|
-
const d = deps.costQuota.check(
|
|
225
|
+
const quotaPerson = gatedPerson(req.httpReq, deps.config);
|
|
226
|
+
if (quotaPerson !== undefined) {
|
|
227
|
+
const d = deps.costQuota.check(quotaPerson);
|
|
203
228
|
if (!d.allowed) {
|
|
204
229
|
deps.metrics?.inc("cost_quota_rejected_total");
|
|
205
230
|
return costQuotaRefusalOf(d);
|
|
206
231
|
}
|
|
207
232
|
}
|
|
208
233
|
}
|
|
234
|
+
const answerer = { subject: recoveredSubject(req.principal), operator: false };
|
|
209
235
|
let cp;
|
|
210
236
|
try {
|
|
211
237
|
cp = await cs.get(req.gateToken);
|
|
212
238
|
}
|
|
213
239
|
catch (e) {
|
|
214
|
-
if (!(await
|
|
240
|
+
if (!(await decisionRowAdmits(cs, req.gateToken, answerer, undefined))) {
|
|
215
241
|
deps.logger?.warn?.("parked_late_decision_unreadable_row_withheld", { askId: req.askId });
|
|
216
242
|
return { status: 404, body: refusalBody({ errorCode: "not_found.approval", message: "approval not found" }) };
|
|
217
243
|
}
|
|
218
|
-
return {
|
|
244
|
+
return rowReadRefusalAnswer(e, { cs, runs: deps.runStore, token: req.gateToken, logger: deps.logger });
|
|
219
245
|
}
|
|
220
246
|
if (!cp) {
|
|
221
247
|
return { status: 404, body: refusalBody({ errorCode: "not_found.approval", message: "approval not found" }) };
|
|
222
248
|
}
|
|
223
|
-
|
|
224
|
-
if (cpPrincipal !== undefined && cpPrincipal !== req.principal) {
|
|
249
|
+
if (!(await decisionRowAdmits(cs, req.gateToken, answerer, cp.scope))) {
|
|
225
250
|
deps.logger?.warn?.("parked_late_decision_scope_mismatch", { askId: req.askId });
|
|
226
251
|
return { status: 404, body: refusalBody({ errorCode: "not_found.approval", message: "approval not found" }) };
|
|
227
252
|
}
|
|
@@ -232,8 +257,8 @@ export function createApprovalSweeps(ctx) {
|
|
|
232
257
|
...(req.updatedInput !== undefined ? { updatedInput: req.updatedInput } : {}),
|
|
233
258
|
};
|
|
234
259
|
const remember = req.remember === "session" ? { grantedBy: req.principal ?? null, laneCannotRecord: "decide_once" } : undefined;
|
|
235
|
-
const out = await resumeCheckpoint(cp.sessionId, req.decision, req.note, hostDecisionFacts(req.decider, req.principal), req.httpReq, undefined, binding, remember, true,
|
|
236
|
-
return { status: out.status, body: out.body, ...(remember !== undefined ? { rememberApplied: out.rememberApplied === true } : {}) };
|
|
260
|
+
const out = await resumeCheckpoint(cp.sessionId, req.decision, req.note, hostDecisionFacts(req.decider, req.principal), req.httpReq, undefined, binding, remember, true, answerer);
|
|
261
|
+
return { status: out.status, body: out.body, ...(remember !== undefined ? { rememberApplied: out.rememberApplied === true } : {}), gateGeneration: checkpointRevOf(cp) };
|
|
237
262
|
}
|
|
238
263
|
return { denyExpiredApprovals, redeemParkedAsk };
|
|
239
264
|
}
|
|
@@ -19,9 +19,12 @@
|
|
|
19
19
|
* **判的是哪些表**:请求体上不经人答就生效的规则表 —— `settings.permissions` 的每个成员桶(逐 `membersOf("permissions")`),以及请求**按名点用**(`userInvokedSkills`)的
|
|
20
20
|
* 自带技能的两只清单(引擎 `seedSkillGrants`:人点的名就是表态,不出 `Skill` 卡 ⇒ `allowedTools` 是 `allow` 成员的孪生、`disallowedTools` 是 `deny` 的孪生,键 → 成员一张表
|
|
21
21
|
* {@link SKILL_LIST_MEMBER})。没点用的自带技能不判:它的清单要经 `Skill` 卡上的人点头才生效 —— 那正是契约给低于门槛的放宽指定的同意出口。
|
|
22
|
+
* **部署 / 中心的技能不判**(点名了也不判):它们的两只清单是运维授权,与 `APPROVAL_GRANT` 同级 —— 来处只有部署的 `SKILLS_DIR` / 本地配置源与中心的 `skills` · `plugins` 域,
|
|
23
|
+
* 契约给这两个域的写角色(`domainWriteRole`)不低于本表 `global` 的门槛(治理写角色),同名时部署的那只胜出、请求体那只被丢(`buildRunSkills`)⇒ 调用方没有改写它们清单的路;
|
|
24
|
+
* 点名只是选用。契约哪天把那两个域的写角色压到治理写角色之下,`test/caller-trust.test.ts` 的角色阶钉红,这条读法要重审。
|
|
22
25
|
* 准入只经契约导出:桶非空且 `!isAtLeast(档, memberAdmission(…).minTrust)` ⇒ 不准入;不按方向开特例(契约的层准入同样先判 floor)。
|
|
23
|
-
* 不准入 ⇒ 受理口 400,体与条目问题同形(`entry-problems.ts
|
|
24
|
-
*
|
|
26
|
+
* 不准入 ⇒ 受理口 400,体与条目问题同形(`entry-problems.ts`:根上的 `field` + `problems` + `total`),原因词 = 契约 `LAYER_ADMISSION_VERDICTS` 的 `below_trust_floor`,
|
|
27
|
+
* 另带根上的 `callerTrust`(这次请求的档)。响亮拒而不是静默丢:契约要求低于门槛的放宽不得静默吞,出路是同意(答卡)或运维的 allow 表。
|
|
25
28
|
*
|
|
26
29
|
* 读者(都读同一次求值,不各算一份):提交受理口(`admission.ts` `prepareSpec`,三提交面共用)与能力位 `settings.permissions.callerTrust`(`routes/capabilities.ts`)。
|
|
27
30
|
* 续跑腿不读本档:存储体在自己的受理口按当时的档准入过。
|
|
@@ -30,7 +33,7 @@ import type { IncomingMessage } from "node:http";
|
|
|
30
33
|
import { type MinTrust, type SafetyMergeMember, type UserRole } from "@sema-agent/settings-schema";
|
|
31
34
|
import type { SkillSpec } from "@sema-agent/core";
|
|
32
35
|
import type { ServiceConfig } from "../config-types.js";
|
|
33
|
-
import { type
|
|
36
|
+
import { type EntryProblemsFacts } from "../entry-problems.js";
|
|
34
37
|
import type { ParsedTaskSettings } from "../task-settings.js";
|
|
35
38
|
/**
|
|
36
39
|
* 档是**怎么**推出来的(闭集;拒句按它说出路)。加一个词 ⇒ {@link basisClause} 的穷举 switch 编译红。
|
|
@@ -61,13 +64,8 @@ export interface RequestRuleTables {
|
|
|
61
64
|
/** 受理口拒体:句子 + 机读位(原样进 `sendError` 的 facts)。 */
|
|
62
65
|
export interface RequestTrustRefusal {
|
|
63
66
|
readonly message: string;
|
|
64
|
-
readonly facts: {
|
|
65
|
-
readonly
|
|
66
|
-
readonly detail: {
|
|
67
|
-
readonly problems: readonly EntryProblem[];
|
|
68
|
-
readonly total: number;
|
|
69
|
-
readonly callerTrust: MinTrust;
|
|
70
|
-
};
|
|
67
|
+
readonly facts: EntryProblemsFacts & {
|
|
68
|
+
readonly callerTrust: MinTrust;
|
|
71
69
|
};
|
|
72
70
|
}
|
|
73
71
|
/**
|
|
@@ -72,10 +72,9 @@ export function requestTrustRefusal(tables, reading) {
|
|
|
72
72
|
}
|
|
73
73
|
if (first === undefined)
|
|
74
74
|
return undefined;
|
|
75
|
-
const facts = entryProblemsFacts(problems);
|
|
76
75
|
return {
|
|
77
76
|
message: `${first.table.field} needs trust "${first.minTrust}" (${whatItDoes(first.table.source, first.loosens)}) and this request is admitted at "${reading.trust}": ${basisClause(reading)}. Below that trust these rules are not applied — ${outletOf(first.table.source, first.loosens)}.`,
|
|
78
|
-
facts: {
|
|
77
|
+
facts: { ...entryProblemsFacts(problems), callerTrust: reading.trust },
|
|
79
78
|
};
|
|
80
79
|
}
|
|
81
80
|
function whatItDoes(source, loosens) {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **认领之后、起跑之前**的两件事(三条提交腿 —— 流式 / 同步 / 后台 —— 同一只):
|
|
3
|
+
* · {@link startClaimHeartbeat}:认领赢的那一拍起心跳(落点 / 续跑输入 / 决定落行几笔店写都在起跑之前,任何一笔卡过收割窗,收割器就会把这条还活着的行判死、放掉认领);
|
|
4
|
+
* 起跑那一拍交给腿自己的心跳,每条收场出口停掉它;
|
|
5
|
+
* · {@link claimStillHeld}:引擎起跑之前的最后一读 —— 认领此刻还是不是这条 run 的(一次栅栏写,也是一次心跳)。不是 ⇒ 不起引擎(收割已放掉认领,会话可能已被删、
|
|
6
|
+
* 已归别的 run;起跑就是在一只别人的会话上跑,或让引擎在原 id 上重建一只无主的根)。
|
|
7
|
+
* 如实的边:栅栏的担保止于它那一拍 —— 复核之后、引擎起跑之前腿上还有一两次店读(停驻决定 / 受理账本),这一窗里心跳持续失败到收割窗以外
|
|
8
|
+
* (或进程停住那么久)⇒ 仍可能在失去认领之后起跑。「失认领后绝不起跑」要一只把认领带进引擎的栅栏,不在本模块。
|
|
9
|
+
*/
|
|
10
|
+
import { type RunHeartbeatStore } from "../runs.js";
|
|
11
|
+
import { type ClaimFenceStore } from "../plugins/store-contracts.js";
|
|
12
|
+
import type { RunStore } from "../plugins/store-backend.js";
|
|
13
|
+
import type { FlatServiceDeps } from "./server.js";
|
|
14
|
+
import { buildActiveRunConflict } from "./active-run-conflict.js";
|
|
15
|
+
import { rootSessionAbsentAnswer } from "./execution-context.js";
|
|
16
|
+
import { type RefusalBody } from "./refusal-body.js";
|
|
17
|
+
import { headReadOf } from "../session-incarnation.js";
|
|
18
|
+
/** 认领赢的那一拍起心跳(与后台腿 `runInBackground` 同一只周期、同一条带属主的刷新);交回停表。行已不在跑 ⇒ 心跳自停(起跑之前的复核随后答失认领)。刷新失败不抛(计数),下一拍再刷。 */
|
|
19
|
+
export declare function startClaimHeartbeat(runStore: RunHeartbeatStore, taskId: string, owner: string | null, metrics: {
|
|
20
|
+
inc(name: string, labels?: Record<string, string>): void;
|
|
21
|
+
} | undefined): () => void;
|
|
22
|
+
/** 起跑之前的认领复核:栅栏里什么都不写,只问「还持有吗」(一次栅栏写也是一次心跳)。 */
|
|
23
|
+
export declare function claimStillHeld(runStore: ClaimFenceStore, sessionId: string, taskId: string): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* 三条提交腿起跑之前的那一只复核(唯一调用形):持有 ⇒ `undefined`(照起);没持有 ⇒ {@link refusalAfterLostClaim} 的答复;栅栏自己抛(店一时不通)⇒
|
|
26
|
+
* 先按 {@link withdrawClaimedRun} 撤掉本请求刚认领的这条 run(删掉本请求铸的这一行 —— `legId` = 建行交回的持有腿,不留一条没起跑的 `running` 行占着会话等收割),再原样上抛。
|
|
27
|
+
*/
|
|
28
|
+
export declare function recheckClaimBeforeLaunch(deps: Pick<FlatServiceDeps, "checkpointStore" | "config" | "logger"> & LostClaimSessionFace, runStore: ClaimFenceStore & LostClaimStore, sessionId: string, taskId: string, legId: string): Promise<Awaited<ReturnType<typeof refusalAfterLostClaim>> | undefined>;
|
|
29
|
+
/** 失认领答复读会话店的那一面:只问头读(`headReadOf` 判店有没有它)—— 不要整只会话店。 */
|
|
30
|
+
export interface LostClaimSessionFace {
|
|
31
|
+
readonly sessionStorage?: Parameters<typeof headReadOf>[0];
|
|
32
|
+
}
|
|
33
|
+
/** 失认领答复与撤回本次 run 读写的那几面。 */
|
|
34
|
+
export type LostClaimStore = Pick<RunStore, "getActiveTaskId" | "getRun" | "withdrawMintedRun">;
|
|
35
|
+
/**
|
|
36
|
+
* 起跑之前认领复核没过的答复(三条提交腿同一只;三臂按「此刻是谁的事实」分,各读各的):
|
|
37
|
+
* · 认领此刻在别的 run 上 ⇒ 409 冲突体(与建行时认领输同一只材料,`conflict.session_active_run`);
|
|
38
|
+
* · 会话店的头读答「没有这只会话」⇒ 404 `resume.session_not_found`(四个建行点「会话不在」同一只答复)—— 只有读到它不在才这么答;
|
|
39
|
+
* · 否则(本条行已被死亡判决终局 —— 观察口 / 认领冲突 / 收割器之一 —— 没人持认领,会话在;或店没有头读、说不出它不在)⇒ 409 `conflict.claim_lost`:说的是本条 run 的事实(判决在起跑之前结清了它),不说会话。
|
|
40
|
+
* 三臂都不放键、不终结行(行已被收割终局;键随那条终局行,与收割的既有读法同 —— 撤回出口删本次那一条 run 行时键随行去,`plugins/session-birth.ts`)。
|
|
41
|
+
*/
|
|
42
|
+
export declare function refusalAfterLostClaim(deps: Pick<FlatServiceDeps, "checkpointStore" | "config"> & LostClaimSessionFace, runStore: LostClaimStore, sessionId: string, taskId: string): Promise<{
|
|
43
|
+
status: 409;
|
|
44
|
+
body: Awaited<ReturnType<typeof buildActiveRunConflict>>;
|
|
45
|
+
} | ReturnType<typeof rootSessionAbsentAnswer> | {
|
|
46
|
+
status: 409;
|
|
47
|
+
body: RefusalBody;
|
|
48
|
+
}>;
|
|
49
|
+
//# sourceMappingURL=claim-heartbeat.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { beatRunHeartbeat, HEARTBEAT_MS } from "../runs.js";
|
|
2
|
+
import { FENCE_LANDED } from "../plugins/store-contracts.js";
|
|
3
|
+
import { buildActiveRunConflict } from "./active-run-conflict.js";
|
|
4
|
+
import { rootSessionAbsentAnswer } from "./execution-context.js";
|
|
5
|
+
import { readTurnActivityMs } from "../turn-activity.js";
|
|
6
|
+
import { withdrawClaimedRun } from "./claimed-run.js";
|
|
7
|
+
import { refusalBody } from "./refusal-body.js";
|
|
8
|
+
import { headReadOf } from "../session-incarnation.js";
|
|
9
|
+
export function startClaimHeartbeat(runStore, taskId, owner, metrics) {
|
|
10
|
+
const timer = setInterval(() => {
|
|
11
|
+
beatRunHeartbeat(runStore, taskId, owner, () => clearInterval(timer), () => {
|
|
12
|
+
metrics?.inc("run_signal_poll_errors_total", { kind: "heartbeat" });
|
|
13
|
+
});
|
|
14
|
+
}, HEARTBEAT_MS);
|
|
15
|
+
timer.unref?.();
|
|
16
|
+
return () => clearInterval(timer);
|
|
17
|
+
}
|
|
18
|
+
export async function claimStillHeld(runStore, sessionId, taskId) {
|
|
19
|
+
if ("db" in runStore)
|
|
20
|
+
return (await runStore.whileHoldingClaim(sessionId, taskId, async () => undefined)).held;
|
|
21
|
+
return runStore.whileHoldingClaim(sessionId, taskId, () => FENCE_LANDED);
|
|
22
|
+
}
|
|
23
|
+
export async function recheckClaimBeforeLaunch(deps, runStore, sessionId, taskId, legId) {
|
|
24
|
+
let held;
|
|
25
|
+
try {
|
|
26
|
+
held = await claimStillHeld(runStore, sessionId, taskId);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
await withdrawClaimedRun(runStore, taskId, legId, (releaseErr, step) => {
|
|
30
|
+
deps.logger?.warn?.("claim_recheck_release_failed", { taskId, sessionId, step, err: releaseErr instanceof Error ? releaseErr.message : String(releaseErr) });
|
|
31
|
+
});
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
return held ? undefined : await refusalAfterLostClaim(deps, runStore, sessionId, taskId);
|
|
35
|
+
}
|
|
36
|
+
export async function refusalAfterLostClaim(deps, runStore, sessionId, taskId) {
|
|
37
|
+
const holder = await runStore.getActiveTaskId(sessionId);
|
|
38
|
+
if (holder !== undefined && holder !== taskId) {
|
|
39
|
+
return { status: 409, body: await buildActiveRunConflict({ runStore, checkpointStore: deps.checkpointStore, governance: deps.config, turnActivity: readTurnActivityMs }, sessionId, holder) };
|
|
40
|
+
}
|
|
41
|
+
const headOf = headReadOf(deps.sessionStorage);
|
|
42
|
+
if (headOf !== undefined && (await headOf(sessionId)) === undefined)
|
|
43
|
+
return rootSessionAbsentAnswer();
|
|
44
|
+
return { status: 409, body: refusalBody({ errorCode: "conflict.claim_lost", message: "the run this request claimed was settled by the stale-run verdict before the engine started it (its claim heartbeat did not land within the reap window) — nothing ran" }) };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=claim-heartbeat.js.map
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* (`execution-context.ts` `commitExecutionContext`)、续跑输入写不进(`submit-ctx.ts` `persistSubmitCtx`)与 workflow 决定行没落成
|
|
4
|
-
* (`durable-run-leg.ts` 的 fresh 投递腿;此刻认领可能已被收割归了别人 —— 两步都按这一跑自己的 taskId,碰不到别人的认领)。
|
|
2
|
+
* 一条提交腿认领的 run 在起跑之前就收场 —— 撤回这次认领,撤回到**它取来时的样子**(撤回表的唯一属主 = `execution-context.ts` 的 `withdrawClaim`),按认领种类两种写法:
|
|
5
3
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* {@link withdrawClaimedRun}(本模块)—— **本请求铸的行**(四个建行点 / wake 的现建行 / workflow 决定在宿主会话上的新一跑):取来之前没有这一行 ⇒ 删掉它
|
|
5
|
+
* (店的 `withdrawMintedRun`:本请求的行 = 这一个 `taskId` 上建行交回的那一只持有腿 —— 别的腿持着的行一个字节不动;行仍在跑 ⇒ 删行、它的事件与它的认领,
|
|
6
|
+
* 幂等键在行上随行去;已被收割 / 别的终局写先到 ⇒ 零删,那一份就是它的结局)。
|
|
7
|
+
* 调用点:撤回表的 `run` 臂(认领之后的提交拒 / 店故障、续跑腿交给引擎之前的抛)、续跑输入写不进(`submit-ctx.ts` `persistSubmitCtx`)、
|
|
8
|
+
* workflow 决定行没落成(`durable-run-leg.ts` 的 fresh 投递腿)与起跑之前的认领复核答不出(`claim-heartbeat.ts` `recheckClaimBeforeLaunch`)。
|
|
9
|
+
* 行从没交给引擎、提交没放行 ⇒ 同一个自带 `taskId` / 同一把 `Idempotency-Key` 的重发是一次新提交(真跑),不是这次拒的回放。
|
|
10
|
+
* 撤不掉(店整个不可达)不致命、但要响:失败交给调用方按自己的名字留痕(`onFailure`);行留在 `running`、起跑前的心跳随调用腿收场停下(或从没起过),
|
|
11
|
+
* `reapStale` 在 `REAP_RUN_STALE_SEC` 之后把它翻 failed 并释放会话(幂等键随那条终局行 —— 同键重提回放它,与撤不掉的终结写同一残余)。
|
|
12
|
+
*
|
|
13
|
+
* {@link releaseClaimedRun}(本模块)—— **续跑认领的停驻行续不了**(店答出它的会话已不在):这一行取来之前就在,不删 ⇒ 终结、放开认领与提交幂等键。撤两步,**各自独立**
|
|
14
|
+
* (一步失败不拦另一步,残余最小):终结(`setTerminal` 按 taskId 的 CAS,首写者赢 ⇒ 重复调用是 no-op,随之释放 `task_active` 认领)· 放开幂等键(`RunStore.releaseIdemKey`)。
|
|
15
|
+
*
|
|
16
|
+
* **还续得了**(续跑认领的停驻行,会话还在、它等的那张卡仍待决)⇒ 行回到认领之前的停驻词,认领、幂等键原样留着,同一张卡可以再决 ——
|
|
17
|
+
* 这是一次停驻,写法是停驻的唯一提交点 `park-row-commit.ts` 的 `commitParkRow`(续跑腿经 `commitResumePark`),不在本模块。
|
|
11
18
|
*/
|
|
12
19
|
import type { RunStore } from "../plugins/store-backend.js";
|
|
20
|
+
export declare function withdrawClaimedRun(runStore: Pick<RunStore, "withdrawMintedRun">, taskId: string, legId: string, onFailure: (err: unknown, step: "withdraw") => void): Promise<void>;
|
|
13
21
|
export declare function releaseClaimedRun(runStore: Pick<RunStore, "setTerminal" | "releaseIdemKey">, taskId: string, why: string, onFailure: (err: unknown, step: "terminal" | "idem_key") => void): Promise<void>;
|
|
14
22
|
//# sourceMappingURL=claimed-run.d.ts.map
|
package/dist/http/claimed-run.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
export async function withdrawClaimedRun(runStore, taskId, legId, onFailure) {
|
|
2
|
+
try {
|
|
3
|
+
await runStore.withdrawMintedRun(taskId, legId);
|
|
4
|
+
}
|
|
5
|
+
catch (err) {
|
|
6
|
+
onFailure(err, "withdraw");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
1
9
|
export async function releaseClaimedRun(runStore, taskId, why, onFailure) {
|
|
2
10
|
try {
|
|
3
11
|
await runStore.setTerminal(taskId, "failed", null, why);
|
package/dist/http/dispatch.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
18
18
|
import type { ServiceConfig } from "../config-types.js";
|
|
19
|
+
import { type HealthReader } from "./health-reader.js";
|
|
19
20
|
import type { RouteCtxBase, RunRegistry } from "./route-ctx.js";
|
|
20
21
|
import type { FlatServiceDeps } from "./server.js";
|
|
21
22
|
/** `/health` 的 `mods` 段(运维声明的 mod 包装上了几只;present-iff 装上了)—— 段的键集属主,自铸 wire 值登记表 `healthModsKey` 绑它。 */
|
|
@@ -28,7 +29,7 @@ export interface HealthDeploymentModsSection {
|
|
|
28
29
|
*
|
|
29
30
|
* 病:这几族(trace-usage / workflows / fleet)排在全局门之前,理由只有一条 —— 只读 `TRACE_TOKEN` 单凭据的调用方
|
|
30
31
|
* (registry 用量 / 轨迹中继)在全局门会被 401。可排在门前之后,每一族只剩**块内**自己那道门:fleet / workflows
|
|
31
|
-
* 只在 `REQUIRE_PRINCIPAL` 时要身份,trace 认 `
|
|
32
|
+
* 只在 `REQUIRE_PRINCIPAL` 时要身份,trace 认 `gatedSubject`(BFF 形上就是调用方自己写的 principal 头)。于是
|
|
32
33
|
* 配了 service token、没开 REQUIRE_PRINCIPAL 的部署上,`POST /v1/tasks` 吃凭据,这三族读路对端口全开。
|
|
33
34
|
*
|
|
34
35
|
* 规则(一条,三族同读;fail-closed):
|
|
@@ -40,6 +41,12 @@ export interface HealthDeploymentModsSection {
|
|
|
40
41
|
* 「这个请求带没带这台部署认的凭据」,不回答「它能看谁的行」。
|
|
41
42
|
*/
|
|
42
43
|
export declare function readCredentialOk(req: IncomingMessage, config: ServiceConfig): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* `GET /health` 这次请求的**读者档**(`health-reader.ts` 头注:三档与每档拿什么)—— 读的是上面那一只读路谓词,不另立第二份「凭据」读法:
|
|
46
|
+
* 没配服务凭据 ⇒ `open`(谓词的第一臂);配了而谓词认 ⇒ `credentialed`;配了而谓词不认 ⇒ `anonymous`。
|
|
47
|
+
* 调用点必须在鉴权桥预认证**之后**(已验登录令牌是谓词的一臂,读的是预认证挂上的身份)。
|
|
48
|
+
*/
|
|
49
|
+
export declare function healthReaderOf(req: IncomingMessage, config: ServiceConfig): HealthReader;
|
|
43
50
|
export declare function createDispatch(ctx: {
|
|
44
51
|
deps: FlatServiceDeps;
|
|
45
52
|
noteActivity: (url: string) => void;
|