@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,72 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TASK_LIST_ITEM_TABLE, TASK_LIST_META_TABLE, taskListKeyFor } from "./task-list-store-sql.js";
|
|
3
|
-
import { USER_INPUT_ACCEPTANCE_TABLE } from "./user-input-ledger-sql.js";
|
|
4
|
-
import { ensureIndexes } from "./ensure-index.js";
|
|
1
|
+
import { peerSessionBoxHandle } from "@sema-agent/core";
|
|
5
2
|
import { incarnationFromCell } from "../session-incarnation.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return sweep.intervalSec > 0;
|
|
11
|
-
}
|
|
12
|
-
export function sqlStoreRetention(sweep) {
|
|
13
|
-
return retentionSweepRuns(sweep) ? MANAGED_RETENTION : UNMANAGED_RETENTION;
|
|
14
|
-
}
|
|
15
|
-
export const RETENTION_AUDIT_TABLE = "retention_audit";
|
|
16
|
-
export const RETENTION_HOLD_TABLE = "retention_hold";
|
|
17
|
-
export const RETENTION_LEASE_TABLE = "retention_lease";
|
|
3
|
+
import { MANAGED_RETENTION } from "../plugins/retention-declaration.js";
|
|
4
|
+
import { retentionDomainWhere, retentionIdSet } from "../plugins/retention-sql.js";
|
|
5
|
+
import { dropMailboxBoxOn } from "./mailbox-store-sql.js";
|
|
6
|
+
import { SEALED_EVENT, eraseSessionPolicyRowsOn } from "./session-policy-store-sql.js";
|
|
18
7
|
export const RETENTION_TOMBSTONE_TABLE = "retention_tombstone";
|
|
19
|
-
export const
|
|
20
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_AUDIT_TABLE} (
|
|
21
|
-
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
22
|
-
domain VARCHAR(190) NOT NULL,
|
|
23
|
-
-- action:闭集词表见 RetentionAuditAction。前三词 = 破坏性行(本店写),其余 = lane/路由写。
|
|
24
|
-
action VARCHAR(32) NOT NULL,
|
|
25
|
-
-- mode:判定时点的灰度档(audit-only | enforce)——「按哪档跑的」必须与计数同行,否则事后无法解释
|
|
26
|
-
-- 一行 deleted=0 是"没有候选"还是"当时是 audit-only"。
|
|
27
|
-
mode VARCHAR(16) NOT NULL,
|
|
28
|
-
-- policy_days:判定时点的策略值(按哪版策略删的)。策略是部署 env,会被改;计数离开它就没有意义。
|
|
29
|
-
policy_days INT NOT NULL,
|
|
30
|
-
-- fencing_token:本轮 sweep lease 的 fencing token(§3;**破坏性行必填**,非破坏行可空)。丢租后
|
|
31
|
-
-- 在飞的旧轮仍可能提交一条审计行,靠这一位判别新旧轮。
|
|
32
|
-
fencing_token BIGINT NULL,
|
|
33
|
-
-- 三数字 = RetentionReceipt(audit_only 行 = previewRetention 的三候选数)。
|
|
34
|
-
deleted INT NOT NULL DEFAULT 0,
|
|
35
|
-
skipped INT NOT NULL DEFAULT 0,
|
|
36
|
-
tombstones INT NOT NULL DEFAULT 0,
|
|
37
|
-
executed_at_ms BIGINT NOT NULL,
|
|
38
|
-
error TEXT NULL,
|
|
39
|
-
PRIMARY KEY (id),
|
|
40
|
-
KEY idx_retention_audit_domain (domain, id),
|
|
41
|
-
KEY idx_retention_audit_executed (executed_at_ms)
|
|
42
|
-
) COLLATE utf8mb4_bin`,
|
|
43
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_HOLD_TABLE} (
|
|
44
|
-
domain VARCHAR(190) NOT NULL,
|
|
45
|
-
-- held:**1 = 冻结中,0 = 只是一把锁**。
|
|
46
|
-
-- 🔴 为什么冻结不能用「行在/行不在」表达(codex 对抗复审 R1-[high],验真后改的**承重**形):
|
|
47
|
-
-- 设计稿 §5 声称「PUT hold 的 commit 一旦完成,其后任何删除事务都必然看见它,串行化由行锁给出」——
|
|
48
|
-
-- 而 SELECT … FOR UPDATE **锁不住一条不存在的行**(TiDB 无 gap lock;PG 的 READ COMMITTED 同样
|
|
49
|
-
-- 不锁缺席行)。presence 形下两边都读到「没有 hold」是完全可能的,于是 operator 拿到成功回执之后
|
|
50
|
-
-- 数据仍被删 —— 那正是 F2 要消灭的那件事,只是换了个位置复发。
|
|
51
|
-
-- ⇒ 行**恒存在**(破坏性事务首步幂等建一条 held=0 的哨兵),冻结与否写在这一列上。
|
|
52
|
-
-- 于是 hold 的放置(同一 PK 的 upsert)与三只破坏性事务抢的是**同一把行锁**,串行化由引擎给出:
|
|
53
|
-
-- PUT 提交完成 ⇒ 其后每一个破坏性事务的首读必见 held=1。放置/解除都必须走这一列(车2 交接件)。
|
|
54
|
-
held TINYINT(1) NOT NULL DEFAULT 0,
|
|
55
|
-
placed_by VARCHAR(190) NULL,
|
|
56
|
-
placed_at_ms BIGINT NULL,
|
|
57
|
-
note TEXT NULL,
|
|
58
|
-
PRIMARY KEY (domain)
|
|
59
|
-
) COLLATE utf8mb4_bin`,
|
|
60
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_LEASE_TABLE} (
|
|
61
|
-
-- singleton:恒 'x' 的单行键(全局唯一一只 sweep 租约)。用定值列而不是 id=1,是为了让"这张表只能有
|
|
62
|
-
-- 一行"写在**主键**上而不是写在注释里。
|
|
63
|
-
singleton CHAR(1) NOT NULL DEFAULT 'x',
|
|
64
|
-
holder VARCHAR(190) NOT NULL,
|
|
65
|
-
-- fencing_token:每次**抢租**(而非续租)自增;随本轮全部审计行走,旧轮的写因此可判别。
|
|
66
|
-
fencing_token BIGINT NOT NULL DEFAULT 0,
|
|
67
|
-
expires_at_ms BIGINT NOT NULL,
|
|
68
|
-
PRIMARY KEY (singleton)
|
|
69
|
-
) COLLATE utf8mb4_bin`,
|
|
8
|
+
export const TIDB_RETENTION_TOMBSTONE_STATEMENTS = [
|
|
70
9
|
`CREATE TABLE IF NOT EXISTS ${RETENTION_TOMBSTONE_TABLE} (
|
|
71
10
|
domain VARCHAR(190) NOT NULL,
|
|
72
11
|
-- kind:闭集(session | tool_result),见 RetentionTombstoneKind。
|
|
@@ -88,37 +27,7 @@ export const TIDB_RETENTION_STATEMENTS = [
|
|
|
88
27
|
KEY idx_retention_tombstone_key (kind, row_key)
|
|
89
28
|
) COLLATE utf8mb4_bin`,
|
|
90
29
|
];
|
|
91
|
-
export const
|
|
92
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_AUDIT_TABLE} (
|
|
93
|
-
id BIGSERIAL,
|
|
94
|
-
domain VARCHAR(190) COLLATE "C" NOT NULL,
|
|
95
|
-
action VARCHAR(32) COLLATE "C" NOT NULL,
|
|
96
|
-
mode VARCHAR(16) COLLATE "C" NOT NULL,
|
|
97
|
-
policy_days INT NOT NULL,
|
|
98
|
-
fencing_token BIGINT NULL,
|
|
99
|
-
deleted INT NOT NULL DEFAULT 0,
|
|
100
|
-
skipped INT NOT NULL DEFAULT 0,
|
|
101
|
-
tombstones INT NOT NULL DEFAULT 0,
|
|
102
|
-
executed_at_ms BIGINT NOT NULL,
|
|
103
|
-
error TEXT COLLATE "C" NULL,
|
|
104
|
-
PRIMARY KEY (id)
|
|
105
|
-
)`,
|
|
106
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_HOLD_TABLE} (
|
|
107
|
-
domain VARCHAR(190) COLLATE "C" NOT NULL,
|
|
108
|
-
-- held:1 = 冻结中,0 = 只是那把域级互斥行锁的哨兵。完整判据(为什么 presence 形不成立)见 MySQL 孪生。
|
|
109
|
-
held SMALLINT NOT NULL DEFAULT 0,
|
|
110
|
-
placed_by VARCHAR(190) COLLATE "C" NULL,
|
|
111
|
-
placed_at_ms BIGINT NULL,
|
|
112
|
-
note TEXT COLLATE "C" NULL,
|
|
113
|
-
PRIMARY KEY (domain)
|
|
114
|
-
)`,
|
|
115
|
-
`CREATE TABLE IF NOT EXISTS ${RETENTION_LEASE_TABLE} (
|
|
116
|
-
singleton CHAR(1) COLLATE "C" NOT NULL DEFAULT 'x',
|
|
117
|
-
holder VARCHAR(190) COLLATE "C" NOT NULL,
|
|
118
|
-
fencing_token BIGINT NOT NULL DEFAULT 0,
|
|
119
|
-
expires_at_ms BIGINT NOT NULL,
|
|
120
|
-
PRIMARY KEY (singleton)
|
|
121
|
-
)`,
|
|
30
|
+
export const PG_RETENTION_TOMBSTONE_SCHEMA = [
|
|
122
31
|
`CREATE TABLE IF NOT EXISTS ${RETENTION_TOMBSTONE_TABLE} (
|
|
123
32
|
domain VARCHAR(190) COLLATE "C" NOT NULL,
|
|
124
33
|
kind VARCHAR(32) COLLATE "C" NOT NULL,
|
|
@@ -128,16 +37,9 @@ export const PG_RETENTION_SCHEMA = [
|
|
|
128
37
|
PRIMARY KEY (domain, kind, row_key)
|
|
129
38
|
)`,
|
|
130
39
|
];
|
|
131
|
-
export const
|
|
132
|
-
{ table: `${RETENTION_AUDIT_TABLE}`, name: "idx_retention_audit_domain", columns: ["domain", "id"] },
|
|
133
|
-
{ table: `${RETENTION_AUDIT_TABLE}`, name: "idx_retention_audit_executed", columns: ["executed_at_ms"] },
|
|
40
|
+
export const RETENTION_TOMBSTONE_INDEXES = [
|
|
134
41
|
{ table: `${RETENTION_TOMBSTONE_TABLE}`, name: "idx_retention_tombstone_key", columns: ["kind", "row_key"] },
|
|
135
42
|
];
|
|
136
|
-
export async function ensurePgRetentionSchema(query) {
|
|
137
|
-
for (const stmt of PG_RETENTION_SCHEMA)
|
|
138
|
-
await query(stmt);
|
|
139
|
-
await ensureIndexes(query, "pg", RETENTION_INDEXES);
|
|
140
|
-
}
|
|
141
43
|
class RetentionAborted extends Error {
|
|
142
44
|
why;
|
|
143
45
|
constructor(why) {
|
|
@@ -145,13 +47,20 @@ class RetentionAborted extends Error {
|
|
|
145
47
|
this.why = why;
|
|
146
48
|
}
|
|
147
49
|
}
|
|
50
|
+
class EraseRefused extends Error {
|
|
51
|
+
refusal;
|
|
52
|
+
constructor(refusal) {
|
|
53
|
+
super(`session erase refused: ${refusal.message}`);
|
|
54
|
+
this.refusal = refusal;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
148
57
|
export const RETENTION_SESSION_BATCH = 500;
|
|
149
58
|
export const RETENTION_ROW_BATCH = 2000;
|
|
150
59
|
export class SqlRetentionStore {
|
|
151
60
|
db;
|
|
152
61
|
opts;
|
|
153
62
|
retention = MANAGED_RETENTION;
|
|
154
|
-
constructor(db, opts) {
|
|
63
|
+
constructor(db, opts = {}) {
|
|
155
64
|
this.db = db;
|
|
156
65
|
this.opts = opts;
|
|
157
66
|
}
|
|
@@ -159,14 +68,10 @@ export class SqlRetentionStore {
|
|
|
159
68
|
return this.db.dialect === "mysql" ? mysql : pg;
|
|
160
69
|
}
|
|
161
70
|
domainWhere(col, domain, pgIndex) {
|
|
162
|
-
return domain
|
|
163
|
-
? { sql: this.q(`(${col} IS NULL OR ${col} = ?)`, `(${col} IS NULL OR ${col} = $${pgIndex})`), params: [""] }
|
|
164
|
-
: { sql: this.q(`${col} = ?`, `${col} = $${pgIndex}`), params: [domain] };
|
|
71
|
+
return retentionDomainWhere(this.db.dialect, col, domain, pgIndex);
|
|
165
72
|
}
|
|
166
73
|
idSet(col, ids, pgIndex) {
|
|
167
|
-
return this.db.dialect
|
|
168
|
-
? { sql: `${col} IN (${ids.map(() => "?").join(",")})`, params: [...ids] }
|
|
169
|
-
: { sql: `${col} = ANY($${pgIndex}::text[])`, params: [ids] };
|
|
74
|
+
return retentionIdSet(this.db.dialect, col, ids, pgIndex);
|
|
170
75
|
}
|
|
171
76
|
async tx(fn) {
|
|
172
77
|
const conn = await this.db.connect();
|
|
@@ -189,22 +94,43 @@ export class SqlRetentionStore {
|
|
|
189
94
|
conn.release();
|
|
190
95
|
}
|
|
191
96
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
97
|
+
statementFace(conn) {
|
|
98
|
+
return { query: (sql, params) => conn.query(sql, params) };
|
|
99
|
+
}
|
|
100
|
+
async heldBy(face, call) {
|
|
101
|
+
const holdLock = this.opts.transactionHooks?.retention?.holdLock;
|
|
102
|
+
if (holdLock === undefined)
|
|
103
|
+
return false;
|
|
104
|
+
const answer = await holdLock(face, call);
|
|
105
|
+
switch (answer) {
|
|
106
|
+
case "proceed":
|
|
107
|
+
return false;
|
|
108
|
+
case "held":
|
|
109
|
+
return true;
|
|
110
|
+
default: {
|
|
111
|
+
const unknown = answer;
|
|
112
|
+
throw new Error(`retention: holdLock answered ${JSON.stringify(unknown)} for ${call.op} in domain ${JSON.stringify(call.domain)} — the closed answer set is "proceed" | "held"; rolling back.`);
|
|
113
|
+
}
|
|
197
114
|
}
|
|
198
|
-
return input.audit;
|
|
199
115
|
}
|
|
200
|
-
async
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
116
|
+
async refusalOf(face, write) {
|
|
117
|
+
const rootSessionId = write.rootSessionId;
|
|
118
|
+
const beforeCommit = this.opts.transactionHooks?.session?.beforeCommit;
|
|
119
|
+
if (beforeCommit === undefined)
|
|
120
|
+
return undefined;
|
|
121
|
+
const answer = await beforeCommit(face, write);
|
|
122
|
+
if (answer === "proceed")
|
|
123
|
+
return undefined;
|
|
124
|
+
if (typeof answer === "object" && answer !== null && answer.refuse instanceof Error)
|
|
125
|
+
return answer.refuse;
|
|
126
|
+
throw new Error(`retention: session.beforeCommit answered ${JSON.stringify(answer)} for root ${JSON.stringify(rootSessionId)} — the closed answer set is "proceed" | { refuse }; rolling back.`);
|
|
127
|
+
}
|
|
128
|
+
async referencedBy(face, candidates) {
|
|
129
|
+
const liveReferences = this.opts.transactionHooks?.retention?.liveReferences;
|
|
130
|
+
return liveReferences === undefined || candidates.length === 0 ? new Set() : liveReferences(face, candidates);
|
|
205
131
|
}
|
|
206
|
-
async
|
|
207
|
-
await
|
|
132
|
+
async auditedBy(face, call, receipt) {
|
|
133
|
+
await this.opts.transactionHooks?.retention?.audit?.(face, call, receipt);
|
|
208
134
|
}
|
|
209
135
|
async writeTombstones(conn, domain, kind, keys) {
|
|
210
136
|
if (keys.length === 0)
|
|
@@ -236,11 +162,12 @@ export class SqlRetentionStore {
|
|
|
236
162
|
return { checkpoints, sessions, toolResults };
|
|
237
163
|
}
|
|
238
164
|
async expireCheckpoints(input) {
|
|
239
|
-
const
|
|
165
|
+
const call = { domain: input.domain, op: "expireCheckpoints" };
|
|
240
166
|
let skippedOnAbort = 0;
|
|
241
167
|
try {
|
|
242
168
|
return await this.tx(async (conn) => {
|
|
243
|
-
|
|
169
|
+
const face = this.statementFace(conn);
|
|
170
|
+
if (await this.heldBy(face, call)) {
|
|
244
171
|
skippedOnAbort = (await this.expiryCandidates(conn, input)).length + (await this.countPinnedExpiryCandidates(conn, input));
|
|
245
172
|
throw new RetentionAborted("hold_in_force");
|
|
246
173
|
}
|
|
@@ -252,12 +179,13 @@ export class SqlRetentionStore {
|
|
|
252
179
|
const w = this.domainWhere("scope", input.domain, 2);
|
|
253
180
|
const set = this.idSet("token", doomed, 3);
|
|
254
181
|
const res = await conn.query(this.q(`UPDATE checkpoint SET status = 'expired', decided_at_ms = ? WHERE ${w.sql} AND status = 'pending' AND ${set.sql} ` +
|
|
255
|
-
`AND NOT
|
|
256
|
-
`AND NOT
|
|
182
|
+
`AND NOT ${SqlRetentionStore.pinnedExists("checkpoint")}`, `UPDATE checkpoint SET status = 'expired', decided_at_ms = $1 WHERE ${w.sql} AND status = 'pending' AND ${set.sql} ` +
|
|
183
|
+
`AND NOT ${SqlRetentionStore.pinnedExists("checkpoint")}`), [Date.now(), ...w.params, ...set.params]);
|
|
257
184
|
expired = res.affected;
|
|
258
185
|
}
|
|
259
|
-
|
|
260
|
-
|
|
186
|
+
const receipt = { domain: input.domain, deleted: expired, skipped: pinned, tombstones: 0 };
|
|
187
|
+
await this.auditedBy(face, call, receipt);
|
|
188
|
+
return receipt;
|
|
261
189
|
});
|
|
262
190
|
}
|
|
263
191
|
catch (err) {
|
|
@@ -271,19 +199,21 @@ export class SqlRetentionStore {
|
|
|
271
199
|
? `((c.deadline IS NOT NULL AND c.deadline <= ?) OR (c.deadline IS NULL AND c.created_at_ms <= ?))`
|
|
272
200
|
: `((c.deadline IS NOT NULL AND c.deadline <= $${pgFirst}) OR (c.deadline IS NULL AND c.created_at_ms <= $${pgFirst + 1}))`;
|
|
273
201
|
}
|
|
274
|
-
static
|
|
202
|
+
static pinnedExists(row) {
|
|
203
|
+
return `EXISTS (SELECT 1 FROM task_active ta WHERE ta.session_id = ${row}.host_session_id)`;
|
|
204
|
+
}
|
|
275
205
|
async expiryCandidates(exec, input) {
|
|
276
206
|
const w = this.domainWhere("c.scope", input.domain, 1);
|
|
277
207
|
const { rows } = await exec.query(this.q(`SELECT c.token FROM checkpoint c WHERE ${w.sql} AND c.status = 'pending' AND ${this.horizonArms(2)} ` +
|
|
278
|
-
`AND NOT ${SqlRetentionStore.
|
|
279
|
-
`AND NOT ${SqlRetentionStore.
|
|
208
|
+
`AND NOT ${SqlRetentionStore.pinnedExists("c")} ORDER BY c.created_at_ms ASC LIMIT ?`, `SELECT c.token FROM checkpoint c WHERE ${w.sql} AND c.status = 'pending' AND ${this.horizonArms(2)} ` +
|
|
209
|
+
`AND NOT ${SqlRetentionStore.pinnedExists("c")} ORDER BY c.created_at_ms ASC LIMIT $4`), [...w.params, input.cutoffMs, input.cutoffMs, RETENTION_ROW_BATCH]);
|
|
280
210
|
return rows.map((r) => String(r.token));
|
|
281
211
|
}
|
|
282
212
|
async countPinnedExpiryCandidates(exec, input) {
|
|
283
213
|
const w = this.domainWhere("c.scope", input.domain, 1);
|
|
284
214
|
const { rows } = await exec.query(this.q(`SELECT COUNT(*) AS n FROM (SELECT 1 AS one FROM checkpoint c WHERE ${w.sql} AND c.status = 'pending' AND ${this.horizonArms(2)} ` +
|
|
285
|
-
`AND ${SqlRetentionStore.
|
|
286
|
-
`AND ${SqlRetentionStore.
|
|
215
|
+
`AND ${SqlRetentionStore.pinnedExists("c")} LIMIT ?) x`, `SELECT COUNT(*) AS n FROM (SELECT 1 AS one FROM checkpoint c WHERE ${w.sql} AND c.status = 'pending' AND ${this.horizonArms(2)} ` +
|
|
216
|
+
`AND ${SqlRetentionStore.pinnedExists("c")} LIMIT $4) x`), [...w.params, input.cutoffMs, input.cutoffMs, RETENTION_ROW_BATCH]);
|
|
287
217
|
return Number(rows[0]?.n ?? 0);
|
|
288
218
|
}
|
|
289
219
|
liveReferenceExists() {
|
|
@@ -329,33 +259,30 @@ export class SqlRetentionStore {
|
|
|
329
259
|
return rows.map((r) => String(r.ref));
|
|
330
260
|
}
|
|
331
261
|
async deleteExpiredSessions(input) {
|
|
332
|
-
const
|
|
262
|
+
const call = { domain: input.domain, op: "deleteExpiredSessions" };
|
|
333
263
|
let skippedOnAbort = 0;
|
|
264
|
+
const unattributable = await this.unattributableToolResults();
|
|
334
265
|
try {
|
|
335
266
|
return await this.tx(async (conn) => {
|
|
336
|
-
|
|
267
|
+
const face = this.statementFace(conn);
|
|
268
|
+
if (await this.heldBy(face, call)) {
|
|
337
269
|
skippedOnAbort = (await this.sessionCandidates(conn, input)).length + (await this.countProtectedSessions(conn, input));
|
|
338
270
|
throw new RetentionAborted("hold_in_force");
|
|
339
271
|
}
|
|
340
272
|
const candidates = await this.sessionCandidates(conn, input, true);
|
|
341
|
-
const
|
|
342
|
-
const doomed = [];
|
|
273
|
+
const admitted = [];
|
|
343
274
|
for (const c of candidates)
|
|
344
|
-
if ((await
|
|
345
|
-
|
|
346
|
-
const
|
|
275
|
+
if ((await this.refusalOf(face, { op: "retention-delete", rootSessionId: c.id })) === undefined)
|
|
276
|
+
admitted.push(c);
|
|
277
|
+
const referenced = await this.referencedBy(face, admitted.map((c) => c.id));
|
|
278
|
+
const doomed = admitted.filter((c) => !referenced.has(c.id));
|
|
279
|
+
const skipped = (await this.countProtectedSessions(conn, input)) + (candidates.length - doomed.length);
|
|
347
280
|
skippedOnAbort = doomed.length + skipped;
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
tombstones = await this.writeTombstones(conn, input.domain, "session", ids);
|
|
354
|
-
}
|
|
355
|
-
await this.writeAuditRow(conn, { domain: input.domain, action: "deleted_sessions", audit, deleted, skipped, tombstones });
|
|
356
|
-
const endedSpaces = doomed.flatMap((d) => (d.incarnation === undefined ? [] : [{ sessionId: d.id, spaceKey: d.incarnation }]));
|
|
357
|
-
return { domain: input.domain, deleted, skipped, tombstones, ...(endedSpaces.length > 0 ? { endedSpaces } : {}) };
|
|
358
|
-
});
|
|
281
|
+
const erased = doomed.length > 0 ? await this.eraseTreesInTxn(conn, face, input.domain, doomed, "drop") : undefined;
|
|
282
|
+
const receipt = { domain: input.domain, deleted: erased?.deleted ?? 0, skipped, tombstones: erased?.tombstones ?? 0 };
|
|
283
|
+
await this.auditedBy(face, call, receipt);
|
|
284
|
+
return { receipt, erased: erased?.rows };
|
|
285
|
+
}).then(({ receipt, erased }) => (erased !== undefined ? { ...receipt, erasedRows: { ...erased, unattributableToolResults: unattributable } } : receipt));
|
|
359
286
|
}
|
|
360
287
|
catch (err) {
|
|
361
288
|
if (err instanceof RetentionAborted)
|
|
@@ -363,30 +290,52 @@ export class SqlRetentionStore {
|
|
|
363
290
|
throw err;
|
|
364
291
|
}
|
|
365
292
|
}
|
|
366
|
-
async
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
const s = set("tr.session_id", 1);
|
|
370
|
-
await conn.query(this.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]);
|
|
371
|
-
}
|
|
372
|
-
{
|
|
373
|
-
const s = set("tr.session_id", 1);
|
|
374
|
-
await conn.query(this.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]);
|
|
375
|
-
}
|
|
376
|
-
{
|
|
377
|
-
const s = set("session_id", 1);
|
|
378
|
-
await conn.query(`DELETE FROM task_run WHERE ${s.sql}`, [...s.params]);
|
|
293
|
+
async eraseSession(input) {
|
|
294
|
+
if (this.opts.transactionHooks?.session?.beforeCommit === undefined) {
|
|
295
|
+
throw new Error(`retention: eraseSession(${JSON.stringify(input.sessionId)}) needs the session write hook (the erase token judge) — refusing to delete a session that no judge can confirm is in this deletion's deleting state`);
|
|
379
296
|
}
|
|
297
|
+
const unattributable = await this.unattributableToolResults();
|
|
298
|
+
const out = await this.tx(async (conn) => {
|
|
299
|
+
const face = this.statementFace(conn);
|
|
300
|
+
const { rows } = await conn.query(this.q("SELECT owner, incarnation FROM session_meta WHERE session_id = ? FOR UPDATE", "SELECT owner, incarnation FROM session_meta WHERE session_id = $1 FOR UPDATE"), [input.sessionId]);
|
|
301
|
+
const row = rows[0];
|
|
302
|
+
if (row === undefined)
|
|
303
|
+
return { outcome: "absent" };
|
|
304
|
+
const owner = row.owner === null || row.owner === undefined ? null : String(row.owner);
|
|
305
|
+
if (owner !== input.owner)
|
|
306
|
+
return { outcome: "absent" };
|
|
307
|
+
const incarnation = incarnationFromCell(input.sessionId, row.incarnation, "absent");
|
|
308
|
+
const refusal = await this.refusalOf(face, { op: "erase", rootSessionId: input.sessionId, token: input.token });
|
|
309
|
+
if (refusal !== undefined)
|
|
310
|
+
throw new EraseRefused(refusal);
|
|
311
|
+
const erased = await this.eraseTreesInTxn(conn, face, owner ?? "", [{ id: input.sessionId, incarnation }], "keep");
|
|
312
|
+
return { outcome: "erased", rows: erased.rows };
|
|
313
|
+
}).catch((err) => {
|
|
314
|
+
if (err instanceof EraseRefused)
|
|
315
|
+
return { outcome: "refused", refusal: err.refusal };
|
|
316
|
+
throw err;
|
|
317
|
+
});
|
|
318
|
+
return out.outcome === "erased" ? { outcome: "erased", rows: { ...out.rows, unattributableToolResults: unattributable } } : out;
|
|
319
|
+
}
|
|
320
|
+
async unattributableToolResults() {
|
|
321
|
+
const { rows: unowned } = await this.db.query("SELECT COUNT(*) AS n FROM tool_result WHERE owner_session_id IS NULL");
|
|
322
|
+
return Number(unowned[0]?.n ?? 0);
|
|
323
|
+
}
|
|
324
|
+
async eraseTreesInTxn(conn, face, domain, doomed, ruleMarks) {
|
|
325
|
+
const ids = doomed.map((d) => d.id);
|
|
326
|
+
await this.opts.transactionHooks?.retention?.beforeDelete?.(face, doomed.map((d) => ({ sessionId: d.id, incarnation: d.incarnation })));
|
|
327
|
+
const deleted = await this.purgeSessionTrees(conn, domain, ids, ruleMarks);
|
|
328
|
+
const tombstones = await this.writeTombstones(conn, domain, "session", ids);
|
|
329
|
+
const owner = domain === "" ? null : domain;
|
|
330
|
+
return { deleted, tombstones, rows: { sessions: doomed.map((d) => ({ sessionId: d.id, owner, incarnation: d.incarnation })) } };
|
|
331
|
+
}
|
|
332
|
+
async purgeSessionTrees(conn, domain, ids, ruleMarks) {
|
|
333
|
+
const set = (col, pgIndex) => this.idSet(col, ids, pgIndex);
|
|
380
334
|
{
|
|
381
335
|
const s = set("checkpoint.session_id", 1);
|
|
382
336
|
const w = this.domainWhere("sm.owner", domain, 2);
|
|
383
337
|
await conn.query(`DELETE FROM checkpoint WHERE ${s.sql} AND EXISTS (SELECT 1 FROM session_meta sm WHERE sm.session_id = checkpoint.session_id AND ${w.sql})`, [...s.params, ...w.params]);
|
|
384
338
|
}
|
|
385
|
-
{
|
|
386
|
-
const s = set("checkpoint_ctx.session_id", 1);
|
|
387
|
-
const w = this.domainWhere("sm.owner", domain, 2);
|
|
388
|
-
await conn.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]);
|
|
389
|
-
}
|
|
390
339
|
{
|
|
391
340
|
const s = set("owner_session_id", 1);
|
|
392
341
|
await conn.query(`DELETE FROM tool_result WHERE ${s.sql}`, s.params);
|
|
@@ -395,13 +344,23 @@ export class SqlRetentionStore {
|
|
|
395
344
|
const s = set("scope", 1);
|
|
396
345
|
await conn.query(`SELECT scope FROM file_history_scope WHERE ${s.sql} ORDER BY scope FOR UPDATE`, s.params);
|
|
397
346
|
}
|
|
347
|
+
if (ruleMarks === "drop") {
|
|
348
|
+
for (const table of ["session_policy", "session_policy_rev_mark"]) {
|
|
349
|
+
const s = set("session_id", 1);
|
|
350
|
+
await conn.query(`DELETE FROM ${table} WHERE ${s.sql}`, s.params);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
const sealed = await eraseSessionPolicyRowsOn(conn, this.db.dialect, ids);
|
|
355
|
+
if (sealed.length > 0) {
|
|
356
|
+
this.opts.logger?.warn?.(SEALED_EVENT, {
|
|
357
|
+
sessionIds: ids,
|
|
358
|
+
keys: sealed,
|
|
359
|
+
note: "these rows' counters were unreadable, so the erase could not end their lineage: each key now carries a sealed rev mark and answers every read and write with SessionPolicyError corrupt until an operator unseals its session_policy_rev_mark row in place (USAGE §9.11)",
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
398
363
|
for (const [table, col] of [
|
|
399
|
-
["resume_anchor", "session_id"],
|
|
400
|
-
["approval_exemption", "session_id"],
|
|
401
|
-
["session_policy", "session_id"],
|
|
402
|
-
["session_policy_rev_mark", "session_id"],
|
|
403
|
-
...(this.opts.taskAttachmentTable ? [["task_attachment", "session_id"]] : []),
|
|
404
|
-
[USER_INPUT_ACCEPTANCE_TABLE, "session_id"],
|
|
405
364
|
["file_history_tracked", "scope"],
|
|
406
365
|
["file_history_version", "scope"],
|
|
407
366
|
["file_history_boundary", "scope"],
|
|
@@ -412,20 +371,10 @@ export class SqlRetentionStore {
|
|
|
412
371
|
const s = set(col, 1);
|
|
413
372
|
await conn.query(`DELETE FROM ${table} WHERE ${s.sql}`, s.params);
|
|
414
373
|
}
|
|
415
|
-
if (this.opts.
|
|
416
|
-
const
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
await conn.query(`SELECT list_key FROM ${TASK_LIST_META_TABLE} WHERE ${s.sql} ORDER BY list_key FOR UPDATE`, s.params);
|
|
420
|
-
}
|
|
421
|
-
for (const table of [TASK_LIST_ITEM_TABLE, TASK_LIST_META_TABLE]) {
|
|
422
|
-
const s = this.idSet("list_key", listKeys, 1);
|
|
423
|
-
await conn.query(`DELETE FROM ${table} WHERE ${s.sql}`, s.params);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
{
|
|
427
|
-
const s = set("session_id", 1);
|
|
428
|
-
await conn.query(`DELETE FROM workflow_completion_inbox WHERE ${s.sql}`, s.params);
|
|
374
|
+
if (this.opts.sessionBoxScope !== undefined) {
|
|
375
|
+
const scope = this.opts.sessionBoxScope(domain === "" ? null : domain);
|
|
376
|
+
for (const id of ids)
|
|
377
|
+
await dropMailboxBoxOn(conn, this.db.dialect, scope, peerSessionBoxHandle(id));
|
|
429
378
|
}
|
|
430
379
|
const s = set("session_id", 1);
|
|
431
380
|
const w = this.domainWhere("owner", domain, 2);
|
|
@@ -440,11 +389,12 @@ export class SqlRetentionStore {
|
|
|
440
389
|
return metaRes.affected;
|
|
441
390
|
}
|
|
442
391
|
async deleteOrphanToolResults(input) {
|
|
443
|
-
const
|
|
392
|
+
const call = { domain: input.domain, op: "deleteOrphanToolResults" };
|
|
444
393
|
let skippedOnAbort = 0;
|
|
445
394
|
try {
|
|
446
395
|
return await this.tx(async (conn) => {
|
|
447
|
-
|
|
396
|
+
const face = this.statementFace(conn);
|
|
397
|
+
if (await this.heldBy(face, call)) {
|
|
448
398
|
skippedOnAbort = (await this.orphanToolResultCandidates(conn, input)).length + (await this.countLiveReachableToolResults(conn, input));
|
|
449
399
|
throw new RetentionAborted("hold_in_force");
|
|
450
400
|
}
|
|
@@ -458,8 +408,9 @@ export class SqlRetentionStore {
|
|
|
458
408
|
deleted = res.affected;
|
|
459
409
|
tombstones = await this.writeTombstones(conn, input.domain, "tool_result", refs);
|
|
460
410
|
}
|
|
461
|
-
|
|
462
|
-
|
|
411
|
+
const receipt = { domain: input.domain, deleted, skipped: reachable, tombstones };
|
|
412
|
+
await this.auditedBy(face, call, receipt);
|
|
413
|
+
return receipt;
|
|
463
414
|
});
|
|
464
415
|
}
|
|
465
416
|
catch (err) {
|
|
@@ -474,14 +425,4 @@ export class SqlRetentionStore {
|
|
|
474
425
|
return Number(rows[0]?.n ?? 0);
|
|
475
426
|
}
|
|
476
427
|
}
|
|
477
|
-
export class TiDBRetentionStore extends SqlRetentionStore {
|
|
478
|
-
constructor(pool, opts) {
|
|
479
|
-
super(mysqlDriver(pool), opts);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
export class PgRetentionStore extends SqlRetentionStore {
|
|
483
|
-
constructor(pool, opts) {
|
|
484
|
-
super(pgDriver(pool), opts);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
428
|
//# sourceMappingURL=retention-store-sql.js.map
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* `isJsonColumnBodyProblem`,不另写一份。
|
|
29
29
|
*/
|
|
30
30
|
import { type SessionTreeEntry } from "@sema-agent/core";
|
|
31
|
-
import { type JsonColumnReader } from "
|
|
31
|
+
import { type JsonColumnReader } from "../plugins/sql-json-column.js";
|
|
32
32
|
/**
|
|
33
33
|
* 形读者:core 自己声明的 `SessionTreeEntryBase` 里那两把**不可省**的串键。
|
|
34
34
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SessionError } from "@sema-agent/core";
|
|
2
|
-
import { decodeJsonColumn, isJsonColumnBodyProblem } from "
|
|
2
|
+
import { decodeJsonColumn, isJsonColumnBodyProblem } from "../plugins/sql-json-column.js";
|
|
3
3
|
export const readSessionEventPayload = (body) => {
|
|
4
4
|
if (typeof body !== "object" || body === null || Array.isArray(body))
|
|
5
5
|
return { problem: "expected a JSON object (a SessionTreeEntry)" };
|
|
@@ -2,7 +2,7 @@ import { type SessionPolicyStore, type SessionPermissionRules, type StoredSessio
|
|
|
2
2
|
import type { Pool as MySqlPool } from "mysql2/promise";
|
|
3
3
|
import type { Pool as PgPool } from "pg";
|
|
4
4
|
import { type JsonColumnShape } from "../plugins/sql-json-column.js";
|
|
5
|
-
import { type SqlDriver } from "../plugins/sql-driver.js";
|
|
5
|
+
import { type SqlDialect, type SqlDriver, type SqlTxConn } from "../plugins/sql-driver.js";
|
|
6
6
|
/** `session_policy.policy_key` 的**唯一铸造点**(core 复合键的 sha256)。
|
|
7
7
|
*
|
|
8
8
|
* 🔴 导出而不是让收编腿再抄一份(clay 宪法「schema 单一属主禁复制」):[ref] form b 的身份重绑要
|
|
@@ -44,16 +44,38 @@ export type StoredSessionRulesBody = SessionPermissionRules & Pick<StoredSession
|
|
|
44
44
|
* + 恰好解一次 `decodeJsonColumn` + 折码 `foldJsonColumn`);本店只留「形判据是哪一只」与「坏体折成哪个码」。
|
|
45
45
|
*/
|
|
46
46
|
export declare function readSessionRulesBody(body: unknown): JsonColumnShape<StoredSessionRulesBody>;
|
|
47
|
-
/**
|
|
48
|
-
|
|
47
|
+
/** 封键的 warn 事件名(提交后每次抹除至多一条,点名会话与被封的键)。 */
|
|
48
|
+
export declare const SEALED_EVENT = "session_policy_erase_sealed_keys";
|
|
49
|
+
/** 一把被封的键:单向哈希的键 + 那一行读不出的两个计数的原文(取证用;不带 principal 明文、不带规则体)。 */
|
|
50
|
+
export type SealedEraseKey = {
|
|
51
|
+
readonly policyKey: string;
|
|
52
|
+
readonly rev: string;
|
|
53
|
+
readonly gen: string;
|
|
54
|
+
};
|
|
55
|
+
/** 本店的日志口:抹除封键那一臂([ref])的点名。**必填**:组合座(`store-backend.ts`)交服务的日志口,没有自己的就交日志出口接缝的
|
|
56
|
+
* 缺省 logger —— 本目录不碰 stdio(目录的可搬性;进程 stdout / stderr 只有接缝一个出口,`test/log-exit-single-source-gate.test.ts`)。
|
|
57
|
+
* 结构型,与服务日志口的 `warn` 逐位同形,服务的日志口照样直接交进来。注入的这只抛 ⇒ 同一行落接缝的缺省 logger(见 `discloseSealed`)。 */
|
|
49
58
|
export type SessionPolicyStoreLogger = {
|
|
50
59
|
warn(msg: string, fields?: Record<string, unknown>): void;
|
|
51
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* 一次客户端写的计数(部署的格:会话规则是客户端可见的会话态,提交出口撤回一只刚铸的会话之前读这只计数)。组合座交入;店只在锁住根行、根行在、
|
|
63
|
+
* 所有拒判之后、规则落行之前,同一事务、同一连接调它一次 —— 计数住部署的旁表,店目录不认识那张表。
|
|
64
|
+
*/
|
|
65
|
+
export type SessionClientWriteCounter = (conn: SqlTxConn, dialect: SqlDriver["dialect"], sessionId: string) => Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* 按会话抹除规则行的**唯一语句源**(店的 `deleteBySession` 在自己的事务里调;会话删除执行体 `retention-store-sql.ts` 在会话树事务里对一批会话调 ——
|
|
68
|
+
* 同一组语句,`session_policy_rev_mark` 的高水位律只写这一处,core 契约 `session_policy.rev_survives_delete`)。调用方持事务。
|
|
69
|
+
* 步序:锁这批会话的规则行(`policy_key` 升序,与 `putRules` 同向)→ 每把键写记号(rev 高水位 + 下一代 `gen`;读不出计数的行写封键)→ 删规则行。
|
|
70
|
+
* 返回封键(调用方负责响亮披露)。没有规则行 ⇒ 零写。
|
|
71
|
+
*/
|
|
72
|
+
export declare function eraseSessionPolicyRowsOn(conn: Pick<SqlTxConn, "query">, dialect: SqlDialect, sessionIds: readonly string[]): Promise<readonly SealedEraseKey[]>;
|
|
52
73
|
/** Dual-dialect durable SessionPolicyStore. See the file header for the dialect-delta ledger. */
|
|
53
74
|
export declare class SqlSessionPolicyStore implements SessionPolicyStore {
|
|
54
75
|
private readonly db;
|
|
55
|
-
private readonly
|
|
56
|
-
|
|
76
|
+
private readonly countClientWrite;
|
|
77
|
+
private readonly logger;
|
|
78
|
+
constructor(db: SqlDriver, countClientWrite: SessionClientWriteCounter, logger: SessionPolicyStoreLogger);
|
|
57
79
|
/** Pick the dialect's SQL text. Both statements stay written out at the call site ON PURPOSE. */
|
|
58
80
|
private q;
|
|
59
81
|
/** 判据属主 = `sql-errors.ts`([ref] P1-①;本站点旧形已是并集形,收编后语义不变)。 */
|
|
@@ -106,7 +128,7 @@ export declare class SqlSessionPolicyStore implements SessionPolicyStore {
|
|
|
106
128
|
* order. This is the SAME lock order putRules uses (policy row → mark row), which is the whole point: the
|
|
107
129
|
* obvious shape (`INSERT … SELECT` the marks, then DELETE) locks the MARK first and takes only a SHARED lock
|
|
108
130
|
* on the policy rows it reads, i.e. a reversed order PLUS an S→X upgrade — the textbook deadlock this repo
|
|
109
|
-
* 已经吃过两次(
|
|
131
|
+
* 已经吃过两次(留存会话树删除的 file-history 哨兵腿与任务清单腿的 [ref] 案:一边持 boundary 等哨兵,一边持哨兵等 boundary)。
|
|
110
132
|
* ② the marks (their revs come from ①'s already-locked rows) — `GREATEST` merge, so a mark only ever RISES and
|
|
111
133
|
* repeated erases never walk the line back.
|
|
112
134
|
* ③ the DELETE — scoped to ①'s POLICY_KEY SET, never re-scanned by `session_id`. 🔴 This is the whole of
|
|
@@ -143,9 +165,9 @@ export declare class SqlSessionPolicyStore implements SessionPolicyStore {
|
|
|
143
165
|
* (驱动错误;那只记号本来就读不回,`putRules` 同样拒)—— 抹除不读记号,这一形不在本判词射程内。 */
|
|
144
166
|
deleteBySession(sessionId: string): Promise<void>;
|
|
145
167
|
/**
|
|
146
|
-
* [ref] 封键的响亮面:一次抹除至多一条 warn
|
|
147
|
-
*
|
|
148
|
-
*
|
|
168
|
+
* [ref] 封键的响亮面:一次抹除至多一条 warn。走到这里删除已经提交,一次日志故障不许把它报成失败(E21 会因此 500、
|
|
169
|
+
* overwrite-dst 会因此中止;codex 7.105.0 修复验证轮 [medium] 同形)⇒ 日志座抛不往外抛;**也不吞披露**:同一行落日志出口接缝的
|
|
170
|
+
* 缺省 logger(与数据根权限收紧的披露座同一条律:披露不许因日志座坏而消失)—— 运维面对一把读写都拒的封键,要靠这一行知道为什么。
|
|
149
171
|
*/
|
|
150
172
|
private discloseSealed;
|
|
151
173
|
/**
|
|
@@ -161,10 +183,10 @@ export declare class SqlSessionPolicyStore implements SessionPolicyStore {
|
|
|
161
183
|
}
|
|
162
184
|
/** MySQL-protocol (TiDB) binding — historical class name + ctor shape preserved. */
|
|
163
185
|
export declare class TiDBSessionPolicyStore extends SqlSessionPolicyStore {
|
|
164
|
-
constructor(pool: MySqlPool, logger
|
|
186
|
+
constructor(pool: MySqlPool, countClientWrite: SessionClientWriteCounter, logger: SessionPolicyStoreLogger);
|
|
165
187
|
}
|
|
166
188
|
/** PostgreSQL binding — historical class name + ctor shape preserved. */
|
|
167
189
|
export declare class PgSessionPolicyStore extends SqlSessionPolicyStore {
|
|
168
|
-
constructor(pool: PgPool, logger
|
|
190
|
+
constructor(pool: PgPool, countClientWrite: SessionClientWriteCounter, logger: SessionPolicyStoreLogger);
|
|
169
191
|
}
|
|
170
192
|
//# sourceMappingURL=session-policy-store-sql.d.ts.map
|