@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
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 托管留存的**声明词**(部署说的话):三只被托管的 SQL 店交给引擎的 `retention` 词,与「本部署跑不跑扫车道」这一个事实。
|
|
3
|
+
*
|
|
4
|
+
* 为什么不住在执行器文件里:执行器(`stores-sql/retention-store-sql.ts`)是阶段三逐字搬进引擎包的那一半;「这只店的行有没有人按期删」是**部署**知道的事
|
|
5
|
+
* (扫车道开不开),声明词由装配它的部署给 —— 引擎包里同一个事实读 `retention` 选项(必填,部署表态),不读店类常量。阶段三这两只常量随店类常量一起退役。
|
|
6
|
+
*/
|
|
7
|
+
import type { RetentionDeclaration } from "@sema-agent/core";
|
|
8
|
+
/**
|
|
9
|
+
* 三只**被托管**的 SQL 店(session / checkpoint / tool-result)在扫车道开着时的 `retention` 声明常量。
|
|
10
|
+
*
|
|
11
|
+
* 🔴 **谁说这个词**(引擎 7.58.0 起:店说 `"managed"` 而部署不跑执行器 ⇒ 锁不锁都拒启):「这只店的行有没有人按期删」不是店类自己知道的事,
|
|
12
|
+
* 是装配它的部署知道的事。唯一事实 = 扫车道开不开({@link retentionSweepRuns});后端铸店时按它给词({@link sqlStoreRetention}),
|
|
13
|
+
* 交给引擎启动检查的执行器读同一个事实(开 ⇒ 执行器,关 ⇒ `null`)。店构造不给词 ⇒ `"none"`(引擎对缺席的同一读法)。
|
|
14
|
+
*
|
|
15
|
+
* 🔴 为什么是一个共享常量而不是各写各的字面量:这一格是 core `assertRetentionCapability` 的**唯一**读点,
|
|
16
|
+
* 三只店的答案必须同进同退 —— 哪天本能力从某只店的行上撤了(比如 tool_result 改由别处清),漏改一处
|
|
17
|
+
* 就是一句谎,而谎的方向是「locked policy 放行了一只其实不删的店」。
|
|
18
|
+
*
|
|
19
|
+
* 🔴 声明的**读法**(与 core 契约的字面对齐,别读大也别读小):`"managed"` 说的是「**这只店的行**由本
|
|
20
|
+
* 部署的托管留存按期删除」,不是「本对象自己实现了三个方法」。三方法的实现体是执行器
|
|
21
|
+
* `SqlRetentionStore`(`stores-sql/retention-store-sql.ts`)—— 它是 E21 purge 协调器的事务化孪生,横跨十余张表(部署那几张经它的事务内钩)。
|
|
22
|
+
* core 的门读的是「这只店的数据会不会被按期删掉」(拒启文案逐字:「a locked retention policy over stores
|
|
23
|
+
* that cannot delete would be *policy locked, data immortal*」),SQL 三店的诚实答案就是 `"managed"`。
|
|
24
|
+
* file/in-memory 形没有任何东西会按期删它们的行 ⇒ 显式 `"none"`(缺席也读 none,但显式是文档义务)。
|
|
25
|
+
*/
|
|
26
|
+
export declare const MANAGED_RETENTION: RetentionDeclaration;
|
|
27
|
+
/** file/in-memory 形、以及扫车道关着的 SQL 店的诚实声明(见 {@link MANAGED_RETENTION} 的读法说明)。 */
|
|
28
|
+
export declare const UNMANAGED_RETENTION: RetentionDeclaration;
|
|
29
|
+
/** 本部署跑不跑托管留存的扫车道(`RETENTION_SWEEP_INTERVAL_SEC > 0`)—— 三只 SQL 店的声明与交给引擎启动检查的执行器只读这一处。 */
|
|
30
|
+
export declare function retentionSweepRuns(sweep: {
|
|
31
|
+
readonly intervalSec: number;
|
|
32
|
+
}): boolean;
|
|
33
|
+
/** 后端铸三只被托管的 SQL 店时交给店的词:扫车道开 ⇒ `"managed"`,关 ⇒ `"none"`。 */
|
|
34
|
+
export declare function sqlStoreRetention(sweep: {
|
|
35
|
+
readonly intervalSec: number;
|
|
36
|
+
}): RetentionDeclaration;
|
|
37
|
+
//# sourceMappingURL=retention-declaration.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const MANAGED_RETENTION = "managed";
|
|
2
|
+
export const UNMANAGED_RETENTION = "none";
|
|
3
|
+
export function retentionSweepRuns(sweep) {
|
|
4
|
+
return sweep.intervalSec > 0;
|
|
5
|
+
}
|
|
6
|
+
export function sqlStoreRetention(sweep) {
|
|
7
|
+
return retentionSweepRuns(sweep) ? MANAGED_RETENTION : UNMANAGED_RETENTION;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=retention-declaration.js.map
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 托管留存的**部署那一半** —— 本仓的表经执行器(`stores-sql/retention-store-sql.ts`)的事务内钩表(K4)参与同一个破坏性事务。
|
|
3
|
+
* 执行器是事务属主(开 / 提交 / 回滚),只认 core 的 `{domain, cutoffMs}`;部署的事实(hold、审计行的判定时点三格、认领、十三张部署表、
|
|
4
|
+
* 被删附件行的字节哈希)全在这里,经钩出场:
|
|
5
|
+
* · `holdLock`(首句) —— hold 哨兵行锁读(`retention-lane-store-sql.ts` 的 {@link lockHoldSentinel});
|
|
6
|
+
* · `beforeDelete`(终集)—— 删十三张部署表里这批会话的行(下面 {@link deleteDeploymentSessionRows}),并收集被删附件行的字节哈希(提交之后交收尾);
|
|
7
|
+
* · `audit`(提交前末句)—— 破坏性审计行({@link appendDestructiveAuditRow}),判定时点三格是这一次调用的。
|
|
8
|
+
* 认领判(每只候选根的 `session.beforeCommit`)不在这里:它是会话座的钩(`plugins/session-store-sql.ts` 的 `createSqlSessionWriteHooks`,
|
|
9
|
+
* `retention-delete` 臂),组合座把同一只交给执行器 —— 一处实现。
|
|
10
|
+
* 钩只拿语句面(`query`),从不碰事务本身;库外副作用(附件字节、完成信箱围栏、会话信箱盒、空间)不在钩里做 —— 执行器提交成功返回之后,
|
|
11
|
+
* 组合座把删掉的会话树交给收尾(`session-erase.ts`,与在线删除同一只)。
|
|
12
|
+
*
|
|
13
|
+
* 钩表为什么**每次破坏性调用**铸一份(组合座 `plugins/store-backend.ts` 的 `createSqlRetentionExecutor`):审计行的 `{mode, policyDays,
|
|
14
|
+
* fencingToken}` 与 `checkpoint_ctx` 属主门要的域是**这一次调用**的事实,而 core 的钩签名不带它们(`audit` 收 `{domain, op}` 与回执,
|
|
15
|
+
* `beforeDelete` 只收行)。
|
|
16
|
+
*
|
|
17
|
+
* ── 方言差异(只列本文件独有的;其余见执行器顶注)──────────────────────────────────────────────────
|
|
18
|
+
* - 级联 DELETE 的 JOIN 形:`DELETE te FROM a te JOIN b …` vs `DELETE FROM a te USING b …`
|
|
19
|
+
*/
|
|
20
|
+
import type { ManagedRetentionCapability, RetentionReceipt } from "@sema-agent/core";
|
|
21
|
+
import type { SqlDialect, SqlExec } from "./sql-driver.js";
|
|
22
|
+
import { type RetentionAuditContext } from "./retention-lane-store-sql.js";
|
|
23
|
+
import type { SessionTreesErased } from "../session-erase.js";
|
|
24
|
+
/**
|
|
25
|
+
* lane 消费的**执行器**面 —— core `ManagedRetentionCapability` 的三方法 + 非契约窄读口 `previewRetention`
|
|
26
|
+
* (audit-only 档的读数源;core 契约无 count 面)+ 声明位。真身 = 组合座 `createSqlRetentionExecutor`。
|
|
27
|
+
*
|
|
28
|
+
* 🔴 三方法的入参是 core 契约形的**超集**(多一个必填的 `audit`):判定时点三格是部署的事实,组合座把它绑进这一次调用的 audit 钩
|
|
29
|
+
* —— 写进类型,让「忘了传」是编译错。
|
|
30
|
+
*/
|
|
31
|
+
export interface RetentionExecutor {
|
|
32
|
+
readonly retention?: "managed" | "none";
|
|
33
|
+
listRetentionDomains(): Promise<readonly string[]>;
|
|
34
|
+
previewRetention(input: {
|
|
35
|
+
domain: string;
|
|
36
|
+
cutoffMs: number;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
checkpoints: number;
|
|
39
|
+
sessions: number;
|
|
40
|
+
toolResults: number;
|
|
41
|
+
}>;
|
|
42
|
+
expireCheckpoints(input: RetentionDestructiveInput): Promise<RetentionReceipt>;
|
|
43
|
+
deleteExpiredSessions(input: RetentionDestructiveInput): Promise<RetentionSessionsReceipt>;
|
|
44
|
+
deleteOrphanToolResults(input: RetentionDestructiveInput): Promise<RetentionReceipt>;
|
|
45
|
+
}
|
|
46
|
+
/** 破坏性调用的入参(判定时点的三格随行 —— 理由逐字见 {@link RetentionAuditContext} 的头注)。 */
|
|
47
|
+
export interface RetentionDestructiveInput {
|
|
48
|
+
domain: string;
|
|
49
|
+
cutoffMs: number;
|
|
50
|
+
audit: RetentionAuditContext;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 会话树 sweep 的回执 = core 契约的 `RetentionReceipt` + 本仓一位:`erased` = 本次删掉的会话树交收尾的那一份(会话 + 删前属主 + 住客、附件字节哈希、
|
|
54
|
+
* 无出处卸载结果数),present-iff 删掉了至少一棵树。lane 把它交给收尾(`session-erase.ts` 的 `createSessionEraseSettler`,与会话删除协调器同一只)。
|
|
55
|
+
*/
|
|
56
|
+
export type RetentionSessionsReceipt = RetentionReceipt & {
|
|
57
|
+
readonly erased?: SessionTreesErased;
|
|
58
|
+
};
|
|
59
|
+
/** 装配面必须如实告知的**可选部署表在场性**(+ 执行器的诊断日志座)。 */
|
|
60
|
+
export interface RetentionExecutorOptions {
|
|
61
|
+
/**
|
|
62
|
+
* `task_attachment` 表是否在场。**必填,没有默认值**:boot 只在配了对象存储时才 ensure 这张表
|
|
63
|
+
* (`boot/stores.ts` 的附件段:无 MinIO ⇒ 整段不接线、表不建),于是一条盲发的 DELETE 在无对象存储的
|
|
64
|
+
* 部署上会以 unknown-table 报错、把整轮 sweep 打红。让装配层如实回答,比让钩去吞一个错误好 —— 吞错误
|
|
65
|
+
* 就是静默 fail-open(附件行从此永不被留存清理,而没有任何人知道)。
|
|
66
|
+
*/
|
|
67
|
+
taskAttachmentTable: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* [ref] `task_list_meta` / `task_list_item` 两表是否在场。**必填,没有默认值**(与
|
|
70
|
+
* `taskAttachmentTable` 同一条理由:盲发 DELETE 会在没建表的库上把整轮 sweep 打红)。
|
|
71
|
+
* 生产上 `boot/task-list-lane.ts` 在**任何 SQL 后端**都无条件 ensure 这两张表 ⇒ 装配层照实传 true;
|
|
72
|
+
* 纯内存/local 车道压根没有 SQL 留存腿。
|
|
73
|
+
*/
|
|
74
|
+
taskListTables: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 收件箱四表(`mailbox` / `mailbox_message` / `mailbox_consumed` / `mailbox_tombstone`)是否在场。**必填,没有默认值**(同上一条理由)。
|
|
77
|
+
* 生产上 `boot/stores.ts` 在**任何 SQL 后端**都无条件 ensure 这四张表并接上 SQL 信箱店 ⇒ 装配层照实传 true;为真时执行体在同一个事务里、
|
|
78
|
+
* 会话行删除之前的最后一腿丢掉被删会话的会话盒(店的 `drop` 同一组语句,`dropMailboxBoxOn`)。
|
|
79
|
+
*/
|
|
80
|
+
mailboxTables: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* workflow 完成信箱在不在用(本部署接了完成信箱 = 有 enqueue 方)。**必填,没有默认值**。为真时执行体在事务里给被删会话立清除围栏
|
|
83
|
+
* (信箱 `purge` 的同一句 `writeInboxPurgeFenceOn`),提交之后再清一次事务里落下的迟到行({@link sweepLateCompletionRows});为假时没有 enqueue 方、
|
|
84
|
+
* 也就没有围栏要立(围栏行只由信箱自己的写动词顺手扫,没有信箱就没人扫 ⇒ 不写)。
|
|
85
|
+
*/
|
|
86
|
+
completionInbox: boolean;
|
|
87
|
+
/** 诊断日志座(可选;交给执行器)。 */
|
|
88
|
+
logger?: {
|
|
89
|
+
info?(msg: string, meta?: unknown): void;
|
|
90
|
+
warn?(msg: string, meta?: unknown): void;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/** 执行器会删东西的那几只成员(钩被告知的 `op`;与执行器钩表的同名型同读 core 的键集)。 */
|
|
94
|
+
type RetentionOp = Exclude<keyof ManagedRetentionCapability, "listRetentionDomains">;
|
|
95
|
+
/**
|
|
96
|
+
* 删净之后清一次**迟到的完成信箱行**:执行体事务里立的清除围栏提交之前别的连接看不见,事务进行中入队的完成会落行。按「这只会话 ∧ **删前属主** ∧ 入队时刻不晚于 `atMs`」删
|
|
97
|
+
* —— 与清除围栏同一把键(会话 × 属主):别的属主的行(同 id 重登记的别人)一行不碰;同一属主同 id 的下一位住客在围栏的窗内入队即被拒(`workflow_inbox_fence`),
|
|
98
|
+
* 它的行落不下 ⇒ 这一句只可能删到事务进行中漏进来的那几行。发在池上(提交之后);属主一组一句(`owner` 列可空,无主 = `IS NULL`)。
|
|
99
|
+
*/
|
|
100
|
+
export declare function sweepLateCompletionRows(db: SqlExec, dialect: SqlDialect, sessions: readonly {
|
|
101
|
+
readonly sessionId: string;
|
|
102
|
+
readonly owner: string | null;
|
|
103
|
+
}[], atMs: number): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* 部署行那一半的钩(`beforeDelete`:删这批会话在部署十三张表里的行)+ 它收集到的附件字节哈希(提交之后交收尾释放)。两种破坏性调用同一只:
|
|
106
|
+
* 留存清扫({@link createRetentionDeploymentHooks})与删一只会话(组合座 `createSqlSessionEraser`)。`domain` = 这批会话的域键(`checkpoint_ctx` 属主门读它)。
|
|
107
|
+
*/
|
|
108
|
+
export declare function createSessionRowsHook(dialect: SqlDialect, opts: RetentionExecutorOptions, domain: string): {
|
|
109
|
+
beforeDelete: (txn: SqlExec, rows: readonly {
|
|
110
|
+
readonly sessionId: string;
|
|
111
|
+
readonly incarnation: string | undefined;
|
|
112
|
+
}[]) => Promise<void>;
|
|
113
|
+
attachmentShas: () => readonly string[];
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* 一次留存破坏性调用的钩表 + 它收集到的附件字节哈希。`call` = 这一次调用(域与判定时点三格)。
|
|
117
|
+
* 钩的形对齐执行器的 `SqlTransactionHooks`(组合座把 `hooks` 交给执行器时由类型系统对表,形一分叉就编译红)。
|
|
118
|
+
*/
|
|
119
|
+
export declare function createRetentionDeploymentHooks(dialect: SqlDialect, opts: RetentionExecutorOptions, call: RetentionDestructiveInput): {
|
|
120
|
+
hooks: {
|
|
121
|
+
retention: {
|
|
122
|
+
holdLock: (txn: SqlExec, at: {
|
|
123
|
+
readonly domain: string;
|
|
124
|
+
readonly op: RetentionOp;
|
|
125
|
+
}) => Promise<"proceed" | "held">;
|
|
126
|
+
beforeDelete: (txn: SqlExec, rows: readonly {
|
|
127
|
+
readonly sessionId: string;
|
|
128
|
+
readonly incarnation: string | undefined;
|
|
129
|
+
}[]) => Promise<void>;
|
|
130
|
+
audit: (txn: SqlExec, at: {
|
|
131
|
+
readonly domain: string;
|
|
132
|
+
readonly op: RetentionOp;
|
|
133
|
+
}, receipt: RetentionReceipt) => Promise<void>;
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
attachmentShas: () => readonly string[];
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* 会话树里**部署表**这一半的删除(`beforeDelete` 钩的身体):十三张部署表,发在执行器事务的连接上,先于执行器删自己的表(K4 次序)。
|
|
140
|
+
* 两个决定者同调(留存清扫 / 删一只会话的 `eraseSession`)—— 删净会话的行面只有执行器那一段事务体(`session-erase.ts` 头注);表与腿序对
|
|
141
|
+
* `SESSION_TREE_LEGS`(local 执行体按它迭代各店动词)。
|
|
142
|
+
* 次序的承重理由:
|
|
143
|
+
* · `task_event` / `task_active` 经 `task_run` 连删 ⇒ 必须排在 `task_run` 删除**之前**;
|
|
144
|
+
* · `checkpoint_ctx` 的属主门是 `session_meta.owner` 的 EXISTS 子查询 ⇒ 必须在 meta 删除之前(执行器的 meta 删除在本钩之后,天然满足);
|
|
145
|
+
* · 任务清单:meta 行锁 → item → meta(与 `mutate` 同向的锁序,见该腿注)。
|
|
146
|
+
*
|
|
147
|
+
* 🔴 运行账本(task_event / task_active / task_run)**没有**属主门,按 `session_id` 单键删(F-A,2026-08-17
|
|
148
|
+
* 合并码扫描):`task_run.owner` 是**每次提交的 principal**,与会话主会分叉(无主存量
|
|
149
|
+
* 会话被带 principal 的壳续聊 ⇒ 新行 owner="default")。行级属主门于是只删得掉半棵树,而 `session_meta`
|
|
150
|
+
* 在同一事务里随后就删掉 ⇒ 执行器的候选读从此**永远枚举不到**这些行:它们不是
|
|
151
|
+
* "下一轮再清",是**没有任何清理路径**的孤儿。域隔离不靠这道门承担 —— `ids` 已经是**本域** session_meta
|
|
152
|
+
* 里选出来并 `FOR UPDATE` 锁住的终集,行级门去掉之后越域仍然结构上不可能。
|
|
153
|
+
*
|
|
154
|
+
* `checkpoint_ctx` 的属主门用**域键**(`domain`,`""` = 无主桶)而不是会话的 owner 值 —— 理由逐字见执行器 `purgeSessionTrees` 头注「属主门读域键」段。
|
|
155
|
+
*/
|
|
156
|
+
export declare function deleteDeploymentSessionRows(txn: SqlExec, dialect: SqlDialect, domain: string, ids: readonly string[], opts: RetentionExecutorOptions): Promise<readonly string[]>;
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=retention-deployment.d.ts.map
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { TASK_LIST_ITEM_TABLE, TASK_LIST_META_TABLE, taskListKeyFor } from "./task-list-store-sql.js";
|
|
2
|
+
import { USER_INPUT_ACCEPTANCE_TABLE } from "./user-input-ledger-sql.js";
|
|
3
|
+
import { deleteSessionApprovalRows } from "./approval-ask-store-sql.js";
|
|
4
|
+
import { retentionDomainWhere, retentionIdSet } from "./retention-sql.js";
|
|
5
|
+
import { appendDestructiveAuditRow, lockHoldSentinel } from "./retention-lane-store-sql.js";
|
|
6
|
+
import { writeInboxPurgeFenceOn } from "./workflow-run-store-sql.js";
|
|
7
|
+
function auditActionOf(op) {
|
|
8
|
+
switch (op) {
|
|
9
|
+
case "expireCheckpoints":
|
|
10
|
+
return "expired_checkpoints";
|
|
11
|
+
case "deleteExpiredSessions":
|
|
12
|
+
return "deleted_sessions";
|
|
13
|
+
case "deleteOrphanToolResults":
|
|
14
|
+
return "deleted_tool_results";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function sweepLateCompletionRows(db, dialect, sessions, atMs) {
|
|
18
|
+
const byOwner = new Map();
|
|
19
|
+
for (const { sessionId, owner } of sessions)
|
|
20
|
+
byOwner.set(owner, [...(byOwner.get(owner) ?? []), sessionId]);
|
|
21
|
+
for (const [owner, ids] of [...byOwner].sort(([a], [b]) => String(a).localeCompare(String(b)))) {
|
|
22
|
+
const s = retentionIdSet(dialect, "session_id", [...ids].sort(), 1);
|
|
23
|
+
const next = (k) => (dialect === "mysql" ? "?" : `$${s.params.length + k}`);
|
|
24
|
+
const ownerSql = owner === null ? "owner IS NULL" : `owner = ${next(1)}`;
|
|
25
|
+
const at = next(owner === null ? 1 : 2);
|
|
26
|
+
await db.query(`DELETE FROM workflow_completion_inbox WHERE ${s.sql} AND ${ownerSql} AND enqueued_at_ms <= ${at}`, [...s.params, ...(owner === null ? [] : [owner]), atMs]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function createSessionRowsHook(dialect, opts, domain) {
|
|
30
|
+
const shas = [];
|
|
31
|
+
return {
|
|
32
|
+
beforeDelete: async (txn, rows) => {
|
|
33
|
+
shas.push(...(await deleteDeploymentSessionRows(txn, dialect, domain, rows.map((r) => r.sessionId), opts)));
|
|
34
|
+
},
|
|
35
|
+
attachmentShas: () => shas,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function createRetentionDeploymentHooks(dialect, opts, call) {
|
|
39
|
+
if (!call.audit) {
|
|
40
|
+
throw new Error(`retention: refusing a destructive call in domain ${JSON.stringify(call.domain)} with no audit context — every destructive retention ` +
|
|
41
|
+
`transaction must persist its {mode, policyDays, fencingToken} alongside the deletion. Pass \`audit\` from the sweep lane's current round.`);
|
|
42
|
+
}
|
|
43
|
+
const rowsHook = createSessionRowsHook(dialect, opts, call.domain);
|
|
44
|
+
const hooks = {
|
|
45
|
+
retention: {
|
|
46
|
+
holdLock: async (txn, at) => (await lockHoldSentinel(txn, dialect, at.domain)) ? "held" : "proceed",
|
|
47
|
+
beforeDelete: rowsHook.beforeDelete,
|
|
48
|
+
audit: async (txn, at, receipt) => appendDestructiveAuditRow(txn, dialect, {
|
|
49
|
+
domain: at.domain,
|
|
50
|
+
action: auditActionOf(at.op),
|
|
51
|
+
audit: call.audit,
|
|
52
|
+
deleted: receipt.deleted,
|
|
53
|
+
skipped: receipt.skipped,
|
|
54
|
+
tombstones: receipt.tombstones,
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
return { hooks, attachmentShas: rowsHook.attachmentShas };
|
|
59
|
+
}
|
|
60
|
+
export async function deleteDeploymentSessionRows(txn, dialect, domain, ids, opts) {
|
|
61
|
+
const q = (mysql, pg) => (dialect === "mysql" ? mysql : pg);
|
|
62
|
+
const set = (col, pgIndex) => retentionIdSet(dialect, col, ids, pgIndex);
|
|
63
|
+
{
|
|
64
|
+
const s = set("tr.session_id", 1);
|
|
65
|
+
await txn.query(q(`DELETE te FROM task_event te JOIN task_run tr ON te.task_id = tr.task_id WHERE ${s.sql}`, `DELETE FROM task_event te USING task_run tr WHERE te.task_id = tr.task_id AND ${s.sql}`), [...s.params]);
|
|
66
|
+
}
|
|
67
|
+
{
|
|
68
|
+
const s = set("tr.session_id", 1);
|
|
69
|
+
await txn.query(q(`DELETE ta FROM task_active ta JOIN task_run tr ON ta.task_id = tr.task_id WHERE ${s.sql}`, `DELETE FROM task_active ta USING task_run tr WHERE ta.task_id = tr.task_id AND ${s.sql}`), [...s.params]);
|
|
70
|
+
}
|
|
71
|
+
{
|
|
72
|
+
const s = set("session_id", 1);
|
|
73
|
+
await txn.query(`DELETE FROM task_run WHERE ${s.sql}`, [...s.params]);
|
|
74
|
+
}
|
|
75
|
+
await deleteSessionApprovalRows(txn, dialect, ids);
|
|
76
|
+
{
|
|
77
|
+
const s = set("checkpoint_ctx.session_id", 1);
|
|
78
|
+
const w = retentionDomainWhere(dialect, "sm.owner", domain, 2);
|
|
79
|
+
await txn.query(`DELETE FROM checkpoint_ctx WHERE ${s.sql} AND EXISTS (SELECT 1 FROM session_meta sm WHERE sm.session_id = checkpoint_ctx.session_id AND ${w.sql})`, [...s.params, ...w.params]);
|
|
80
|
+
}
|
|
81
|
+
let attachmentShas = [];
|
|
82
|
+
if (opts.taskAttachmentTable) {
|
|
83
|
+
const s = set("session_id", 1);
|
|
84
|
+
const { rows } = await txn.query(`SELECT sha256 FROM task_attachment WHERE ${s.sql} FOR UPDATE`, s.params);
|
|
85
|
+
attachmentShas = rows.map((r) => String(r.sha256));
|
|
86
|
+
}
|
|
87
|
+
for (const [table, col] of [
|
|
88
|
+
["resume_anchor", "session_id"],
|
|
89
|
+
["approval_exemption", "session_id"],
|
|
90
|
+
...(opts.taskAttachmentTable ? [["task_attachment", "session_id"]] : []),
|
|
91
|
+
[USER_INPUT_ACCEPTANCE_TABLE, "session_id"],
|
|
92
|
+
]) {
|
|
93
|
+
const s = set(col, 1);
|
|
94
|
+
await txn.query(`DELETE FROM ${table} WHERE ${s.sql}`, s.params);
|
|
95
|
+
}
|
|
96
|
+
if (opts.taskListTables) {
|
|
97
|
+
const listKeys = ids.map((id) => taskListKeyFor(id)).sort();
|
|
98
|
+
{
|
|
99
|
+
const s = retentionIdSet(dialect, "list_key", listKeys, 1);
|
|
100
|
+
await txn.query(`SELECT list_key FROM ${TASK_LIST_META_TABLE} WHERE ${s.sql} ORDER BY list_key FOR UPDATE`, s.params);
|
|
101
|
+
}
|
|
102
|
+
for (const table of [TASK_LIST_ITEM_TABLE, TASK_LIST_META_TABLE]) {
|
|
103
|
+
const s = retentionIdSet(dialect, "list_key", listKeys, 1);
|
|
104
|
+
await txn.query(`DELETE FROM ${table} WHERE ${s.sql}`, s.params);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
{
|
|
108
|
+
if (opts.completionInbox) {
|
|
109
|
+
const owner = domain === "" ? null : domain;
|
|
110
|
+
const now = Date.now();
|
|
111
|
+
for (const id of [...ids].sort())
|
|
112
|
+
await writeInboxPurgeFenceOn(txn, dialect, id, owner, now);
|
|
113
|
+
}
|
|
114
|
+
const s = set("session_id", 1);
|
|
115
|
+
await txn.query(`DELETE FROM workflow_completion_inbox WHERE ${s.sql}`, s.params);
|
|
116
|
+
}
|
|
117
|
+
return attachmentShas;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=retention-deployment.js.map
|
|
@@ -23,14 +23,84 @@
|
|
|
23
23
|
* 自增判据在**应用层**算,因为它同时要产出返回给调用方的 token);
|
|
24
24
|
* - 事务动词:只有 `begin()` 一个;读语义的判据在 {@link SqlTxConn.begin} 的 `@contract txn.read-semantics`
|
|
25
25
|
* (本店唯一的读是 `acquire` 的租约行 `FOR UPDATE` —— 锁读在两引擎都是当前读)。
|
|
26
|
-
* - schema
|
|
27
|
-
* `
|
|
26
|
+
* - schema 属主:**审计 / hold / 租约三张表由本文件建**(`TIDB_RETENTION_LANE_STATEMENTS` / `PG_RETENTION_LANE_SCHEMA`,
|
|
27
|
+
* 中央 ensure 组合);墓碑表是执行器的(`stores-sql/retention-store-sql.ts`)。「一张表恰好一个 DDL 属主」(db-gate.ts 顶注
|
|
28
28
|
* 的实测结论:第二个属主的 `IF NOT EXISTS` 会静默吞掉列/索引差异)。
|
|
29
|
+
* - 执行器破坏性事务里的两句也写在这里(`lockHoldSentinel` 首句 / `appendDestructiveAuditRow` 末句):hold / 审计是**调度方语义**,
|
|
30
|
+
* 经执行器的事务内钩(K4)参与,不住在执行器里。
|
|
29
31
|
*/
|
|
30
32
|
import type { Pool as MySqlPool } from "mysql2/promise";
|
|
31
33
|
import type { Pool as PgPool } from "pg";
|
|
32
|
-
import { type SqlDriver, type SqlExec } from "./sql-driver.js";
|
|
33
|
-
import {
|
|
34
|
+
import { type SqlDialect, type SqlDriver, type SqlExec } from "./sql-driver.js";
|
|
35
|
+
import type { IndexSpec } from "./ensure-index.js";
|
|
36
|
+
import type { RetentionMode } from "../config-types.js";
|
|
37
|
+
/** 追加式审计表(设计稿 §6)。 */
|
|
38
|
+
export declare const RETENTION_AUDIT_TABLE = "retention_audit";
|
|
39
|
+
/** per-domain 法务保留标记(设计稿 §5)——**行在 = 该域整体冻结**。 */
|
|
40
|
+
export declare const RETENTION_HOLD_TABLE = "retention_hold";
|
|
41
|
+
/** sweep 互斥的单行租约表(设计稿 §3)。表建在车1(schema 一次齐),抢/续租的逻辑归车2。 */
|
|
42
|
+
export declare const RETENTION_LEASE_TABLE = "retention_lease";
|
|
43
|
+
/**
|
|
44
|
+
* 审计行的 `action` 闭集(设计稿 §6 逐字)。**破坏性三词**在执行器的删除事务里由 audit 钩写({@link appendDestructiveAuditRow});其余五词
|
|
45
|
+
* (`audit_only` / `skipped_legal_hold` / `failed` / `hold_placed` / `hold_released`)属主是 lane/路由(车2)
|
|
46
|
+
* —— 它们没有「删了没记」的窗口。词表与审计表同住本文件:一份真源。
|
|
47
|
+
*/
|
|
48
|
+
export type RetentionAuditAction = "expired_checkpoints" | "deleted_sessions" | "deleted_tool_results" | "audit_only" | "skipped_legal_hold" | "failed" | "hold_placed" | "hold_released";
|
|
49
|
+
/** MySQL 协议方言的建表语句(本模块是这三张表的唯一 DDL 属主;由 `tidb-pool.ts` 展开进中央 `SCHEMA_STATEMENTS`,紧挨执行器的墓碑表那一句、次序不变)。 */
|
|
50
|
+
export declare const TIDB_RETENTION_LANE_STATEMENTS: readonly string[];
|
|
51
|
+
/** PG 方言的建表语句(MySQL 孪生的逐条翻译:AUTO_INCREMENT→BIGSERIAL,逐列 `COLLATE "C"`,内联 KEY→独立
|
|
52
|
+
* CREATE INDEX)。语义逐字见 MySQL 孪生的行内注,此处不复述(两份注释迟早分叉)。由 `pg-pool.ts` 的中央 `ensurePgSchema` 组合(紧挨墓碑表那一句)。 */
|
|
53
|
+
export declare const PG_RETENTION_LANE_SCHEMA: readonly string[];
|
|
54
|
+
/** [ref]:三张表的索引**声明**(两方言共用一份)。PG 侧由 `pg-pool.ts` 的中央 ensure 应用,MySQL 侧由 `tidb-pool.ts` 的中央 `ensureSchema` 应用(那里内联 `KEY` 已在 `CREATE TABLE` 里 ⇒ 新建库探到即零 DDL,存量库缺谁补谁)。加索引以外的 schema 变更仍归运维,见 `plugins/ensure-index.ts` 头注。 */
|
|
55
|
+
export declare const RETENTION_LANE_INDEXES: readonly IndexSpec[];
|
|
56
|
+
/**
|
|
57
|
+
* 一次破坏性留存调用的**审计上下文**——判定时点的三格,由调用方(lane)随每次破坏性调用交给组合座(`plugins/store-backend.ts`
|
|
58
|
+
* `createSqlRetentionExecutor`),组合座把它绑进**这一次**调用的 audit 钩(执行器入参只有 core 的 `{domain, cutoffMs}`,不认识它)。
|
|
59
|
+
*
|
|
60
|
+
* 🔴 为什么必须由调用方传、而不是店自己去读配置:`mode`/`policyDays` 是**判定时点**的事实(策略是部署
|
|
61
|
+
* env、模式是灰度旋钮,两者都会在两次 sweep 之间被改),`fencingToken` 更是本轮租约的身份。店去现读
|
|
62
|
+
* 配置 = 审计行记的是「写这行的那一刻的配置」,而不是「按哪档删的」,那正好把审计的意义抹掉。
|
|
63
|
+
*/
|
|
64
|
+
export interface RetentionAuditContext {
|
|
65
|
+
/** 判定时点的灰度档。词表闭集(与 §4 同一张表);`audit-only` 档下 lane 不该调破坏性方法,但如果调了,
|
|
66
|
+
* 审计行会如实记下这个矛盾(而不是被悄悄改写成 enforce)。 */
|
|
67
|
+
mode: RetentionMode;
|
|
68
|
+
/** 判定时点的策略值(天)。 */
|
|
69
|
+
policyDays: number;
|
|
70
|
+
/** 本轮 sweep lease 的 fencing token(§3)。`null` = 调用方没有租约面(单机/测试);破坏性行仍会落
|
|
71
|
+
* 审计,只是这一位为空 —— 「没有轮次身份」本身也是审计要记的事实。 */
|
|
72
|
+
fencingToken: number | null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 破坏性事务的**首句**(K4 `holdLock`):拿本域的互斥行锁,并读出「这个域是不是冻结中」(§5 F2 承重)。持有到提交,无复核。
|
|
76
|
+
*
|
|
77
|
+
* 两步,缺一不可:
|
|
78
|
+
* ① 幂等建一条 `held = 0` 的**哨兵行**(形 A,[ref]:MySQL `ON DUPLICATE KEY UPDATE domain = domain` /
|
|
79
|
+
* PG `ON CONFLICT DO NOTHING`)—— 它永远不会改写一条既存的 hold(两方言的这两个动词都只在缺行时
|
|
80
|
+
* 写),只保证**接下来那把行锁有东西可锁**;重复键取的是 **X** 锁,与 ② 的 `FOR UPDATE` 同锁模式
|
|
81
|
+
* (`INSERT IGNORE` 在这里取 S 再升 X = InnoDB 上两个并发 sweep 互等的死锁形,[ref]);
|
|
82
|
+
* ② `SELECT held … FOR UPDATE` —— 现在这行必定存在,于是锁真的拿到了。
|
|
83
|
+
*
|
|
84
|
+
* 🔴 为什么必须先造行(codex 交叉复审 R1-[high],验真后改):`FOR UPDATE` 锁不住缺席行(TiDB 无 gap
|
|
85
|
+
* lock;PG READ COMMITTED 同样)。presence 形(「行在 = 冻结」)下,operator 的 PUT 与本事务可以**同时**
|
|
86
|
+
* 都读到「没有 hold」,PUT 提交返回成功之后本事务照删不误 —— 设计稿 §5 声称由行锁给出的串行化在那一形
|
|
87
|
+
* 上根本不存在。哨兵行把 hold 的写点与删除的读点压到**同一把行锁**上,那句承诺才成立。
|
|
88
|
+
* ⚠️ PUT/DELETE hold 必须走**同一 PK 的 upsert 改 `held` 列**(本模块 `setHoldOn`,不是 INSERT/DELETE 行),
|
|
89
|
+
* 否则这把锁又会退回缺席形。
|
|
90
|
+
*/
|
|
91
|
+
export declare function lockHoldSentinel(txn: SqlExec, dialect: SqlDialect, domain: string): Promise<boolean>;
|
|
92
|
+
/**
|
|
93
|
+
* 破坏性审计行的**唯一**写点 —— 执行器事务里提交前的**末句**(K4 `audit`;§6 F5:与删除同一个事务,先删后补记 = 崩在中间会留下无证删除)。
|
|
94
|
+
* 三个数字 = 这一次调用的回执(执行器交给 audit 钩的那一份),判定时点三格 = 这一次调用的 {@link RetentionAuditContext}。
|
|
95
|
+
*/
|
|
96
|
+
export declare function appendDestructiveAuditRow(txn: SqlExec, dialect: SqlDialect, row: {
|
|
97
|
+
domain: string;
|
|
98
|
+
action: Extract<RetentionAuditAction, "expired_checkpoints" | "deleted_sessions" | "deleted_tool_results">;
|
|
99
|
+
audit: RetentionAuditContext;
|
|
100
|
+
deleted: number;
|
|
101
|
+
skipped: number;
|
|
102
|
+
tombstones: number;
|
|
103
|
+
}): Promise<void>;
|
|
34
104
|
/** 审计读面的单页上界(与 roster 名册窗同姿势:读面要有界)。 */
|
|
35
105
|
export declare const RETENTION_AUDIT_MAX_LIMIT = 200;
|
|
36
106
|
/** 审计读面的缺省页大小。 */
|
|
@@ -1,5 +1,107 @@
|
|
|
1
1
|
import { mysqlDriver, pgDriver } from "./sql-driver.js";
|
|
2
|
-
|
|
2
|
+
export const RETENTION_AUDIT_TABLE = "retention_audit";
|
|
3
|
+
export const RETENTION_HOLD_TABLE = "retention_hold";
|
|
4
|
+
export const RETENTION_LEASE_TABLE = "retention_lease";
|
|
5
|
+
export const TIDB_RETENTION_LANE_STATEMENTS = [
|
|
6
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_AUDIT_TABLE} (
|
|
7
|
+
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
8
|
+
domain VARCHAR(190) NOT NULL,
|
|
9
|
+
-- action:闭集词表见 RetentionAuditAction。前三词 = 破坏性行(本店写),其余 = lane/路由写。
|
|
10
|
+
action VARCHAR(32) NOT NULL,
|
|
11
|
+
-- mode:判定时点的灰度档(audit-only | enforce)——「按哪档跑的」必须与计数同行,否则事后无法解释
|
|
12
|
+
-- 一行 deleted=0 是"没有候选"还是"当时是 audit-only"。
|
|
13
|
+
mode VARCHAR(16) NOT NULL,
|
|
14
|
+
-- policy_days:判定时点的策略值(按哪版策略删的)。策略是部署 env,会被改;计数离开它就没有意义。
|
|
15
|
+
policy_days INT NOT NULL,
|
|
16
|
+
-- fencing_token:本轮 sweep lease 的 fencing token(§3;**破坏性行必填**,非破坏行可空)。丢租后
|
|
17
|
+
-- 在飞的旧轮仍可能提交一条审计行,靠这一位判别新旧轮。
|
|
18
|
+
fencing_token BIGINT NULL,
|
|
19
|
+
-- 三数字 = RetentionReceipt(audit_only 行 = previewRetention 的三候选数)。
|
|
20
|
+
deleted INT NOT NULL DEFAULT 0,
|
|
21
|
+
skipped INT NOT NULL DEFAULT 0,
|
|
22
|
+
tombstones INT NOT NULL DEFAULT 0,
|
|
23
|
+
executed_at_ms BIGINT NOT NULL,
|
|
24
|
+
error TEXT NULL,
|
|
25
|
+
PRIMARY KEY (id),
|
|
26
|
+
KEY idx_retention_audit_domain (domain, id),
|
|
27
|
+
KEY idx_retention_audit_executed (executed_at_ms)
|
|
28
|
+
) COLLATE utf8mb4_bin`,
|
|
29
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_HOLD_TABLE} (
|
|
30
|
+
domain VARCHAR(190) NOT NULL,
|
|
31
|
+
-- held:**1 = 冻结中,0 = 只是一把锁**。
|
|
32
|
+
-- 🔴 为什么冻结不能用「行在/行不在」表达(codex 对抗复审 R1-[high],验真后改的**承重**形):
|
|
33
|
+
-- 设计稿 §5 声称「PUT hold 的 commit 一旦完成,其后任何删除事务都必然看见它,串行化由行锁给出」——
|
|
34
|
+
-- 而 SELECT … FOR UPDATE **锁不住一条不存在的行**(TiDB 无 gap lock;PG 的 READ COMMITTED 同样
|
|
35
|
+
-- 不锁缺席行)。presence 形下两边都读到「没有 hold」是完全可能的,于是 operator 拿到成功回执之后
|
|
36
|
+
-- 数据仍被删 —— 那正是 F2 要消灭的那件事,只是换了个位置复发。
|
|
37
|
+
-- ⇒ 行**恒存在**(破坏性事务首步幂等建一条 held=0 的哨兵),冻结与否写在这一列上。
|
|
38
|
+
-- 于是 hold 的放置(同一 PK 的 upsert)与三只破坏性事务抢的是**同一把行锁**,串行化由引擎给出:
|
|
39
|
+
-- PUT 提交完成 ⇒ 其后每一个破坏性事务的首读必见 held=1。放置/解除都必须走这一列(车2 交接件)。
|
|
40
|
+
held TINYINT(1) NOT NULL DEFAULT 0,
|
|
41
|
+
placed_by VARCHAR(190) NULL,
|
|
42
|
+
placed_at_ms BIGINT NULL,
|
|
43
|
+
note TEXT NULL,
|
|
44
|
+
PRIMARY KEY (domain)
|
|
45
|
+
) COLLATE utf8mb4_bin`,
|
|
46
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_LEASE_TABLE} (
|
|
47
|
+
-- singleton:恒 'x' 的单行键(全局唯一一只 sweep 租约)。用定值列而不是 id=1,是为了让"这张表只能有
|
|
48
|
+
-- 一行"写在**主键**上而不是写在注释里。
|
|
49
|
+
singleton CHAR(1) NOT NULL DEFAULT 'x',
|
|
50
|
+
holder VARCHAR(190) NOT NULL,
|
|
51
|
+
-- fencing_token:每次**抢租**(而非续租)自增;随本轮全部审计行走,旧轮的写因此可判别。
|
|
52
|
+
fencing_token BIGINT NOT NULL DEFAULT 0,
|
|
53
|
+
expires_at_ms BIGINT NOT NULL,
|
|
54
|
+
PRIMARY KEY (singleton)
|
|
55
|
+
) COLLATE utf8mb4_bin`,
|
|
56
|
+
];
|
|
57
|
+
export const PG_RETENTION_LANE_SCHEMA = [
|
|
58
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_AUDIT_TABLE} (
|
|
59
|
+
id BIGSERIAL,
|
|
60
|
+
domain VARCHAR(190) COLLATE "C" NOT NULL,
|
|
61
|
+
action VARCHAR(32) COLLATE "C" NOT NULL,
|
|
62
|
+
mode VARCHAR(16) COLLATE "C" NOT NULL,
|
|
63
|
+
policy_days INT NOT NULL,
|
|
64
|
+
fencing_token BIGINT NULL,
|
|
65
|
+
deleted INT NOT NULL DEFAULT 0,
|
|
66
|
+
skipped INT NOT NULL DEFAULT 0,
|
|
67
|
+
tombstones INT NOT NULL DEFAULT 0,
|
|
68
|
+
executed_at_ms BIGINT NOT NULL,
|
|
69
|
+
error TEXT COLLATE "C" NULL,
|
|
70
|
+
PRIMARY KEY (id)
|
|
71
|
+
)`,
|
|
72
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_HOLD_TABLE} (
|
|
73
|
+
domain VARCHAR(190) COLLATE "C" NOT NULL,
|
|
74
|
+
-- held:1 = 冻结中,0 = 只是那把域级互斥行锁的哨兵。完整判据(为什么 presence 形不成立)见 MySQL 孪生。
|
|
75
|
+
held SMALLINT NOT NULL DEFAULT 0,
|
|
76
|
+
placed_by VARCHAR(190) COLLATE "C" NULL,
|
|
77
|
+
placed_at_ms BIGINT NULL,
|
|
78
|
+
note TEXT COLLATE "C" NULL,
|
|
79
|
+
PRIMARY KEY (domain)
|
|
80
|
+
)`,
|
|
81
|
+
`CREATE TABLE IF NOT EXISTS ${RETENTION_LEASE_TABLE} (
|
|
82
|
+
singleton CHAR(1) COLLATE "C" NOT NULL DEFAULT 'x',
|
|
83
|
+
holder VARCHAR(190) COLLATE "C" NOT NULL,
|
|
84
|
+
fencing_token BIGINT NOT NULL DEFAULT 0,
|
|
85
|
+
expires_at_ms BIGINT NOT NULL,
|
|
86
|
+
PRIMARY KEY (singleton)
|
|
87
|
+
)`,
|
|
88
|
+
];
|
|
89
|
+
export const RETENTION_LANE_INDEXES = [
|
|
90
|
+
{ table: `${RETENTION_AUDIT_TABLE}`, name: "idx_retention_audit_domain", columns: ["domain", "id"] },
|
|
91
|
+
{ table: `${RETENTION_AUDIT_TABLE}`, name: "idx_retention_audit_executed", columns: ["executed_at_ms"] },
|
|
92
|
+
];
|
|
93
|
+
export async function lockHoldSentinel(txn, dialect, domain) {
|
|
94
|
+
const key = domain;
|
|
95
|
+
const q = (mysql, pg) => (dialect === "mysql" ? mysql : pg);
|
|
96
|
+
await txn.query(q(`INSERT INTO ${RETENTION_HOLD_TABLE} (domain, held, placed_by, placed_at_ms, note) VALUES (?,0,NULL,NULL,NULL) ON DUPLICATE KEY UPDATE domain = domain`, `INSERT INTO ${RETENTION_HOLD_TABLE} (domain, held, placed_by, placed_at_ms, note) VALUES ($1,0,NULL,NULL,NULL) ON CONFLICT (domain) DO NOTHING`), [key]);
|
|
97
|
+
const { rows } = await txn.query(q(`SELECT held FROM ${RETENTION_HOLD_TABLE} WHERE domain = ? FOR UPDATE`, `SELECT held FROM ${RETENTION_HOLD_TABLE} WHERE domain = $1 FOR UPDATE`), [key]);
|
|
98
|
+
return Number(rows[0]?.held ?? 0) === 1;
|
|
99
|
+
}
|
|
100
|
+
export async function appendDestructiveAuditRow(txn, dialect, row) {
|
|
101
|
+
await txn.query(dialect === "mysql"
|
|
102
|
+
? `INSERT INTO ${RETENTION_AUDIT_TABLE} (domain, action, mode, policy_days, fencing_token, deleted, skipped, tombstones, executed_at_ms) VALUES (?,?,?,?,?,?,?,?,?)`
|
|
103
|
+
: `INSERT INTO ${RETENTION_AUDIT_TABLE} (domain, action, mode, policy_days, fencing_token, deleted, skipped, tombstones, executed_at_ms) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)`, [row.domain, row.action, row.audit.mode, row.audit.policyDays, row.audit.fencingToken, row.deleted, row.skipped, row.tombstones, Date.now()]);
|
|
104
|
+
}
|
|
3
105
|
export const RETENTION_AUDIT_MAX_LIMIT = 200;
|
|
4
106
|
export const RETENTION_AUDIT_DEFAULT_LIMIT = 50;
|
|
5
107
|
export class SqlRetentionLaneStore {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 托管留存的两只 SQL 谓词 —— 执行器(`stores-sql/retention-store-sql.ts`,引擎座表那一半)与部署的事务内钩(`plugins/retention-deployment.ts`,
|
|
3
|
+
* 部署表那一半)对**同一条域律**发谓词,只从这里取:一条律一个读法,两半不各写一份(分家的方向是多删或漏删)。
|
|
4
|
+
*
|
|
5
|
+
* 域 = 租户键:`COALESCE(session_meta.owner, '')` / `checkpoint.scope` 原样;**空串 `''` = 无主(anonymous/dev)桶**,谓词写成
|
|
6
|
+
* `(owner IS NULL OR owner = '')` —— 合并只发生在无主侧,永远伸不进一个真租户;拆成两个桶才会漏(NULL 那半永不被枚举)。
|
|
7
|
+
*/
|
|
8
|
+
import type { SqlDialect } from "./sql-driver.js";
|
|
9
|
+
/**
|
|
10
|
+
* 域谓词。**四种写法逐条写出来**(方言 × 有主/无主):
|
|
11
|
+
* · 有主:`col = ?` / `col = $n`;
|
|
12
|
+
* · 无主(域键 `""`):`(col IS NULL OR col = ?)` / `(col IS NULL OR col = $n)`。
|
|
13
|
+
* 🔴 两支的**占位符数量刻意相同**(无主支也绑一个 `""`):arity 一变,PG 的 `$n` 编号就会在同一条 SQL 的
|
|
14
|
+
* 后续参数上错位——那是一类只在某个域值上才复现的 bug,不许存在。
|
|
15
|
+
*/
|
|
16
|
+
export declare function retentionDomainWhere(dialect: SqlDialect, col: string, domain: string, pgIndex: number): {
|
|
17
|
+
sql: string;
|
|
18
|
+
params: unknown[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 多值集合谓词 —— **真方言分叉**(不是 SQL 文本差):MySQL 展开 N 个 `?`,PG 用**一枚**数组参数
|
|
22
|
+
* `= ANY($n::text[])`。占位符数量因此不同(N vs 1),这是先例(workflow-run-store-sql 的 reap)也是
|
|
23
|
+
* 必然:把 500 个 id 展开成 500 个 `$n` 会让语句文本随批量变形,PG 的预编译缓存跟着退化。
|
|
24
|
+
*/
|
|
25
|
+
export declare function retentionIdSet(dialect: SqlDialect, col: string, ids: readonly string[], pgIndex: number): {
|
|
26
|
+
sql: string;
|
|
27
|
+
params: unknown[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=retention-sql.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function retentionDomainWhere(dialect, col, domain, pgIndex) {
|
|
2
|
+
const ph = dialect === "mysql" ? "?" : `$${pgIndex}`;
|
|
3
|
+
return domain === "" ? { sql: `(${col} IS NULL OR ${col} = ${ph})`, params: [""] } : { sql: `${col} = ${ph}`, params: [domain] };
|
|
4
|
+
}
|
|
5
|
+
export function retentionIdSet(dialect, col, ids, pgIndex) {
|
|
6
|
+
return dialect === "mysql" ? { sql: `${col} IN (${ids.map(() => "?").join(",")})`, params: [...ids] } : { sql: `${col} = ANY($${pgIndex}::text[])`, params: [ids] };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=retention-sql.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** SQL 腿的粗筛:闭集标签各一个 `LIKE` 前缀(`<tag%`;标签名里没有 `%` / `_` / 转义字符)。粗筛中、精判不中的行(`<system-reminderish …`)不动。 */
|
|
2
|
+
export declare const RUN_PREVIEW_COARSE_PREFIXES_M45: readonly string[];
|
|
3
|
+
/** M45 选不选这一列值:以闭集开标签起头。 */
|
|
4
|
+
export declare function startsWithInjectedOpenTagM45(value: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* M45 对这一列值的新值:不选 ⇒ `undefined`(不动);选中 ⇒ 剥到不动点,仍以开标签起头 ⇒ `""`。
|
|
7
|
+
* 终止:第一遍之后的值不长于 120;此后每一遍要么逐字节不变(不动点)要么严格变短(剥块 / trim / 截都只删,脱敏对自己的产出不再命中),
|
|
8
|
+
* 所以遍数不超过「首遍结果的长度 + 1」—— 循环上界就写这个数,走出循环的那一臂不可达。
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizedRunPreviewM45(value: string): string | undefined;
|
|
11
|
+
//# sourceMappingURL=run-preview-m45.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { INJECTED_BLOCK_TAGS, buildRunObjectivePreview } from "../user-authored-text.js";
|
|
2
|
+
const INJECTED_OPEN_TAG_HEAD_M45 = new RegExp(`^<(?:${INJECTED_BLOCK_TAGS.join("|")})(?=[\\s>/]|$)`);
|
|
3
|
+
export const RUN_PREVIEW_COARSE_PREFIXES_M45 = INJECTED_BLOCK_TAGS.map((tag) => `<${tag}%`);
|
|
4
|
+
export function startsWithInjectedOpenTagM45(value) {
|
|
5
|
+
return INJECTED_OPEN_TAG_HEAD_M45.test(value);
|
|
6
|
+
}
|
|
7
|
+
export function normalizedRunPreviewM45(value) {
|
|
8
|
+
if (!startsWithInjectedOpenTagM45(value))
|
|
9
|
+
return undefined;
|
|
10
|
+
let cur = buildRunObjectivePreview(value);
|
|
11
|
+
for (let pass = 0, bound = cur.length + 1; pass <= bound; pass += 1) {
|
|
12
|
+
const next = buildRunObjectivePreview(cur);
|
|
13
|
+
if (next === cur)
|
|
14
|
+
return startsWithInjectedOpenTagM45(cur) ? "" : cur;
|
|
15
|
+
cur = next;
|
|
16
|
+
}
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=run-preview-m45.js.map
|