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