@sema-agent/server 7.146.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 +1423 -24
- package/README.md +21 -8
- package/README.zh-CN.md +15 -9
- package/USAGE.md +537 -216
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +18 -7
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +4 -3
- package/deploy/sema-up/cluster-up.sh +75 -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/flagshape.sh +4 -0
- 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/lanes.json +2 -5
- 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 +26 -48
- 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 +18 -5
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
- 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 +32 -34
- 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 +16 -14
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +17 -9
- 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 +8 -3
- 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/crash-last.js +2 -1
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +19 -8
- package/dist/boot/execution-env.js +80 -62
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +3 -3
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +18 -16
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +50 -53
- package/dist/boot/memory-consolidation.js +11 -18
- package/dist/boot/org-memory.js +4 -3
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +3 -3
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +20 -17
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +133 -165
- package/dist/boot/retention-lane.d.ts +7 -45
- 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 +17 -7
- package/dist/boot/session-faces.js +122 -96
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +14 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
- package/dist/boot/stage-02-web-admin-pull.js +15 -8
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -1
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +9 -5
- package/dist/boot/stage-05-execution-env.js +5 -5
- package/dist/boot/stage-06-runners.d.ts +13 -15
- package/dist/boot/stage-06-runners.js +24 -18
- package/dist/boot/stage-07-capability-layer.d.ts +14 -11
- package/dist/boot/stage-07-capability-layer.js +9 -12
- package/dist/boot/stage-08-reapers.d.ts +14 -11
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +16 -18
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +16 -18
- package/dist/boot/stage-10-http-server.js +9 -5
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +12 -0
- package/dist/boot/stores.js +39 -17
- 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 +58 -38
- 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 +9 -1
- package/dist/capabilities/center-plugins.js +37 -11
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +3 -2
- package/dist/capabilities/composite-members.js +3 -2
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +38 -33
- package/dist/capabilities/scenarios.js +24 -25
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +6 -6
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +69 -4
- package/dist/capability-facts.js +77 -5
- 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 +10 -5
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +68 -61
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +58 -4
- package/dist/config-invariants.js +104 -23
- package/dist/config-lkg.d.ts +24 -2
- package/dist/config-lkg.js +22 -9
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -108
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +215 -202
- package/dist/config.d.ts +69 -14
- package/dist/config.js +188 -96
- package/dist/degenerate-instrument.js +1 -1
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +51 -16
- package/dist/deployment-shape.js +31 -6
- 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.d.ts +7 -5
- package/dist/env-facts.js +12 -7
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +53 -103
- package/dist/execution-lane-caps.js +51 -83
- package/dist/execution-placement.d.ts +65 -9
- package/dist/execution-placement.js +58 -0
- 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.d.ts +2 -2
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- 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 +6 -7
- 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 +42 -0
- package/dist/history-anchor.js +34 -0
- 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 +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +119 -65
- package/dist/hooks/hook-runner.js +415 -217
- 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 +5 -8
- package/dist/http/approval-sweeps.js +55 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +77 -31
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +18 -12
- package/dist/http/execution-context.d.ts +18 -42
- package/dist/http/execution-context.js +11 -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 +7 -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 +3 -3
- package/dist/http/memory-store-refusal-reply.js +6 -0
- package/dist/http/owner-access.d.ts +391 -56
- package/dist/http/owner-access.js +372 -33
- package/dist/http/principal-gate.d.ts +26 -94
- package/dist/http/principal-gate.js +24 -81
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +10 -14
- 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 +24 -24
- package/dist/http/resume-legs.js +260 -171
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +56 -47
- package/dist/http/route-table.js +2 -0
- 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 +73 -88
- 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 +23 -20
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +5 -5
- 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 +3 -1
- 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 +12 -20
- 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 +70 -0
- package/dist/http/routes/projects.js +87 -0
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +50 -7
- 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 +148 -233
- 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 +48 -30
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +177 -112
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +144 -122
- 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 +63 -50
- package/dist/http/server.js +52 -16
- 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 +17 -3
- package/dist/http/stored-body-replay.js +11 -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 +23 -13
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- 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-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +31 -4
- package/dist/memory-scope.js +65 -16
- package/dist/memory-store-refusal.d.ts +20 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +5 -2
- package/dist/memory-sync-client.js +19 -14
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +51 -28
- package/dist/model-compat.js +55 -23
- 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 +46 -17
- package/dist/model-entry-refusal.js +47 -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 +28 -2
- package/dist/namespaced-rule-name.js +10 -1
- 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 +75 -47
- package/dist/observability/fail-open.js +77 -47
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +5 -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/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- 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-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
- package/dist/orchestration/workflow-completion-inbox.js +65 -46
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- 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 +100 -31
- package/dist/parked-decide.js +162 -48
- 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 +28 -9
- package/dist/plugins/approval-ask-store-file.js +74 -18
- package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
- package/dist/plugins/approval-ask-store-memory.js +35 -12
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
- package/dist/plugins/approval-ask-store-sql.js +44 -11
- 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 +40 -195
- package/dist/plugins/blob-backend.js +41 -234
- package/dist/plugins/caching-session-store.d.ts +22 -5
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
- package/dist/plugins/checkpoint-index-columns.js +39 -3
- package/dist/plugins/checkpoint-store-face.d.ts +84 -11
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +6 -10
- 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/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +89 -35
- package/dist/plugins/file-run-store.js +197 -142
- 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 +19 -10
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- 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 +63 -23
- package/dist/plugins/local-checkpoint-store.js +204 -81
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +183 -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 +13 -0
- package/dist/plugins/local-engine-high-water.js +62 -0
- package/dist/plugins/local-session-store.d.ts +442 -143
- package/dist/plugins/local-session-store.js +941 -289
- 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 +20 -1
- package/dist/plugins/local-task-attachment-store.js +32 -12
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +11 -9
- package/dist/plugins/memory-engine-pg.d.ts +7 -5
- package/dist/plugins/memory-engine-pg.js +18 -9
- package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
- package/dist/plugins/memory-engine-sql-apply.js +7 -9
- package/dist/plugins/memory-engine-tidb.d.ts +12 -7
- package/dist/plugins/memory-engine-tidb.js +18 -10
- 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 +325 -74
- package/dist/plugins/one-time-migrations.js +705 -230
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +11 -11
- package/dist/plugins/permission-rule-store-file.js +14 -2
- 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 +3 -32
- package/dist/plugins/pg-pool.js +27 -11
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +19 -28
- package/dist/plugins/remote-env-e2b.js +40 -29
- package/dist/plugins/remote-env-host.d.ts +11 -10
- package/dist/plugins/remote-env-host.js +40 -27
- package/dist/plugins/remote-env-k8s.d.ts +45 -47
- package/dist/plugins/remote-env-k8s.js +122 -62
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +370 -75
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +158 -0
- package/dist/plugins/retention-deployment.js +119 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- 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 -15
- package/dist/plugins/schema-consistency.js +213 -13
- 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 +10 -1
- package/dist/plugins/schema-ensure-legs.js +12 -2
- 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 +98 -0
- package/dist/plugins/session-ext-table.js +134 -0
- package/dist/plugins/session-fork.d.ts +16 -2
- 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 +20 -7
- package/dist/plugins/session-row-sql.js +16 -8
- 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 +157 -0
- package/dist/plugins/session-store-sql.js +398 -0
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
- package/dist/plugins/shared-memory-store-sql.js +15 -14
- 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/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +24 -8
- package/dist/plugins/sql-driver.js +43 -9
- package/dist/plugins/sql-errors.d.ts +35 -5
- package/dist/plugins/sql-errors.js +55 -3
- 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 +114 -18
- package/dist/plugins/store-backend.js +340 -87
- package/dist/plugins/store-contracts.d.ts +97 -30
- package/dist/plugins/store-contracts.js +23 -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 +21 -11
- package/dist/plugins/task-attachment-store.js +37 -19
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +42 -39
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- 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/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- 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/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- 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 +46 -16
- package/dist/rules-consent.js +102 -53
- 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 +109 -93
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +73 -44
- package/dist/runs.js +65 -43
- package/dist/runtime-caps-resolver.d.ts +36 -14
- package/dist/runtime-caps-resolver.js +31 -14
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -6
- package/dist/sealed-key-layout.js +5 -1
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +116 -26
- package/dist/security.d.ts +133 -161
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +27 -2
- package/dist/server-secret-env.d.ts +23 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- 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 +6 -6
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +60 -10
- 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 +29 -47
- package/dist/session-resident-background.js +77 -8
- package/dist/session-row.d.ts +3 -2
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +138 -21
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +21 -16
- 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/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +86 -71
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
- package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
- package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +65 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
- package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
- package/dist/stores-sql/windowed-session-storage.js +70 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +18 -17
- package/dist/task-cwd.d.ts +31 -3
- package/dist/task-cwd.js +25 -1
- package/dist/task-mcp.d.ts +11 -3
- package/dist/task-mcp.js +16 -19
- package/dist/task-settings.d.ts +23 -14
- package/dist/task-settings.js +35 -13
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +152 -137
- package/dist/tool-approval.js +199 -199
- package/dist/trace/core-keyset-guard.d.ts +22 -9
- 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 +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +52 -4
- package/dist/trace/exit-seat.js +43 -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 +88 -58
- package/dist/trace/project.js +64 -28
- package/dist/trace/redact.d.ts +124 -28
- package/dist/trace/redact.js +936 -328
- package/dist/trace/self-minted-wire.d.ts +750 -29
- package/dist/trace/self-minted-wire.js +262 -25
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +43 -8
- package/dist/trace/wire-projection-faces.js +28 -3
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- 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 -40
- 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/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +6 -3
- package/dist/web-admin-client/center-request.js +17 -16
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -2
- 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/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +2 -1
- package/dist/web-admin-client/http-client.js +40 -13
- 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 +13 -6
- package/dist/web-admin-client/skills-mcp.d.ts +22 -8
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +35 -51
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +16 -12
- package/scripts/drain-check-local.mjs +118 -173
- package/scripts/drain-check.mysql.sql +20 -16
- package/scripts/drain-check.pg.sql +20 -16
- package/wire-changes/server@7.147.0.json +813 -0
- 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,3 +1,4 @@
|
|
|
1
|
+
import { createLogger } from "../observability/logger.js";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
4
|
import { atomicWriteFile, ensureDir } from "@sema-agent/core";
|
|
@@ -97,7 +98,7 @@ export class FileOrgDeliveryQuotaStore extends MemoryOrgDeliveryQuotaStore {
|
|
|
97
98
|
}
|
|
98
99
|
if (!parsed.ok) {
|
|
99
100
|
this.unusable = `the cross-principal delivery quota file ${this.path} cannot be read (${parsed.problem}) — every delivery is refused until an operator moves it away (moving it resets the current window's counts)`;
|
|
100
|
-
(opts?.warn ?? (
|
|
101
|
+
(opts?.warn ?? createLogger().warn)("org_delivery_quota_corrupt_read", { path: this.path, problem: parsed.problem });
|
|
101
102
|
return;
|
|
102
103
|
}
|
|
103
104
|
this.state = parsed.state;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const OWNER_ONLY_FILE_MODE = 384;
|
|
2
|
+
/**
|
|
3
|
+
* 调用方声明的持久化要求(闭集;两个出口同一参数、必填 —— 没有缺省,每只调用点自己说):
|
|
4
|
+
* · `required` —— 这次写是一道围栏的持久化事实(例:local 数据根的引擎版本高水位):目录项没证落盘就不算写成,目录 fsync 失败 ⇒ 抛;
|
|
5
|
+
* · `best-effort` —— 一般留痕 / 缓存 / 账本:目录 fsync 失败 ⇒ 写算成功(新内容已可见),F 类留痕 `server.atomic-write.dir-fsync-failed`。
|
|
6
|
+
*/
|
|
7
|
+
export type AtomicWriteDurability = "required" | "best-effort";
|
|
8
|
+
/** 原子写的选项(两个出口同形)。 */
|
|
9
|
+
export interface AtomicWriteOptions {
|
|
10
|
+
readonly durability: AtomicWriteDurability;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 异步原子写:同目录 tmp 以 `open(tmp, "wx", {@link OWNER_ONLY_FILE_MODE})` 显式独占新建 —— **拿到句柄那一刻起 tmp 归我**(不从错误形推断);
|
|
14
|
+
* 写好、fsync、关句柄、`rename` 到 `target`,再 fsync 目录(失败的去向按 `opts.durability`)—— 读者只见整份旧文件或整份新文件(撞名与清理律见头注)。
|
|
15
|
+
* I/O 经 `node:fs/promises`(与会话店的读口同一只模块):测试对那只模块装的拦点(打开 / 改名)看得见每一次写。
|
|
16
|
+
*/
|
|
17
|
+
export declare function atomicWriteFileAsync(target: string, data: string | Uint8Array, opts: AtomicWriteOptions): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* 一只**已在位**的文件的持久化屏障(原子写以它收尾的那两步:fsync 文件、fsync 它的目录;win32 不 fsync 目录)—— 给「相等不写」的调用方:
|
|
20
|
+
* 读到的那一份可能是上一次写落了 `rename` 而目录项没证到的,不重写也要证它在盘上。失败即抛(它只服务 `required` 的事实;不是写口,不改字节、inode、mtime)。
|
|
21
|
+
*/
|
|
22
|
+
export declare function proveDurableSync(target: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* 同步原子写:与异步形同一只命名与清理律,外加 core `atomicWriteFile` 的其余语义(先 `ensureDir` 父目录;tmp 写好 `fsync`,`rename` 之后 fsync 目录)。
|
|
25
|
+
* 目录 fsync 失败不回滚(新内容已经可见,也回滚不了);抛不抛按 `opts.durability`(`best-effort` 不抛、留痕;`required` 抛 —— 头注那一座)。
|
|
26
|
+
* win32 不 fsync 目录(打不开目录 fd;NTFS 的目录项由文件系统日志落盘)。
|
|
27
|
+
*/
|
|
28
|
+
export declare function atomicWriteFileSync(target: string, data: string | Uint8Array, opts: AtomicWriteOptions): void;
|
|
29
|
+
//# sourceMappingURL=owner-only-file-mode.d.ts.map
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { closeSync, fsyncSync, openSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { open, rename, rm } from "node:fs/promises";
|
|
3
|
+
import { randomBytes } from "node:crypto";
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
import { ensureDir } from "@sema-agent/core";
|
|
6
|
+
import { IS_WIN32 } from "./host-platform.js";
|
|
7
|
+
import { recordFailOpen } from "../observability/fail-open.js";
|
|
8
|
+
export const OWNER_ONLY_FILE_MODE = 0o600;
|
|
9
|
+
const TMP_RANDOM_BYTES = 6;
|
|
10
|
+
const TMP_ATTEMPTS = 8;
|
|
11
|
+
const tmpPathFor = (target) => `${target}.${process.pid}.${randomBytes(TMP_RANDOM_BYTES).toString("hex")}.tmp`;
|
|
12
|
+
const collided = (err) => typeof err === "object" && err !== null && "code" in err && err.code === "EEXIST";
|
|
13
|
+
const messageOf = (e) => (e instanceof Error ? e.message : String(e));
|
|
14
|
+
const cleanupFailed = (target, tmp, err, cleanup) => new Error(`atomic write of ${target} failed (${messageOf(err)}) and its temporary file ${tmp} could not be removed (${messageOf(cleanup)})`, { cause: err });
|
|
15
|
+
const useAndCloseFailed = (use, close) => Object.assign(new AggregateError([use, close], messageOf(use)), { code: typeof use === "object" && use !== null && "code" in use ? use.code : undefined });
|
|
16
|
+
async function usingHandle(handle, use) {
|
|
17
|
+
try {
|
|
18
|
+
await use(handle);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
await handle.close().catch((close) => {
|
|
22
|
+
throw useAndCloseFailed(err, close);
|
|
23
|
+
});
|
|
24
|
+
throw err;
|
|
25
|
+
}
|
|
26
|
+
await handle.close();
|
|
27
|
+
}
|
|
28
|
+
function usingFd(fd, use) {
|
|
29
|
+
try {
|
|
30
|
+
use(fd);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
try {
|
|
34
|
+
closeSync(fd);
|
|
35
|
+
}
|
|
36
|
+
catch (close) {
|
|
37
|
+
throw useAndCloseFailed(err, close);
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
closeSync(fd);
|
|
42
|
+
}
|
|
43
|
+
function dirFsyncFailed(target, err, durability) {
|
|
44
|
+
switch (durability) {
|
|
45
|
+
case "required":
|
|
46
|
+
throw new Error(`atomic write of ${target} landed but its directory entry could not be made durable (${messageOf(err)}) — the write is visible but not proven on disk`, { cause: err });
|
|
47
|
+
case "best-effort":
|
|
48
|
+
recordFailOpen("server.atomic-write.dir-fsync-failed", `path=${target} err=${messageOf(err)}`);
|
|
49
|
+
return;
|
|
50
|
+
default: {
|
|
51
|
+
const unhandled = durability;
|
|
52
|
+
throw new Error(`atomic write of ${target}: unknown durability ${String(unhandled)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export async function atomicWriteFileAsync(target, data, opts) {
|
|
57
|
+
const { tmp, handle } = await openOwnTmpAsync(target);
|
|
58
|
+
try {
|
|
59
|
+
await usingHandle(handle, async (h) => {
|
|
60
|
+
await h.writeFile(data);
|
|
61
|
+
await h.sync();
|
|
62
|
+
});
|
|
63
|
+
await rename(tmp, target);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
try {
|
|
67
|
+
await rm(tmp, { force: true });
|
|
68
|
+
}
|
|
69
|
+
catch (cleanup) {
|
|
70
|
+
throw cleanupFailed(target, tmp, err, cleanup);
|
|
71
|
+
}
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
if (IS_WIN32)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
await usingHandle(await open(dirname(target), "r"), (dir) => dir.sync());
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
dirFsyncFailed(target, err, opts.durability);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function openOwnTmpAsync(target) {
|
|
84
|
+
for (let attempt = 1;; attempt += 1) {
|
|
85
|
+
const tmp = tmpPathFor(target);
|
|
86
|
+
try {
|
|
87
|
+
return { tmp, handle: await open(tmp, "wx", OWNER_ONLY_FILE_MODE) };
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
if (!collided(err) || attempt >= TMP_ATTEMPTS)
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function openOwnTmpSync(target) {
|
|
96
|
+
for (let attempt = 1;; attempt += 1) {
|
|
97
|
+
const tmp = tmpPathFor(target);
|
|
98
|
+
try {
|
|
99
|
+
return { tmp, fd: openSync(tmp, "wx", OWNER_ONLY_FILE_MODE) };
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (!collided(err) || attempt >= TMP_ATTEMPTS)
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function proveDurableSync(target) {
|
|
108
|
+
usingFd(openSync(target, "r"), fsyncSync);
|
|
109
|
+
if (IS_WIN32)
|
|
110
|
+
return;
|
|
111
|
+
usingFd(openSync(dirname(target), "r"), fsyncSync);
|
|
112
|
+
}
|
|
113
|
+
export function atomicWriteFileSync(target, data, opts) {
|
|
114
|
+
ensureDir(dirname(target));
|
|
115
|
+
const { tmp, fd } = openOwnTmpSync(target);
|
|
116
|
+
try {
|
|
117
|
+
usingFd(fd, (f) => {
|
|
118
|
+
writeFileSync(f, data);
|
|
119
|
+
fsyncSync(f);
|
|
120
|
+
});
|
|
121
|
+
renameSync(tmp, target);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
try {
|
|
125
|
+
rmSync(tmp, { force: true });
|
|
126
|
+
}
|
|
127
|
+
catch (cleanup) {
|
|
128
|
+
throw cleanupFailed(target, tmp, err, cleanup);
|
|
129
|
+
}
|
|
130
|
+
throw err;
|
|
131
|
+
}
|
|
132
|
+
if (IS_WIN32)
|
|
133
|
+
return;
|
|
134
|
+
try {
|
|
135
|
+
usingFd(openSync(dirname(target), "r"), fsyncSync);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
dirFsyncFailed(target, err, opts.durability);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=owner-only-file-mode.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FileDurableRulePartitionProvider, type RuleApprovalRecord, type RuleApprovalRecordStore, type StaleRuleApprovalRecord } from "@sema-agent/core";
|
|
2
|
+
import type { RuleBucketCensus } from "./imported-layer-root-retirement.js";
|
|
2
3
|
import { type RuleImportTicket, type RuleTicketPurpose, type RuleTicketReclaimResult, type RuleTicketRedeemResult, type RuleTicketSnapshot } from "./permission-rule-store-sql.js";
|
|
3
4
|
import type { PermissionRuleStoreBundle } from "../rules-consent.js";
|
|
4
5
|
import type { Logger } from "../observability/logger.js";
|
|
@@ -14,7 +15,7 @@ export declare class FileRuleApprovalRecordStore implements RuleApprovalRecordSt
|
|
|
14
15
|
private readonly log;
|
|
15
16
|
/** 本面的损坏闸([ref] 起由重放属主交回;置位后每个方法第一行响亮拒)。 */
|
|
16
17
|
private readonly gate;
|
|
17
|
-
/** @param warn 腐读披露座([ref];缺席 ⇒
|
|
18
|
+
/** @param warn 腐读披露座([ref];缺席 ⇒ 属主退回日志出口接缝的文本出口 `writeLogText`)。 */
|
|
18
19
|
constructor(dir: string, warn?: Logger["warn"]);
|
|
19
20
|
/** 取证/自证用:本面是否因内部损坏而 fail-closed。 */
|
|
20
21
|
get corrupt(): boolean;
|
|
@@ -27,10 +28,9 @@ export declare class FileRuleApprovalRecordStore implements RuleApprovalRecordSt
|
|
|
27
28
|
create(record: RuleApprovalRecord): Promise<void>;
|
|
28
29
|
cas(id: string, expectRev: number, next: RuleApprovalRecord): Promise<boolean>;
|
|
29
30
|
/**
|
|
30
|
-
* 一次性迁移 M36(窗口见 `plugins/one-time-migrations.ts` 登记表)在 File
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* 所以记录不是 File 腿叫得出桶属主的唯一来源(SQL 店不经记录,直接列规则表)。引擎 `unnamedBuckets` 为什么本步不报、File 侧还剩的缺口,见 `imported-layer-root-retirement.ts` 头注「读哪些桶」。
|
|
31
|
+
* 一次性迁移 M36(窗口见 `plugins/one-time-migrations.ts` 登记表)在 File 店交给引擎列桶口的那一半:本店**导入记录**点名过的每一个属主(逐条记录取、**这里不去重**:
|
|
32
|
+
* 多条记录点名同一属主就重复出现,引擎按名去重)。引擎 File 分区的桶文件按属主名的单向摘要命名,桶的属主不写在文件里;{@link fileRuleBucketOwners} 把这里的身份名
|
|
33
|
+
* 作 `knownOwners` 交给引擎 `listBucketOwners`,由引擎一次答出桶在场的属主与叫不出名字的桶数(SQL 店不经记录,直接列规则表),见 `imported-layer-root-retirement.ts` 头注「读哪些桶」。
|
|
34
34
|
* 上一形的记录(Stale 信封)读不出种类 ⇒ 属主读得出就算上(多读一只桶零写,少读一只会漏)。
|
|
35
35
|
* 损坏闸合着 ⇒ 抛(读不全记录就叫不全桶;与本面其余口同一条 fail-closed)。
|
|
36
36
|
*/
|
|
@@ -55,7 +55,7 @@ export declare class FileRuleImportTicketStore {
|
|
|
55
55
|
private readonly gate;
|
|
56
56
|
/** 单调钟(判定用)。与 {@link now}(墙钟,记账用)是两只不同的钟,别混。 */
|
|
57
57
|
private readonly monotonic;
|
|
58
|
-
/** @param warn 腐读披露座([ref];缺席 ⇒
|
|
58
|
+
/** @param warn 腐读披露座([ref];缺席 ⇒ 属主退回日志出口接缝的文本出口 `writeLogText`)。 */
|
|
59
59
|
constructor(dir: string, now?: () => number, warn?: Logger["warn"], monotonic?: () => number);
|
|
60
60
|
private readonly now;
|
|
61
61
|
/** 取证/自证用:本面是否因内部损坏而 fail-closed。 */
|
|
@@ -99,11 +99,11 @@ export declare class FileRuleImportTicketStore {
|
|
|
99
99
|
/** 三面束在数据根下的目录名(唯一一处;束在第一次装配时建它 —— 没开过规则店的数据根下没有它)。 */
|
|
100
100
|
export declare const FILE_PERMISSION_RULE_DIR = "permission-rules";
|
|
101
101
|
/**
|
|
102
|
-
* M36 File
|
|
103
|
-
*
|
|
104
|
-
* 引擎列桶口的拒(目录用不了 `bucket_damaged`、列不出 `bucket_unreadable
|
|
102
|
+
* M36 File 腿的桶普查(窗口见 `plugins/one-time-migrations.ts` 登记表;读法见 `imported-layer-root-retirement.ts` 头注「读哪些桶」):引擎 File 分区后端的列桶口一次答 ——
|
|
103
|
+
* 目录自己叫得出名字的属主(本机属主那只桶、收编标记点名的身份)+ 导入记录点名过的身份里桶文件在场的那些(`knownOwners`),与两者都叫不出属主的桶数。
|
|
104
|
+
* 引擎列桶口的拒(目录用不了 `bucket_damaged`、列不出 `bucket_unreadable`、坏收编标记、`knownOwners` 里有不是身份名的串 `config.invalid_argument`)原样抛 ⇒ 起服拒(叫不全桶就不判)。
|
|
105
105
|
*/
|
|
106
|
-
export declare function fileRuleBucketOwners(stores: Pick<FilePermissionRuleStores, "approvals" | "durable">): Promise<
|
|
106
|
+
export declare function fileRuleBucketOwners(stores: Pick<FilePermissionRuleStores, "approvals" | "durable">): Promise<RuleBucketCensus>;
|
|
107
107
|
/**
|
|
108
108
|
* 这只读桶抛出物是不是引擎 File 分区的**确定性整桶拒**(拒码 `permission_rules.bucket_damaged`:同一份字节每次读都同样拒,读侧零规则、什么都不放行)。
|
|
109
109
|
* 别的都不是:`permission_rules.bucket_unreadable`(一次读失败,带 `errno`;证明不了以后也读不出)、`permission_rules.later_grammar`(更新的引擎写的桶)、
|
|
@@ -128,7 +128,7 @@ export interface FilePermissionRuleStores extends PermissionRuleStoreBundle {
|
|
|
128
128
|
* `onError` 接的是 core 规则文件的**披露面**(读不出来 / 校验和不符 / 撞上符号链接时它答零规则并
|
|
129
129
|
* 说出来)。接住它打一条 warn 是**必须**的:那条路径上「零规则」与「真的没有规则」在读面上同形,
|
|
130
130
|
* 不留痕就变成一次静默的 fail-closed(用户会突然被反复询问,却没有任何线索)。
|
|
131
|
-
* `warn`([ref])接的是本仓审批记录 / 导入票两份日志的**腐读座**(逐行披露 + 计数;缺席 ⇒ `
|
|
131
|
+
* `warn`([ref])接的是本仓审批记录 / 导入票两份日志的**腐读座**(逐行披露 + 计数;缺席 ⇒ 接缝的文本出口 `writeLogText`)。
|
|
132
132
|
*/
|
|
133
133
|
export declare function createFilePermissionRuleStores(root: string, opts?: {
|
|
134
134
|
onError?: (message: string) => void;
|
|
@@ -333,8 +333,20 @@ export class FileRuleImportTicketStore {
|
|
|
333
333
|
}
|
|
334
334
|
export const FILE_PERMISSION_RULE_DIR = "permission-rules";
|
|
335
335
|
export async function fileRuleBucketOwners(stores) {
|
|
336
|
-
const
|
|
337
|
-
return
|
|
336
|
+
const knownOwners = (await stores.approvals.importRecordOwners()).flatMap(principalNameOfOwner);
|
|
337
|
+
return stores.durable.listBucketOwners({ knownOwners });
|
|
338
|
+
}
|
|
339
|
+
function principalNameOfOwner(owner) {
|
|
340
|
+
switch (owner.kind) {
|
|
341
|
+
case "principal":
|
|
342
|
+
return [owner.principal];
|
|
343
|
+
case "local-owner":
|
|
344
|
+
return [];
|
|
345
|
+
default: {
|
|
346
|
+
const unknown = owner;
|
|
347
|
+
throw new Error(`M36: an owner of a kind this pass does not know: ${JSON.stringify(unknown)}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
338
350
|
}
|
|
339
351
|
export function isFileBucketDamaged(e) {
|
|
340
352
|
return typeof e === "object" && e !== null && e.code === PERMISSION_RULES_DAMAGED_BUCKET_CODE;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { type PermissionRuleWriter, type DurableRulePartition, type DurableRulePartitionProvider, type RuleScope, type RuleSyncFrontier, type
|
|
2
|
+
import { type PermissionRuleWriter, type DurableRulePartition, type DurableRulePartitionProvider, type RuleScope, type RuleSyncFrontier, type RuleCandidate, type RuleApprovalRecord, type StaleRuleApprovalRecord, type RuleApprovalRecordStore, type RuleOwner } from "@sema-agent/core";
|
|
3
3
|
import type { Pool as MySqlPool } from "mysql2/promise";
|
|
4
4
|
import type { PgQueryFn } from "./pg-query.js";
|
|
5
5
|
import { type SqlDriver, type SqlDialect } from "./sql-driver.js";
|
|
@@ -59,7 +59,7 @@ export declare const PERMISSION_RULE_TICKET_TABLE = "permission_rule_ticket";
|
|
|
59
59
|
* 列宽依据([ref] A10 的「每列的值由谁铸、有没有入口上限」口径):
|
|
60
60
|
* · `owner_key` / `record_id` / `ticket_id` / `approval_id` / `payload_hash` / `checksum` → 190:
|
|
61
61
|
* 全是本仓自铸的键类值(sha256 hex 64 / uuid 36 / `sha256:` 前缀 71),190 是全仓键轴的统一宽度。
|
|
62
|
-
* · `principal` → 512:principal 入口上限是 `
|
|
62
|
+
* · `principal` → 512:principal 入口上限是 `PRINCIPAL_MAX_BYTES = 190` UTF-8 字节(`principal-shape.ts`),这里给
|
|
63
63
|
* 名类宽度 512 是**上界宽于入口**的方向(绝不制造静默截断面)。
|
|
64
64
|
* · `actor` → 190:本 backend 自铸的副本身份(`sql-<12 hex>`),按构造 ≤ 20 字符。
|
|
65
65
|
* · 内容列一律 LONGTEXT / TEXT:一只桶的规则集没有硬上限(导入一份大 settings 就能过 64K TEXT 墙)。
|
|
@@ -185,7 +185,7 @@ export declare function recordOwnerOf(record: {
|
|
|
185
185
|
readonly principal?: unknown;
|
|
186
186
|
}): RuleOwner | undefined;
|
|
187
187
|
/**
|
|
188
|
-
* 一次性迁移 M36(窗口见 `plugins/one-time-migrations.ts` 登记表)要读的桶:**规则表里的每一只桶**(按 `owner_key`
|
|
188
|
+
* 一次性迁移 M36(窗口见 `plugins/one-time-migrations.ts` 登记表)要读的桶:**规则表里的每一只桶**(按 `owner_key` 分页)。
|
|
189
189
|
* 不从审批记录推:收编腿把规则桶整桶改键到新身份、而审批史按 D2 留在旧身份名下(`src/adoption/plan.ts` 的 `permission_rule#owner_key` 腿与
|
|
190
190
|
* `permission-rule-approval-history` 一员)—— 从记录推出的属主集在收编之后漏掉新桶。属主读法只有引擎的 `readRuleOwner`(与本店读口同一只);
|
|
191
191
|
* 读不出属主的行不点名任何可解析的桶(读腿同样解析不到它),不返回。`db` 是池或迁移握锁的那一条连接。
|
|
@@ -205,7 +205,7 @@ export declare function isSqlBucketVanished(e: unknown): boolean;
|
|
|
205
205
|
* · {@link BucketRefusedError} —— 判官四道(文法戳 / 指纹 / 行的 behavior / 引擎校验器)的拒;
|
|
206
206
|
* · {@link StoreCorruptError} —— 某只 JSON 列的体读不出(`not-json` / `malformed`),读腿在 {@link refusingUnreadableColumns} 把判官抛的列错误折成的店拒绝契约。
|
|
207
207
|
* 两类都是这一行的确定性判决:原样再读也读不出,读腿对它同样整桶拒(零规则),所以它什么都不放行。
|
|
208
|
-
* 别的抛出物**不是**这一类:连接 / 超时 / 权限(一次读失败证明不了以后也读不出);以及仍以
|
|
208
|
+
* 别的抛出物**不是**这一类:连接 / 超时 / 权限(一次读失败证明不了以后也读不出);以及仍以 `SqlJsonColumnError` 穿出读腿的唯一一形 `not-text`
|
|
209
209
|
* (列没按文本投影:读腿与解码点漂了,是码缺陷不是坏数据 —— 按列错误类判它会把一次码漂读成「这只桶坏了」)。
|
|
210
210
|
*/
|
|
211
211
|
export declare function isSqlBucketRefusal(e: unknown): boolean;
|
|
@@ -473,65 +473,6 @@ export declare const RULE_PENDING_APPROVAL_RETENTION_MS: number;
|
|
|
473
473
|
* 补建完成之前(或某个副本还没起过新版),这条腿在存量库上仍是全表扫 —— 但每轮 500 行的上界让它的**单次**代价仍然有界。
|
|
474
474
|
*/
|
|
475
475
|
export declare const RULE_REAP_BATCH = 500;
|
|
476
|
-
/**
|
|
477
|
-
* M11 删掉的一行。只带桶键、态、工具名与 scope 的 root —— 规则正文不出本函数(命令行里可以有任何东西)。
|
|
478
|
-
*
|
|
479
|
-
* `kind` 是闭集(启动日志按它穷尽分句,`one-time-migrations.ts` `logOneTimeMigrations`):
|
|
480
|
-
* · `rule` —— 仍有活 add 的规则行(引擎读侧每跑一次丢它并告知;它从未生效,要的话按项目的完整路径重写);
|
|
481
|
-
* · `revoked-rule` —— 没有活 add 的规则行(判活用 core 的 `applyTombstones`:每个 add 都已被同桶墓碑撤掉,或这一行本来就没有 add):它在任何一侧都已不生效
|
|
482
|
-
* (allow / deny / ask 同判),无需处置;逐行 warn 的句子只说这个事实,不依赖桶里有没有墓碑、也不依赖态;
|
|
483
|
-
* · `tombstone` —— 一条撤销记录。它只盖得住同 (behavior, 文本, scope) 的规则 ⇒ 那些规则的 scope 与它同样不被收,随它一起删了或本来就不在,
|
|
484
|
-
* 删它不会让任何被撤销的东西回来。
|
|
485
|
-
*/
|
|
486
|
-
export interface UndurableScopeRuleRow {
|
|
487
|
-
/** 桶键(sha256,不是 principal 原文)。 */
|
|
488
|
-
readonly ownerKey: string;
|
|
489
|
-
readonly kind: "rule" | "revoked-rule" | "tombstone";
|
|
490
|
-
readonly behavior: RuleBehavior;
|
|
491
|
-
readonly tool: string;
|
|
492
|
-
/** scope 的 root,**过 `redactSecrets`**(本仓唯一脱敏器):坏 root 是最不可信的自由文本,可能夹着凭据形,而本读数进启动日志与拒因。 */
|
|
493
|
-
readonly scopeRoot: string;
|
|
494
|
-
}
|
|
495
|
-
/** M11 判成读不出、一个字节没动的桶。`why` = 唯一判官那次整桶拒**不带任何行内容**的拒因(读腿对这只桶照旧整桶拒,它仍是这只桶的属主)。 */
|
|
496
|
-
export interface UnreadableRuleBucket {
|
|
497
|
-
/** 桶键(sha256,不是 principal 原文)。 */
|
|
498
|
-
readonly ownerKey: string;
|
|
499
|
-
readonly why: string;
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* M11 写进的读数账 —— 三格与一次性迁移段那一只收据账(`one-time-migrations.ts` 的 `MigrationReceipts`)上的同名三格**同名同形**,迁移段把它的账直接递进来
|
|
503
|
-
* ([ref]:一次起服一只收据账,M11 不另起第二套):删掉的行在那只桶的回写**提交的那一刻**追加,之后任何一步失败,拒因随账带走它们。
|
|
504
|
-
*/
|
|
505
|
-
export interface UndurableScopePurgeReadings {
|
|
506
|
-
/** 删掉的行(一行一条读数;每只桶的回写提交之后才追加)。 */
|
|
507
|
-
readonly undurableScopeRuleRows: UndurableScopeRuleRow[];
|
|
508
|
-
/** 连续争不过在线写者(OCC 每次都输)而留到下一次起服的桶数。那些桶里的坏行这期间照旧由引擎读侧丢掉并告知。 */
|
|
509
|
-
undurableScopeRuleBucketsDeferred: number;
|
|
510
|
-
/** 读腿整桶拒的桶(形 / 指纹 / behavior 闭集 / 墓碑规范文本 / 单一验证器):一个字节不动,逐桶交出拒因,等人处置。 */
|
|
511
|
-
readonly undurableScopeRuleBucketsUnreadable: UnreadableRuleBucket[];
|
|
512
|
-
}
|
|
513
|
-
/** {@link purgeUndurableScopeRows} 要的最小查询口(一次性迁移段的 `MigrationDb` 同形;占位符按方言由本函数写)。 */
|
|
514
|
-
export interface UndurableScopePurgeDb {
|
|
515
|
-
rows(sql: string, params?: readonly unknown[]): Promise<Record<string, unknown>[]>;
|
|
516
|
-
exec(sql: string, params?: readonly unknown[]): Promise<number>;
|
|
517
|
-
}
|
|
518
|
-
/**
|
|
519
|
-
* **M11** —— 把持久桶里 scope 不被 core `isValidDurableScope` 收的行(规则行与墓碑)删掉,一行一条读数。
|
|
520
|
-
*
|
|
521
|
-
* 这些行从哪来:7.119.0 及更早的本仓入口按「root 非空」收 project scope(`/v1/rules` 写口、两条导入面),引擎 7.45 也收;
|
|
522
|
-
* 引擎 7.46.0 把 project root 收窄成完整绝对路径 ⇒ `project:myproj` 一类存量行在读侧被丢(`permission.rule_row_dropped`,每跑一条),
|
|
523
|
-
* 而撤销口删不动它(引擎的写臂对这种 scope 的墓碑同样拒)。⇒ 一次性迁移,不留「撤销口对坏 scope 另开一条读法」的长期双读。
|
|
524
|
-
*
|
|
525
|
-
* 读法与写法都是**店的那一只**:每只桶先过唯一判官 {@link decodeBucketRow}(读腿用的同一只),判官整桶拒 ⇒ 这只桶**一个字节不动**,
|
|
526
|
-
* 进 `undurableScopeRuleBucketsUnreadable`(桶键 + 不带行内容的拒因;读腿对它的整桶拒仍是它的属主,出路是人);判官放行 ⇒ 在那份合法状态上筛 scope,
|
|
527
|
-
* 经写臂的同一只 {@link writeBucket} 整桶 OCC 回写(`WHERE owner_key = ? AND rev = ?`,rev+1,落盘字节与指纹同写臂)—— 不碰别的桶。
|
|
528
|
-
* **硬删、不铸墓碑**:墓碑的作用是挡同步回灌,而引擎的 sync-join 对 scope 不合法的入站行本来就丢(`applySyncJoin`),
|
|
529
|
-
* 本店也不实现同步(见 `apply` 的 sync-join 臂)。
|
|
530
|
-
* 幂等:第二跑零命中零写(读不出的桶每一跑照报,直到有人处置)。
|
|
531
|
-
* 读数写进调用方递进来的账(`into`,{@link UndurableScopePurgeReadings}):删掉的行在那只桶的回写提交之后追加 ⇒ 本函数半途抛出时,已删的行已经在账上;
|
|
532
|
-
* 错误**原样**上抛(不加工、不自铸拒因句 —— 收据由迁移段那一只收据账随拒因带走,[ref])。
|
|
533
|
-
*/
|
|
534
|
-
export declare function purgeUndurableScopeRows(db: UndurableScopePurgeDb, dialect: SqlDialect, into: UndurableScopePurgeReadings, now?: () => number): Promise<void>;
|
|
535
476
|
/** 三个 SQL 面的一次性装配束(one driver, three faces)。`durable` = [ref] 的 durable 分区后端;
|
|
536
477
|
* 引擎接缝上的统一店由 `main.ts` 用 `createPermissionRuleStoreProvider({ durable })` 合成一次。 */
|
|
537
478
|
export interface PermissionRuleStores {
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { applyTombstones, assertDeleteDeltaCarriesNoAdd, assertRedemptionNotQuarantined, assertWriteDeltaScopeDurable, foldDelta,
|
|
3
|
+
import { applyTombstones, assertDeleteDeltaCarriesNoAdd, assertRedemptionNotQuarantined, assertWriteDeltaScopeDurable, foldDelta, parseRuleText, readRowBehavior, screenRuleSyncState, PERMISSION_RULE_WRITER, RULE_ADD_ORIGINS, RULE_APPROVAL_KINDS, RULE_APPROVAL_RECORD_SCHEMA, RULE_APPROVAL_STATES, RULE_BEHAVIORS, RULE_SYNC_DROP_CODES, EDITED_RULE_BREADTH_WARNING_CODES, PERSISTED_RULE_MATCHES, EMPTY_DURABLE_RULE_PARTITION, PERMISSION_RULES_LATER_GRAMMAR_CODE, SESSION_RULES_GRAMMAR, readRuleGrammarStamp, readRuleOwner, principalNameOf, readRuleOffer2, } from "@sema-agent/core";
|
|
4
4
|
import { dialectProtocolJsonEncoder, sqlDbNowMs, SQL_DB_NOW_MS } from "./sql-driver.js";
|
|
5
5
|
import { isMissingColumnError } from "./sql-errors.js";
|
|
6
6
|
import { describeProbedTableDrift } from "./schema-drift-sentence.js";
|
|
7
7
|
import { canonicalJsonStringify } from "@sema-agent/core";
|
|
8
8
|
import { ensureIndexes } from "./ensure-index.js";
|
|
9
|
-
import { createZodColumnReader, decodeJsonColumn, foldJsonColumn, jsonColumnText, readJsonObjectColumn,
|
|
10
|
-
import { redactSecrets } from "../trace/redact.js";
|
|
9
|
+
import { createZodColumnReader, decodeJsonColumn, foldJsonColumn, jsonColumnText, readJsonObjectColumn, StoreCorruptError } from "./sql-json-column.js";
|
|
11
10
|
export function writerOfSqlRuleStore(store) {
|
|
12
11
|
const w = Reflect.get(store, PERMISSION_RULE_WRITER);
|
|
13
12
|
if (w === null || typeof w !== "object")
|
|
@@ -63,11 +62,9 @@ function readBucketRowBehavior(raw, what, ownerKey) {
|
|
|
63
62
|
return behavior;
|
|
64
63
|
}
|
|
65
64
|
class BucketRefusedError extends Error {
|
|
66
|
-
verdict;
|
|
67
65
|
code;
|
|
68
66
|
constructor(verdict, evidence, code) {
|
|
69
67
|
super(`${verdict} ${evidence}`);
|
|
70
|
-
this.verdict = verdict;
|
|
71
68
|
if (code !== undefined)
|
|
72
69
|
this.code = code;
|
|
73
70
|
}
|
|
@@ -593,13 +590,14 @@ export class SqlDurableRulePartitionProvider {
|
|
|
593
590
|
export function recordOwnerOf(record) {
|
|
594
591
|
return readRuleOwner(record.owner ?? { kind: "principal", principal: record.principal });
|
|
595
592
|
}
|
|
593
|
+
const RULE_BUCKET_SCAN_PAGE = 200;
|
|
596
594
|
export async function listRuleBucketOwners(db) {
|
|
597
595
|
const owners = [];
|
|
598
596
|
let after = "";
|
|
599
597
|
for (;;) {
|
|
600
598
|
const { rows } = await db.query(db.dialect === "mysql"
|
|
601
|
-
? `SELECT owner_key, owner_kind, principal FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > ? ORDER BY owner_key LIMIT ${
|
|
602
|
-
: `SELECT owner_key, owner_kind, principal FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > $1 ORDER BY owner_key LIMIT ${
|
|
599
|
+
? `SELECT owner_key, owner_kind, principal FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > ? ORDER BY owner_key LIMIT ${RULE_BUCKET_SCAN_PAGE}`
|
|
600
|
+
: `SELECT owner_key, owner_kind, principal FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > $1 ORDER BY owner_key LIMIT ${RULE_BUCKET_SCAN_PAGE}`, [after]);
|
|
603
601
|
for (const row of rows) {
|
|
604
602
|
after = String(row["owner_key"]);
|
|
605
603
|
const principal = row["principal"] === null || row["principal"] === undefined ? undefined : String(row["principal"]);
|
|
@@ -607,7 +605,7 @@ export async function listRuleBucketOwners(db) {
|
|
|
607
605
|
if (owner !== undefined)
|
|
608
606
|
owners.push(owner);
|
|
609
607
|
}
|
|
610
|
-
if (rows.length <
|
|
608
|
+
if (rows.length < RULE_BUCKET_SCAN_PAGE)
|
|
611
609
|
return owners;
|
|
612
610
|
}
|
|
613
611
|
}
|
|
@@ -861,84 +859,6 @@ export class SqlRuleImportTicketStore {
|
|
|
861
859
|
}
|
|
862
860
|
export const RULE_PENDING_APPROVAL_RETENTION_MS = 24 * 60 * 60_000;
|
|
863
861
|
export const RULE_REAP_BATCH = 500;
|
|
864
|
-
const UNDURABLE_PURGE_PAGE = 200;
|
|
865
|
-
const UNDURABLE_PURGE_OCC_ATTEMPTS = 5;
|
|
866
|
-
export async function purgeUndurableScopeRows(db, dialect, into, now = Date.now) {
|
|
867
|
-
const cols = `owner_key, ${bucketRowColumns(dialect)}`;
|
|
868
|
-
let after = "";
|
|
869
|
-
for (;;) {
|
|
870
|
-
const page = await db.rows(dialect === "mysql"
|
|
871
|
-
? `SELECT ${cols} FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > ? ORDER BY owner_key LIMIT ${UNDURABLE_PURGE_PAGE}`
|
|
872
|
-
: `SELECT ${cols} FROM ${PERMISSION_RULE_TABLE} WHERE owner_key > $1 ORDER BY owner_key LIMIT ${UNDURABLE_PURGE_PAGE}`, [after]);
|
|
873
|
-
for (const first of page) {
|
|
874
|
-
const ownerKey = String(first.owner_key);
|
|
875
|
-
after = ownerKey;
|
|
876
|
-
let row = first;
|
|
877
|
-
let settled = false;
|
|
878
|
-
for (let attempt = 0; attempt < UNDURABLE_PURGE_OCC_ATTEMPTS && row !== undefined && !settled; attempt++) {
|
|
879
|
-
const outcome = await purgeOneBucket(db, dialect, ownerKey, row, now);
|
|
880
|
-
switch (outcome.kind) {
|
|
881
|
-
case "purged":
|
|
882
|
-
into.undurableScopeRuleRows.push(...outcome.rows);
|
|
883
|
-
settled = true;
|
|
884
|
-
break;
|
|
885
|
-
case "unreadable":
|
|
886
|
-
into.undurableScopeRuleBucketsUnreadable.push({ ownerKey, why: outcome.why });
|
|
887
|
-
settled = true;
|
|
888
|
-
break;
|
|
889
|
-
case "clean":
|
|
890
|
-
settled = true;
|
|
891
|
-
break;
|
|
892
|
-
case "conflict":
|
|
893
|
-
row = (await db.rows(dialect === "mysql" ? `SELECT ${cols} FROM ${PERMISSION_RULE_TABLE} WHERE owner_key = ?` : `SELECT ${cols} FROM ${PERMISSION_RULE_TABLE} WHERE owner_key = $1`, [ownerKey]))[0];
|
|
894
|
-
if (row === undefined)
|
|
895
|
-
settled = true;
|
|
896
|
-
break;
|
|
897
|
-
default: {
|
|
898
|
-
const unknown = outcome;
|
|
899
|
-
throw new Error(`M11: unhandled bucket outcome ${JSON.stringify(unknown)}`);
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
}
|
|
903
|
-
if (!settled)
|
|
904
|
-
into.undurableScopeRuleBucketsDeferred += 1;
|
|
905
|
-
}
|
|
906
|
-
if (page.length < UNDURABLE_PURGE_PAGE)
|
|
907
|
-
break;
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
async function purgeOneBucket(db, dialect, ownerKey, row, now) {
|
|
911
|
-
let cur;
|
|
912
|
-
try {
|
|
913
|
-
cur = decodeBucketRow(ownerKey, row);
|
|
914
|
-
}
|
|
915
|
-
catch (e) {
|
|
916
|
-
return { kind: "unreadable", why: contentFreeRefusal(ownerKey, e) };
|
|
917
|
-
}
|
|
918
|
-
const badRules = cur.rules.filter((r) => !isValidDurableScope(r.scope));
|
|
919
|
-
const badTombstones = cur.tombstones.filter((t) => !isValidDurableScope(t.scope));
|
|
920
|
-
if (badRules.length === 0 && badTombstones.length === 0)
|
|
921
|
-
return { kind: "clean" };
|
|
922
|
-
const rootOf = (scope) => redactSecrets(scope.kind === "project" ? scope.root : scope.kind);
|
|
923
|
-
const rows = [
|
|
924
|
-
...badRules.map((r) => ({ ownerKey, kind: applyTombstones([r], cur.tombstones).length > 0 ? "rule" : "revoked-rule", behavior: r.behavior, tool: r.tool, scopeRoot: rootOf(r.scope) })),
|
|
925
|
-
...badTombstones.map((t) => {
|
|
926
|
-
const parsed = parseRuleText(t.rule, t.behavior);
|
|
927
|
-
if ("reject" in parsed)
|
|
928
|
-
throw new Error(`permission_rule bucket ${ownerKey}: a tombstone the bucket judge admitted does not parse here — refusing to touch the bucket`);
|
|
929
|
-
return { ownerKey, kind: "tombstone", behavior: t.behavior, tool: parsed.rule.tool, scopeRoot: rootOf(t.scope) };
|
|
930
|
-
}),
|
|
931
|
-
];
|
|
932
|
-
const landed = await writeBucket((sql, params) => db.exec(sql, params), dialect, ownerKey, cur, { rules: cur.rules.filter((r) => !badRules.includes(r)), tombstones: cur.tombstones.filter((t) => !badTombstones.includes(t)) }, now());
|
|
933
|
-
return landed ? { kind: "purged", rows } : { kind: "conflict" };
|
|
934
|
-
}
|
|
935
|
-
function contentFreeRefusal(ownerKey, e) {
|
|
936
|
-
if (e instanceof BucketRefusedError)
|
|
937
|
-
return e.verdict;
|
|
938
|
-
if (e instanceof SqlJsonColumnError)
|
|
939
|
-
return `${e.where}: ${e.problem}`;
|
|
940
|
-
return `permission_rule bucket ${ownerKey}: the bucket judge threw ${e instanceof Error ? e.name : typeof e} (its text is withheld here: it may quote the row)`;
|
|
941
|
-
}
|
|
942
862
|
export function createSqlPermissionRuleStores(db, now) {
|
|
943
863
|
const q = (mysql, pg) => (db.dialect === "mysql" ? mysql : pg);
|
|
944
864
|
return {
|
|
@@ -1,33 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PostgreSQL pool + central schema — the PG sibling of tidb-pool.ts, for the second run-store backend
|
|
3
|
-
* (clay 2026-06-21). Schema ownership is CENTRAL (one ensurePgSchema, like tidb-pool's SCHEMA_STATEMENTS) — PG
|
|
4
|
-
* stores assume the tables exist and NEVER create their own (a per-store `CREATE TABLE IF NOT EXISTS` is
|
|
5
|
-
* first-writer-wins, so a trimmed table would shadow the full one and drop columns).
|
|
6
|
-
*
|
|
7
|
-
* Dialect deltas vs the MySQL DDL in tidb-pool.ts: JSON→JSONB, DATETIME(3)→TIMESTAMPTZ(3), TINYINT(1)→SMALLINT,
|
|
8
|
-
* inline `KEY …`→separate `CREATE INDEX`. checkpoint timestamps stay epoch-ms BIGINT (core's Checkpoint uses ms),
|
|
9
|
-
* matching the TiDB schema byte-for-byte semantically. Only the tables PG backends implement so far are listed
|
|
10
|
-
* (run-store + checkpoint); the remaining tidb-* tables are added as their PG stores land (tracked).
|
|
11
|
-
*
|
|
12
|
-
* ─────────────────────────────── SCHEMA POLICY (clay 裁 2026-07-26) ───────────────────────────────
|
|
13
|
-
* THIS CODE IS THE SINGLE SOURCE OF TRUTH for the PG schema, and there is NO in-place migration seam in this statement array: a database that
|
|
14
|
-
* lags behind the code is refused at boot with the exact `ALTER TABLE … ADD COLUMN …` statements printed, and the
|
|
15
|
-
* deployer runs them themselves: the column-set check and its refusal never alter a database. The only DDL this
|
|
16
|
-
* process runs by itself on a table that already exists is idempotent index creation (`ensureIndex`: indexes only,
|
|
17
|
-
* never a column) and the registered one-time migrations (each has a window and a registry row in
|
|
18
|
-
* `one-time-migrations.ts`) — adding / changing / renaming a column or dropping a table is done by those migrations
|
|
19
|
-
* and by nothing else.
|
|
20
|
-
*
|
|
21
|
-
* Consequence, and it is a hard rule: **do NOT add new `ALTER TABLE` seams here.** Every column / default /
|
|
22
|
-
* constraint change is folded into its own `CREATE TABLE`, and this array stays pure `CREATE TABLE` +
|
|
23
|
-
* `CREATE INDEX`. The historical additive-ALTER seams were folded in on 2026-07-26 (they had all decayed
|
|
24
|
-
* into permanent no-ops — the CREATEs already carried the columns).
|
|
25
|
-
*
|
|
26
|
-
* Because the seams are gone, the semantics they used to document now live as inline `--` comments ON THE
|
|
27
|
-
* COLUMN inside the CREATE, not as TypeScript comments outside the template literal: the full-set SQL
|
|
28
|
-
* baseline `docs/schema/baseline-pg.sql` is GENERATED from these statement strings, so only what is inside
|
|
29
|
-
* the SQL survives the export. The baseline is a derived artifact — regenerate it, never hand-edit it.
|
|
30
|
-
*/
|
|
31
1
|
import pg from "pg";
|
|
32
2
|
import type { ServiceConfig } from "../config-types.js";
|
|
33
3
|
export declare const PG_SCHEMA_STATEMENTS: readonly string[];
|
|
@@ -70,7 +40,7 @@ export type PgPoolWarnSink = (msg: string, meta?: Record<string, unknown>) => vo
|
|
|
70
40
|
* 不留痕则只能靠间接症状发现;
|
|
71
41
|
* · 不动 shutdown.ts 的 uncaughtException 钩 —— exit 1 对**真**未捕获仍是正确姿势,旁路兜底
|
|
72
42
|
* 会吞掉别人的崩溃([ref] 纪律:修源头,不下游兜)。
|
|
73
|
-
* `onIdleClientError` 缺省
|
|
43
|
+
* `onIdleClientError` 缺省 = 日志出口接缝缺省 logger 的 `warn`(与装配后同一种 JSON 行)——生产
|
|
74
44
|
* 装配(store-backend `createStoreBackend`)递结构化 logger 的 warn 座。 */
|
|
75
45
|
export declare function createPgPool(opts: string | pg.PoolConfig, onIdleClientError?: PgPoolWarnSink): pg.Pool;
|
|
76
46
|
/** A fixed bigint key for the `pg_advisory_lock` that serializes the whole `ensurePgSchema` DDL run (see below).
|
|
@@ -99,7 +69,8 @@ export declare function acquirePgEnsureSchemaLock(client: pg.PoolClient, tag: st
|
|
|
99
69
|
/** {@link acquirePgEnsureSchemaLock} 的释放(尽力而为 —— 锁随连接归还自动释放)。 */
|
|
100
70
|
export declare function releasePgEnsureSchemaLock(client: pg.PoolClient, tag: string): Promise<void>;
|
|
101
71
|
/** Idempotent central schema apply (the PG twin of tidb-pool.ts ensureSchema): the run/checkpoint tables here +
|
|
102
|
-
* every PG store's own (disjoint) tables. Order is irrelevant (CREATE IF NOT EXISTS
|
|
72
|
+
* every PG store's own (disjoint) tables. Order is irrelevant (CREATE IF NOT EXISTS) except for the one cross-table FK: the session
|
|
73
|
+
* side table `session_ext` references `session_meta`, so it is created right after the session store's tables.
|
|
103
74
|
*
|
|
104
75
|
* Concurrency: callers run this concurrently — tests fan ALL integration suites out in parallel (each beforeAll
|
|
105
76
|
* calls ensurePgSchema), and in production every replica calls it at boot. Concurrent DDL on the SAME table makes
|