@sema-agent/server 7.147.0 → 7.148.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1039 -24
- package/README.md +20 -7
- package/README.zh-CN.md +14 -8
- package/USAGE.md +380 -163
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +28 -30
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +37 -31
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +55 -67
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.js +9 -1
- package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
- package/dist/boot/stage-02-web-admin-pull.js +6 -1
- package/dist/boot/stage-03-store-backend.d.ts +3 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +2 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +7 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +10 -12
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +11 -8
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +11 -8
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +12 -15
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +12 -15
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +3 -0
- package/dist/boot/stores.js +21 -10
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +38 -11
- package/dist/capability-facts.js +47 -8
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +62 -56
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +42 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +26 -17
- package/dist/config.d.ts +8 -16
- package/dist/config.js +113 -47
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +30 -4
- package/dist/deployment-shape.js +7 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +5 -18
- package/dist/execution-lane-caps.js +0 -22
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +67 -57
- package/dist/hooks/hook-runner.js +260 -186
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +75 -78
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +54 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +76 -30
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +17 -12
- package/dist/http/execution-context.d.ts +17 -43
- package/dist/http/execution-context.js +7 -5
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +391 -67
- package/dist/http/owner-access.js +371 -35
- package/dist/http/principal-gate.d.ts +24 -81
- package/dist/http/principal-gate.js +24 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +21 -18
- package/dist/http/resume-legs.js +189 -129
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +25 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +70 -65
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +15 -18
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +146 -231
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +4 -2
- package/dist/http/routes/session-sync.js +21 -20
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +136 -120
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +39 -40
- package/dist/http/server.js +36 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +29 -2
- package/dist/memory-scope.js +64 -15
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +6 -3
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +35 -16
- package/dist/model-entry-refusal.js +40 -27
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +58 -38
- package/dist/observability/fail-open.js +60 -38
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +3 -4
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +5 -2
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +67 -5
- package/dist/parked-decide.js +127 -5
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
- package/dist/plugins/approval-ask-store-sql.js +41 -10
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/file-run-store.d.ts +63 -23
- package/dist/plugins/file-run-store.js +138 -83
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +58 -23
- package/dist/plugins/local-checkpoint-store.js +195 -76
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +4 -2
- package/dist/plugins/local-engine-high-water.js +4 -1
- package/dist/plugins/local-session-store.d.ts +358 -125
- package/dist/plugins/local-session-store.js +824 -251
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +186 -45
- package/dist/plugins/one-time-migrations.js +442 -119
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +1 -31
- package/dist/plugins/pg-pool.js +16 -7
- package/dist/plugins/remote-env-e2b.d.ts +7 -25
- package/dist/plugins/remote-env-e2b.js +34 -25
- package/dist/plugins/remote-env-host.d.ts +2 -9
- package/dist/plugins/remote-env-host.js +34 -22
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +107 -58
- package/dist/plugins/remote-env-local-docker.d.ts +148 -14
- package/dist/plugins/remote-env-local-docker.js +367 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +42 -9
- package/dist/plugins/schema-consistency.js +212 -11
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +84 -15
- package/dist/plugins/store-backend.js +186 -55
- package/dist/plugins/store-contracts.d.ts +90 -30
- package/dist/plugins/store-contracts.js +22 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.js +23 -8
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +92 -80
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +26 -15
- package/dist/runs.js +39 -27
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +21 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +136 -20
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
- package/dist/stores-sql/checkpoint-store-sql.js +75 -44
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +1 -1
- package/dist/task-a2a.js +3 -3
- package/dist/task-cwd.d.ts +20 -0
- package/dist/task-cwd.js +8 -0
- package/dist/task-mcp.d.ts +1 -1
- package/dist/task-mcp.js +3 -3
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +18 -7
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +131 -129
- package/dist/tool-approval.js +189 -193
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +1 -30
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +55 -42
- package/dist/trace/project.js +52 -19
- package/dist/trace/redact.d.ts +123 -27
- package/dist/trace/redact.js +880 -260
- package/dist/trace/self-minted-wire.d.ts +487 -19
- package/dist/trace/self-minted-wire.js +172 -23
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +13 -16
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +6 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/wire-changes/server@7.148.0.json +1517 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
|
@@ -1,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` 才放行);
|
|
@@ -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";
|
|
@@ -27,7 +27,7 @@ export async function handlePrincipalInbox(req, res, match, ctx) {
|
|
|
27
27
|
const { readJson } = ctx.helpers;
|
|
28
28
|
switch (match.decl.id) {
|
|
29
29
|
case "principal-inbox-messages": {
|
|
30
|
-
const principal =
|
|
30
|
+
const principal = gatedSubject(req, deps.config);
|
|
31
31
|
if (principal === undefined) {
|
|
32
32
|
sendUnauthorized(res, "identity");
|
|
33
33
|
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");
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendUnauthorized } from "../principal-gate.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
|
+
import { principalShapeProblem } from "../../principal-shape.js";
|
|
5
6
|
import * as facts from "../../capability-facts.js";
|
|
6
7
|
import { createLogger } from "../../observability/logger.js";
|
|
7
8
|
import { RULE_IMPORT_RETRY_AFTER_SEC, RULE_SCOPE_REFUSAL_SENTENCE, MAX_RULE_SCOPE_CHARS, buildCcImportLayerRootRefusal, parseRuleScope, serializeRuleScope } from "../../rules-consent.js";
|
|
@@ -75,7 +76,7 @@ const RuleIdentityBodySchema = z
|
|
|
75
76
|
behavior: z.enum(RULE_BEHAVIORS),
|
|
76
77
|
rule: z.string().min(1).max(1024),
|
|
77
78
|
scope: z.string().min(1).max(MAX_RULE_SCOPE_CHARS),
|
|
78
|
-
principal: z.string().
|
|
79
|
+
principal: z.string().optional(),
|
|
79
80
|
})
|
|
80
81
|
.strict();
|
|
81
82
|
const RULES_CURSOR_FORMAT = 2;
|
|
@@ -100,7 +101,7 @@ export async function handleRules(req, res, match, ctx) {
|
|
|
100
101
|
const { readJson, rateLimited } = ctx.helpers;
|
|
101
102
|
if (rateLimited(req, res))
|
|
102
103
|
return;
|
|
103
|
-
const principal =
|
|
104
|
+
const principal = gatedPerson(req, deps.config);
|
|
104
105
|
if (principal === undefined) {
|
|
105
106
|
sendUnauthorized(res, "identity");
|
|
106
107
|
return;
|
|
@@ -245,8 +246,13 @@ function resolveTargetPrincipal(requested, caller, config) {
|
|
|
245
246
|
return { ok: false, why: "operator_principals_empty" };
|
|
246
247
|
if (!explicitOperatorOk(caller, config))
|
|
247
248
|
return { ok: false, why: "not_operator" };
|
|
249
|
+
if (principalShapeProblem(requested) !== undefined)
|
|
250
|
+
return { ok: false, why: "not_a_principal" };
|
|
248
251
|
return { ok: true, principal: requested };
|
|
249
252
|
}
|
|
253
|
+
function sendTargetNotAPrincipal(res) {
|
|
254
|
+
sendError(res, 400, "request.field_invalid", "principal must name a principal a caller can authenticate as (a visible-character, well-formed name, not a reserved identifier, at most the principal byte length)", { field: "principal" });
|
|
255
|
+
}
|
|
250
256
|
async function handleRuleList(res, search, caller, lane, config) {
|
|
251
257
|
const q = new URLSearchParams(search);
|
|
252
258
|
const target = resolveTargetPrincipal(q.get("principal") ?? undefined, caller, config);
|
|
@@ -258,6 +264,9 @@ async function handleRuleList(res, search, caller, lane, config) {
|
|
|
258
264
|
case "not_operator":
|
|
259
265
|
sendError(res, 403, "auth.operator_only", "reading another principal's rules is an operator-only action");
|
|
260
266
|
return;
|
|
267
|
+
case "not_a_principal":
|
|
268
|
+
sendTargetNotAPrincipal(res);
|
|
269
|
+
return;
|
|
261
270
|
default:
|
|
262
271
|
return assertNever(target.why);
|
|
263
272
|
}
|
|
@@ -378,6 +387,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
|
|
|
378
387
|
case "not_operator":
|
|
379
388
|
sendError(res, 403, "auth.operator_only", "writing another principal's rules is an operator-only action");
|
|
380
389
|
return;
|
|
390
|
+
case "not_a_principal":
|
|
391
|
+
sendTargetNotAPrincipal(res);
|
|
392
|
+
return;
|
|
381
393
|
default:
|
|
382
394
|
return assertNever(target.why);
|
|
383
395
|
}
|
|
@@ -392,9 +404,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
|
|
|
392
404
|
return;
|
|
393
405
|
case "rejected":
|
|
394
406
|
logger.info("rule write refused", { reason: written.reason, detail: written.detail });
|
|
395
|
-
sendError(res, 400, "request.field_invalid",
|
|
407
|
+
sendError(res, 400, "request.field_invalid", `this rule was not written — \`reason\` names which check refused it: ${written.detail}`, {
|
|
396
408
|
reason: written.reason,
|
|
397
|
-
|
|
409
|
+
...(written.canonical !== undefined ? { canonical: written.canonical } : {}),
|
|
398
410
|
});
|
|
399
411
|
return;
|
|
400
412
|
case "failed":
|
|
@@ -427,6 +439,9 @@ async function handleRuleRevoke(res, rawBody, caller, lane, config) {
|
|
|
427
439
|
case "not_operator":
|
|
428
440
|
sendError(res, 403, "auth.operator_only", "revoking another principal's rules is an operator-only action");
|
|
429
441
|
return;
|
|
442
|
+
case "not_a_principal":
|
|
443
|
+
sendTargetNotAPrincipal(res);
|
|
444
|
+
return;
|
|
430
445
|
default:
|
|
431
446
|
return assertNever(target.why);
|
|
432
447
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* ── 权限法条(steer 车道逐字)────────────────────────────────────────────────────────────────────
|
|
12
12
|
* core 不认证:持有活流句柄即能力。**本面拥有 verified-principal / 会话所有权判定**:裸 sessionId 中继会让任何人
|
|
13
|
-
* 关掉任何人的记忆(可用性攻击)。所以:身份来自 `
|
|
13
|
+
* 关掉任何人的记忆(可用性攻击)。所以:身份来自 `gatedSubject`(验证过的身份,不是可自造的头),run 属主不符
|
|
14
14
|
* ⇒ 404 `not_found.run` **同串反枚举**(与 steer/interrupt 同判)。core 在翻转时刻**重新裁决** per-principal
|
|
15
15
|
* entitlement(`RuntimeCaps.allowMemoryOptOut` under `memoryCapturePolicy`,fresh resolve)—— 被拒 ⇒ typed
|
|
16
16
|
* `memory.capture_optout_denied` + 零记录残留;server 不复刻那条裁决。
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* `sessionBackgroundable` 同谓词):老 worker 键缺席 ⇒ 壳不渲入口(假 affordance 纪律)。
|
|
29
29
|
*/
|
|
30
30
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
31
|
-
import {
|
|
31
|
+
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
32
32
|
export declare function handleRunMemoryCapture(req: IncomingMessage, res: ServerResponse, match: RouteMatch<RunMemoryCaptureRouteId>, ctx: RouteCtx): Promise<void>;
|
|
33
33
|
export declare const RUN_MEMORY_CAPTURE_ROUTES: readonly [{
|
|
34
34
|
readonly id: "run-memory-capture-optout";
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { isParkedRunStatus, isTerminalRunStatus, runProvenElsewhere } from "../../plugins/store-contracts.js";
|
|
3
3
|
import { sendJson, sendError } from "../send.js";
|
|
4
|
-
import {
|
|
5
|
-
import { RUN_NOT_FOUND_MESSAGE, runNotFoundMessage } from "../route-ctx.js";
|
|
4
|
+
import { admitRunById, enter } from "../owner-access.js";
|
|
6
5
|
import { assertNever } from "../route-ctx.js";
|
|
7
6
|
import * as facts from "../../capability-facts.js";
|
|
8
7
|
const BodySchema = z.object({ reason: z.string().min(1).max(500).optional() }).strict();
|
|
@@ -18,24 +17,19 @@ export async function handleRunMemoryCapture(req, res, match, ctx) {
|
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
19
|
const runStore = runs.runStore;
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
sendPrincipalRefusal(res, req, deps.config);
|
|
20
|
+
const entry = enter(req, res, deps, match.decl.id);
|
|
21
|
+
if (entry === undefined)
|
|
24
22
|
return;
|
|
25
|
-
}
|
|
26
23
|
const taskId = match.params.taskId;
|
|
27
24
|
const parsed = BodySchema.safeParse((await ctx.helpers.readJson(req)) ?? {});
|
|
28
25
|
if (!parsed.success) {
|
|
29
26
|
sendError(res, 400, "request.body_shape", "body must be {} or { reason: string (non-empty, at most 500 chars) } — the session memory-capture opt-out verb takes no other keys");
|
|
30
27
|
return;
|
|
31
28
|
}
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
sendError(res, 404, "not_found.run", runNotFoundMessage(taskId));
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (!ctx.helpers.runOwnerOk(req, res, run.owner))
|
|
29
|
+
const admitted = (await admitRunById(entry, res, runStore, taskId));
|
|
30
|
+
if (admitted === undefined)
|
|
38
31
|
return;
|
|
32
|
+
const run = admitted.row;
|
|
39
33
|
const live = ctx.registry.steerableRuns.get(taskId);
|
|
40
34
|
if (live) {
|
|
41
35
|
try {
|