@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,10 +2,10 @@ import { PERMISSION_MODES, USER_ATTACHMENT_SEAT, expandTiers, reasoningEffortLev
|
|
|
2
2
|
import { modelImageInput, modelReasoningDecl, isAtMentionable, selectableAliasNames, selectableCatalog } from "../../model-select.js";
|
|
3
3
|
import { buildDroppedEntriesWire } from "../../web-admin-client/read-warnings.js";
|
|
4
4
|
import { buildCandidateRejectedWire } from "../../web-admin-client/candidate-gate.js";
|
|
5
|
-
import {
|
|
6
|
-
import { isRosterGateArmed } from "../../config.js";
|
|
5
|
+
import { readModelPlaneFace } from "../../model-plane-face.js";
|
|
7
6
|
import { modelKeyPoisonOf, resolveModelApiKey } from "../../key-resolver.js";
|
|
8
7
|
import { projectSealedKeyCapability } from "../../sealed-key.js";
|
|
8
|
+
import { SESSION_READ_REDACTED_LEAVES } from "../../audit.js";
|
|
9
9
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../../deployment-shape.js";
|
|
10
10
|
import { taskWriteFaceRefusal } from "../../hosted-posture.js";
|
|
11
11
|
import { leaderEntryRefusal, leaderRunEntry } from "../../leader/run-entry.js";
|
|
@@ -22,7 +22,7 @@ import { assertNever } from "../route-ctx.js";
|
|
|
22
22
|
import { fileHistoryCaptureOf } from "../../file-history-capture.js";
|
|
23
23
|
import { projectMemoryEngineCapability } from "../../memory-posture.js";
|
|
24
24
|
import { projectWriteProtectionCapability } from "../../write-protection.js";
|
|
25
|
-
import { projectStoreCapability } from "../../store-posture.js";
|
|
25
|
+
import { projectStoreCapability, unwiredStorePosture } from "../../store-posture.js";
|
|
26
26
|
import { projectWebSearchCapability } from "../../plugins/web-search.js";
|
|
27
27
|
import { projectExecutionLaneCapability } from "../../capabilities/execution-lane.js";
|
|
28
28
|
import { SETTINGS_CONTRACT_CAPABILITY } from "../../capabilities/settings-contract.js";
|
|
@@ -35,7 +35,7 @@ import { centerEntitlementSourceWired } from "../../runtime-caps-resolver.js";
|
|
|
35
35
|
import * as facts from "../../capability-facts.js";
|
|
36
36
|
import { judgeAutoModeArming } from "../../auto-mode-face.js";
|
|
37
37
|
import { coercePermissionModeStrict, PERMISSION_MODE_WORDS, taskHooksHonored } from "../../task-settings.js";
|
|
38
|
-
import {
|
|
38
|
+
import { gatedPerson, sendPrincipalRefusal } from "../principal-gate.js";
|
|
39
39
|
import { readAdoptionImportCapability } from "../../adoption/import.js";
|
|
40
40
|
import { headReadOf } from "../../session-incarnation.js";
|
|
41
41
|
import { callerTrust } from "../caller-trust.js";
|
|
@@ -79,10 +79,10 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
81
|
const entitlementSource = centerEntitlementSourceWired(deps.config);
|
|
82
|
-
const { fault: autoModeFault, ...autoMode } = await judgeAutoModeArming(deps.autoModeFace, { requestedMode, floor: autonomyModeFloor(deps.config.autonomy), principal:
|
|
82
|
+
const { fault: autoModeFault, ...autoMode } = await judgeAutoModeArming(deps.autoModeFace, { requestedMode, floor: autonomyModeFloor(deps.config.autonomy), principal: gatedPerson(req, deps.config), localDeny: deps.config.permissionsDisableAutoMode });
|
|
83
83
|
if (autoModeFault !== undefined)
|
|
84
84
|
deps.logger?.warn("auto_mode_face_resolver_fault", { fault: autoModeFault });
|
|
85
|
-
const rulesLaneForCaller = facts.ruleLaneForCaller(deps,
|
|
85
|
+
const rulesLaneForCaller = facts.ruleLaneForCaller(deps, gatedPerson(req, deps.config)).available;
|
|
86
86
|
const streamApprovalFact = facts.streamApproval(deps);
|
|
87
87
|
sendJson(res, 200, gateCompositeMembers({
|
|
88
88
|
...deps.capabilities,
|
|
@@ -113,8 +113,8 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
113
113
|
memory: false,
|
|
114
114
|
memoryWrite: false,
|
|
115
115
|
memoryEngine: projectMemoryEngineCapability(deps.memoryPosture),
|
|
116
|
-
store: projectStoreCapability(deps.storePosture ??
|
|
117
|
-
centerWiring: deps.centerWiring?.(
|
|
116
|
+
store: projectStoreCapability(deps.storePosture ?? unwiredStorePosture(deps.config.dbBackend), deps.sqlEngine?.facts),
|
|
117
|
+
centerWiring: deps.centerWiring?.(gatedPerson(req, deps.config)),
|
|
118
118
|
webSearch: projectWebSearchCapability(deps.webSearchProvider),
|
|
119
119
|
sessionBackgroundable: facts.durableRuns(deps).available,
|
|
120
120
|
runMemoryCaptureOptOut: facts.durableRuns(deps).available,
|
|
@@ -123,7 +123,7 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
123
123
|
sharedMemory: facts.sharedMemoryRead(deps).available,
|
|
124
124
|
principalInboxDelivery: facts.principalInboxDelivery(deps).available,
|
|
125
125
|
adoption: facts.adoption(deps).available,
|
|
126
|
-
adoptionImport: await readAdoptionImportCapability(facts.adoptionSessionImport(deps),
|
|
126
|
+
adoptionImport: await readAdoptionImportCapability(facts.adoptionSessionImport(deps), gatedPerson(req, deps.config), deps.config),
|
|
127
127
|
memoryBundle: facts.memoryBundle(deps).available,
|
|
128
128
|
memoryCompliance: facts.memoryCompliance(deps).available,
|
|
129
129
|
memoryOrigin: facts.memoryOrigin(deps).available,
|
|
@@ -203,12 +203,13 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
203
203
|
approvalDecidedVia: true,
|
|
204
204
|
planReviewCheckpointId: true,
|
|
205
205
|
permissionModes: [...PERMISSION_MODES],
|
|
206
|
-
sessionReadRedaction:
|
|
206
|
+
sessionReadRedaction: [...SESSION_READ_REDACTED_LEAVES],
|
|
207
207
|
sideQuery: true,
|
|
208
208
|
agentRoster: facts.agentRoster(deps).available,
|
|
209
209
|
projects: facts.projectRegistry(deps).available,
|
|
210
210
|
retention: retentionAdvertisement(deps.config),
|
|
211
211
|
peerLane: Boolean(deps.peerDirectory),
|
|
212
|
+
scenarioSubject: true,
|
|
212
213
|
sessionList: facts.sessionList(deps).available,
|
|
213
214
|
sessionSearch: facts.sessionList(deps).available,
|
|
214
215
|
sessionFork: facts.sessionFork(deps).available,
|
|
@@ -217,7 +218,6 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
217
218
|
promptSuggestions: true,
|
|
218
219
|
sessionPolicy: facts.sessionPolicy(deps).available,
|
|
219
220
|
sessionRulesNamespaceForms: sessionRulesNamespaceFormsHonored(),
|
|
220
|
-
rewindFiles: Boolean(deps.fileHistoryStore),
|
|
221
221
|
restoreFiles: Boolean(deps.fileHistoryStore),
|
|
222
222
|
rewindFilesTo: Boolean(deps.fileHistoryStore && deps.resumeAnchorStore && headReadOf(deps.sessionStorage)),
|
|
223
223
|
sessionRewindFiles: facts.sessionRewindFiles(deps).available,
|
|
@@ -254,7 +254,7 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
254
254
|
return;
|
|
255
255
|
}
|
|
256
256
|
case "capability-mcp": {
|
|
257
|
-
const principal =
|
|
257
|
+
const principal = gatedPerson(req, deps.config);
|
|
258
258
|
if (deps.config.requirePrincipal && !principal) {
|
|
259
259
|
sendPrincipalRefusal(res, req, deps.config);
|
|
260
260
|
return;
|
|
@@ -269,7 +269,7 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
269
269
|
return;
|
|
270
270
|
}
|
|
271
271
|
case "capability-mcp-probe": {
|
|
272
|
-
const principal =
|
|
272
|
+
const principal = gatedPerson(req, deps.config);
|
|
273
273
|
if (deps.config.requirePrincipal && !principal) {
|
|
274
274
|
sendPrincipalRefusal(res, req, deps.config);
|
|
275
275
|
return;
|
|
@@ -299,11 +299,12 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
299
299
|
...(modelReasoningDecl(m) !== undefined ? { reasoning: modelReasoningDecl(m) } : {}),
|
|
300
300
|
...(modelImageInput(m) !== "undeclared" ? { vision: modelImageInput(m) === "yes" } : {}),
|
|
301
301
|
supportsThinkingOff: thinkingOffSpelled(m),
|
|
302
|
-
...(m.contextWindow ? { contextWindow: m.contextWindow } : {}),
|
|
302
|
+
...(m.contextWindow ? { contextWindow: m.contextWindow, ...(Object.hasOwn(deps.config.contextWindowSources, name) ? { contextWindowSource: deps.config.contextWindowSources[name] } : {}) } : {}),
|
|
303
303
|
...(m.maxTokens ? { maxOutputTokens: m.maxTokens } : {}),
|
|
304
304
|
...((levels) => (levels !== undefined ? { supportedEffortLevels: [...levels] } : {}))(reasoningEffortLevelsOf(m)),
|
|
305
305
|
...(m.compat !== undefined ? { compat: m.compat } : {}),
|
|
306
306
|
...(m.thinkingLevelMap !== undefined ? { thinkingLevelMap: m.thinkingLevelMap } : {}),
|
|
307
|
+
...(m.defaultThinking !== undefined ? { defaultThinking: m.defaultThinking } : {}),
|
|
307
308
|
...mentionBit(name),
|
|
308
309
|
routePairing: routePairingOf(deps, name, m),
|
|
309
310
|
}));
|
|
@@ -316,11 +317,7 @@ export async function handleCapabilities(req, res, match, ctx) {
|
|
|
316
317
|
defaultModel: { id: deps.config.model.id, ...(defaultName ? { name: defaultName } : {}) },
|
|
317
318
|
droppedEntries: buildDroppedEntriesWire(deps.config.droppedCatalogEntries),
|
|
318
319
|
...(candidateRejection !== undefined ? { candidateRejected: buildCandidateRejectedWire(candidateRejection) } : {}),
|
|
319
|
-
modelPlane:
|
|
320
|
-
envTableIsPlaceholder: isRosterGateArmed(deps.config.webAdmin),
|
|
321
|
-
candidateRejection,
|
|
322
|
-
latestPlaneRefusal: deps.latestPlaneRefusalState?.(),
|
|
323
|
-
}),
|
|
320
|
+
modelPlane: readModelPlaneFace(deps.config, deps),
|
|
324
321
|
aliases: selectableAliasNames(deps.config.models, atCatalog, deps.config.modelRefusals).map((name) => ({ name, ...mentionBit(name) })),
|
|
325
322
|
});
|
|
326
323
|
return;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DOMAINS } from "@sema-agent/settings-schema";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
5
|
import * as facts from "../../capability-facts.js";
|
|
6
6
|
import { configKnobTable } from "../../config.js";
|
|
@@ -11,7 +11,7 @@ export async function handleConfigCatalog(req, res, match, ctx) {
|
|
|
11
11
|
const { deps } = ctx;
|
|
12
12
|
switch (match.decl.id) {
|
|
13
13
|
case "config-catalog": {
|
|
14
|
-
const principal =
|
|
14
|
+
const principal = gatedPerson(req, deps.config);
|
|
15
15
|
if (deps.config.requirePrincipal && !principal) {
|
|
16
16
|
sendPrincipalRefusal(res, req, deps.config);
|
|
17
17
|
return;
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
* · 绑定读面在会话族:`GET /v1/sessions/:id/execution-placement`(`routes/sessions.ts`;体 = 执行放置格的 wire 投影,
|
|
12
12
|
* device 车道上是 `{ role: "writer", lane: "device", device: { deviceId, rev } }`)。绑定是根会话行上的执行格,读只有会话店的执行席一只。
|
|
13
13
|
* · `POST /v1/devices/sessions/:rootSessionId/rebind` —— 显式换绑动词(v2 稿 §2 门序五步):
|
|
14
|
-
* ①
|
|
14
|
+
* ① gatedPerson + owner 门 —— 一次行读(会话店执行席:住客 + 格),属主门判**格上**两属主列(非属主 404 反枚举同串,[ref] 纪律)
|
|
15
15
|
* ② 目标设备在场门(不存在 / 不是该域的 / 已吊销 ⇒ 404 **同串** —— 设备 id 也是不可枚举面)
|
|
16
16
|
* ③ 无活跃 run 门:池级 `getActiveTaskId` 读一次作**早拒**(零审计行);**保证**在设备店的换绑事务里 —— 同一连接先锁根会话行、
|
|
17
17
|
* 再锁定读 `task_active`,有认领 ⇒ 不写(读写序律;hub 内存在途计数不作门 —— 内存态跨副本不可见);两处同拒 409
|
|
18
18
|
* `device.rebind_active_run` 体带 `activeTaskId`
|
|
19
|
-
* ③′ 子代半(写前一次观察):以根为根的活后台子代(running / parked;`probeSessionChildren` 那一次枚举,scope = 会话属主 `
|
|
19
|
+
* ③′ 子代半(写前一次观察):以根为根的活后台子代(running / parked;`probeSessionChildren` 那一次枚举,scope = 会话属主 `sessionTenantScope`,
|
|
20
20
|
* 与删除门同读)⇒ 同码 409,体 `children`(名册 id)+ `retirePath`(显式结清口 —— 先结清、再换绑)
|
|
21
21
|
* ④ 前态 CAS(店内单事务:按门那一读的住客 ∧ 格上两属主列 ∧ rev 定址,`execution_rev` 恒变列 + `session_rebound` 审计行;输 = 409
|
|
22
22
|
* `device.rebind_rev_conflict` 体带 `currentRev` —— [ref] currentPending 哲学,壳一跳重定位;门后会话被删并同 id 重登记 ⇒ 住客不符 ⇒ 设备 404,
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* ── 调用方域(owner domain)的唯一铸造点 ─────────────────────────────────────────────────────────
|
|
30
30
|
* device lane 的三表自持 O11 复合身份 `{owner_tenant, owner_subject}`(device-store.ts 头注;全局
|
|
31
31
|
* principal 一个字节不动)。基线稿 §11-O11 的落法:「认证需在 SSO 校验点把 tenant+subject 传到 device
|
|
32
|
-
* placement 校验腿」——对位到本仓的真源即:subject = `
|
|
32
|
+
* placement 校验腿」——对位到本仓的真源即:subject = `gatedPerson`(verified 链),tenant =
|
|
33
33
|
* `ssoVerifiedScope`(registry-JWT 的 `scope` claim,security.ts:同为签名真源、非自报头)。两者齐备
|
|
34
34
|
* 才构成一个 device 域;缺 tenant claim 的凭据(纯 principal 头 / 静态 token 直连)**判不出域** ⇒
|
|
35
35
|
* 非 operator 一律响亮 403(fail-closed + loud,[ref]:静默空列表是假健康)——基线稿对 enrollment 的
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { sendError, sendJson } from "../send.js";
|
|
2
|
-
import { explicitOperatorOk,
|
|
2
|
+
import { explicitOperatorOk, gatedPerson, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
3
|
import { assertNever } from "../route-ctx.js";
|
|
4
4
|
import * as facts from "../../capability-facts.js";
|
|
5
5
|
import { DEVICE_PLATFORM_OS, DEVICE_PUBKEY_MAX_BYTES, DEVICE_TEXT_LIMITS, assertDeviceIdShape, assertDevicePubkeyShape, assertRootSessionIdShape, isDeviceAbsolutePath, sameDeviceOwner, } from "../../device-store.js";
|
|
6
6
|
import { boundDeviceOf } from "../../execution-placement.js";
|
|
7
7
|
import { defaultTaskRegistry } from "@sema-agent/core";
|
|
8
|
-
import { probeSessionChildren,
|
|
8
|
+
import { probeSessionChildren, sessionTenantScope } from "../../session-children-retire.js";
|
|
9
9
|
import { liveChildrenRefusal } from "./background.js";
|
|
10
10
|
import { DEFAULT_ENROLL_TOKEN_TTL_SEC } from "../../device-enrollment.js";
|
|
11
11
|
import { deviceOwnerDomainOf } from "../execution-context.js";
|
|
@@ -123,7 +123,7 @@ export async function handleDevices(req, res, match, ctx) {
|
|
|
123
123
|
}
|
|
124
124
|
const { deps } = ctx;
|
|
125
125
|
const { readJson, safeDecode } = ctx.helpers;
|
|
126
|
-
const principal =
|
|
126
|
+
const principal = gatedPerson(req, deps.config);
|
|
127
127
|
if (deps.config.requirePrincipal && principal === undefined) {
|
|
128
128
|
sendPrincipalRefusal(res, req, deps.config);
|
|
129
129
|
return;
|
|
@@ -283,7 +283,7 @@ export async function handleDevices(req, res, match, ctx) {
|
|
|
283
283
|
sendError(res, 409, "device.rebind_active_run", "this session has a non-terminal run — rebinding now would leave in-flight work addressed at another workspace; cancel the run (or let it finish), then retry", { activeTaskId });
|
|
284
284
|
return;
|
|
285
285
|
}
|
|
286
|
-
const tree = await probeSessionChildren({ agentStore: deps.backgroundAgentStore, checkpointStore: deps.checkpointStore, registry: defaultTaskRegistry }, rootSessionId,
|
|
286
|
+
const tree = await probeSessionChildren({ agentStore: deps.backgroundAgentStore, checkpointStore: deps.checkpointStore, registry: defaultTaskRegistry }, rootSessionId, sessionTenantScope(placement.occupant.owner));
|
|
287
287
|
if (tree.liveChildren.length > 0) {
|
|
288
288
|
sendError(res, 409, "device.rebind_active_run", "this session still has background agents running or waiting on an approval under it — rebinding now would leave them addressed at the old device; retire them (POST retirePath) or let them finish, then retry", liveChildrenRefusal(rootSessionId, tree.liveChildren));
|
|
289
289
|
return;
|
|
@@ -15,6 +15,7 @@ import type { WiringManifest } from "@sema-agent/core";
|
|
|
15
15
|
import { type StreamApprovalGate, type StreamApprovalGateInput } from "../../tool-approval.js";
|
|
16
16
|
import { verifiedIdentitySource } from "../principal-gate.js";
|
|
17
17
|
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
18
|
+
import { STORE_NOT_DURABLE_CODE, type StorePosture } from "../../store-posture.js";
|
|
18
19
|
/** 流内审批门的读数形:上场即 `"active"`,否则是那**四**个合取项里**第一个**不满足的原因词
|
|
19
20
|
* (与 `resolveStreamApprovalGate` 同一闭集,词表**取型**自它 ⇒ 增删 reason 在此处自动跟随/编译红;
|
|
20
21
|
* [ref] 删掉第 5 项「账必须持久」时本行数字漏改过一次,**数字是手抄的那一半**)。 */
|
|
@@ -60,10 +61,11 @@ export interface ServerWiringGateInput {
|
|
|
60
61
|
* `resolveStreamApprovalGate` —— 与 `/v1/capabilities` 的 `streamApproval` 位、与回决口的 501 门同一个
|
|
61
62
|
* 符号,所以诊断页读到的与消费端撞到的行为不可能不同。 */
|
|
62
63
|
export declare function buildServerWiringGates(input: ServerWiringGateInput): ServerWiringGates;
|
|
63
|
-
/** 启动自检的判决:`refusals` 非空 ⇒ 拒启(装配谎言);`warnings` ⇒
|
|
64
|
+
/** 启动自检的判决:`refusals` 非空 ⇒ 拒启(装配谎言 / 声明兑现不了);`warnings` ⇒ 留痕但放行。`refusalCode` present-iff 店持久性那一条拒了(抛出物带它,起服 fatal 标题带它)。 */
|
|
64
65
|
export interface StaticWiringAudit {
|
|
65
66
|
refusals: readonly string[];
|
|
66
67
|
warnings: readonly string[];
|
|
68
|
+
refusalCode?: typeof STORE_NOT_DURABLE_CODE;
|
|
67
69
|
}
|
|
68
70
|
/** 自检输入 = core 的静态半场 + 我方装配现场的两件事实。 */
|
|
69
71
|
export interface StaticWiringFacts {
|
|
@@ -71,9 +73,33 @@ export interface StaticWiringFacts {
|
|
|
71
73
|
manifest: WiringManifest;
|
|
72
74
|
/** 我方喂给 `resolveStreamApprovalGate` 的 `checkpointStore` 实参的在场性(= checkpoint 店在场 ∧ DURABLE_APPROVAL)。 */
|
|
73
75
|
parkFacility: boolean;
|
|
74
|
-
/** store
|
|
75
|
-
|
|
76
|
+
/** 店的持久性装配值(`store-posture.ts`,`boot/stores.ts` 铸;caps / `/health` / 诊断同一只)。 */
|
|
77
|
+
store: StorePosture;
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* 三项对表(设计稿件二)。判据全是**两个独立谓词对同一件事的答案**,矛盾即装配谎言 —— 装配谎言不是
|
|
81
|
+
* 「配置不理想」,是「服务端对自己接了什么线的两套说法互斥」,继续启动只会把矛盾带进运行期的每一条腿。
|
|
82
|
+
*
|
|
83
|
+
* ① park 设施:core 从 `spec.checkpointStore ?? deps.checkpointStore` 判 `parkLane.capable`,我方从
|
|
84
|
+
* `backend.checkpoint ∧ DURABLE_APPROVAL` 判 `parkFacility` 并据此决定流内审批协议上不上场。两者
|
|
85
|
+
* 不等 ⇒ 协议按「窗到期能 park」上场而引擎侧根本不 park(结局是 core fail-closed deny),或反之
|
|
86
|
+
* 白白关掉一个可用的协议。`capable` 真而 `effective` 不真同样致命:能力在、这条部署形上却不会真的
|
|
87
|
+
* park,窗到期依旧无降级目的地。
|
|
88
|
+
* ② 会话店持久性:manifest 声明 `declared_durable`,而会话店的介质(店持久性判定里的**数据根**那一行:SQL 两方言 = 委托给库、local = 数据根所在挂载、
|
|
89
|
+
* 没有后端 = 内存)判为 `ephemeral` ⇒ 「替换后还在」的声明没有介质兑现 ⇒ 拒启 `config.store_not_durable`(拒句逐根列三根判定 + 三条出路)。
|
|
90
|
+
* local 店的声明不是常量:它由 `local-store-declaration.ts` 的唯一读者定(运维声明 `LOCAL_STORE_DURABILITY=ephemeral`,或店落在调用方自己那块易失盘上 ⇒
|
|
91
|
+
* 会话店与检查点店两半一起声明 `process-local`)—— 那时清单读 `process_local`,本条恒过,改出 warn 一行(带依据与挂卷出路;同一件事 park 那条不再另说)。
|
|
92
|
+
* 介质判不出(`unknown`:非 Linux / 挂载表读不到 / 介质形不在规则表里)⇒ 只 warn —— 判不了的部署不能因自报位停机;
|
|
93
|
+
* 数据根持久而另两根(封签钥匙目录 / file 记忆根)易失或判不出 ⇒ 也只 warn:会话店的声明兑现了,掉的是停驻行的封签钥匙 / 记忆,不是会话(能力位如实报最弱)。
|
|
94
|
+
* 声明不是 `declared_durable` ⇒ 恒过。这条与 memory+durable 两条既有拒启同族(声明与介质必须对得上)。
|
|
95
|
+
* ③ interaction posture 声明 `interactive` 却没有任何 question 投递面 ⇒ 只 **warn**:core 在 prepare 时
|
|
96
|
+
* 会按腿拒,boot 先一步把话说成人话。不拒启,因为部署形本身可能只是暂时没接活体面,而 core 侧已有
|
|
97
|
+
* 兜底门 —— 拒启会把一个可运行的部署挡在门外。
|
|
98
|
+
* ④ park 车道的持久性读数不可信时 ⇒ **warn**(理由与这条判据为什么不是拒启,见其行内注)。
|
|
99
|
+
*
|
|
100
|
+
* 判决分两级是有判据的:**拒启**留给「两个谓词对同一件事互斥」(其中一个必错,继续跑就是带着谎言服务);
|
|
101
|
+
* **警告**留给「读数不可信/声明不完整」(信号本身还不足以断定谁错,据此拒启会挡住正常部署)。
|
|
102
|
+
*/
|
|
77
103
|
export declare function buildStaticWiringAudit(facts: StaticWiringFacts): StaticWiringAudit;
|
|
78
104
|
/**
|
|
79
105
|
* boot 消费口:`refusals` 非空即抛(拒启,与 memory+durable 两条既有拒启同族的 fail-loud 形),
|
|
@@ -4,9 +4,11 @@ import { projectExecutionLaneCapability } from "../../capabilities/execution-lan
|
|
|
4
4
|
import { readOutboundWiring } from "../../outbound-dispatcher.js";
|
|
5
5
|
import { resolveStreamApprovalGate } from "../../tool-approval.js";
|
|
6
6
|
import { sendJson, sendError } from "../send.js";
|
|
7
|
-
import {
|
|
7
|
+
import { gatedPerson, explicitOperatorOk, isLoopbackAddress, sendOperatorPrincipalsRequired, verifiedIdentitySource } from "../principal-gate.js";
|
|
8
8
|
import * as facts from "../../capability-facts.js";
|
|
9
9
|
import { assertNever } from "../route-ctx.js";
|
|
10
|
+
import { STORE_NOT_DURABLE_CODE, StoreNotDurableError, describeStoreRoot, projectStoreDurabilityWiring, unwiredStorePosture } from "../../store-posture.js";
|
|
11
|
+
import { describeLocalStoreDeclaration } from "../../local-store-declaration.js";
|
|
10
12
|
export function buildServerWiringGates(input) {
|
|
11
13
|
const gate = resolveStreamApprovalGate({
|
|
12
14
|
toolApprovalEnabled: input.toolApprovalEnabled,
|
|
@@ -43,17 +45,18 @@ export function buildServerWiringGates(input) {
|
|
|
43
45
|
approvalGrant: [...input.approvalGrant],
|
|
44
46
|
};
|
|
45
47
|
}
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
case "
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
function processLocalMediumSentence(dataRoot, aggregate, listed) {
|
|
49
|
+
const readFaces = `Store durability by root: ${listed}; GET /v1/capabilities store.durability and /health.store.durability say "${aggregate}" (the weakest root).`;
|
|
50
|
+
switch (dataRoot) {
|
|
51
|
+
case "ephemeral":
|
|
52
|
+
return `The data root's medium does not survive a replacement either — sessions and parked approvals on it go with the next replacement. ${readFaces}`;
|
|
53
|
+
case "durable":
|
|
54
|
+
return `The data root's medium measures durable today — the declaration is what this deployment promises, not what the disk does today. ${readFaces}`;
|
|
55
|
+
case "unknown":
|
|
56
|
+
return `This server could not prove whether the data root survives a replacement. ${readFaces}`;
|
|
54
57
|
default: {
|
|
55
|
-
const
|
|
56
|
-
throw new Error(`
|
|
58
|
+
const unhandled = dataRoot;
|
|
59
|
+
throw new Error(`unhandled store durability ${JSON.stringify(unhandled)}`);
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
}
|
|
@@ -70,11 +73,37 @@ export function buildStaticWiringAudit(facts) {
|
|
|
70
73
|
refusals.push(`park facility contradiction: this server assembled its approval gates with parkFacility=true, but the engine's static wiring resolves parkLane.effective=${JSON.stringify(park.effective)} (reasons: ${park.reasons.join(", ") || "none"}). ` +
|
|
71
74
|
`A window expiry would then have no degradation target and adjudicate as a fail-closed deny — refusing to start.`);
|
|
72
75
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
let refusalCode;
|
|
77
|
+
const roots = facts.store.roots;
|
|
78
|
+
const listed = roots.map((r) => `${describeStoreRoot(r)}`).join("; ");
|
|
79
|
+
const processLocalDeclaration = facts.store.localDeclaration?.durability === "process-local" ? facts.store.localDeclaration : undefined;
|
|
80
|
+
if (facts.manifest.session.store === "declared_durable") {
|
|
81
|
+
const session = roots.find((r) => r.root === "data");
|
|
82
|
+
if (session === undefined || session.verdict === "ephemeral") {
|
|
83
|
+
refusalCode = STORE_NOT_DURABLE_CODE;
|
|
84
|
+
const wayOut = session?.rule === "backend_memory" || session === undefined
|
|
85
|
+
? `No store backend was assembled (env-only worker or a degraded boot) — wire DB_BACKEND=mysql|pg|local, or fix the session store's durability declaration.`
|
|
86
|
+
: `Three ways out: mount a persistent volume at ${session.path ?? "the data root"} (or point LOCAL_DATA_ROOT at one); or declare the local store ephemeral (LOCAL_STORE_DURABILITY=ephemeral — sessions, parked approvals and memory then do not survive a container / Pod replacement); or keep nothing on disk (DB_BACKEND=memory).`;
|
|
87
|
+
refusals.push(`${STORE_NOT_DURABLE_CODE}: the engine's static wiring reports session.store="declared_durable" while the session store's medium does not survive a container / Pod replacement (store durability by root: ${listed}). ` +
|
|
88
|
+
`A durable declaration on an ephemeral medium is a claim nothing can honor — sessions, parked approvals and memory would vanish with the next replacement while every read face said "durable". Refusing to start. ${wayOut}`);
|
|
89
|
+
}
|
|
90
|
+
else if (facts.store.durability !== "durable") {
|
|
91
|
+
warnings.push(`store durability is "${facts.store.durability}" (by root: ${listed}). ` +
|
|
92
|
+
(facts.store.durability === "unknown"
|
|
93
|
+
? `This server could not prove that every root survives a container / Pod replacement (no mount evidence for it — not Linux, an unreadable mount table, or a mount shape outside the rule table); GET /v1/capabilities store.durability and /health.store.durability say "unknown". `
|
|
94
|
+
: `The session store's medium holds, but a root marked ephemeral does not survive a container / Pod replacement — mount a persistent volume there (SEALED_KEY_DIR / MEMORY_ENGINE_DIR name those directories). ` +
|
|
95
|
+
`A sealing-key directory declared with SEALED_KEY_DIR on such a medium is refused at boot while parked approvals are durable (the parked rows would outlive the key their credentials are sealed to); ` +
|
|
96
|
+
`the default <data root>/sealed-key and the file memory root are reported here, not refused. `) +
|
|
97
|
+
`Per-root detail: GET /v1/diagnostics/wiring storeDurability.roots.`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (processLocalDeclaration !== undefined) {
|
|
101
|
+
const declaration = processLocalDeclaration;
|
|
102
|
+
warnings.push(`the local store declares itself process-local (${describeLocalStoreDeclaration(declaration)}): its session store and checkpoint store promise their rows survive a process restart, not a container / Pod replacement. ` +
|
|
103
|
+
`${processLocalMediumSentence(roots.find((r) => r.root === "data")?.verdict ?? "unknown", facts.store.durability, listed)} ` +
|
|
104
|
+
`To keep them across replacements, mount a persistent volume at each root above that does not read durable (LOCAL_DATA_ROOT / SEALED_KEY_DIR / MEMORY_ENGINE_DIR point the three roots at one)${declaration.rule === "declared_ephemeral" ? " and unset LOCAL_STORE_DURABILITY" : ""}.`);
|
|
76
105
|
}
|
|
77
|
-
if (facts.parkFacility && facts.manifest.parkLane.checkpointDurability !== "declared_durable") {
|
|
106
|
+
if (facts.parkFacility && facts.manifest.parkLane.checkpointDurability !== "declared_durable" && processLocalDeclaration === undefined) {
|
|
78
107
|
warnings.push(`park facility is enabled but the checkpoint store does not declare durable storage ` +
|
|
79
108
|
`(parkLane.checkpointDurability=${JSON.stringify(facts.manifest.parkLane.checkpointDurability ?? null)}). ` +
|
|
80
109
|
`A parked approval survives a restart only on a durable store, and this reading folds "declared process-local" together with "declared nothing" — every in-tree adapter declares "durable", so a non-durable reading here means a store this build does not own. ` +
|
|
@@ -84,14 +113,15 @@ export function buildStaticWiringAudit(facts) {
|
|
|
84
113
|
warnings.push(`interactionPosture declares "interactive" but no question delivery face is wired (question.wired=${JSON.stringify(facts.manifest.question.wired)}) — ` +
|
|
85
114
|
`every leg that asks a question will be refused by the engine at prepare time. Wire the live question seam (ASK_QUESTION_ENABLED), or declare the headless posture.`);
|
|
86
115
|
}
|
|
87
|
-
return { refusals, warnings };
|
|
116
|
+
return { refusals, warnings, ...(refusalCode !== undefined ? { refusalCode } : {}) };
|
|
88
117
|
}
|
|
89
118
|
export function assertStaticWiringConsistent(facts, logger) {
|
|
90
119
|
const audit = buildStaticWiringAudit(facts);
|
|
91
120
|
for (const w of audit.warnings)
|
|
92
121
|
logger?.warn("wiring_static_warning", { detail: w });
|
|
93
122
|
if (audit.refusals.length > 0) {
|
|
94
|
-
|
|
123
|
+
const text = `static wiring self-check failed — refusing to start:\n${audit.refusals.map((r) => ` · ${r}`).join("\n")}`;
|
|
124
|
+
throw audit.refusalCode !== undefined ? new StoreNotDurableError(text) : new Error(text);
|
|
95
125
|
}
|
|
96
126
|
return audit;
|
|
97
127
|
}
|
|
@@ -106,7 +136,7 @@ export async function handleDiagnostics(req, res, match, ctx) {
|
|
|
106
136
|
sendOperatorPrincipalsRequired(res);
|
|
107
137
|
return;
|
|
108
138
|
}
|
|
109
|
-
if (!explicitOperatorOk(
|
|
139
|
+
if (!explicitOperatorOk(gatedPerson(req, deps.config), deps.config)) {
|
|
110
140
|
sendError(res, 403, "auth.operator_only", "wiring diagnostics are operator-only");
|
|
111
141
|
return;
|
|
112
142
|
}
|
|
@@ -117,6 +147,7 @@ export async function handleDiagnostics(req, res, match, ctx) {
|
|
|
117
147
|
sendJson(res, 200, {
|
|
118
148
|
static: deps.staticWiring,
|
|
119
149
|
memoryPosture: deps.memoryPosture ?? null,
|
|
150
|
+
storeDurability: projectStoreDurabilityWiring(deps.storePosture ?? unwiredStorePosture(deps.config.dbBackend)),
|
|
120
151
|
sqlEngine: deps.sqlEngine?.facts ?? null,
|
|
121
152
|
writeProtection: deps.writeProtection ?? null,
|
|
122
153
|
readFace: buildReadFaceWiring(deps.config),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError, sendHttpError, invalidJsonError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
3
|
import * as facts from "../../capability-facts.js";
|
|
4
4
|
import { HANDOVER_REASONS } from "../../boot/engine-lease.js";
|
|
5
5
|
import { assertNever } from "../route-ctx.js";
|
|
@@ -31,7 +31,7 @@ function sendHandoverUnavailable(res, why) {
|
|
|
31
31
|
}
|
|
32
32
|
export async function handleEngine(req, res, match, ctx) {
|
|
33
33
|
const { deps } = ctx;
|
|
34
|
-
if (deps.config.requirePrincipal &&
|
|
34
|
+
if (deps.config.requirePrincipal && gatedSubject(req, deps.config) === undefined) {
|
|
35
35
|
sendPrincipalRefusal(res, req, deps.config);
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
@@ -2,7 +2,8 @@ import { hookNoticeWire } from "../../fleet/fleet-bus.js";
|
|
|
2
2
|
import { FLEET_SNAPSHOT_TERMINAL_MAX_ROWS, isTerminalWorkflowRowStatus, recentTerminalWorkflowRows } from "../../fleet/fleet-terminal-window.js";
|
|
3
3
|
import { taskNotificationFoldKey } from "../../orchestration/workflow-completion-inbox.js";
|
|
4
4
|
import { sendJson, sendError, sseHeaders } from "../send.js";
|
|
5
|
-
import {
|
|
5
|
+
import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
|
|
6
|
+
import { routeListFilter } from "../owner-access.js";
|
|
6
7
|
import { assertNever } from "../route-ctx.js";
|
|
7
8
|
import * as facts from "../../capability-facts.js";
|
|
8
9
|
export async function handleFleet(req, res, match, ctx) {
|
|
@@ -14,8 +15,8 @@ export async function handleFleet(req, res, match, ctx) {
|
|
|
14
15
|
sendError(res, 501, "capability.self_orchestration_required", "fleet stream requires self-orchestration / fleet wiring");
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
|
-
const { fleetWide } =
|
|
18
|
-
const principal =
|
|
18
|
+
const { fleetWide } = routeListFilter(req, deps, match.decl.id);
|
|
19
|
+
const principal = gatedSubject(req, deps.config);
|
|
19
20
|
if (deps.config.requirePrincipal && !principal && !fleetWide) {
|
|
20
21
|
sendPrincipalRefusal(res, req, deps.config);
|
|
21
22
|
return;
|
|
@@ -48,6 +49,7 @@ function streamFleet(req, res, bus, callerScope, callerSession = null, completio
|
|
|
48
49
|
name: "rewrite", scope: "strip", sessionId: "strip",
|
|
49
50
|
description: "scrub", agentType: "scrub", agentName: "scrub", currentAction: "scrub",
|
|
50
51
|
currentTool: "scrub", transcriptId: "scrub", stoppedBy: "scrub", editedFiles: "scrub",
|
|
52
|
+
model: "scrub",
|
|
51
53
|
};
|
|
52
54
|
void SCOPED_TASK_KEY_DISPOSITION;
|
|
53
55
|
const stripT = (r) => {
|
|
@@ -5,7 +5,7 @@ import { manifestToIndexEntry } from "../../images/manifest.js";
|
|
|
5
5
|
import { validateBake, buildBakeArgv } from "../../images/bake-validate.js";
|
|
6
6
|
import { streamSseLog } from "../sse-log.js";
|
|
7
7
|
import { sendJson, sendError } from "../send.js";
|
|
8
|
-
import { headerStr, safeEqual,
|
|
8
|
+
import { headerStr, safeEqual, gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired } from "../principal-gate.js";
|
|
9
9
|
import { idemCallerOf, idemKeyOf } from "../idempotency.js";
|
|
10
10
|
import { assertNever } from "../route-ctx.js";
|
|
11
11
|
import * as facts from "../../capability-facts.js";
|
|
@@ -48,7 +48,7 @@ export async function handleImages(req, res, match, ctx) {
|
|
|
48
48
|
if (deps.imageBakes && isBakeRouteId(match.decl.id)) {
|
|
49
49
|
const bakes = deps.imageBakes;
|
|
50
50
|
const idx = deps.imageIndex;
|
|
51
|
-
const principal =
|
|
51
|
+
const principal = gatedPerson(req, deps.config);
|
|
52
52
|
const isExplicitOperator = explicitOperatorOk(principal, deps.config);
|
|
53
53
|
const operatorLane = facts.operatorLane(deps);
|
|
54
54
|
const cfg = deps.config.imageBakes;
|
|
@@ -289,7 +289,7 @@ export async function handleImages(req, res, match, ctx) {
|
|
|
289
289
|
const pool = facts.imagePool(deps);
|
|
290
290
|
if (pool.available && isIndexRouteId(match.decl.id)) {
|
|
291
291
|
const idx = pool.imageIndex;
|
|
292
|
-
const principal =
|
|
292
|
+
const principal = gatedPerson(req, deps.config);
|
|
293
293
|
const operator = explicitOperatorOk(principal, deps.config);
|
|
294
294
|
const viewer = { operator, tenantId: principal ?? null };
|
|
295
295
|
const q = new URLSearchParams(match.search);
|
|
@@ -440,10 +440,13 @@ const BAKE_ROUTE_ID_SET = new Set(BAKE_ROUTE_IDS);
|
|
|
440
440
|
const isBakeRouteId = (id) => BAKE_ROUTE_ID_SET.has(id);
|
|
441
441
|
const isIndexRouteId = (id) => !BAKE_ROUTE_ID_SET.has(id);
|
|
442
442
|
async function streamBakeEvents(req, res, bakes, bakeId, staleMs) {
|
|
443
|
+
const LOST = "lost";
|
|
443
444
|
await streamSseLog(req, res, {
|
|
444
445
|
statusOf: async (id) => {
|
|
445
446
|
const bake = await bakes.getBake(id);
|
|
446
|
-
|
|
447
|
+
if (!bake)
|
|
448
|
+
return undefined;
|
|
449
|
+
return { status: bake.status === "running" && Date.now() - new Date(bake.updatedAt).getTime() > staleMs ? LOST : bake.status };
|
|
447
450
|
},
|
|
448
451
|
getEvents: (id, after) => bakes.getEvents(id, after),
|
|
449
452
|
formatEvent: (ev) => ({
|
|
@@ -451,8 +454,9 @@ async function streamBakeEvents(req, res, bakes, bakeId, staleMs) {
|
|
|
451
454
|
event: ev.kind,
|
|
452
455
|
data: { kind: ev.kind, seq: ev.seq, ts: ev.ts, ...(ev.level ? { level: ev.level } : {}), ...(ev.data ?? {}) },
|
|
453
456
|
}),
|
|
454
|
-
|
|
455
|
-
|
|
457
|
+
isTerminalEvent: (ev) => ev.kind === "done",
|
|
458
|
+
closingFrameOf: (row, deliveredTerminal) => row.status === LOST && !deliveredTerminal ? { event: "done", data: { kind: "done", status: "FAILED", error: "bake-runner lost (no heartbeat)", digest: null, indexId: null, repo: null, ref: null } } : undefined,
|
|
459
|
+
}, bakeId);
|
|
456
460
|
}
|
|
457
461
|
function bakeView(b) {
|
|
458
462
|
return {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* [ref] A9 域模块 —— v2 leader 端点([ref])。
|
|
3
3
|
*
|
|
4
|
-
* 路由:`POST /v1/leader`(异步,形同 `/v1/runs`)· `GET /v1/leader/:id
|
|
4
|
+
* 路由:`POST /v1/leader`(异步,形同 `/v1/runs`)· `GET /v1/leader/:id` · `POST /v1/leader/:id/cancel`(停止律与 run / bake 同一条,见 `leader/endpoint.ts` 头注)。整域由 `deps.leaderEndpoint`
|
|
5
5
|
* 的存在与否开关;身份层与 `/v1/runs` 同款(BL-4:此前整条路跳过 authorize/requirePrincipal 且不记 owner,
|
|
6
|
-
* 任何持服务令牌者能提交/读任意租户的 leader run),owner 用 crypto 验证过的 `
|
|
6
|
+
* 任何持服务令牌者能提交/读任意租户的 leader run),owner 用 crypto 验证过的 `gatedSubject`。本域零可变状态。
|
|
7
7
|
*/
|
|
8
8
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
9
9
|
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
@@ -27,6 +27,11 @@ export declare const LEADER_ROUTES: readonly [{
|
|
|
27
27
|
readonly pattern: RegExp;
|
|
28
28
|
readonly label: "/v1/leader/:id";
|
|
29
29
|
readonly methods: readonly ["GET"];
|
|
30
|
+
}, {
|
|
31
|
+
readonly id: "leader-cancel";
|
|
32
|
+
readonly pattern: RegExp;
|
|
33
|
+
readonly label: "/v1/leader/:id/cancel";
|
|
34
|
+
readonly methods: readonly ["POST"];
|
|
30
35
|
}];
|
|
31
36
|
/** 本域可分派行的 `id` 闭集 —— handler 的 `switch` 按它判穷尽(漏一口 = 编译红)。 */
|
|
32
37
|
export type LeaderRouteId = RouteIdsOf<typeof LEADER_ROUTES>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedSubject, headerStr, runIdentityOf, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
3
|
import { idemCallerOf } from "../idempotency.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
5
|
import * as facts from "../../capability-facts.js";
|
|
@@ -10,6 +10,7 @@ export async function handleLeader(req, res, match, ctx) {
|
|
|
10
10
|
case "leader-submit":
|
|
11
11
|
case "leader-detail":
|
|
12
12
|
case "leader-by-idem":
|
|
13
|
+
case "leader-cancel":
|
|
13
14
|
break;
|
|
14
15
|
default:
|
|
15
16
|
return assertNever(match.decl.id);
|
|
@@ -22,7 +23,7 @@ export async function handleLeader(req, res, match, ctx) {
|
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
25
|
const endpoint = lane.endpoint;
|
|
25
|
-
if (deps.config.requirePrincipal && !
|
|
26
|
+
if (deps.config.requirePrincipal && !gatedSubject(req, deps.config)) {
|
|
26
27
|
sendPrincipalRefusal(res, req, deps.config);
|
|
27
28
|
return;
|
|
28
29
|
}
|
|
@@ -36,7 +37,7 @@ export async function handleLeader(req, res, match, ctx) {
|
|
|
36
37
|
sendError(res, 422, "request.autonomy_lane_refused", laneRefusal);
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
|
-
const r = await endpoint.handle("POST", LEADER_SUBMIT_PATH, body, caller, headerStr(req.headers["idempotency-key"]) ?? null);
|
|
40
|
+
const r = await endpoint.handle("POST", LEADER_SUBMIT_PATH, body, caller, headerStr(req.headers["idempotency-key"]) ?? null, runIdentityOf(req, deps.config, caller.subject ?? null));
|
|
40
41
|
if (r) {
|
|
41
42
|
sendJson(res, r.status, r.body);
|
|
42
43
|
return;
|
|
@@ -49,6 +50,13 @@ export async function handleLeader(req, res, match, ctx) {
|
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
52
|
}
|
|
53
|
+
else if (match.decl.id === "leader-cancel") {
|
|
54
|
+
const r = await endpoint.handle("POST", `${LEADER_SUBMIT_PATH}/${match.params.id}/cancel`, undefined, caller);
|
|
55
|
+
if (r) {
|
|
56
|
+
sendJson(res, r.status, r.body);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
52
60
|
else {
|
|
53
61
|
const r = await endpoint.handle("GET", `${LEADER_SUBMIT_PATH}/${match.params.id}`, undefined, caller);
|
|
54
62
|
if (r) {
|
|
@@ -62,5 +70,6 @@ export const LEADER_ROUTES = [
|
|
|
62
70
|
{ id: "leader-submit", path: LEADER_SUBMIT_PATH, billable: "submit", methods: ["POST"] },
|
|
63
71
|
{ id: "leader-by-idem", path: LEADER_SUBMIT_PATH, methods: ["GET"] },
|
|
64
72
|
{ id: "leader-detail", pattern: /^\/v1\/leader\/(?<id>[^/]+)$/, label: "/v1/leader/:id", methods: ["GET"] },
|
|
73
|
+
{ id: "leader-cancel", pattern: /^\/v1\/leader\/(?<id>[^/]+)\/cancel$/, label: "/v1/leader/:id/cancel", methods: ["POST"] },
|
|
65
74
|
];
|
|
66
75
|
//# sourceMappingURL=leader.js.map
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
* = 持久 run 账面 ∧ 会话属主面(两道 501 的同一批 deps 推导出来,「说 yes 但 501」结构上不可能)。
|
|
60
60
|
*/
|
|
61
61
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
62
|
-
import {
|
|
62
|
+
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
63
63
|
/** 本面的三词闭集 —— **`unsupported` 是本仓的词**(core 的三词是 `reconnected`/`refused`/`not_declared`)。 */
|
|
64
64
|
export type McpReconnectOutcome = "accepted" | "refused" | "unsupported";
|
|
65
65
|
export declare function handleMcpReconnect(req: IncomingMessage, res: ServerResponse, match: RouteMatch<McpReconnectRouteId>, ctx: RouteCtx): Promise<void>;
|