@sema-agent/server 7.147.0 → 7.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import { RUN_STALE_SEC_DEFAULT } from "../run-stale-default.js";
|
|
1
2
|
import { HttpError, createCodedHttpError, ssoVerifiedScope } from "../security.js";
|
|
2
|
-
import {
|
|
3
|
+
import { gatedPerson } from "./principal-gate.js";
|
|
3
4
|
import { DEVICE_ERROR_CODES, assertDeviceIdShape } from "../device-store.js";
|
|
4
5
|
import { buildDeviceRejection } from "../device-enrollment.js";
|
|
5
|
-
import { sameOccupant } from "../execution-placement.js";
|
|
6
|
+
import { SessionForkInProgressError, sameOccupant } from "../execution-placement.js";
|
|
6
7
|
import { deployedExecutionLanes } from "../execution-lane-caps.js";
|
|
7
8
|
import { gateExecutionLane } from "../runtime-caps-resolver.js";
|
|
8
|
-
import { releaseClaimedRun } from "./claimed-run.js";
|
|
9
|
+
import { releaseClaimedRun, withdrawClaimedRun } from "./claimed-run.js";
|
|
9
10
|
import { sessionIdRetiredFor } from "../deleted-session-ids.js";
|
|
10
11
|
import { refusalBody } from "./refusal-body.js";
|
|
11
12
|
import { timeClaim } from "./claim-latency.js";
|
|
13
|
+
import { storeFaultClassOf } from "../plugins/store-fault.js";
|
|
14
|
+
import { resumeClaimFaultAnswer } from "./resume-ctx-read.js";
|
|
15
|
+
import { resumeAssemblyRefusalAnswer, resumeRefusalWithCard } from "./checkpoint-ctx.js";
|
|
12
16
|
export async function resolveExecutionContext(deps, entry) {
|
|
13
17
|
const lanes = deployedExecutionLanes(deps.config);
|
|
14
18
|
switch (entry.kind) {
|
|
@@ -69,8 +73,7 @@ function laneOf(root, cell, lanes) {
|
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
function sessionMirrorError(root) {
|
|
72
|
-
|
|
73
|
-
return createCodedHttpError(answer.status, answer.body.errorCode, answer.body.error, { forkPath: forkPathOf(root) });
|
|
76
|
+
return refusalHttpError(sessionMirrorAnswer(root));
|
|
74
77
|
}
|
|
75
78
|
export function forkPathOf(root) {
|
|
76
79
|
return `/v1/sessions/${encodeURIComponent(root)}/fork`;
|
|
@@ -86,14 +89,13 @@ function sessionMirrorAnswer(root) {
|
|
|
86
89
|
};
|
|
87
90
|
}
|
|
88
91
|
function rootSessionGoneError() {
|
|
89
|
-
|
|
90
|
-
return createCodedHttpError(absent.status, absent.body.errorCode, absent.body.error);
|
|
92
|
+
return refusalHttpError(rootSessionAbsentAnswer());
|
|
91
93
|
}
|
|
92
94
|
export function isRootSessionGoneError(err) {
|
|
93
95
|
return err instanceof HttpError && err.code === rootSessionAbsentAnswer().body.errorCode;
|
|
94
96
|
}
|
|
95
97
|
export function deviceOwnerDomainOf(req, config) {
|
|
96
|
-
const subject =
|
|
98
|
+
const subject = gatedPerson(req, config);
|
|
97
99
|
if (subject === undefined)
|
|
98
100
|
return undefined;
|
|
99
101
|
const tenant = ssoVerifiedScope(req);
|
|
@@ -141,8 +143,8 @@ async function admitDevicePlacement(deps, entry, lane, seat, reading) {
|
|
|
141
143
|
try {
|
|
142
144
|
admitted = await deps.deviceEnrollment.admitSession({ rootSessionId: entry.root, placement: reading, requester: owner, ...(requestedDeviceId === undefined ? {} : { requestedDeviceId }) });
|
|
143
145
|
}
|
|
144
|
-
catch {
|
|
145
|
-
throw asHttpError(registryUnavailable
|
|
146
|
+
catch (e) {
|
|
147
|
+
throw asHttpError(faultedAnswerOf(e, registryUnavailable));
|
|
146
148
|
}
|
|
147
149
|
if (admitted.ok)
|
|
148
150
|
return { rootSessionId: entry.root, occupant: reading.occupant, owner, admittedDeviceId: admitted.value.deviceId, firstBind: false };
|
|
@@ -152,8 +154,8 @@ async function admitDevicePlacement(deps, entry, lane, seat, reading) {
|
|
|
152
154
|
try {
|
|
153
155
|
view = await deps.deviceStore.readDeviceForAdmission(requestedDeviceId, owner);
|
|
154
156
|
}
|
|
155
|
-
catch {
|
|
156
|
-
throw asHttpError(registryUnavailable
|
|
157
|
+
catch (e) {
|
|
158
|
+
throw asHttpError(faultedAnswerOf(e, registryUnavailable));
|
|
157
159
|
}
|
|
158
160
|
if (!view)
|
|
159
161
|
throw asHttpError(buildDeviceRejection(DEVICE_ERROR_CODES.NOT_FOUND, "device not found"));
|
|
@@ -163,12 +165,25 @@ async function admitDevicePlacement(deps, entry, lane, seat, reading) {
|
|
|
163
165
|
throw asHttpError(buildDeviceRejection(DEVICE_ERROR_CODES.OFFLINE, "device is not connected"));
|
|
164
166
|
return { rootSessionId: entry.root, occupant: reading.occupant, owner, admittedDeviceId: requestedDeviceId, firstBind: true };
|
|
165
167
|
}
|
|
166
|
-
export function stampSpecRoot(spec, ctx) {
|
|
168
|
+
export function stampSpecRoot(spec, ctx, submission) {
|
|
167
169
|
const named = spec.sessionId;
|
|
168
170
|
if (named !== undefined && named !== ctx.root) {
|
|
169
171
|
throw createCodedHttpError(400, "request.precondition_unmet", "the deployment's spec resolver named a session other than the one this submission was authorized for — a submission's root session comes only from the authorizer, so resolveSpec must not set sessionId (read opts.execution.root instead)");
|
|
170
172
|
}
|
|
171
|
-
|
|
173
|
+
switch (submission.use) {
|
|
174
|
+
case "session": {
|
|
175
|
+
const mustExist = ctx.occupant !== undefined || submission.requireExistingSession === true;
|
|
176
|
+
return mustExist ? { ...spec, sessionId: ctx.root, requireExistingSession: true } : { ...spec, sessionId: ctx.root };
|
|
177
|
+
}
|
|
178
|
+
case "ladder_host": {
|
|
179
|
+
const { requireExistingSession: _noAcquireOnALadder, ...ladderSpec } = spec;
|
|
180
|
+
return { ...ladderSpec, sessionId: ctx.root };
|
|
181
|
+
}
|
|
182
|
+
default: {
|
|
183
|
+
const unhandled = submission;
|
|
184
|
+
throw new Error(`stampSpecRoot: unhandled root use ${JSON.stringify(unhandled)}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
172
187
|
}
|
|
173
188
|
export function rootSessionAbsentAnswer() {
|
|
174
189
|
return {
|
|
@@ -179,8 +194,64 @@ export function rootSessionAbsentAnswer() {
|
|
|
179
194
|
}),
|
|
180
195
|
};
|
|
181
196
|
}
|
|
197
|
+
export function isRootSessionGoneRefusal(refusal) {
|
|
198
|
+
return refusal.body.errorCode === rootSessionAbsentAnswer().body.errorCode;
|
|
199
|
+
}
|
|
200
|
+
export function faultedAnswerOf(e, answer) {
|
|
201
|
+
const fault = storeFaultClassOf(e);
|
|
202
|
+
switch (fault) {
|
|
203
|
+
case "corrupt":
|
|
204
|
+
case "connection":
|
|
205
|
+
case "deployment":
|
|
206
|
+
case "unclassified":
|
|
207
|
+
return answer();
|
|
208
|
+
case "defect":
|
|
209
|
+
throw e;
|
|
210
|
+
default: {
|
|
211
|
+
const unhandled = fault;
|
|
212
|
+
throw new Error(`faultedAnswerOf: the store-fault judge answered a class this reader does not place: ${String(unhandled)}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export function runStoreUnavailableAnswer() {
|
|
217
|
+
return {
|
|
218
|
+
status: 503,
|
|
219
|
+
body: refusalBody({ errorCode: "state.run_store_unavailable", message: "this task could not be recorded just now (the store did not answer), so nothing was started. Send it again later; if this keeps happening, ask whoever operates this deployment to check its database." }),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export const SUBMISSION_CLAIM_FACE = { refused: (refusal) => refusal, faulted: runStoreUnavailableAnswer };
|
|
223
|
+
export const CONTINUATION_CLAIM_FACE = {
|
|
224
|
+
refused: (refusal) => (isRootSessionGoneRefusal(refusal) ? refusal : cardWaitingRefusalAnswer(refusal)),
|
|
225
|
+
faulted: resumeClaimFaultAnswer,
|
|
226
|
+
};
|
|
227
|
+
export function cardWaitingRefusalAnswer(refusal) {
|
|
228
|
+
const { error, errorCode, ...facts } = refusal.body;
|
|
229
|
+
return resumeRefusalWithCard(resumeAssemblyRefusalAnswer(refusal.status, { errorCode, message: error, facts }), true);
|
|
230
|
+
}
|
|
231
|
+
export function refusalHttpError(refusal) {
|
|
232
|
+
const { error, errorCode, ...facts } = refusal.body;
|
|
233
|
+
return createCodedHttpError(refusal.status, errorCode, error, Object.keys(facts).length > 0 ? facts : undefined);
|
|
234
|
+
}
|
|
235
|
+
export async function resolveBeforeClaim(deps, entry, face) {
|
|
236
|
+
try {
|
|
237
|
+
return await resolveExecutionContext(deps, entry);
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
if (e instanceof HttpError)
|
|
241
|
+
throw e;
|
|
242
|
+
throw new ClaimFaultAnswer(faultedAnswerOf(e, face.faulted));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
export class ClaimFaultAnswer extends HttpError {
|
|
246
|
+
answer;
|
|
247
|
+
constructor(answer) {
|
|
248
|
+
const { error, errorCode: code, ...facts } = answer.body;
|
|
249
|
+
super(answer.status, error, Object.keys(facts).length > 0 ? { code, extra: facts } : { code });
|
|
250
|
+
this.answer = answer;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
182
253
|
export function placementWriteDeadlineMs(runStaleSec) {
|
|
183
|
-
const stale = typeof runStaleSec === "number" && Number.isFinite(runStaleSec) && runStaleSec > 0 ? runStaleSec :
|
|
254
|
+
const stale = typeof runStaleSec === "number" && Number.isFinite(runStaleSec) && runStaleSec > 0 ? runStaleSec : RUN_STALE_SEC_DEFAULT;
|
|
184
255
|
return Math.min(15_000, Math.max(1_000, Math.floor((stale * 1000) / 4)));
|
|
185
256
|
}
|
|
186
257
|
function deviceRefusal(rej) {
|
|
@@ -207,7 +278,7 @@ export async function commitExecutionContext(deps, claim, ctx) {
|
|
|
207
278
|
return timeClaim(deps.metrics, "placement_commit", commitPlacement(deps, claim, ctx, seat, occupant));
|
|
208
279
|
}
|
|
209
280
|
async function commitPlacement(deps, claim, ctx, seat, occupant) {
|
|
210
|
-
const release = (why) =>
|
|
281
|
+
const release = (why, ending) => withdrawClaim(deps, claim, why, ending);
|
|
211
282
|
const deadlineMs = placementWriteDeadlineMs(deps.config?.runStaleSec);
|
|
212
283
|
const withDeadline = async (work) => {
|
|
213
284
|
let timer;
|
|
@@ -225,56 +296,64 @@ async function commitPlacement(deps, claim, ctx, seat, occupant) {
|
|
|
225
296
|
clearTimeout(timer);
|
|
226
297
|
}
|
|
227
298
|
};
|
|
228
|
-
const goneAnswer = () => (claim.kind === "parked" ? claim.goneAnswer : rootSessionAbsentAnswer());
|
|
229
299
|
let refusal;
|
|
230
300
|
try {
|
|
231
301
|
refusal =
|
|
232
302
|
ctx.device !== undefined
|
|
233
|
-
? await commitDevice(deps, seat, ctx.device, withDeadline
|
|
303
|
+
? await commitDevice(deps, seat, ctx.device, withDeadline)
|
|
234
304
|
: ctx.placement === "absent"
|
|
235
|
-
? await commitPlace(seat, ctx, occupant, withDeadline
|
|
236
|
-
: await reassertWriter(seat, ctx, occupant, withDeadline
|
|
305
|
+
? await commitPlace(seat, ctx, occupant, withDeadline)
|
|
306
|
+
: await reassertWriter(seat, ctx, occupant, withDeadline);
|
|
237
307
|
}
|
|
238
308
|
catch (err) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
if (ctx.device !== undefined) {
|
|
242
|
-
refusal = deviceRefusal(registryUnavailable());
|
|
309
|
+
if (err instanceof SessionForkInProgressError) {
|
|
310
|
+
refusal = { status: 409, body: refusalBody({ errorCode: err.code, message: err.message }) };
|
|
243
311
|
deps.metrics?.inc("execution_placement_rejects_total", { errorCode: refusal.body.errorCode });
|
|
312
|
+
await release(`execution placement rejected: [${refusal.body.errorCode}] ${refusal.body.error}`, "refused");
|
|
244
313
|
return refusal;
|
|
245
314
|
}
|
|
315
|
+
deps.logger?.warn("execution_placement_commit_failed", { root: ctx.root, lane: ctx.lane, placement: ctx.placement, deadlineMs, err: err instanceof Error ? err.message : String(err) });
|
|
316
|
+
await release(`execution placement could not be committed: ${err instanceof Error ? err.message : String(err)}`, "faulted");
|
|
246
317
|
throw err;
|
|
247
318
|
}
|
|
248
319
|
if (refusal === null)
|
|
249
320
|
return null;
|
|
250
321
|
deps.metrics?.inc("execution_placement_rejects_total", { errorCode: refusal.body.errorCode });
|
|
251
|
-
await release(`execution placement rejected: [${refusal.body.errorCode}] ${refusal.body.error}
|
|
322
|
+
await release(`execution placement rejected: [${refusal.body.errorCode}] ${refusal.body.error}`, isRootSessionGoneRefusal(refusal) ? "gone" : "refused");
|
|
252
323
|
return refusal;
|
|
253
324
|
}
|
|
254
|
-
async function
|
|
325
|
+
export async function withdrawClaim(deps, claim, why, ending) {
|
|
326
|
+
const loud = (taskId, step, err) => {
|
|
327
|
+
deps.logger?.warn("execution_placement_run_release_failed", { taskId, step, err: err instanceof Error ? err.message : String(err) });
|
|
328
|
+
deps.metrics?.inc("execution_placement_run_release_failed_total");
|
|
329
|
+
};
|
|
255
330
|
switch (claim.kind) {
|
|
256
331
|
case "run":
|
|
257
|
-
await
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
332
|
+
await withdrawClaimedRun(claim.runStore, claim.taskId, claim.legId, (err, step) => loud(claim.taskId, step, err));
|
|
333
|
+
return;
|
|
334
|
+
case "resumed":
|
|
335
|
+
if (ending !== "gone") {
|
|
336
|
+
await claim.restore();
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
await releaseClaimedRun(claim.runStore, claim.taskId, why, (err, step) => loud(claim.taskId, step, err));
|
|
261
340
|
return;
|
|
262
341
|
case "parked":
|
|
263
342
|
await claim.rollback(why);
|
|
264
343
|
return;
|
|
265
344
|
default: {
|
|
266
345
|
const unhandled = claim;
|
|
267
|
-
throw new Error(`
|
|
346
|
+
throw new Error(`withdrawClaim: unknown claim ${JSON.stringify(unhandled)}`);
|
|
268
347
|
}
|
|
269
348
|
}
|
|
270
349
|
}
|
|
271
|
-
async function commitPlace(seat, ctx, occupant, withDeadline
|
|
350
|
+
async function commitPlace(seat, ctx, occupant, withDeadline) {
|
|
272
351
|
if (ctx.lane === "device") {
|
|
273
352
|
return deviceRefusal(buildDeviceRejection(DEVICE_ERROR_CODES.NOT_BOUND, "this session has no device binding — nothing was started"));
|
|
274
353
|
}
|
|
275
|
-
return placeOutcomeAnswer(ctx.root, await withDeadline(seat.place(ctx.root, occupant, { role: "writer", lane: ctx.lane }))
|
|
354
|
+
return placeOutcomeAnswer(ctx.root, await withDeadline(seat.place(ctx.root, occupant, { role: "writer", lane: ctx.lane })));
|
|
276
355
|
}
|
|
277
|
-
function placeOutcomeAnswer(root, outcome
|
|
356
|
+
function placeOutcomeAnswer(root, outcome) {
|
|
278
357
|
switch (outcome.outcome) {
|
|
279
358
|
case "placed":
|
|
280
359
|
case "same":
|
|
@@ -284,17 +363,17 @@ function placeOutcomeAnswer(root, outcome, goneAnswer) {
|
|
|
284
363
|
case "mirror":
|
|
285
364
|
return sessionMirrorAnswer(root);
|
|
286
365
|
case "gone":
|
|
287
|
-
return
|
|
366
|
+
return rootSessionAbsentAnswer();
|
|
288
367
|
default: {
|
|
289
368
|
const unhandled = outcome;
|
|
290
369
|
throw new Error(`commitExecutionContext: no answer for ${JSON.stringify(unhandled)}`);
|
|
291
370
|
}
|
|
292
371
|
}
|
|
293
372
|
}
|
|
294
|
-
async function reassertWriter(seat, ctx, occupant, withDeadline
|
|
373
|
+
async function reassertWriter(seat, ctx, occupant, withDeadline) {
|
|
295
374
|
const now = await withDeadline(seat.read(ctx.root));
|
|
296
375
|
if (now === undefined || !sameOccupant(now.occupant, occupant))
|
|
297
|
-
return
|
|
376
|
+
return rootSessionAbsentAnswer();
|
|
298
377
|
const cell = now.cell;
|
|
299
378
|
switch (cell.role) {
|
|
300
379
|
case "writer":
|
|
@@ -310,20 +389,31 @@ async function reassertWriter(seat, ctx, occupant, withDeadline, goneAnswer) {
|
|
|
310
389
|
}
|
|
311
390
|
}
|
|
312
391
|
}
|
|
313
|
-
async function commitDevice(deps, seat, intent, withDeadline
|
|
392
|
+
async function commitDevice(deps, seat, intent, withDeadline) {
|
|
314
393
|
const enrollment = deps.deviceEnrollment;
|
|
315
394
|
if (!enrollment) {
|
|
316
395
|
throw new Error("commitExecutionContext: a device placement intent was minted without a DeviceEnrollment — assembly bug (both are read from the same ServiceDeps)");
|
|
317
396
|
}
|
|
397
|
+
const registry = async (work) => {
|
|
398
|
+
try {
|
|
399
|
+
return { ok: true, value: await withDeadline(work) };
|
|
400
|
+
}
|
|
401
|
+
catch (e) {
|
|
402
|
+
return { ok: false, refusal: deviceRefusal(faultedAnswerOf(e, registryUnavailable)) };
|
|
403
|
+
}
|
|
404
|
+
};
|
|
318
405
|
if (intent.firstBind) {
|
|
319
|
-
const
|
|
406
|
+
const binding = await registry(enrollment.bindPlacement({ rootSessionId: intent.rootSessionId, occupant: intent.occupant, deviceId: intent.admittedDeviceId, requester: intent.owner }));
|
|
407
|
+
if (!binding.ok)
|
|
408
|
+
return binding.refusal;
|
|
409
|
+
const bound = binding.value;
|
|
320
410
|
if (bound.ok)
|
|
321
411
|
return null;
|
|
322
412
|
if ("reject" in bound)
|
|
323
413
|
return deviceRefusal(bound.reject);
|
|
324
414
|
switch (bound.placement) {
|
|
325
415
|
case "gone":
|
|
326
|
-
return
|
|
416
|
+
return rootSessionAbsentAnswer();
|
|
327
417
|
case "mirror":
|
|
328
418
|
return sessionMirrorAnswer(intent.rootSessionId);
|
|
329
419
|
case "tree_bound":
|
|
@@ -336,8 +426,10 @@ async function commitDevice(deps, seat, intent, withDeadline, goneAnswer) {
|
|
|
336
426
|
}
|
|
337
427
|
const placement = await withDeadline(seat.read(intent.rootSessionId));
|
|
338
428
|
if (placement === undefined || !sameOccupant(placement.occupant, intent.occupant))
|
|
339
|
-
return
|
|
340
|
-
const
|
|
341
|
-
|
|
429
|
+
return rootSessionAbsentAnswer();
|
|
430
|
+
const readmission = await registry(enrollment.admitSession({ rootSessionId: intent.rootSessionId, placement, requester: intent.owner, requestedDeviceId: intent.admittedDeviceId }));
|
|
431
|
+
if (!readmission.ok)
|
|
432
|
+
return readmission.refusal;
|
|
433
|
+
return readmission.value.ok ? null : deviceRefusal(readmission.value.reject);
|
|
342
434
|
}
|
|
343
435
|
//# sourceMappingURL=execution-context.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `GET /health` 的**读者分档** —— 同一张面四种读者(k8s / Docker 探针、壳在带凭据之前读的自报位、嵌入宿主的引擎身份验证、持凭运维),
|
|
3
|
+
* 键集按**读者**而不是按「这个键敏不敏感」定。
|
|
4
|
+
*
|
|
5
|
+
* ## 规则(一条)
|
|
6
|
+
* 读者三档,答案只有一处:
|
|
7
|
+
* · `open` —— 部署没配任何服务凭据(单机 / loopback 开发形;全局凭据门不武装):全键,字节同分档之前;
|
|
8
|
+
* · `credentialed` —— 配了服务凭据,且这次请求出示了**读路谓词**认的凭据(`dispatch.ts` 的 `readCredentialOk`:service token ∨ 只读 trace token ∨ 已验 principal):全键;
|
|
9
|
+
* · `anonymous` —— 配了服务凭据而这次请求没出示:**只拿显式白名单** {@link ANONYMOUS_HEALTH_KEYS}。
|
|
10
|
+
* 白名单 = 存活位(`status`)+ 壳的 pre-credential 自报位三键(`auth` / `operator` / `center`,`health-self-report.ts` 铸;壳在带凭据**之前**要读的就是它们)。
|
|
11
|
+
* 其余的键 —— 现有的(`dataRoot` / `pid` / `configHash` / `sessionBackend` / `startedAt` / `port` / `version` / `engineSignal` …)与将来新长的 —— 对匿名读者一律不出:
|
|
12
|
+
* 这是**白名单**(挑出四键),不是黑名单(剥掉几键)—— 黑名单形下每个新键默认漏出,这一面又恒在凭据门之前、缺省全网卡监听(安全轴 fail-closed)。
|
|
13
|
+
*
|
|
14
|
+
* ## 谁读哪一档
|
|
15
|
+
* · 探针(k8s `httpGet` / Docker `HEALTHCHECK`):只要 HTTP 200 —— 匿名也是 200,存活位在白名单里;摘流语义的探针读 `/readyz`(不分档,体只有就绪位);
|
|
16
|
+
* · 壳的 pre-credential 读路:`auth` / `operator` / `center` 三键(7.121.0)—— 白名单;
|
|
17
|
+
* · 嵌入宿主的引擎身份验证(`pid` ∧ `dataRoot`,见 `test/health-identity-contract.test.ts`):宿主就是带着部署的服务凭据起的引擎,身份验证带同一枚凭据读 —— 在 `credentialed` 档;
|
|
18
|
+
* 没配服务凭据的嵌入形(桌面宿主自起、不配凭据)在 `open` 档,与改前逐字节同;
|
|
19
|
+
* · 持凭运维 / 编排器:`credentialed` 档,全键。
|
|
20
|
+
*
|
|
21
|
+
* 没有旋钮:一个放宽用的旋钮就是一把「把路径指纹重新开给匿名方」的钥匙,而本规则要的恰是它没有这把钥匙。
|
|
22
|
+
*/
|
|
23
|
+
/** 读者三档(闭集;顺序无语义)。 */
|
|
24
|
+
export declare const HEALTH_READERS: readonly ["open", "credentialed", "anonymous"];
|
|
25
|
+
export type HealthReader = (typeof HEALTH_READERS)[number];
|
|
26
|
+
/**
|
|
27
|
+
* 匿名读者的**显式白名单**:存活位 + 自报位三键。穷举 —— 加一个进来是一次有意的、要过评审的放宽(它会对没有凭据的任何人可见)。
|
|
28
|
+
* 每一只都必须是 `/health` 体里真有的键(`test/health-reader-closed-set.test.ts` 逐键钉在场),抄错名字不会悄悄把闭集缩成更小的一个。
|
|
29
|
+
*/
|
|
30
|
+
export declare const ANONYMOUS_HEALTH_KEYS: readonly ["status", "auth", "operator", "center"];
|
|
31
|
+
/**
|
|
32
|
+
* 键集判官 —— `/health` 体按读者出口的**唯一**一道:`open` / `credentialed` 原样,`anonymous` 只挑白名单。
|
|
33
|
+
* 入参是按全键铸好的体(铸点不分读者:一个事实一个铸点,读者分档只在出口);返回新对象,不改入参。
|
|
34
|
+
*/
|
|
35
|
+
export declare function projectHealthBody(reader: HealthReader, body: Readonly<Record<string, unknown>>): Readonly<Record<string, unknown>>;
|
|
36
|
+
//# sourceMappingURL=health-reader.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const HEALTH_READERS = ["open", "credentialed", "anonymous"];
|
|
2
|
+
export const ANONYMOUS_HEALTH_KEYS = ["status", "auth", "operator", "center"];
|
|
3
|
+
export function projectHealthBody(reader, body) {
|
|
4
|
+
switch (reader) {
|
|
5
|
+
case "open":
|
|
6
|
+
case "credentialed":
|
|
7
|
+
return body;
|
|
8
|
+
case "anonymous": {
|
|
9
|
+
const closed = {};
|
|
10
|
+
for (const key of ANONYMOUS_HEALTH_KEYS)
|
|
11
|
+
if (Object.hasOwn(body, key))
|
|
12
|
+
closed[key] = body[key];
|
|
13
|
+
return closed;
|
|
14
|
+
}
|
|
15
|
+
default: {
|
|
16
|
+
const unknownReader = reader;
|
|
17
|
+
throw new Error(`health reader: unknown reader ${String(unknownReader)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=health-reader.js.map
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*
|
|
5
5
|
* ## 规则(一条):自报位是**投影**,不是第二份规则
|
|
6
6
|
* 每一位读的是**门本身读的那只谓词 / 那只取值口**,本模块不判任何东西:
|
|
7
|
-
* · `auth.kinds` = `IDENTITY_SOURCES`(`identity-source.ts`;`verifiedIdentitySource` 的回值闭集,序 = 判定次序)
|
|
8
|
-
* (`
|
|
9
|
-
* `service_token` ⇐ 全局门武装(`systemFor` 只在配了 service token 时回得出值)· `sso` ⇐
|
|
10
|
-
* `
|
|
11
|
-
* · `auth.required` = kinds 里有没有 `service_token` —— 那一词接没接线就是全局凭据门的武装谓词(`hasServiceAuth`;`
|
|
7
|
+
* · `auth.kinds` = `IDENTITY_SOURCES`(`identity-source.ts`;`verifiedIdentitySource` 的回值闭集,序 = 判定次序)里,这台部署的配置**能**回的那几个词 —— 取唯一读法 `configuredIdentitySources`
|
|
8
|
+
* (`identity-source.ts`;「这台部署有没有身份边界」的部署形表行 `identityBoundary` 读同一只):
|
|
9
|
+
* `service_token` ⇐ 全局门武装(`systemFor` 只在配了 service token 时回得出值)· `sso` ⇐ 配置里有鉴权桥 issuer(显式或中心回退;起服第 9 段按同一个读数装验签器,
|
|
10
|
+
* 验签器与配置里的桥两者不一致的装配(任一方向)在 `createHttpServer` 拒)· `direct_door_jwt` ⇐ 直连门开着(`verifiedIdentitySource` 那一臂的第一个合取项);
|
|
11
|
+
* · `auth.required` = kinds 里有没有 `service_token` —— 那一词接没接线就是全局凭据门的武装谓词(`hasServiceAuth`;`configuredIdentitySources` 的
|
|
12
12
|
* `service_token` 臂读的正是它),所以 `required` 与 `kinds` 是同一次求值的两个投影,不是两个来源;
|
|
13
13
|
* · `auth.identityAttach` = kinds 里有没有**带调用方身份**的一类({@link carriesCallerIdentity},穷举):`service_token` 认的是系统
|
|
14
14
|
* (`systemFor` 回系统名或 null),不是人;
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* · `center.issuer` = 鉴权桥 issuer 的唯一取值 `authBridgeIssuerOf`(装配 `boot/stage-09-leader.ts` 与 caps `centerWiring.issuer` 同读);
|
|
20
20
|
* · `center.webBaseUrl` = 运维旋钮 `SEMA_WEB_ADMIN_WEB_URL`(`config.webAdmin.webBaseUrl`,接了中心才挂;起服时已判成固定基址);
|
|
21
21
|
* · `center.sessionsVisible` = 中心的 web 面能不能列出本引擎的会话 —— 四件接线事实全在才可能:中心车道配齐(`centerLaneConfigured`,
|
|
22
|
-
* 租约 / 用量 / 公告同一只谓词)∧ 公告地址在(配置席 `fleetAdvertiseAddress`:web 面只拨中心登记过的实例地址)∧ 鉴权桥在(web 面带的是
|
|
22
|
+
* 租约 / 用量 / 公告同一只谓词)∧ 公告地址在(配置席 `fleetAdvertiseAddress`:web 面只拨中心登记过的实例地址)∧ 鉴权桥在(kinds 里有 `sso`;web 面带的是
|
|
23
23
|
* 中心铸的中继令牌,不带 service token)∧ 会话枚举面在(事实 `sessionList`,web 面中继 `GET /v1/sessions`);缺任一 ⇒ `false`。
|
|
24
24
|
* 四件齐时:多租户(`REQUIRE_PRINCIPAL`)每条会话都落着验过的属主 ⇒ `true`;单用户形下一条会话归谁取决于提交它的那次请求带没带
|
|
25
25
|
* 身份(web 面只列调用人自己的会话)—— 部署级答不了 ⇒ `"unknown"`。
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* 三键**恒在场**;缺席 = 老 worker(≤7.120.x)。`center.issuer` / `center.webBaseUrl` 缺席即缺席(没有鉴权桥 / 没配旋钮),不拼不猜。
|
|
37
37
|
*/
|
|
38
38
|
import type { FlatServiceDeps } from "./server.js";
|
|
39
|
-
import type
|
|
39
|
+
import { type IdentitySource } from "../identity-source.js";
|
|
40
40
|
/** `auth.identityAttach` 的词表。 */
|
|
41
41
|
export declare const IDENTITY_ATTACH_WORDS: readonly ["available", "unavailable"];
|
|
42
42
|
export type IdentityAttach = (typeof IDENTITY_ATTACH_WORDS)[number];
|
|
@@ -62,8 +62,8 @@ export interface HealthSelfReport {
|
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
* 三键的**唯一铸点**(`build*`:纯数据)
|
|
65
|
+
* 三键的**唯一铸点**(`build*`:纯数据)。只读部署本身:`auth` 四位都从一次 `configuredIdentitySources` 求值投出(`required` = 其中有 `service_token`;
|
|
66
66
|
* `serviceTokenActsForDeployment` = `required` ∧ 门读的那一格声明),不收调用方递进来的第二份布尔 —— 一个事实一次求值。
|
|
67
67
|
*/
|
|
68
|
-
export declare function buildHealthSelfReport(deps: Pick<FlatServiceDeps, "config" | "
|
|
68
|
+
export declare function buildHealthSelfReport(deps: Pick<FlatServiceDeps, "config" | "sessionStorage" | "runStore">): HealthSelfReport;
|
|
69
69
|
//# sourceMappingURL=health-self-report.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { serviceTokenDeclaredActsForDeployment
|
|
1
|
+
import { serviceTokenDeclaredActsForDeployment } from "./principal-gate.js";
|
|
2
|
+
import { authBridgeIssuerOf, configuredIdentitySources } from "../identity-source.js";
|
|
2
3
|
import { operatorLane, sessionList } from "../capability-facts.js";
|
|
3
|
-
import { authBridgeIssuerOf } from "../auth-bridge.js";
|
|
4
4
|
import { centerLaneConfigured } from "../web-admin-client/center-request.js";
|
|
5
5
|
import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
6
6
|
export const IDENTITY_ATTACH_WORDS = ["available", "unavailable"];
|
|
@@ -21,8 +21,8 @@ function carriesCallerIdentity(kind) {
|
|
|
21
21
|
}
|
|
22
22
|
export function buildHealthSelfReport(deps) {
|
|
23
23
|
const { config } = deps;
|
|
24
|
-
const
|
|
25
|
-
const
|
|
24
|
+
const kinds = configuredIdentitySources(config);
|
|
25
|
+
const bridgeWired = kinds.includes("sso");
|
|
26
26
|
const issuer = authBridgeIssuerOf(config)?.issuer;
|
|
27
27
|
const webBaseUrl = config.webAdmin?.webBaseUrl;
|
|
28
28
|
const sessionsVisible = centerLaneConfigured(config) && config.fleetAdvertiseAddress !== undefined && bridgeWired && sessionList(deps).available ? (config.requirePrincipal ? true : "unknown") : false;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IncomingMessage } from "node:http";
|
|
2
2
|
import type { ServiceConfig } from "../config-types.js";
|
|
3
|
+
import type { Subject } from "../owner-brands.js";
|
|
3
4
|
import type { WiringManifestReceipt } from "./wire-types.js";
|
|
4
5
|
import type { SubmitReplayFace } from "./submit-replay.js";
|
|
5
6
|
import type { RunIdemBinding } from "../plugins/store-contracts.js";
|
|
@@ -36,8 +37,8 @@ export declare class IdempotencyCache<T> {
|
|
|
36
37
|
* `Idempotency-Key` 的**资源族**闭集 —— 键的作用域里那一位是**资源族,不是端点**。
|
|
37
38
|
*
|
|
38
39
|
* · `run` —— 一条 run(`POST /v1/tasks` · `/v1/tasks/stream` · `/v1/runs` · A2A `message/send` 都建同一种行;
|
|
39
|
-
* 同一条 run 换腿重试仍同键,不会重复计费)
|
|
40
|
-
* 也按本族取键,收成引擎的 `inputId`(
|
|
40
|
+
* 同一条 run 换腿重试仍同键,不会重复计费)。同族的动词口 `/v1/runs/:id/steer`
|
|
41
|
+
* 也按本族取键,收成引擎的 `inputId`(它的去重属主是引擎的输入队列,不是本仓的行;`/interrupt` 是不带输入的 halt,不取键)。
|
|
41
42
|
* · `leader` —— 一条 leader run(`leader_run.idem_key`)。
|
|
42
43
|
* · `bake` —— 一次镜像烘焙(`image_bake.idem_key`)。
|
|
43
44
|
*
|
|
@@ -45,12 +46,14 @@ export declare class IdempotencyCache<T> {
|
|
|
45
46
|
*/
|
|
46
47
|
export type IdemFamily = "run" | "leader" | "bake";
|
|
47
48
|
/**
|
|
48
|
-
* 一次提交的**调用方身份**(幂等的作用域就是它)—— 授权口建立的那两样:验过的 principal(`
|
|
49
|
+
* 一次提交的**调用方身份**(幂等的作用域就是它)—— 授权口建立的那两样:验过的 principal(`gatedSubject`)与凭据族
|
|
49
50
|
* (`source`:鉴权门由出示的服务凭据派生的系统名,`RouteRequestState.source` 是它唯一的赋值点)。由 {@link idemCallerOf}
|
|
50
51
|
* 从请求一处读出;键里用的那一位由 {@link idemIdentityOf} 一处定。
|
|
51
52
|
*/
|
|
52
53
|
export interface IdemCaller {
|
|
53
|
-
|
|
54
|
+
/** 验过的主体(分区键;`gatedSubject` 的读数,带 `Subject` 品牌 —— 提交重放与 leader 登记表的属主门直接拿它当调用方,不再另铸;
|
|
55
|
+
* 幂等身份位读它 ⇒ 同一只 `Idempotency-Key` 在同一个人的两个场景里是两把键)。 */
|
|
56
|
+
readonly subject: Subject | null | undefined;
|
|
54
57
|
readonly source: string | null | undefined;
|
|
55
58
|
}
|
|
56
59
|
/** 本次请求的 {@link IdemCaller} —— 一处读:验过的 principal + 鉴权门派生的凭据族(两样都是既有的席位,这里不另判身份)。 */
|
|
@@ -118,7 +121,8 @@ export declare function inflightKeyOf(idem: RunIdemBinding, face: SubmitReplayFa
|
|
|
118
121
|
* 就成了「键缺席」,而 present-iff 的读法会把它读成「这台引擎不给回执」。挂在 outcome 上 = 它是**这条 run 的
|
|
119
122
|
* 属性**(哪条腿跑的都一样),由各腿自己的应答构造器在送出那一刻按自己的 wire 形挂。
|
|
120
123
|
* 落定之后的同键重放不走这里:它读行,体是首答的信封 + `replay: true`(`http/submit-replay.ts` → `http/sync-submit-body.ts`)—— 回执是起手那一帧
|
|
121
|
-
*
|
|
124
|
+
* 的活捕获、不落行,所以读行的重放体上**不带** `wiringManifest`。在飞合流的跟随方拿的是这一只 outcome(回执照带)经 `replayedOutcome` 叠位 ——
|
|
125
|
+
* `replay: true` 只说「这份结局不是本次请求产出的」,不判别带不带回执。
|
|
122
126
|
*
|
|
123
127
|
* 🔴 **租户面安全(别在复审里当成漏)**:合流的那份回执是按**第一位调用方**的 `explicitOperatorOk` 投的,
|
|
124
128
|
* 而键本身就按身份位分区(`idemKeyOf` 的 `principal ?? source`)⇒ 合流到它的只可能是**同一个** principal(无 principal 时
|
package/dist/http/idempotency.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { canonicalJsonStringify } from "@sema-agent/core";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedSubject } from "./principal-gate.js";
|
|
4
4
|
export class IdempotencyCache {
|
|
5
5
|
ttlMs;
|
|
6
6
|
sweepThreshold;
|
|
@@ -66,11 +66,11 @@ function idemFamilyTag(family) {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
export function idemCallerOf(req, ctx) {
|
|
69
|
-
return {
|
|
69
|
+
return { subject: gatedSubject(req, ctx.deps.config), source: ctx.req.source };
|
|
70
70
|
}
|
|
71
71
|
export function idemIdentityOf(caller) {
|
|
72
|
-
if (caller.
|
|
73
|
-
return `principal\x1e${caller.
|
|
72
|
+
if (caller.subject !== undefined && caller.subject !== null)
|
|
73
|
+
return `principal\x1e${caller.subject}`;
|
|
74
74
|
if (caller.source !== undefined && caller.source !== null)
|
|
75
75
|
return `source\x1e${caller.source}`;
|
|
76
76
|
return "";
|
|
@@ -8,39 +8,38 @@
|
|
|
8
8
|
* core 的另外三只 409 与 `ControlPlaneCorruptError` 全落 500 `internal.error` —— 「同一个 requestId 拿去抹另一个会话」这种**调用方自己
|
|
9
9
|
* 能改**的错被说成服务器坏了。两份分类 = 两个判官,少的那份恒是静默的一份。现在**码与状态**只在这里判一次,两面同读。
|
|
10
10
|
*
|
|
11
|
-
* ## 规则(
|
|
11
|
+
* ## 规则(两层,与 operator 面既有层序逐字同序)
|
|
12
|
+
* ⓪ 先于本映射:两面的 catch 先调记忆面的一只收尾 `sentMemoryFaceFault`(`memory-face-fault-reply.ts`:层拒 / 控制面损坏 `ControlPlaneCorruptError`,
|
|
13
|
+
* 九只记忆面同一只;控制面损坏一码两义的固定句在那里按面分)—— 本映射只接 core 的带码拒;
|
|
12
14
|
* ① core 的**本口专属**码(闭集穷举 `switch`,见 {@link sentCoreCode})—— 码与状态两面同;文案按受众(下一节,一条规则);
|
|
13
|
-
* ② **店形拒**一族(按族表读;成员举例 `memory.target_outside_store` / `memory.scope_home_not_directory` / 引擎 7.65.0 起 `memory.control_plane_links_unsupported`)—— 跨面 store 状态码,409、码原样
|
|
15
|
+
* ② **店形拒**一族(按族表读;成员举例 `memory.target_outside_store` / `memory.scope_home_not_directory` / 引擎 7.65.0 起 `memory.control_plane_links_unsupported` / 引擎 7.66.0 起 `memory.control_plane_strays`)—— 跨面 store 状态码,409、码原样
|
|
14
16
|
* (判据 `memory-store-refusal.ts` 一只;运维行 `memory_store_form_refused { code, path?, form? }` 两受众同一只铸点,路径只在那里);
|
|
15
|
-
* ③ `ControlPlaneCorruptError` —— typed 500 `internal.memory_control_plane_corrupt`(fail-closed 信号,一码两义;映射本体在 `memory-control-plane-corrupt-reply.ts` 那一只,导出导入 / 外源 / 整理 / 合规各口同调);
|
|
16
17
|
* 其余 ⇒ `false`(未分类,调用方发它自己那句 500 且**不回显**内部文本)。
|
|
17
18
|
*
|
|
18
|
-
* ## 文案按受众分(码与状态不分)——
|
|
19
|
-
* core
|
|
19
|
+
* ## 文案按受众分(码与状态不分)—— **一条规则,各层同施,不按码挑**(F9,7.108.0 合并复审 opus 腿 O-9;⓪ 那只收尾同一条规则)
|
|
20
|
+
* core 原句是写给运维的诊断材料:控制面损坏点名**宿主路径**(控制面账本文件;② 自 core 7.44.0 起句子不带路径、路径在 `detail.path` ⇒ 运维行),① 的 `selector_mismatch` 带**首个请求的
|
|
20
21
|
* 选择子哈希**(`pinned set <selectHash>`,无盐 sha256 —— operator 选择子可字典还原,首个请求未必是这位会话所有者发的):
|
|
21
22
|
* · operator 受众 ⇒ 原句上 wire(过了 operator 门,这些材料对这个受众不是泄露);
|
|
22
23
|
* · 会话所有者受众 ⇒ **一律**一句固定指路(每码一句,只说「怎么办」),原句整句交 `withheld` 落运维 warn —— 不逐码判断哪句安全
|
|
23
|
-
* (逐码挑 = core 改一句文案就可能静默漏出一样新东西)。②
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* ③ 一码两义 —— 操作前账本读不出 ⇒ 什么都没发生;落定后残留枚举失败 ⇒ 抹除已提交、重放收敛(core 原话)。两句都不许诺零删除,
|
|
27
|
-
* 都指路「运维修好后用同一个 requestId 重发」(两义下这句都对)。本层**不**嗅 core 文案分辨前后(拿上游自由文本当判别式是第二真源)。
|
|
24
|
+
* (逐码挑 = core 改一句文案就可能静默漏出一样新东西)。② 的固定句**两形都真**:链先于请求在场 ⇒ 提交点之前拒、什么都没做;提交点之后才换上的链
|
|
25
|
+
* ⇒ 已删的几条算数、journal 留盘(codex 一审 C1);scope home 不是真目录那一句同样不许诺零删除(home 被换掉的时刻本层判不出),只指路
|
|
26
|
+
* 「运维放回真目录后用同一个 requestId 重发」。本层**不**嗅 core 文案分辨前后(拿上游自由文本当判别式是第二真源)。
|
|
28
27
|
*/
|
|
29
28
|
import type { ServerResponse } from "node:http";
|
|
30
29
|
import type { Logger } from "../observability/logger.js";
|
|
30
|
+
import type { MemoryFaceAudience } from "./memory-face-fault-reply.js";
|
|
31
31
|
/**
|
|
32
32
|
* 已分类拒 → HTTP 状态的**唯一**码表 = 自铸 wire 值登记处的 `sessionMemoryEraseStatus` 集(F3:wire 变更清单从同一张表 diff,状态改一处、
|
|
33
33
|
* 清单跟着列)。两面同读([ref]:码与状态只判一次)。键写错 ⇒ tsc 红(索引的是 `as const` 表的键)。
|
|
34
34
|
*/
|
|
35
|
-
/**
|
|
36
|
-
export type MemoryComplianceAudience = {
|
|
35
|
+
/** 读这张映射的受众:记忆面受众闭集里 operator 与会话所有者的抹除面(本映射的固定句都是抹除句;会话所有者的状态面不读它 ⇒ 型面上传不进来)。 */
|
|
36
|
+
export type MemoryComplianceAudience = Extract<MemoryFaceAudience, {
|
|
37
37
|
readonly kind: "operator";
|
|
38
38
|
} | {
|
|
39
|
-
readonly
|
|
40
|
-
|
|
41
|
-
};
|
|
39
|
+
readonly face: "erase";
|
|
40
|
+
}>;
|
|
42
41
|
/**
|
|
43
|
-
*
|
|
42
|
+
* 按上面两层应答;返回 `true` = 已应答,`false` = 未分类(一个字节都没写,调用方发它自己那句 500 并落它自己的运维 warn)。
|
|
44
43
|
* `logger` = 店形拒那一条运维行的去处(两受众同一只;缺席 ⇒ 不落)。
|
|
45
44
|
*/
|
|
46
45
|
export declare function sentMemoryComplianceFailure(res: ServerResponse, err: unknown, audience: MemoryComplianceAudience, logger: Pick<Logger, "warn"> | undefined): boolean;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { logStoreFormRefusal, storeFormRefusalOf } from "../memory-store-refusal.js";
|
|
2
|
-
import { sentControlPlaneCorrupt } from "./memory-control-plane-corrupt-reply.js";
|
|
3
2
|
import { sentMemoryStoreRefusal } from "./memory-store-refusal-reply.js";
|
|
4
3
|
import { sendError } from "./send.js";
|
|
5
4
|
import { assertNever } from "./route-ctx.js";
|
|
@@ -66,6 +65,9 @@ export function sentMemoryComplianceFailure(res, err, audience, logger) {
|
|
|
66
65
|
case "memory.control_plane_links_unsupported":
|
|
67
66
|
sendError(res, 409, "memory.control_plane_links_unsupported", "session memory erasure refused — this deployment's memory control plane is on a file system that cannot make hard links, so its memory store does not open and this erasure changed nothing; ask the operator to move the control plane to a volume that supports hard links, then resend with the same requestId");
|
|
68
67
|
return true;
|
|
68
|
+
case "memory.control_plane_strays":
|
|
69
|
+
sendError(res, 409, "memory.control_plane_strays", "session memory erasure refused — this deployment's memory engine was not opened because its control plane still holds records from before that its governance store does not read, so this erasure changed nothing; ask the operator to adopt those records into the governance store, then resend with the same requestId");
|
|
70
|
+
return true;
|
|
69
71
|
default:
|
|
70
72
|
return assertNever(storeForm.code);
|
|
71
73
|
}
|
|
@@ -73,6 +75,6 @@ export function sentMemoryComplianceFailure(res, err, audience, logger) {
|
|
|
73
75
|
return assertNever(audience);
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
|
-
return
|
|
78
|
+
return false;
|
|
77
79
|
}
|
|
78
80
|
//# sourceMappingURL=memory-compliance-failure-reply.js.map
|