@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,11 +2,9 @@ import { z } from "zod";
|
|
|
2
2
|
import { isParkedRunStatus, isTerminalRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
|
|
3
3
|
import { DeadlineExceeded, MCP_DIAL_DEADLINE_MS, raceDeadline } from "../mcp-dial-deadline.js";
|
|
4
4
|
import { sendJson, sendError } from "../send.js";
|
|
5
|
-
import {
|
|
6
|
-
import {} from "../route-ctx.js";
|
|
7
|
-
import { assertNever, SESSION_NOT_FOUND_MESSAGE } from "../route-ctx.js";
|
|
5
|
+
import { admitSessionById, enter } from "../owner-access.js";
|
|
6
|
+
import { assertNever } from "../route-ctx.js";
|
|
8
7
|
import * as facts from "../../capability-facts.js";
|
|
9
|
-
import { sessionOwnerCellOf } from "../../security.js";
|
|
10
8
|
import { seatText } from "../../trace/exit-seat.js";
|
|
11
9
|
import { projectMcpAuthorization } from "../../mcp-authorization-face.js";
|
|
12
10
|
const BodySchema = z.object({ server: z.string().min(1).max(190) }).strict();
|
|
@@ -73,11 +71,9 @@ export async function handleMcpReconnect(req, res, match, ctx) {
|
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
73
|
const { runStore, sessionStorage } = fact;
|
|
76
|
-
const
|
|
77
|
-
if (
|
|
78
|
-
sendPrincipalRefusal(res, req, deps.config);
|
|
74
|
+
const entry = enter(req, res, deps, match.decl.id);
|
|
75
|
+
if (entry === undefined)
|
|
79
76
|
return;
|
|
80
|
-
}
|
|
81
77
|
const parsed = BodySchema.safeParse((await ctx.helpers.readJson(req)) ?? {});
|
|
82
78
|
if (!parsed.success) {
|
|
83
79
|
sendError(res, 400, "request.body_shape", "body must be { server: string (non-empty, at most 190 characters) } — one NAMED MCP server, required; there is no all-servers form (re-dialing every server would CLOSE the healthy ones, and a stdio server that owns a device cannot be re-dialed while the old connection still holds it)");
|
|
@@ -89,14 +85,10 @@ export async function handleMcpReconnect(req, res, match, ctx) {
|
|
|
89
85
|
sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
|
|
90
86
|
return;
|
|
91
87
|
}
|
|
92
|
-
const
|
|
93
|
-
if (
|
|
94
|
-
sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
const operator = explicitOperatorOk(principal, deps.config);
|
|
98
|
-
if (!operator && !ctx.helpers.sessionOwnerOk(req, res, await sessionOwnerCellOf(sessionStorage, sessionId, owner)))
|
|
88
|
+
const admitted = await admitSessionById(entry, res, sessionStorage, sessionId);
|
|
89
|
+
if (admitted === undefined)
|
|
99
90
|
return;
|
|
91
|
+
const owner = admitted.row.owner;
|
|
100
92
|
const activeTaskId = await runStore.getActiveTaskId(sessionId);
|
|
101
93
|
const live = activeTaskId === undefined ? undefined : ctx.registry.steerableRuns.get(activeTaskId);
|
|
102
94
|
if (live) {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
3
|
import { sentMemoryStoreRefusal } from "../memory-store-refusal-reply.js";
|
|
4
|
-
import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
|
|
5
4
|
import { buildOriginFencedBundle, readOriginAware } from "../../memory-origin-fence.js";
|
|
6
|
-
import {
|
|
5
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
7
6
|
import { assertNever } from "../route-ctx.js";
|
|
8
|
-
import {
|
|
7
|
+
import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
9
8
|
import * as facts from "../../capability-facts.js";
|
|
10
9
|
export const MEMORY_BUNDLE_EXPORT_PATH = "/v1/memory/export";
|
|
11
10
|
export const MEMORY_BUNDLE_IMPORT_PATH = "/v1/memory/import";
|
|
@@ -36,15 +35,13 @@ function codeOf(err) {
|
|
|
36
35
|
return typeof code === "string" ? code : undefined;
|
|
37
36
|
}
|
|
38
37
|
function sentClassifiedFailure(res, ctx, face, err) {
|
|
39
|
-
if (
|
|
38
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
40
39
|
return true;
|
|
41
40
|
const code = codeOf(err);
|
|
42
41
|
if (code !== undefined && sentCoreCode(res, code, err instanceof Error ? err.message : String(err)))
|
|
43
42
|
return true;
|
|
44
43
|
if (sentMemoryStoreRefusal(res, err, ctx.deps.logger))
|
|
45
44
|
return true;
|
|
46
|
-
if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
|
|
47
|
-
return true;
|
|
48
45
|
ctx.deps.logger?.warn?.(`memory_bundle_${face}_failed`, { err: String(err) });
|
|
49
46
|
return false;
|
|
50
47
|
}
|
|
@@ -69,7 +66,7 @@ export function buildImportReportWire(r) {
|
|
|
69
66
|
}
|
|
70
67
|
export async function handleMemoryBundle(req, res, match, ctx) {
|
|
71
68
|
const { deps } = ctx;
|
|
72
|
-
const principal =
|
|
69
|
+
const principal = gatedPerson(req, deps.config);
|
|
73
70
|
if (deps.config.requirePrincipal && !principal) {
|
|
74
71
|
sendPrincipalRefusal(res, req, deps.config);
|
|
75
72
|
return;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { erasureInputSmugglesPrototypeKey } from "../../memory-operator-faces.js";
|
|
3
3
|
import { sentMemoryComplianceFailure } from "../memory-compliance-failure-reply.js";
|
|
4
|
-
import { readLayerSeat,
|
|
4
|
+
import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
5
5
|
import { sendJson, sendError } from "../send.js";
|
|
6
|
-
import {
|
|
6
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
7
7
|
import { assertNever } from "../route-ctx.js";
|
|
8
8
|
import * as facts from "../../capability-facts.js";
|
|
9
9
|
export const MEMORY_ERASE_PATH = "/v1/memory/erase";
|
|
@@ -13,7 +13,7 @@ const EraseRequestSchema = z.object({
|
|
|
13
13
|
allowUnevidenced: z.boolean().optional(),
|
|
14
14
|
});
|
|
15
15
|
function sentClassifiedFailure(res, ctx, face, err) {
|
|
16
|
-
if (
|
|
16
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
17
17
|
return true;
|
|
18
18
|
if (sentMemoryComplianceFailure(res, err, { kind: "operator" }, ctx.deps.logger))
|
|
19
19
|
return true;
|
|
@@ -22,7 +22,7 @@ function sentClassifiedFailure(res, ctx, face, err) {
|
|
|
22
22
|
}
|
|
23
23
|
export async function handleMemoryCompliance(req, res, match, ctx) {
|
|
24
24
|
const { deps } = ctx;
|
|
25
|
-
const principal =
|
|
25
|
+
const principal = gatedPerson(req, deps.config);
|
|
26
26
|
if (deps.config.requirePrincipal && !principal) {
|
|
27
27
|
sendPrincipalRefusal(res, req, deps.config);
|
|
28
28
|
return;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { gatedPrincipal, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
|
|
3
|
+
import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
4
|
+
import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendOperatorPrincipalsRequired } from "../principal-gate.js";
|
|
6
5
|
import { assertNever } from "../route-ctx.js";
|
|
7
6
|
import * as facts from "../../capability-facts.js";
|
|
8
7
|
export const MEMORY_CONSOLIDATION_STATUS_PATH = "/v1/admin/memory/consolidation";
|
|
@@ -74,7 +73,7 @@ function codeOf(err) {
|
|
|
74
73
|
}
|
|
75
74
|
export async function handleMemoryConsolidation(req, res, match, ctx) {
|
|
76
75
|
const { deps } = ctx;
|
|
77
|
-
const principal =
|
|
76
|
+
const principal = gatedPerson(req, deps.config);
|
|
78
77
|
if (deps.config.requirePrincipal && !principal) {
|
|
79
78
|
sendPrincipalRefusal(res, req, deps.config);
|
|
80
79
|
return;
|
|
@@ -107,7 +106,7 @@ export async function handleMemoryConsolidation(req, res, match, ctx) {
|
|
|
107
106
|
row = scope !== undefined ? await faces.lastRun(scope) : undefined;
|
|
108
107
|
}
|
|
109
108
|
catch (err) {
|
|
110
|
-
if (
|
|
109
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
111
110
|
return;
|
|
112
111
|
throw err;
|
|
113
112
|
}
|
|
@@ -149,19 +148,17 @@ export async function handleMemoryConsolidation(req, res, match, ctx) {
|
|
|
149
148
|
}
|
|
150
149
|
}
|
|
151
150
|
try {
|
|
152
|
-
const r = await faces.run(decided.scope);
|
|
151
|
+
const r = await faces.run(decided.scope, principal);
|
|
153
152
|
sendJson(res, 200, buildRunSummary(r));
|
|
154
153
|
}
|
|
155
154
|
catch (err) {
|
|
156
|
-
if (
|
|
155
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
157
156
|
return;
|
|
158
157
|
const coreCode = codeOf(err);
|
|
159
158
|
if (coreCode !== undefined) {
|
|
160
159
|
sendError(res, 409, "memory.consolidation_refused", `memory consolidation refused (${coreCode}): ${err instanceof Error ? err.message : String(err)}`);
|
|
161
160
|
return;
|
|
162
161
|
}
|
|
163
|
-
if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
|
|
164
|
-
return;
|
|
165
162
|
ctx.deps.logger?.warn?.("memory_consolidation_run_failed", { scope: decided.scope, err: String(err) });
|
|
166
163
|
sendError(res, 500, "internal.error", "memory consolidation run failed");
|
|
167
164
|
}
|
|
@@ -87,12 +87,14 @@ export declare const MEMORY_ORIGIN_CLEARANCES_PATH = "/v1/memory/origin/clearanc
|
|
|
87
87
|
*
|
|
88
88
|
* 被剥的 core 键**只有一个**:`entryText`(完整正文托管字节),而且**剥了要说** —— `custodyBytes` 是它
|
|
89
89
|
* 留在审计面上的那句披露(0 = 这行没揣着字节;>0 = 崩溃恢复席里还有一条记忆的正文,pending 行要人处置)。
|
|
90
|
+
* `custodyErased: true`(core 7.66.0 [ref])= 这行的托管被一次擦除取走了(此时 `custodyBytes` 恒 0,该清标不再能续)。
|
|
90
91
|
* 嵌套的 `origin` 不是「被剥」而是**被深投影**(三键之外的成员剥值留名,见 {@link buildOriginWire})。
|
|
91
92
|
* 🔴 **不要**给这个函数标 `: Record<string, unknown>` 返回型:那会让 `keyof ReturnType<…>` 塌成 `string`,
|
|
92
93
|
* 编译期差集门当场变成恒真(vacuous)—— `buildImportReportWire` 的头注里踩过这个坑,而本车在 `origin`
|
|
93
94
|
* 那只投影上**又踩了一次**(标了具体返回型,门读标注不读字面量),所以这条钉现在有两处案底。
|
|
94
95
|
*/
|
|
95
96
|
export declare function buildClearanceRowWire(r: OriginClearanceRow): {
|
|
97
|
+
custodyErased?: true | undefined;
|
|
96
98
|
events: {
|
|
97
99
|
detail?: string | undefined;
|
|
98
100
|
eventId: string;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
3
|
import { sentMemoryStoreRefusal } from "../memory-store-refusal-reply.js";
|
|
4
|
-
import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
|
|
5
4
|
import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
|
|
6
|
-
import { readLayerSeat,
|
|
7
|
-
import {
|
|
5
|
+
import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
6
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
8
7
|
import { assertNever } from "../route-ctx.js";
|
|
9
8
|
import * as facts from "../../capability-facts.js";
|
|
10
9
|
export const MEMORY_ORIGIN_EXTERNAL_PATH = "/v1/memory/origin/external";
|
|
@@ -50,7 +49,7 @@ function codeOf(err) {
|
|
|
50
49
|
return typeof code === "string" ? code : undefined;
|
|
51
50
|
}
|
|
52
51
|
function sentClassifiedFailure(res, ctx, face, err) {
|
|
53
|
-
if (
|
|
52
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
54
53
|
return true;
|
|
55
54
|
if (face === "clear") {
|
|
56
55
|
const coreCode = codeOf(err);
|
|
@@ -59,8 +58,6 @@ function sentClassifiedFailure(res, ctx, face, err) {
|
|
|
59
58
|
}
|
|
60
59
|
if (face !== "clearances" && sentMemoryStoreRefusal(res, err, ctx.deps.logger))
|
|
61
60
|
return true;
|
|
62
|
-
if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
|
|
63
|
-
return true;
|
|
64
61
|
ctx.deps.logger?.warn?.(`memory_origin_${face}_failed`, { err: String(err) });
|
|
65
62
|
return false;
|
|
66
63
|
}
|
|
@@ -98,6 +95,7 @@ export function buildClearanceRowWire(r) {
|
|
|
98
95
|
...(r.tombstonedAt !== undefined ? { tombstonedAt: r.tombstonedAt } : {}),
|
|
99
96
|
events: r.events.map(buildClearanceEventWire),
|
|
100
97
|
custodyBytes: Buffer.byteLength(r.entryText, "utf8"),
|
|
98
|
+
...(r.custodyErased === true ? { custodyErased: true } : {}),
|
|
101
99
|
};
|
|
102
100
|
}
|
|
103
101
|
function parseScopes(raw) {
|
|
@@ -113,7 +111,7 @@ function parseScopes(raw) {
|
|
|
113
111
|
}
|
|
114
112
|
export async function handleMemoryOrigin(req, res, match, ctx) {
|
|
115
113
|
const { deps } = ctx;
|
|
116
|
-
const principal =
|
|
114
|
+
const principal = gatedPerson(req, deps.config);
|
|
117
115
|
if (deps.config.requirePrincipal && !principal) {
|
|
118
116
|
sendPrincipalRefusal(res, req, deps.config);
|
|
119
117
|
return;
|
|
@@ -163,7 +161,8 @@ export async function handleMemoryOrigin(req, res, match, ctx) {
|
|
|
163
161
|
if (at === null)
|
|
164
162
|
return;
|
|
165
163
|
try {
|
|
166
|
-
|
|
164
|
+
const rows = await (at !== undefined ? faces.listClearances(at) : faces.listClearances());
|
|
165
|
+
sendJson(res, 200, { clearances: rows.map(buildClearanceRowWire) });
|
|
167
166
|
}
|
|
168
167
|
catch (err) {
|
|
169
168
|
if (!sentClassifiedFailure(res, ctx, "clearances", err))
|
|
@@ -5,9 +5,14 @@ import * as facts from "../../capability-facts.js";
|
|
|
5
5
|
import { sendJson, sendError } from "../send.js";
|
|
6
6
|
import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
|
|
7
7
|
import { parseProjectLayerKey } from "../../project-layer-key.js";
|
|
8
|
-
import {
|
|
8
|
+
import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendUnauthorized } from "../principal-gate.js";
|
|
9
9
|
import { assertNever } from "../route-ctx.js";
|
|
10
|
-
import {
|
|
10
|
+
import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
11
|
+
function layerFaceAudience(deps, principal, face, scope) {
|
|
12
|
+
if (explicitOperatorOk(principal, deps.config))
|
|
13
|
+
return { kind: "operator" };
|
|
14
|
+
return { kind: "layer_owner", face, withheld: (coreMessage) => deps.logger?.warn?.(face === "export" ? "memory_export_refused" : "memory_sync_refused", { scope, err: coreMessage }) };
|
|
15
|
+
}
|
|
11
16
|
const ORG_PREFIX = "org:";
|
|
12
17
|
export const MEMORY_EXPORT_MAX_LIMIT = 500;
|
|
13
18
|
function encodeExportCursor(c) {
|
|
@@ -36,16 +41,16 @@ function directoryDecidesThisFace(mode) {
|
|
|
36
41
|
return false;
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
|
-
async function gateMemoryScope(deps,
|
|
40
|
-
if (scope === formatUserScope(
|
|
44
|
+
async function gateMemoryScope(deps, person, scope, need) {
|
|
45
|
+
if (scope === formatUserScope(person) || parseProjectLayerKey(scope)?.owner === person)
|
|
41
46
|
return { kind: "allow" };
|
|
42
|
-
if (explicitOperatorOk(
|
|
47
|
+
if (explicitOperatorOk(person, deps.config))
|
|
43
48
|
return { kind: "allow" };
|
|
44
49
|
const directory = deps.orgMemoryDirectory;
|
|
45
50
|
if (!scope.startsWith(ORG_PREFIX) || directory === undefined || !directoryDecidesThisFace(deps.config.memoryOrgAdmissionMode)) {
|
|
46
51
|
return { kind: "not_found" };
|
|
47
52
|
}
|
|
48
|
-
const lookup = await directory.lookup(
|
|
53
|
+
const lookup = await directory.lookup(person);
|
|
49
54
|
if (lookup.kind === "unavailable")
|
|
50
55
|
return { kind: "unavailable", retryAfterMs: lookup.retryAfterMs };
|
|
51
56
|
const grant = lookup.scopes[scope];
|
|
@@ -70,7 +75,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
70
75
|
const { readJson, safeDecode } = ctx.helpers;
|
|
71
76
|
switch (match.decl.id) {
|
|
72
77
|
case "memory-export": {
|
|
73
|
-
const principal =
|
|
78
|
+
const principal = gatedPerson(req, deps.config);
|
|
74
79
|
if (!principal) {
|
|
75
80
|
sendUnauthorized(res, "identity");
|
|
76
81
|
return;
|
|
@@ -100,7 +105,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
100
105
|
}
|
|
101
106
|
const decoded = beforeRaw === null ? undefined : decodeExportCursor(beforeRaw);
|
|
102
107
|
if (decoded !== undefined && !decoded.ok) {
|
|
103
|
-
sendError(res, 400, "request.query_invalid",
|
|
108
|
+
sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
|
|
104
109
|
return;
|
|
105
110
|
}
|
|
106
111
|
try {
|
|
@@ -125,7 +130,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
125
130
|
});
|
|
126
131
|
}
|
|
127
132
|
catch (err) {
|
|
128
|
-
if (
|
|
133
|
+
if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "export", scope)))
|
|
129
134
|
return;
|
|
130
135
|
deps.logger?.warn?.("memory_export_failed", { scope, err: String(err) });
|
|
131
136
|
sendError(res, 500, "internal.error", "memory export failed");
|
|
@@ -133,7 +138,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
133
138
|
return;
|
|
134
139
|
}
|
|
135
140
|
case "memory-sync-scope": {
|
|
136
|
-
const principal =
|
|
141
|
+
const principal = gatedPerson(req, deps.config);
|
|
137
142
|
if (!principal) {
|
|
138
143
|
sendUnauthorized(res, "identity");
|
|
139
144
|
return;
|
|
@@ -185,7 +190,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
185
190
|
sendJson(res, 200, out);
|
|
186
191
|
}
|
|
187
192
|
catch (err) {
|
|
188
|
-
if (
|
|
193
|
+
if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "sync", scope)))
|
|
189
194
|
return;
|
|
190
195
|
deps.logger?.warn?.("memory_sync_failed", { scope, peer: parsed.value.peer, err: String(err) });
|
|
191
196
|
sendError(res, 500, "internal.error", "memory sync failed");
|
|
@@ -193,7 +198,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
193
198
|
return;
|
|
194
199
|
}
|
|
195
200
|
case "policy": {
|
|
196
|
-
const principal =
|
|
201
|
+
const principal = gatedPerson(req, deps.config);
|
|
197
202
|
if (deps.config.requirePrincipal && !principal) {
|
|
198
203
|
sendPrincipalRefusal(res, req, deps.config);
|
|
199
204
|
return;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
|
+
import { admitSessionRow, enter, refuse } from "../owner-access.js";
|
|
4
4
|
import { sendResumeOutcome } from "../route-ctx.js";
|
|
5
|
-
import { assertNever
|
|
5
|
+
import { assertNever } from "../route-ctx.js";
|
|
6
6
|
import * as facts from "../../capability-facts.js";
|
|
7
7
|
import { readResumeRestatement } from "../resume-restatement.js";
|
|
8
8
|
export async function handleNotifyWake(req, res, match, ctx) {
|
|
@@ -13,11 +13,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
13
13
|
case "session-notify": {
|
|
14
14
|
if (rateLimited(req, res) || quotaExceeded(req, res))
|
|
15
15
|
return;
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
sendPrincipalRefusal(res, req, deps.config);
|
|
16
|
+
const notifyEntry = enter(req, res, deps, "session-notify");
|
|
17
|
+
if (notifyEntry === undefined)
|
|
19
18
|
return;
|
|
20
|
-
}
|
|
21
19
|
const notifySession = safeDecode(match.params.sessionId);
|
|
22
20
|
if (notifySession === null) {
|
|
23
21
|
sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
|
|
@@ -57,16 +55,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
57
55
|
return;
|
|
58
56
|
}
|
|
59
57
|
const notifyHead = await owned.sessionStorage.headOf(notifySession);
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
const notifyAdmitted = await admitSessionRow(notifyEntry, res, owned.sessionStorage, notifySession, notifyHead);
|
|
59
|
+
if (notifyAdmitted === undefined)
|
|
62
60
|
return;
|
|
63
|
-
}
|
|
64
|
-
const notifyOwner = notifyHead.owner;
|
|
65
|
-
const notifyOperator = explicitOperatorOk(principal, deps.config);
|
|
66
|
-
if (!notifyOperator && notifyOwner !== principal && !ownerlessRowOpen(await sessionOwnerCellOf(owned.sessionStorage, notifySession, notifyOwner), sessionCallerOf(req, deps))) {
|
|
67
|
-
sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
61
|
const payload = {
|
|
71
62
|
task_id: nb.task_id,
|
|
72
63
|
status: nb.status,
|
|
@@ -75,7 +66,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
75
66
|
...(nb.seq !== undefined ? { seq: nb.seq } : {}),
|
|
76
67
|
...(nb.source !== undefined ? { source: nb.source } : {}),
|
|
77
68
|
};
|
|
78
|
-
const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant:
|
|
69
|
+
const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant: notifyAdmitted.row, ownerlessEntryOwner: notifyEntry.caller.subject ?? null }, payload);
|
|
79
70
|
switch (out.delivery) {
|
|
80
71
|
case "live":
|
|
81
72
|
sendJson(res, 200, { sessionId: notifySession, delivery: "live" });
|
|
@@ -90,7 +81,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
90
81
|
sendJson(res, 202, { sessionId: notifySession, delivery: "parked", note: "no live stream — parked in the session inbox; drained as a task_notification on the next stream open" });
|
|
91
82
|
return;
|
|
92
83
|
case "withdrawn":
|
|
93
|
-
|
|
84
|
+
refuse(notifyEntry, res, "missing");
|
|
94
85
|
return;
|
|
95
86
|
default:
|
|
96
87
|
return assertNever(out);
|
|
@@ -103,7 +94,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
103
94
|
}
|
|
104
95
|
if (rateLimited(req, res) || quotaExceeded(req, res) || (await leaseDenied(req, res)))
|
|
105
96
|
return;
|
|
106
|
-
const principal =
|
|
97
|
+
const principal = gatedSubject(req, deps.config);
|
|
107
98
|
if (deps.config.requirePrincipal && principal === undefined) {
|
|
108
99
|
sendPrincipalRefusal(res, req, deps.config);
|
|
109
100
|
return;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, 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 { quotaWindowResetsAt } from "../../observability/cost-quota.js";
|
|
@@ -12,7 +12,7 @@ export async function handleObservability(req, res, match, ctx) {
|
|
|
12
12
|
sendOperatorPrincipalsRequired(res);
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
if (!explicitOperatorOk(
|
|
15
|
+
if (!explicitOperatorOk(gatedPerson(req, deps.config), deps.config)) {
|
|
16
16
|
sendError(res, 403, "auth.operator_only", "the outcomes view is operator-only");
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
@@ -41,7 +41,7 @@ export async function handleObservability(req, res, match, ctx) {
|
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
case "usage": {
|
|
44
|
-
const principal =
|
|
44
|
+
const principal = gatedPerson(req, deps.config);
|
|
45
45
|
if (!principal) {
|
|
46
46
|
sendPrincipalRefusal(res, req, deps.config);
|
|
47
47
|
return;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 跨主体投递门的**受理口**:`POST /v1/principal-inbox/messages`。
|
|
3
3
|
*
|
|
4
4
|
* 本口只做三件事,其余全归门(`src/org-delivery-gate.ts`,规则全文在它的头注):
|
|
5
|
-
* ① 取发件人 —— **只**取自验过的身份面(`
|
|
5
|
+
* ① 取发件人 —— **只**取自验过的身份面(`gatedSubject`),交给门的 `authedFrom` 就是 `{ scope: <那位主体> }`;
|
|
6
6
|
* 体里没有发件人这个键(写了 = 词表外键,400)。没有验过的身份 ⇒ 401(身份面那一句),不论部署是否要求 principal ——
|
|
7
7
|
* 门要一个发件人 scope,匿名者没有。无凭证部署上 principal 头只是调用方自报 ⇒ 本口在分派器的无凭证写门内
|
|
8
8
|
* (声明行 `credentialGated`,503 `auth.service_token_required`;本地开发显式 `ALLOW_UNAUTHED_WRITES=true` 才放行);
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
*
|
|
16
16
|
* 拒绝词 → HTTP 状态(穷举 `switch`,core 加词 ⇒ 编译红):
|
|
17
17
|
* · `not_member` → 404:「不同 org」「查无此人」「目录答不上来」同一份字节(门保证),404 与本仓反枚举的既有形一致;
|
|
18
|
-
* · `rate_limited` → 429
|
|
18
|
+
* · `rate_limited` → 429,体带 `retryAfterSec`、头带同值 `Retry-After`(门答案里的那一个数 —— 配额店按店钟算的到当前窗结束的整秒数;本口不再算一遍,
|
|
19
|
+
* 一个数两个投影,先例 `run-concurrency-cap.ts`);三界(尝试 / 对偶 / 聚合)同一句同一个数,另三只词没有这两样;
|
|
19
20
|
* · `inbox_full` → 409(收件人那一侧的状态,不是发件人的速率;与 `steering.queue_full` 同档);
|
|
20
21
|
* · `recipient_tombstoned` → 410(收件人正在被删除,这条路关了)。
|
|
21
22
|
* 门缺席(本部署没声明收件箱消费方)⇒ 501 `capability.unavailable`,能力位 `principalInboxDelivery` 读同一只事实。
|
|
23
|
+
* 配额店读不出自己的状态 ⇒ 门抛 `OrgDeliveryQuotaUnreadableError`,由 HTTP 兜底(`http/server.ts`)答带因的 500(fail-closed,一封都没投)。
|
|
22
24
|
*/
|
|
23
25
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
24
26
|
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedSubject, sendUnauthorized } from "../principal-gate.js";
|
|
3
3
|
import { assertNever } from "../route-ctx.js";
|
|
4
4
|
import * as facts from "../../capability-facts.js";
|
|
5
5
|
import { principalInboxBodyKeyIssue } from "../../request-key-closure.js";
|
|
@@ -10,7 +10,8 @@ function sendRefusal(res, outcome) {
|
|
|
10
10
|
sendError(res, 404, "org_delivery.not_member", outcome.message);
|
|
11
11
|
return;
|
|
12
12
|
case "org_delivery.rate_limited":
|
|
13
|
-
|
|
13
|
+
res.setHeader("retry-after", String(outcome.retryAfterSec));
|
|
14
|
+
sendError(res, 429, "org_delivery.rate_limited", outcome.message, { retryAfterSec: outcome.retryAfterSec });
|
|
14
15
|
return;
|
|
15
16
|
case "org_delivery.inbox_full":
|
|
16
17
|
sendError(res, 409, "org_delivery.inbox_full", outcome.message);
|
|
@@ -19,7 +20,7 @@ function sendRefusal(res, outcome) {
|
|
|
19
20
|
sendError(res, 410, "org_delivery.recipient_tombstoned", outcome.message);
|
|
20
21
|
return;
|
|
21
22
|
default:
|
|
22
|
-
return assertNever(outcome
|
|
23
|
+
return assertNever(outcome);
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
export async function handlePrincipalInbox(req, res, match, ctx) {
|
|
@@ -27,7 +28,7 @@ export async function handlePrincipalInbox(req, res, match, ctx) {
|
|
|
27
28
|
const { readJson } = ctx.helpers;
|
|
28
29
|
switch (match.decl.id) {
|
|
29
30
|
case "principal-inbox-messages": {
|
|
30
|
-
const principal =
|
|
31
|
+
const principal = gatedSubject(req, deps.config);
|
|
31
32
|
if (principal === undefined) {
|
|
32
33
|
sendUnauthorized(res, "identity");
|
|
33
34
|
return;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* · **登记簿只由配置中心下发**:settings-schema 的本地读取集不收 `projects` 域 ⇒ 没有中心腿在应用配置的部署上没有登记簿 —— 两口 501
|
|
10
10
|
* `capability.unavailable`,能力位 `capabilities.projects`(布尔)读同一只事实(`capability-facts.ts` 的 `projectRegistry`)答 `false`;
|
|
11
11
|
* 有登记簿时答 `true`。本面不开写动词(写到哪里由另一张设计定;写面到货时另立一位,本位不改义)。
|
|
12
|
-
* · **可见性 fail-closed**:身份判在登记簿在场判**之前**(否则「这台有没有登记簿」先于 401 泄出去);fleet 调用方(`
|
|
12
|
+
* · **可见性 fail-closed**:身份判在登记簿在场判**之前**(否则「这台有没有登记簿」先于 401 泄出去);fleet 调用方(列表面 `list.read` 读档(`listFilterOf`))看全部;
|
|
13
13
|
* 带验过主体的调用方只看 `registeredBy` 恰是自己的登记;看不见的与不存在的同码同句(404 `not_found.project`,不给存在性预言机)。
|
|
14
14
|
*
|
|
15
15
|
* 归档:`archivedAt` 在场 = 已归档。列表缺省不列,`?archived=true` 只列已归档的,`?archived=false` 与缺省同;单项读不论归档与否都答(会话行引用它)。
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PROJECT_ID_REGEX } from "@sema-agent/core";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { sendUnauthorized } from "../principal-gate.js";
|
|
4
|
+
import { routeListFilter } from "../owner-access.js";
|
|
4
5
|
import { assertNever } from "../route-ctx.js";
|
|
5
6
|
import * as facts from "../../capability-facts.js";
|
|
6
7
|
import { projectByTable } from "../../trace/projection-table.js";
|
|
@@ -36,7 +37,7 @@ function readArchivedQuery(raw) {
|
|
|
36
37
|
export async function handleProjects(req, res, match, ctx) {
|
|
37
38
|
const { deps } = ctx;
|
|
38
39
|
const { safeDecode } = ctx.helpers;
|
|
39
|
-
const { fleetWide, gateOwner } =
|
|
40
|
+
const { fleetWide, gateOwner } = routeListFilter(req, deps, match.decl.id);
|
|
40
41
|
if (!fleetWide && gateOwner === null) {
|
|
41
42
|
sendUnauthorized(res, "identity");
|
|
42
43
|
return;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { limitFacts } from "../../limit-refusal.js";
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
4
|
import * as facts from "../../capability-facts.js";
|
|
4
5
|
import { assertNever } from "../route-ctx.js";
|
|
5
6
|
import { RETENTION_AUDIT_DEFAULT_LIMIT, RETENTION_AUDIT_MAX_LIMIT } from "../../plugins/retention-lane-store-sql.js";
|
|
@@ -27,7 +28,7 @@ function decodeCursor(raw) {
|
|
|
27
28
|
}
|
|
28
29
|
export async function handleRetention(req, res, match, ctx) {
|
|
29
30
|
const { deps } = ctx;
|
|
30
|
-
const principal =
|
|
31
|
+
const principal = gatedPerson(req, deps.config);
|
|
31
32
|
if (deps.config.requirePrincipal && !principal) {
|
|
32
33
|
sendPrincipalRefusal(res, req, deps.config);
|
|
33
34
|
return;
|
|
@@ -64,9 +65,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
|
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
67
|
if (domain.length > DOMAIN_MAX_CHARS) {
|
|
67
|
-
sendError(res, 400, "request.field_invalid",
|
|
68
|
-
detail: `domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`,
|
|
69
|
-
});
|
|
68
|
+
sendError(res, 400, "request.field_invalid", `the retention domain does not fit the hold table's identity column: domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`, limitFacts("domain", "characters", domain.length, DOMAIN_MAX_CHARS));
|
|
70
69
|
return;
|
|
71
70
|
}
|
|
72
71
|
let note;
|
|
@@ -84,9 +83,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
|
|
|
84
83
|
return;
|
|
85
84
|
}
|
|
86
85
|
if (n.length > NOTE_MAX_CHARS) {
|
|
87
|
-
sendError(res, 400, "request.field_invalid",
|
|
88
|
-
detail: `note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`,
|
|
89
|
-
});
|
|
86
|
+
sendError(res, 400, "request.field_invalid", `the retention hold note is longer than this face accepts: note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`, limitFacts("note", "characters", n.length, NOTE_MAX_CHARS));
|
|
90
87
|
return;
|
|
91
88
|
}
|
|
92
89
|
note = n;
|
|
@@ -125,7 +122,7 @@ async function handleAuditRead(res, store, search) {
|
|
|
125
122
|
const beforeRaw = q.get("before");
|
|
126
123
|
const decoded = beforeRaw === null ? undefined : decodeCursor(beforeRaw);
|
|
127
124
|
if (decoded !== undefined && !decoded.ok) {
|
|
128
|
-
sendError(res, 400, "request.query_invalid",
|
|
125
|
+
sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
|
|
129
126
|
return;
|
|
130
127
|
}
|
|
131
128
|
const domainRaw = q.get("domain");
|