@sema-agent/server 7.147.0 → 7.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
|
@@ -2,7 +2,7 @@ import { homedir } from "node:os";
|
|
|
2
2
|
import { createCorruptReadSeat, createDurableAbsenceSeat } from "../observability/corrupt-read-seat.js";
|
|
3
3
|
import { createLogger } from "../observability/logger.js";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import { existsSync
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
6
|
import { AdoptionError, FileStorageBackend } from "@sema-agent/core";
|
|
7
7
|
import { FileWorkflowJournalStore } from "@sema-agent/core";
|
|
8
8
|
import { fileSessionCaptureRecordStore } from "@sema-agent/core";
|
|
@@ -12,14 +12,22 @@ import { TiDBWorkflowRunStore, TiDBWorkflowCompletionInbox, TiDBWorkflowNotifyJo
|
|
|
12
12
|
import { FileRunStore } from "./file-run-store.js";
|
|
13
13
|
import { LocalWorkflowParkDecisionStore } from "../orchestration/workflow-park-decision.js";
|
|
14
14
|
import { StoreBootRefusalError } from "./store-contracts.js";
|
|
15
|
+
import { databaseAnswerCodesOf, isDeploymentFaultError } from "./sql-errors.js";
|
|
15
16
|
import { buildStoreOpenRefusalTail } from "./store-open-refusal.js";
|
|
16
17
|
import { acquireLocalBackendWithWait } from "./store-lock-wait.js";
|
|
17
|
-
import { NO_SQL_MIGRATIONS, assertExecutionPlacementSwitchAdmissibleOnPool, backfillLocalAskExecutionLanes, backfillLocalExecutionPlacements, runSqlOneTimeMigrations } from "./one-time-migrations.js";
|
|
18
|
+
import { NO_SQL_MIGRATIONS, migrationCarried, assertExecutionPlacementSwitchAdmissibleOnPool, backfillLocalAskExecutionLanes, backfillLocalExecutionPlacements, runSqlOneTimeMigrations } from "./one-time-migrations.js";
|
|
18
19
|
import { deployedExecutionLanes } from "../execution-lane-caps.js";
|
|
20
|
+
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
21
|
+
import { LOCAL_MARKER_FILE, switchLocalScenarioPrefixM42 } from "./scenario-prefix-switch-m42.js";
|
|
22
|
+
import { dropLocalLegacySkillExemptionsM46 } from "./approval-exemption-skill-m46.js";
|
|
23
|
+
import { LOCAL_SKILL_EXEMPTION_CUTOFF_FILE, assertSkillExemptionCutoffHeldOnPool } from "./approval-exemption-skill-cutoff.js";
|
|
24
|
+
import { SKILL_EXEMPTION_CUTOFF_ID } from "./one-time-migration-marker.js";
|
|
25
|
+
import { LocalTaskAttachmentStore } from "./local-task-attachment-store.js";
|
|
19
26
|
import { assertRetiredSchemaAbsentOnPool } from "./schema-consistency.js";
|
|
20
27
|
import { LocalSessionStore, createLocalSessionRepo } from "./local-session-store.js";
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
28
|
+
import { localStoreDeclarationOf } from "../local-store-declaration.js";
|
|
29
|
+
import { SESSION_PLACEMENTS } from "./session-placement.js";
|
|
30
|
+
import { LocalCheckpointStore, dropLocalCheckpointCtxStrict } from "./local-checkpoint-store.js";
|
|
23
31
|
import { FileResumeAnchorStore } from "./file-resume-anchor-store.js";
|
|
24
32
|
import { TiDBApprovalExemptionStore, PgApprovalExemptionStore, FileApprovalExemptionStore } from "./approval-exemption-store.js";
|
|
25
33
|
import { TiDBApprovalNonceStore, PgApprovalNonceStore, FileApprovalNonceStore } from "./approval-nonce-store.js";
|
|
@@ -33,6 +41,7 @@ import { FileUserInputLedgerStore } from "./user-input-ledger-file.js";
|
|
|
33
41
|
import { TiDBUserInputLedgerStore, PgUserInputLedgerStore } from "./user-input-ledger-sql.js";
|
|
34
42
|
import { TiDBResumeAnchorStore, PgResumeAnchorStore } from "./resume-anchor-store-sql.js";
|
|
35
43
|
import { TiDBSessionPolicyStore, PgSessionPolicyStore } from "../stores-sql/session-policy-store-sql.js";
|
|
44
|
+
import { countClientWriteOn } from "./session-withdraw-sql.js";
|
|
36
45
|
import { TiDBWorkflowJournalStore, PgWorkflowJournalStore } from "../stores-sql/workflow-journal-store-sql.js";
|
|
37
46
|
import { TiDBFileHistoryStore, PgFileHistoryStore, FILE_HISTORY_BLOB_KEY_PREFIX } from "../stores-sql/file-history-store-sql.js";
|
|
38
47
|
import { SqlBlobIndex } from "../stores-sql/blob-index-sql.js";
|
|
@@ -59,19 +68,25 @@ import { SqlSessionStore } from "./session-store-sql.js";
|
|
|
59
68
|
import { TiDBSharedMemoryStore, PgSharedMemoryStore } from "./shared-memory-store-sql.js";
|
|
60
69
|
import { TiDBAdoptionLogStore, PgAdoptionLogStore } from "./adoption-log-sql.js";
|
|
61
70
|
import { SqlRetentionStore } from "../stores-sql/retention-store-sql.js";
|
|
71
|
+
import { SessionDeletionSupersededError } from "../execution-placement.js";
|
|
72
|
+
import { sessionTenantScope } from "../session-children-retire.js";
|
|
62
73
|
import { sqlStoreRetention } from "./retention-declaration.js";
|
|
63
|
-
import { createRetentionDeploymentHooks } from "./retention-deployment.js";
|
|
74
|
+
import { createRetentionDeploymentHooks, createSessionRowsHook, sweepLateCompletionRows } from "./retention-deployment.js";
|
|
75
|
+
import { seatText } from "../trace/exit-seat.js";
|
|
64
76
|
import { createSqlSessionWriteHooks } from "./session-store-sql.js";
|
|
65
77
|
import { TiDBRetentionLaneStore, PgRetentionLaneStore } from "./retention-lane-store-sql.js";
|
|
66
78
|
import { createSqlPermissionRuleStores } from "./permission-rule-store-sql.js";
|
|
67
79
|
import { FILE_PERMISSION_RULE_DIR, createFilePermissionRuleStores, fileRuleBucketOwners, isFileBucketDamaged } from "./permission-rule-store-file.js";
|
|
68
80
|
import { retireImportedLayerRootAllows } from "./imported-layer-root-retirement.js";
|
|
69
81
|
import { buildDataDirLayout, tightenLocalDataDirModes } from "./local-data-dir-modes-m39.js";
|
|
70
|
-
import {
|
|
71
|
-
import { serviceVersion } from "../service-version.js";
|
|
82
|
+
import { admitLocalDataRoot, holdLocalDataRootAdmission } from "./local-data-root-admission.js";
|
|
72
83
|
import { mysqlDriver, pgDriver } from "./sql-driver.js";
|
|
73
|
-
import { storeDegradedReasonFor } from "../store-posture.js";
|
|
84
|
+
import { localDataRootHoldsData, storeDegradedReasonFor } from "../store-posture.js";
|
|
74
85
|
import { openWithinWait } from "./store-open-wait.js";
|
|
86
|
+
export function createRunStallWiring(config, observers) {
|
|
87
|
+
const count = observers?.runStallVerdicts;
|
|
88
|
+
return { windowMs: () => config.runStaleSec * 1000, onVerdicts: (landed) => count?.(landed) };
|
|
89
|
+
}
|
|
75
90
|
export function workflowJournalOf(config, backend) {
|
|
76
91
|
return config.selfOrchestrationEnabled && backend ? backend.workflowJournal() : undefined;
|
|
77
92
|
}
|
|
@@ -127,14 +142,14 @@ async function legacySweepImpl(config, dialect, pool) {
|
|
|
127
142
|
}
|
|
128
143
|
export function createSqlRetentionCallHooks(db, opts, input) {
|
|
129
144
|
const deployment = createRetentionDeploymentHooks(db.dialect, opts, input);
|
|
130
|
-
return { hooks: { retention: deployment.hooks.retention, session: createSqlSessionWriteHooks(db) },
|
|
145
|
+
return { hooks: { retention: deployment.hooks.retention, session: createSqlSessionWriteHooks(db) }, attachmentShas: deployment.attachmentShas };
|
|
131
146
|
}
|
|
132
147
|
export function createSqlRetentionExecutor(db, opts) {
|
|
133
|
-
const
|
|
134
|
-
const reads = new SqlRetentionStore(db,
|
|
148
|
+
const storeOpts = { ...(opts.mailboxTables ? { sessionBoxScope: sessionTenantScope } : {}), ...(opts.logger !== undefined ? { logger: opts.logger } : {}) };
|
|
149
|
+
const reads = new SqlRetentionStore(db, storeOpts);
|
|
135
150
|
const forCall = (input) => {
|
|
136
151
|
const hooks = createSqlRetentionCallHooks(db, opts, input);
|
|
137
|
-
return { store: new SqlRetentionStore(db, { ...
|
|
152
|
+
return { store: new SqlRetentionStore(db, { ...storeOpts, transactionHooks: hooks.hooks }), hooks, call: { domain: input.domain, cutoffMs: input.cutoffMs } };
|
|
138
153
|
};
|
|
139
154
|
return {
|
|
140
155
|
retention: reads.retention,
|
|
@@ -146,9 +161,11 @@ export function createSqlRetentionExecutor(db, opts) {
|
|
|
146
161
|
},
|
|
147
162
|
deleteExpiredSessions: async (input) => {
|
|
148
163
|
const one = forCall(input);
|
|
149
|
-
const receipt = await one.store.deleteExpiredSessions(one.call);
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
const { erasedRows, ...receipt } = await one.store.deleteExpiredSessions(one.call);
|
|
165
|
+
if (erasedRows === undefined)
|
|
166
|
+
return receipt;
|
|
167
|
+
await afterSessionErase(db, opts, erasedRows.sessions);
|
|
168
|
+
return { ...receipt, erased: { ...erasedRows, attachmentShas: one.hooks.attachmentShas() } };
|
|
152
169
|
},
|
|
153
170
|
deleteOrphanToolResults: async (input) => {
|
|
154
171
|
const one = forCall(input);
|
|
@@ -156,27 +173,72 @@ export function createSqlRetentionExecutor(db, opts) {
|
|
|
156
173
|
},
|
|
157
174
|
};
|
|
158
175
|
}
|
|
176
|
+
async function afterSessionErase(db, opts, sessions) {
|
|
177
|
+
if (!opts.completionInbox || sessions.length === 0)
|
|
178
|
+
return;
|
|
179
|
+
await sweepLateCompletionRows(db, db.dialect, sessions, Date.now()).catch((err) => opts.logger?.warn?.("workflow_completion_late_rows_sweep_failed", { sessions: sessions.length, err: seatText("operator-log-text", String(err)) }));
|
|
180
|
+
}
|
|
181
|
+
export function createSqlSessionEraser(db, opts) {
|
|
182
|
+
const storeOpts = { ...(opts.mailboxTables ? { sessionBoxScope: sessionTenantScope } : {}), ...(opts.logger !== undefined ? { logger: opts.logger } : {}) };
|
|
183
|
+
return {
|
|
184
|
+
async erase(input) {
|
|
185
|
+
const rows = createSessionRowsHook(db.dialect, opts, input.owner ?? "");
|
|
186
|
+
const store = new SqlRetentionStore(db, { ...storeOpts, transactionHooks: { retention: { beforeDelete: rows.beforeDelete }, session: createSqlSessionWriteHooks(db) } });
|
|
187
|
+
const out = await store.eraseSession(input);
|
|
188
|
+
switch (out.outcome) {
|
|
189
|
+
case "absent":
|
|
190
|
+
return { outcome: "superseded" };
|
|
191
|
+
case "refused":
|
|
192
|
+
if (out.refusal instanceof SessionDeletionSupersededError)
|
|
193
|
+
return { outcome: "superseded" };
|
|
194
|
+
throw out.refusal;
|
|
195
|
+
case "erased":
|
|
196
|
+
await afterSessionErase(db, opts, out.rows.sessions);
|
|
197
|
+
return { outcome: "erased", trees: { ...out.rows, attachmentShas: rows.attachmentShas() } };
|
|
198
|
+
default: {
|
|
199
|
+
const unknown = out;
|
|
200
|
+
throw new Error(`session erase: no arm for ${JSON.stringify(unknown)}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
159
206
|
export function assertCloudSnapshotBlobPosture(kind, config) {
|
|
160
207
|
if (kind === "local" || config.snapshotBlobStore || config.snapshotBlobAllowSql)
|
|
161
208
|
return;
|
|
209
|
+
const fact = SQL_BLOB_POSTURE_FACTS[kind];
|
|
162
210
|
throw new Error("cloud deployments (DB_BACKEND=mysql|pg) must configure object storage for rewind file-history blobs " +
|
|
163
|
-
|
|
164
|
-
"txn-entry-size-limit (default 6MiB) / the mysql-protocol packet limit (bytes belong in object storage — " +
|
|
211
|
+
`(MINIO_ENDPOINT/MINIO_ACCESS_KEY/MINIO_SECRET_KEY): ${fact.wall} (bytes belong in object storage — ` +
|
|
165
212
|
"same ruling as the D-1 attachment store). Single-box/test rigs may explicitly opt out with " +
|
|
166
|
-
|
|
213
|
+
`SNAPSHOT_BLOB_ALLOW_SQL_BYTES=true (${fact.cap}; an over-cap tracked file's first-touch ` +
|
|
167
214
|
"backup is refused typed, which under the default DV-14 policy refuses that edit).");
|
|
168
215
|
}
|
|
216
|
+
const SQL_BLOB_POSTURE_FACTS = {
|
|
217
|
+
mysql: {
|
|
218
|
+
wall: "single-row SQL blob writes hit TiDB's txn-entry-size-limit (default 6MiB) / the mysql-protocol packet limit",
|
|
219
|
+
cap: "a per-blob cap then applies",
|
|
220
|
+
},
|
|
221
|
+
pg: {
|
|
222
|
+
wall: "single-row SQL blob writes put each blob into one PostgreSQL bytea value (PostgreSQL holds at most 1 GB in one value; this service reads no row-size or statement-size wall from PostgreSQL, so it derives no smaller default cap)",
|
|
223
|
+
cap: "this service derives no per-blob cap on PostgreSQL, so none applies unless SNAPSHOT_BLOB_SQL_MAX_BYTES is set — then a per-blob cap applies",
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
export function buildSqlOneTimeMigrationInput(config) {
|
|
227
|
+
return { lanes: deployedExecutionLanes(config), liveRunWindowMs: config.runStaleSec * 1000, identityBoundary: DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config) };
|
|
228
|
+
}
|
|
169
229
|
class TiDBBackend {
|
|
170
230
|
pool;
|
|
171
231
|
config;
|
|
232
|
+
observers;
|
|
172
233
|
kind = "mysql";
|
|
173
|
-
constructor(pool, config) {
|
|
234
|
+
constructor(pool, config, observers) {
|
|
174
235
|
this.pool = pool;
|
|
175
236
|
this.config = config;
|
|
237
|
+
this.observers = observers;
|
|
176
238
|
}
|
|
177
239
|
ensureSchema() { return ensureTidbSchema(this.pool); }
|
|
178
240
|
close() { return this.pool.end(); }
|
|
179
|
-
run() { return (this.runStoreInst ??= new TiDBRunStore(this.pool)); }
|
|
241
|
+
run() { return (this.runStoreInst ??= new TiDBRunStore(this.pool, createRunStallWiring(this.config, this.observers))); }
|
|
180
242
|
runStoreInst;
|
|
181
243
|
resumeAnchor() { return new TiDBResumeAnchorStore(this.pool); }
|
|
182
244
|
approvalExemption() { return new TiDBApprovalExemptionStore(this.pool); }
|
|
@@ -186,13 +248,13 @@ class TiDBBackend {
|
|
|
186
248
|
permissionRule() { return createSqlPermissionRuleStores(mysqlDriver(this.pool)); }
|
|
187
249
|
sendFileLedger() { return new TiDBSendFileLedger(this.pool); }
|
|
188
250
|
userInputLedger() { return new TiDBUserInputLedgerStore(this.pool); }
|
|
189
|
-
sessionPolicy(logger) { return new TiDBSessionPolicyStore(this.pool, logger); }
|
|
251
|
+
sessionPolicy(logger) { return new TiDBSessionPolicyStore(this.pool, countClientWriteOn, logger ?? createLogger()); }
|
|
190
252
|
fileHistory() { return new TiDBFileHistoryStore(this.pool, fileHistoryOptions(this.config)); }
|
|
191
253
|
memoryOptOutGrant() { return new TiDBMemoryOptOutGrantStore(this.pool); }
|
|
192
254
|
sessionCaptureRecords() { return () => (this.captureRecordsInst ??= new TiDBSessionCaptureRecordStore(this.pool)); }
|
|
193
255
|
captureRecordsInst;
|
|
194
256
|
legacySnapshotBlobSweep() { return legacySweepImpl(this.config, "mysql", this.pool); }
|
|
195
|
-
runOneTimeMigrations() { return runSqlOneTimeMigrations("mysql", this.pool,
|
|
257
|
+
runOneTimeMigrations() { return runSqlOneTimeMigrations("mysql", this.pool, buildSqlOneTimeMigrationInput(this.config)); }
|
|
196
258
|
workflowJournal() { return new TiDBWorkflowJournalStore(this.pool); }
|
|
197
259
|
outcomeSink() { return new TiDBOutcomeLedger(this.pool); }
|
|
198
260
|
workflowRun(onWarn) { return new TiDBWorkflowRunStore(this.pool, onWarn); }
|
|
@@ -202,7 +264,7 @@ class TiDBBackend {
|
|
|
202
264
|
workflowParkDecisions() { return (this.parkDecisionsInst ??= new SqlWorkflowParkDecisionStore(this.run())); }
|
|
203
265
|
parkDecisionsInst;
|
|
204
266
|
sharedMemoryStore(authorizer) { return new TiDBSharedMemoryStore(this.pool, authorizer); }
|
|
205
|
-
checkpoint(logger) { return new TiDBCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep)
|
|
267
|
+
checkpoint(logger) { return new TiDBCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
|
|
206
268
|
checkpointReadView() { return this.checkpoint(); }
|
|
207
269
|
toolResult() { return new TiDBToolResultStore(this.pool, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
|
|
208
270
|
imageIndex() { return new TiDBImageIndex(this.pool); }
|
|
@@ -210,6 +272,7 @@ class TiDBBackend {
|
|
|
210
272
|
leaderRun() { return new TiDBLeaderRunStore(this.pool); }
|
|
211
273
|
device() { return new TiDBDeviceStore(this.pool); }
|
|
212
274
|
retention(opts) { return createSqlRetentionExecutor(mysqlDriver(this.pool), opts); }
|
|
275
|
+
sessionEraser(opts) { return createSqlSessionEraser(mysqlDriver(this.pool), opts); }
|
|
213
276
|
retentionLane() { return new TiDBRetentionLaneStore(this.pool); }
|
|
214
277
|
breaker(onWriteFail) { return new TiDBBreakerState(this.pool, onWriteFail); }
|
|
215
278
|
costQuota(limitMicroUsd, windowMs, onDegraded) { return new TiDBCostQuota(this.pool, limitMicroUsd, windowMs, undefined, onDegraded, this.config.dbQueryTimeoutMs); }
|
|
@@ -223,14 +286,16 @@ class TiDBBackend {
|
|
|
223
286
|
class PgBackend {
|
|
224
287
|
pool;
|
|
225
288
|
config;
|
|
289
|
+
observers;
|
|
226
290
|
kind = "pg";
|
|
227
|
-
constructor(pool, config) {
|
|
291
|
+
constructor(pool, config, observers) {
|
|
228
292
|
this.pool = pool;
|
|
229
293
|
this.config = config;
|
|
294
|
+
this.observers = observers;
|
|
230
295
|
}
|
|
231
296
|
ensureSchema() { return ensurePgSchema(this.pool); }
|
|
232
297
|
close() { return this.pool.end(); }
|
|
233
|
-
run() { return (this.runStoreInst ??= new PgRunStore(this.pool)); }
|
|
298
|
+
run() { return (this.runStoreInst ??= new PgRunStore(this.pool, createRunStallWiring(this.config, this.observers))); }
|
|
234
299
|
runStoreInst;
|
|
235
300
|
resumeAnchor() { return new PgResumeAnchorStore(this.pool); }
|
|
236
301
|
approvalExemption() { return new PgApprovalExemptionStore(this.pool); }
|
|
@@ -240,13 +305,13 @@ class PgBackend {
|
|
|
240
305
|
permissionRule() { return createSqlPermissionRuleStores(pgDriver(this.pool)); }
|
|
241
306
|
sendFileLedger() { return new PgSendFileLedger(this.pool); }
|
|
242
307
|
userInputLedger() { return new PgUserInputLedgerStore(this.pool); }
|
|
243
|
-
sessionPolicy(logger) { return new PgSessionPolicyStore(this.pool, logger); }
|
|
308
|
+
sessionPolicy(logger) { return new PgSessionPolicyStore(this.pool, countClientWriteOn, logger ?? createLogger()); }
|
|
244
309
|
fileHistory() { return new PgFileHistoryStore(this.pool, fileHistoryOptions(this.config)); }
|
|
245
310
|
memoryOptOutGrant() { return new PgMemoryOptOutGrantStore(this.pool); }
|
|
246
311
|
sessionCaptureRecords() { return () => (this.captureRecordsInst ??= new PgSessionCaptureRecordStore(this.pool)); }
|
|
247
312
|
captureRecordsInst;
|
|
248
313
|
legacySnapshotBlobSweep() { return legacySweepImpl(this.config, "pg", this.pool); }
|
|
249
|
-
runOneTimeMigrations() { return runSqlOneTimeMigrations("pg", this.pool,
|
|
314
|
+
runOneTimeMigrations() { return runSqlOneTimeMigrations("pg", this.pool, buildSqlOneTimeMigrationInput(this.config)); }
|
|
250
315
|
workflowJournal() { return new PgWorkflowJournalStore(this.pool); }
|
|
251
316
|
outcomeSink() { return new PgOutcomeLedger(this.pool); }
|
|
252
317
|
workflowRun(onWarn) { return new PgWorkflowRunStore(this.pool, onWarn); }
|
|
@@ -256,7 +321,7 @@ class PgBackend {
|
|
|
256
321
|
workflowParkDecisions() { return (this.parkDecisionsInst ??= new SqlWorkflowParkDecisionStore(this.run())); }
|
|
257
322
|
parkDecisionsInst;
|
|
258
323
|
sharedMemoryStore(authorizer) { return new PgSharedMemoryStore(this.pool, authorizer); }
|
|
259
|
-
checkpoint(logger) { return new PgCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep)
|
|
324
|
+
checkpoint(logger) { return new PgCheckpointStore(this.pool, logger, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
|
|
260
325
|
checkpointReadView() { return this.checkpoint(); }
|
|
261
326
|
toolResult() { return new PgToolResultStore(this.pool, { retention: sqlStoreRetention(this.config.retentionSweep) }); }
|
|
262
327
|
imageIndex() { return new PgImageIndex(this.pool); }
|
|
@@ -264,6 +329,7 @@ class PgBackend {
|
|
|
264
329
|
leaderRun() { return new PgLeaderRunStore(this.pool); }
|
|
265
330
|
device() { return new PgDeviceStore(this.pool); }
|
|
266
331
|
retention(opts) { return createSqlRetentionExecutor(pgDriver(this.pool), opts); }
|
|
332
|
+
sessionEraser(opts) { return createSqlSessionEraser(pgDriver(this.pool), opts); }
|
|
267
333
|
retentionLane() { return new PgRetentionLaneStore(this.pool); }
|
|
268
334
|
breaker(onWriteFail) { return new PgBreakerState(this.pool, onWriteFail); }
|
|
269
335
|
costQuota(limitMicroUsd, windowMs, onDegraded) { return new PgCostQuota(this.pool, limitMicroUsd, windowMs, undefined, onDegraded, this.config.dbQueryTimeoutMs); }
|
|
@@ -277,6 +343,22 @@ class PgBackend {
|
|
|
277
343
|
export function localSessionRowsOf(backend) {
|
|
278
344
|
return backend instanceof LocalBackend ? backend.session() : undefined;
|
|
279
345
|
}
|
|
346
|
+
export function localClientWritesOf(backend) {
|
|
347
|
+
return backend instanceof LocalBackend ? backend.session() : undefined;
|
|
348
|
+
}
|
|
349
|
+
function createClientCountedPolicyStore(inner, sessions) {
|
|
350
|
+
const listBySession = inner.listBySession?.bind(inner);
|
|
351
|
+
const deleteBySession = inner.deleteBySession?.bind(inner);
|
|
352
|
+
return {
|
|
353
|
+
getRules: (sessionId, principal) => inner.getRules(sessionId, principal),
|
|
354
|
+
putRules: (sessionId, principal, rules, opts) => sessions.withClientWrite(sessionId, async (count) => {
|
|
355
|
+
await count();
|
|
356
|
+
return inner.putRules(sessionId, principal, rules, opts);
|
|
357
|
+
}),
|
|
358
|
+
...(listBySession !== undefined ? { listBySession } : {}),
|
|
359
|
+
...(deleteBySession !== undefined ? { deleteBySession } : {}),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
280
362
|
class LocalBackend {
|
|
281
363
|
kind = "local";
|
|
282
364
|
fileBackend;
|
|
@@ -296,9 +378,13 @@ class LocalBackend {
|
|
|
296
378
|
discloseWarn;
|
|
297
379
|
parkDecisionLedgerRoot;
|
|
298
380
|
executionLanes;
|
|
381
|
+
identityBoundary;
|
|
382
|
+
storeDeclaration;
|
|
299
383
|
dataDirLayout;
|
|
300
|
-
constructor(fileBackend, config, discloseWarn, onWarn, onError) {
|
|
384
|
+
constructor(fileBackend, config, discloseWarn, onWarn, onError, observers, facts) {
|
|
301
385
|
this.executionLanes = deployedExecutionLanes(config);
|
|
386
|
+
this.identityBoundary = DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config);
|
|
387
|
+
this.storeDeclaration = localStoreDeclarationOf(config, facts?.dataRootMedium ?? "unknown");
|
|
302
388
|
this.onWarn = onWarn;
|
|
303
389
|
this.discloseWarn = discloseWarn;
|
|
304
390
|
this.onError = onError;
|
|
@@ -307,13 +393,17 @@ class LocalBackend {
|
|
|
307
393
|
const corruptReadWarn = (msg, fields) => this.discloseWarn(msg, fields);
|
|
308
394
|
this.dataDirLayout = buildDataDirLayout({ configuredRoot: root, physicalRoot: this.fileBackend.root, memoryEngineRoot: memoryEngineRootFor(config, root) });
|
|
309
395
|
this.runStore = new FileRunStore(this.fileBackend.root, {
|
|
396
|
+
rootRows: () => this.sessionStore,
|
|
310
397
|
error: (msg, fields) => void (this.onError ?? this.onWarn)?.(msg, fields),
|
|
311
398
|
strictHydrate: config.runStoreStrictHydrate,
|
|
399
|
+
stall: createRunStallWiring(config, observers),
|
|
312
400
|
});
|
|
313
|
-
|
|
401
|
+
const physicalRoot = this.fileBackend.root;
|
|
402
|
+
this.sessionStore = new LocalSessionStore(createLocalSessionRepo(physicalRoot), this.runStore, physicalRoot, {
|
|
314
403
|
log: createLogger(config.logLevel),
|
|
315
|
-
durability:
|
|
404
|
+
durability: this.storeDeclaration.durability,
|
|
316
405
|
placements: SESSION_PLACEMENTS,
|
|
406
|
+
withdrawCheckpointCtx: (sessionId) => dropLocalCheckpointCtxStrict(physicalRoot, sessionId),
|
|
317
407
|
});
|
|
318
408
|
this.parkDecisionLedgerRoot = config.workflowRunStoreBackend === "memory" ? undefined : join(this.fileBackend.root, "workflows");
|
|
319
409
|
this.resumeAnchorStore = new FileResumeAnchorStore(this.fileBackend.root);
|
|
@@ -334,15 +424,46 @@ class LocalBackend {
|
|
|
334
424
|
}
|
|
335
425
|
async ensureSchema() {
|
|
336
426
|
this.executionLaneWordsRenamed += await this.sessionStore.renameRetiredExecutionLaneWordM40();
|
|
337
|
-
await this.sessionStore.
|
|
427
|
+
await this.sessionStore.finishPendingDrops();
|
|
338
428
|
await this.sessionStore.settleArchiveSnapshots();
|
|
429
|
+
const adoption = await this.sessionStore.adoptArchiveTokensM47();
|
|
430
|
+
this.archiveTokensAdopted += adoption.adopted;
|
|
431
|
+
this.archiveTokensMinted += adoption.minted;
|
|
339
432
|
}
|
|
340
433
|
executionLaneWordsRenamed = 0;
|
|
434
|
+
archiveTokensAdopted = 0;
|
|
435
|
+
archiveTokensMinted = 0;
|
|
341
436
|
async runOneTimeMigrations() {
|
|
437
|
+
const scenarioPrefixSourcesScanned = await switchLocalScenarioPrefixM42(join(this.fileBackend.root, LOCAL_MARKER_FILE), [
|
|
438
|
+
{ source: "runs", rows: () => this.runStore.scenarioPrefixOwnerRowsM42() },
|
|
439
|
+
{ source: "sessions", rows: () => this.sessionStore.scenarioPrefixOwnerRowsM42() },
|
|
440
|
+
{ source: "approval asks", rows: () => this.approvalAskStore.scenarioPrefixOwnerRowsM42() },
|
|
441
|
+
{ source: "attachments", rows: () => new LocalTaskAttachmentStore(this.fileBackend.root).scenarioPrefixOwnerRowsM42() },
|
|
442
|
+
]);
|
|
342
443
|
tightenLocalDataDirModes(this.dataDirLayout, {
|
|
343
444
|
tightened: (msg, meta) => this.onWarn?.(msg, meta),
|
|
344
445
|
refused: (msg, meta) => this.discloseWarn(msg, meta),
|
|
345
446
|
});
|
|
447
|
+
const runErrorCodeColumnRewritten = this.runStore.migrateRunErrorCodeColumnM44();
|
|
448
|
+
const runObjectivePreviewRewritten = this.runStore.migrateRunObjectivePreviewM45();
|
|
449
|
+
const shellSentinelOwnerRowsRetained = [];
|
|
450
|
+
let shellSentinelOwnersCleared = 0;
|
|
451
|
+
if (this.identityBoundary) {
|
|
452
|
+
for (const [surface, rows] of [
|
|
453
|
+
["session_meta", await this.sessionStore.countShellSentinelOwnersM48()],
|
|
454
|
+
["task_run", this.runStore.countShellSentinelOwnersM48()],
|
|
455
|
+
]) {
|
|
456
|
+
if (rows > 0)
|
|
457
|
+
shellSentinelOwnerRowsRetained.push({ surface, rows });
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
shellSentinelOwnersCleared = (await this.sessionStore.clearShellSentinelOwnersM48()) + this.runStore.clearShellSentinelOwnersM48();
|
|
462
|
+
}
|
|
463
|
+
const checkpointHostSessionsBackfilled = existsSync(join(this.fileBackend.root, "checkpoint-session-tokens.json")) || existsSync(join(this.fileBackend.root, "checkpoint-scopes.json"))
|
|
464
|
+
? await this.checkpointStoreOf().backfillHostSessionsM49()
|
|
465
|
+
: 0;
|
|
466
|
+
const legacySkillExemptionsDropped = dropLocalLegacySkillExemptionsM46(join(this.fileBackend.root, LOCAL_SKILL_EXEMPTION_CUTOFF_FILE), this.approvalExemptionStore);
|
|
346
467
|
const archives = await this.sessionStore.migrateLocalArchives();
|
|
347
468
|
const placements = await backfillLocalExecutionPlacements(this.runStore.sessionIdsWithRuns(), this.sessionStore.executionPlacementBackfill, { lanes: this.executionLanes });
|
|
348
469
|
const importedLayerRoot = { importedLayerRootAllowsRetired: [], importedLayerRootBucketsSkipped: [], importedLayerRootBucketsUnnamed: 0 };
|
|
@@ -350,21 +471,34 @@ class LocalBackend {
|
|
|
350
471
|
const rules = this.permissionRule();
|
|
351
472
|
await retireImportedLayerRootAllows({ candidateOwners: () => fileRuleBucketOwners(rules), durable: rules.durable, isWholeBucketRefusal: isFileBucketDamaged, isVanishedBucket: () => false }, importedLayerRoot);
|
|
352
473
|
}
|
|
474
|
+
const localArchiveTokensAdopted = this.archiveTokensAdopted;
|
|
475
|
+
const localArchiveTokensMinted = this.archiveTokensMinted;
|
|
476
|
+
this.archiveTokensAdopted = 0;
|
|
477
|
+
this.archiveTokensMinted = 0;
|
|
353
478
|
const executionLaneWordsRenamed = this.executionLaneWordsRenamed + this.approvalAskStore.renameRetiredExecutionLaneWordM40();
|
|
354
479
|
this.executionLaneWordsRenamed = 0;
|
|
355
480
|
const askExecutionLanesBackfilled = backfillLocalAskExecutionLanes(this.approvalAskStore, { lanes: this.executionLanes });
|
|
356
481
|
return {
|
|
357
482
|
...NO_SQL_MIGRATIONS,
|
|
483
|
+
runErrorCodeColumnRewritten,
|
|
484
|
+
runObjectivePreviewRewritten,
|
|
485
|
+
shellSentinelOwnersCleared,
|
|
486
|
+
shellSentinelOwnerRowsRetained,
|
|
487
|
+
checkpointHostSessionsBackfilled,
|
|
488
|
+
legacySkillExemptionsDropped,
|
|
358
489
|
executionPlacementsBackfilled: placements.backfilled,
|
|
359
490
|
executionPlacementSessionsUnreadable: placements.unreadable,
|
|
360
491
|
askExecutionLanesBackfilled,
|
|
361
492
|
executionLaneWordsRenamed,
|
|
493
|
+
scenarioPrefixSourcesScanned,
|
|
362
494
|
askJournalRecordsUpgraded: this.approvalAskStore.upgradeJournalEnvelope(),
|
|
363
495
|
localArchiveRowFactsBackfilled: archives.rowFactsBackfilled,
|
|
364
496
|
localArchivesAnonymized: archives.anonymized,
|
|
365
497
|
localArchivesKeptStamped: archives.keptStamped,
|
|
366
498
|
localArchivesUnreadable: archives.unreadable,
|
|
367
499
|
localArchiveSnapshotsRecovered: archives.snapshotsRecovered,
|
|
500
|
+
localArchiveTokensAdopted,
|
|
501
|
+
localArchiveTokensMinted,
|
|
368
502
|
...importedLayerRoot,
|
|
369
503
|
};
|
|
370
504
|
}
|
|
@@ -407,9 +541,9 @@ class LocalBackend {
|
|
|
407
541
|
userInputLedger() { return this.userInputLedgerStore; }
|
|
408
542
|
checkpointStoreOf() {
|
|
409
543
|
return (this.checkpointStoreInst ??= new LocalCheckpointStore(this.fileBackend.root, {
|
|
544
|
+
durability: this.storeDeclaration.durability,
|
|
410
545
|
getActiveTaskId: (sessionId) => this.runStore.getActiveTaskId(sessionId),
|
|
411
546
|
readSessionOwner: async (sessionId) => (await this.sessionStore.headOf(sessionId))?.owner,
|
|
412
|
-
claims: this.runStore,
|
|
413
547
|
}));
|
|
414
548
|
}
|
|
415
549
|
checkpoint() {
|
|
@@ -417,8 +551,8 @@ class LocalBackend {
|
|
|
417
551
|
if (!this.checkpointProbeWired) {
|
|
418
552
|
this.checkpointProbeWired = true;
|
|
419
553
|
this.runStore.setCheckpointProbe({
|
|
420
|
-
hasPending: async (sessionId) => (await cs.findPendingTokenBySession(sessionId)) !== null,
|
|
421
|
-
hasExpired: (sessionId) => cs.
|
|
554
|
+
hasPending: async (sessionId) => (await cs.findPendingTokenBySession(sessionId, undefined, { axis: "run" })) !== null,
|
|
555
|
+
hasExpired: (sessionId) => cs.hasExpiredForRun(sessionId),
|
|
422
556
|
});
|
|
423
557
|
}
|
|
424
558
|
return cs;
|
|
@@ -426,7 +560,9 @@ class LocalBackend {
|
|
|
426
560
|
checkpointReadView() { return this.checkpointStoreOf(); }
|
|
427
561
|
checkpointProbeWired = false;
|
|
428
562
|
checkpointStoreInst;
|
|
429
|
-
sessionPolicy() { return this.fileBackend.sessionPolicyStore; }
|
|
563
|
+
sessionPolicy() { return (this.sessionPolicyInst ??= createClientCountedPolicyStore(this.fileBackend.sessionPolicyStore, this.sessionStore)); }
|
|
564
|
+
sessionPolicyInst;
|
|
565
|
+
localStoreDeclaration() { return this.storeDeclaration; }
|
|
430
566
|
fileUsageWindowStore() { return this.fileBackend.usageWindowStore; }
|
|
431
567
|
fileHistory() { return this.fileBackend.fileHistoryStore; }
|
|
432
568
|
memoryOptOutGrant() { return undefined; }
|
|
@@ -436,15 +572,24 @@ class LocalBackend {
|
|
|
436
572
|
outcomeSink() { return this.outcomeSinkInst; }
|
|
437
573
|
session() { return this.sessionStore; }
|
|
438
574
|
toolResult() { return this.fileBackend.toolResultStore; }
|
|
575
|
+
engineFileStores() {
|
|
576
|
+
const fb = this.fileBackend;
|
|
577
|
+
return { checkpointStore: fb.checkpointStore, backgroundAgentStore: fb.backgroundAgentStore, mailboxStore: fb.mailboxStore, rosterStore: fb.rosterStore };
|
|
578
|
+
}
|
|
439
579
|
mysqlPool() { return undefined; }
|
|
440
580
|
pgPool() { return undefined; }
|
|
441
581
|
}
|
|
442
582
|
export function counterStoreLabel(store, kind) {
|
|
443
583
|
return store ? `shared(${kind ?? "unknown"})` : "in-process";
|
|
444
584
|
}
|
|
445
|
-
|
|
585
|
+
const LOCAL_OPEN_REFUSAL_HEAD = {
|
|
586
|
+
http: (root) => `DB_BACKEND=local cannot open data dir ${root}`,
|
|
587
|
+
"run-local": (root) => `cannot open local data dir ${root}`,
|
|
588
|
+
};
|
|
589
|
+
export function openLocalBackend(config, opts) {
|
|
590
|
+
const { lane, admission, onWarn, onError, observers, facts } = opts;
|
|
446
591
|
const root = localBackendRootOf(config);
|
|
447
|
-
const discloseWarn = onWarn ?? (
|
|
592
|
+
const discloseWarn = onWarn ?? createLogger().warn;
|
|
448
593
|
let fileBackend;
|
|
449
594
|
try {
|
|
450
595
|
fileBackend = acquireLocalBackendWithWait(() => new FileStorageBackend({
|
|
@@ -456,24 +601,29 @@ function openLocalBackend(config, onWarn, onError) {
|
|
|
456
601
|
catch (e) {
|
|
457
602
|
if (e instanceof AdoptionError)
|
|
458
603
|
throw e;
|
|
459
|
-
const tail = buildStoreOpenRefusalTail(e,
|
|
460
|
-
throw new Error(
|
|
604
|
+
const tail = buildStoreOpenRefusalTail(e, lane);
|
|
605
|
+
throw new Error(`${LOCAL_OPEN_REFUSAL_HEAD[lane](root)}: ${e instanceof Error ? e.message : String(e)}` +
|
|
461
606
|
(tail === undefined ? "" : ` ${tail}`));
|
|
462
607
|
}
|
|
463
608
|
try {
|
|
464
|
-
|
|
609
|
+
holdLocalDataRootAdmission(fileBackend.root, admission);
|
|
465
610
|
}
|
|
466
611
|
catch (refusal) {
|
|
467
|
-
return new RefusedLocalBackend(fileBackend, refusal instanceof Error ? refusal : new Error(String(refusal)));
|
|
612
|
+
return new RefusedLocalBackend(() => fileBackend.dispose(), refusal instanceof Error ? refusal : new Error(String(refusal)));
|
|
613
|
+
}
|
|
614
|
+
try {
|
|
615
|
+
return new LocalBackend(fileBackend, config, discloseWarn, onWarn, onError, observers, facts);
|
|
616
|
+
}
|
|
617
|
+
catch (failure) {
|
|
618
|
+
return new RefusedLocalBackend(() => fileBackend.dispose(), failure instanceof Error ? failure : new Error(String(failure)));
|
|
468
619
|
}
|
|
469
|
-
return new LocalBackend(fileBackend, config, discloseWarn, onWarn, onError);
|
|
470
620
|
}
|
|
471
621
|
class RefusedLocalBackend {
|
|
472
|
-
|
|
622
|
+
release;
|
|
473
623
|
refusal;
|
|
474
624
|
kind = "local";
|
|
475
|
-
constructor(
|
|
476
|
-
this.
|
|
625
|
+
constructor(release, refusal) {
|
|
626
|
+
this.release = release;
|
|
477
627
|
this.refusal = refusal;
|
|
478
628
|
}
|
|
479
629
|
refused() {
|
|
@@ -486,7 +636,7 @@ class RefusedLocalBackend {
|
|
|
486
636
|
return this.refused();
|
|
487
637
|
}
|
|
488
638
|
async close() {
|
|
489
|
-
await this.
|
|
639
|
+
await this.release();
|
|
490
640
|
}
|
|
491
641
|
run() { return this.refused(); }
|
|
492
642
|
resumeAnchor() { return this.refused(); }
|
|
@@ -505,45 +655,53 @@ class RefusedLocalBackend {
|
|
|
505
655
|
outcomeSink() { return this.refused(); }
|
|
506
656
|
checkpointReadView() { return this.refused(); }
|
|
507
657
|
session() { return this.refused(); }
|
|
658
|
+
engineFileStores() { return this.refused(); }
|
|
659
|
+
toolResult() { return this.refused(); }
|
|
660
|
+
fileUsageWindowStore() { return this.refused(); }
|
|
661
|
+
localStoreDeclaration() { return this.refused(); }
|
|
508
662
|
mysqlPool() { return undefined; }
|
|
509
663
|
pgPool() { return undefined; }
|
|
510
664
|
}
|
|
511
|
-
export function createStoreBackend(config, onWarn, onError) {
|
|
665
|
+
export function createStoreBackend(config, onWarn, onError, observers) {
|
|
512
666
|
if (config.dbBackend === "local")
|
|
513
|
-
return
|
|
667
|
+
return openAdmittedLocalBackend(config, undefined, { onWarn, onError, observers });
|
|
514
668
|
if (config.dbBackend === "pg") {
|
|
515
669
|
if (!config.pg)
|
|
516
670
|
return undefined;
|
|
517
671
|
const pool = createPgPool(pgPoolOptions(config.pg, config.dbQueryTimeoutMs), onWarn);
|
|
518
|
-
return withRetiredSchemaProbe(new PgBackend(pool, config), { dialect: "pg", pool }, { lanes: deployedExecutionLanes(config) });
|
|
672
|
+
return withRetiredSchemaProbe(new PgBackend(pool, config, observers), { dialect: "pg", pool }, { lanes: deployedExecutionLanes(config) });
|
|
519
673
|
}
|
|
520
674
|
if (!config.tidb)
|
|
521
675
|
return undefined;
|
|
522
676
|
const pool = createTidbPool(config);
|
|
523
|
-
return withRetiredSchemaProbe(new TiDBBackend(pool, config), { dialect: "mysql", pool }, { lanes: deployedExecutionLanes(config) });
|
|
677
|
+
return withRetiredSchemaProbe(new TiDBBackend(pool, config, observers), { dialect: "mysql", pool }, { lanes: deployedExecutionLanes(config) });
|
|
678
|
+
}
|
|
679
|
+
function openAdmittedLocalBackend(config, admission, sinks) {
|
|
680
|
+
let admitted = admission;
|
|
681
|
+
if (admitted === undefined) {
|
|
682
|
+
try {
|
|
683
|
+
admitted = admitLocalDataRoot(localBackendRootOf(config));
|
|
684
|
+
}
|
|
685
|
+
catch (refusal) {
|
|
686
|
+
return new RefusedLocalBackend(async () => undefined, refusal instanceof Error ? refusal : new Error(String(refusal)));
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
return openLocalBackend(config, { lane: "http", admission: admitted, ...sinks });
|
|
524
690
|
}
|
|
525
691
|
function withRetiredSchemaProbe(inner, target, executionPlacementSwitch) {
|
|
526
692
|
const guarded = Object.create(inner);
|
|
527
693
|
guarded.ensureSchema = async () => {
|
|
528
694
|
await assertRetiredSchemaAbsentOnPool(target);
|
|
529
695
|
await assertExecutionPlacementSwitchAdmissibleOnPool(target.dialect, target.pool, executionPlacementSwitch);
|
|
696
|
+
await assertSkillExemptionCutoffHeldOnPool(target, migrationCarried(SKILL_EXEMPTION_CUTOFF_ID));
|
|
530
697
|
await inner.ensureSchema();
|
|
531
698
|
};
|
|
532
699
|
return guarded;
|
|
533
700
|
}
|
|
534
|
-
function localBackendRootOf(config) {
|
|
701
|
+
export function localBackendRootOf(config) {
|
|
535
702
|
return config.localDataRoot ?? join(homedir(), ".ai-agent");
|
|
536
703
|
}
|
|
537
|
-
function
|
|
538
|
-
try {
|
|
539
|
-
return readdirSync(root).length > 0;
|
|
540
|
-
}
|
|
541
|
-
catch (e) {
|
|
542
|
-
const code = e.code;
|
|
543
|
-
return code !== "ENOENT" && code !== "ENOTDIR";
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
export async function openStoreBackendWithFallback(config, logger) {
|
|
704
|
+
export async function openStoreBackendWithFallback(config, logger, observers, localAdmission, facts) {
|
|
547
705
|
const sqlEngine = config.dbBackend === "mysql" || config.dbBackend === "pg" ? config.dbBackend : undefined;
|
|
548
706
|
const mayFallback = config.dbBackend === "local" && !config.dbBackendExplicit && !localDataRootHoldsData(localBackendRootOf(config));
|
|
549
707
|
let backend;
|
|
@@ -552,7 +710,9 @@ export async function openStoreBackendWithFallback(config, logger) {
|
|
|
552
710
|
const attempt = async () => {
|
|
553
711
|
let built;
|
|
554
712
|
try {
|
|
555
|
-
|
|
713
|
+
const onWarn = (msg, meta) => logger.warn(msg, meta);
|
|
714
|
+
const onError = logger.error === undefined ? undefined : (msg, meta) => logger.error(msg, meta);
|
|
715
|
+
built = config.dbBackend === "local" ? openAdmittedLocalBackend(config, localAdmission, { onWarn, onError, observers, ...(facts !== undefined ? { facts } : {}) }) : createStoreBackend(config, onWarn, onError, observers);
|
|
556
716
|
inFlight = built;
|
|
557
717
|
if (built)
|
|
558
718
|
await built.ensureSchema();
|
|
@@ -599,10 +759,15 @@ export function sqlStoreCoordinatesAsUrl(config) {
|
|
|
599
759
|
export function buildSqlStoreOpenRefusal(engine, endpoint, waitedMs, err) {
|
|
600
760
|
const coords = engine === "pg" ? "PG_*" : "MYSQL_*";
|
|
601
761
|
const detail = err instanceof Error ? err.message : String(err);
|
|
762
|
+
const definite = isDeploymentFaultError(err);
|
|
763
|
+
const answer = definite ? databaseAnswerCodesOf(engine, err) : undefined;
|
|
602
764
|
const waited = waitedMs > 0 ? `after retrying for ${waitedMs}ms (STORE_LOCK_WAIT_MS)` : "on the first attempt (STORE_LOCK_WAIT_MS=0: no wait)";
|
|
603
|
-
|
|
765
|
+
const next = definite
|
|
766
|
+
? `Next: the database refused the statement for good, so waiting or changing the ${coords} coordinates will not change it — fix what the answer names: a table's storage engine (InnoDB on MySQL), its primary key, foreign-key compatibility, a missing table or the account's grants; `
|
|
767
|
+
: `Next: fix the ${coords} coordinates or the store's reachability (the boot wait is STORE_LOCK_WAIT_MS); `;
|
|
768
|
+
return (`DB_BACKEND=${engine}: cannot open the configured ${engine === "pg" ? "PostgreSQL" : "MySQL-protocol"} store at ${endpoint} ${waited} (${detail}${answer !== undefined ? `; ${answer}` : ""}) — refusing to boot, because a configured SQL store is never replaced by an in-memory one ` +
|
|
604
769
|
`(SESSION_BACKEND=auto included: sessions, parked runs and every durable record would silently live in memory and vanish on restart). ` +
|
|
605
|
-
|
|
770
|
+
next +
|
|
606
771
|
`or run explicitly in memory with DB_BACKEND=memory (and remove the ${coords} coordinates).`);
|
|
607
772
|
}
|
|
608
773
|
//# sourceMappingURL=store-backend.js.map
|