@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
|
@@ -1,20 +1,48 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { atomicWriteFile, ensureDir, AppendLog } from "@sema-agent/core";
|
|
3
|
-
import { mysqlDriver, pgDriver,
|
|
3
|
+
import { mysqlDriver, pgDriver, SQL_DB_NOW_MS } from "./sql-driver.js";
|
|
4
4
|
import { isDupKeyError } from "./sql-errors.js";
|
|
5
5
|
import { replayJsonlGuarded } from "../observability/corrupt-read-seat.js";
|
|
6
|
+
import { createLogger } from "../observability/logger.js";
|
|
6
7
|
export const APPROVAL_NONCE_TABLE = "approval_nonce";
|
|
7
8
|
export const MAX_APPROVAL_NONCE_CHARS = 190;
|
|
9
|
+
export const APPROVAL_NONCE_FLOOR_TABLE = "approval_nonce_floor";
|
|
10
|
+
export const APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT = "approval_nonce_clock_rollback";
|
|
11
|
+
let seamLogger;
|
|
12
|
+
const warnToLogSeam = (msg, fields) => (seamLogger ??= createLogger()).warn(msg, fields);
|
|
13
|
+
function storeClockOf(rawMs, floorMs, store, warn) {
|
|
14
|
+
if (floorMs === undefined || rawMs >= floorMs)
|
|
15
|
+
return rawMs;
|
|
16
|
+
warn(APPROVAL_NONCE_CLOCK_ROLLBACK_EVENT, {
|
|
17
|
+
store,
|
|
18
|
+
rolledBackMs: floorMs - rawMs,
|
|
19
|
+
floorMs,
|
|
20
|
+
clockMs: rawMs,
|
|
21
|
+
note: "the approval-nonce store's clock reads below the line it already deleted consumption records under (the clock was stepped back: an NTP step, a failover to a lagging host, or another database node answering) — " +
|
|
22
|
+
"the store answers that line instead, so proofs that expired before it stay refused; check time sync on the database host (SQL backends) or on this host (local lane)",
|
|
23
|
+
});
|
|
24
|
+
return floorMs;
|
|
25
|
+
}
|
|
8
26
|
export class SqlApprovalNonceStore {
|
|
9
27
|
db;
|
|
10
|
-
|
|
28
|
+
warn;
|
|
29
|
+
constructor(db, opts) {
|
|
11
30
|
this.db = db;
|
|
31
|
+
this.warn = opts?.warn ?? warnToLogSeam;
|
|
12
32
|
}
|
|
13
33
|
q(mysql, pg) {
|
|
14
34
|
return this.db.dialect === "mysql" ? mysql : pg;
|
|
15
35
|
}
|
|
16
36
|
async nowMs() {
|
|
17
|
-
|
|
37
|
+
const { rows } = await this.db.query(this.q(`SELECT ${SQL_DB_NOW_MS.mysql} AS db_now_ms, (SELECT floor_ms FROM ${APPROVAL_NONCE_FLOOR_TABLE} WHERE singleton = 'x') AS floor_ms`, `SELECT ${SQL_DB_NOW_MS.pg} AS db_now_ms, (SELECT floor_ms FROM ${APPROVAL_NONCE_FLOOR_TABLE} WHERE singleton = 'x') AS floor_ms`), []);
|
|
38
|
+
const raw = Number(rows[0]?.["db_now_ms"] ?? Number.NaN);
|
|
39
|
+
if (!Number.isFinite(raw))
|
|
40
|
+
throw new Error(`${APPROVAL_NONCE_TABLE}: the database clock came back unreadable (${String(rows[0]?.["db_now_ms"])})`);
|
|
41
|
+
const floorCell = rows[0]?.["floor_ms"];
|
|
42
|
+
const floor = floorCell === null || floorCell === undefined ? undefined : Number(floorCell);
|
|
43
|
+
if (floor !== undefined && !Number.isFinite(floor))
|
|
44
|
+
throw new Error(`${APPROVAL_NONCE_FLOOR_TABLE}: the time floor came back unreadable (${String(floorCell)})`);
|
|
45
|
+
return storeClockOf(raw, floor, "sql", this.warn);
|
|
18
46
|
}
|
|
19
47
|
async consume(sessionId, nonce, expiresAtMs) {
|
|
20
48
|
try {
|
|
@@ -28,25 +56,32 @@ export class SqlApprovalNonceStore {
|
|
|
28
56
|
}
|
|
29
57
|
}
|
|
30
58
|
async reapExpired() {
|
|
31
|
-
const
|
|
59
|
+
const line = await this.nowMs();
|
|
60
|
+
await this.db.query(this.q(`INSERT INTO ${APPROVAL_NONCE_FLOOR_TABLE} (singleton, floor_ms) VALUES ('x', ?) ON DUPLICATE KEY UPDATE floor_ms = GREATEST(floor_ms, VALUES(floor_ms))`, `INSERT INTO ${APPROVAL_NONCE_FLOOR_TABLE} (singleton, floor_ms) VALUES ('x', $1) ON CONFLICT (singleton) DO UPDATE SET floor_ms = GREATEST(${APPROVAL_NONCE_FLOOR_TABLE}.floor_ms, EXCLUDED.floor_ms)`), [line]);
|
|
61
|
+
const res = await this.db.query(this.q(`DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= ?`, `DELETE FROM ${APPROVAL_NONCE_TABLE} WHERE expires_at_ms <= $1`), [line]);
|
|
32
62
|
return res.affected;
|
|
33
63
|
}
|
|
34
64
|
}
|
|
35
65
|
export class TiDBApprovalNonceStore extends SqlApprovalNonceStore {
|
|
36
|
-
constructor(pool) {
|
|
37
|
-
super(mysqlDriver(pool));
|
|
66
|
+
constructor(pool, opts) {
|
|
67
|
+
super(mysqlDriver(pool), opts);
|
|
38
68
|
}
|
|
39
69
|
}
|
|
40
70
|
export class PgApprovalNonceStore extends SqlApprovalNonceStore {
|
|
41
|
-
constructor(pool) {
|
|
42
|
-
super(pgDriver(pool));
|
|
71
|
+
constructor(pool, opts) {
|
|
72
|
+
super(pgDriver(pool), opts);
|
|
43
73
|
}
|
|
44
74
|
}
|
|
45
75
|
const keyOf = (sessionId, nonce) => JSON.stringify([sessionId, nonce]);
|
|
46
76
|
export class MemoryApprovalNonceStore {
|
|
47
77
|
rows = new Map();
|
|
78
|
+
floorMs;
|
|
79
|
+
warn;
|
|
80
|
+
constructor(opts) {
|
|
81
|
+
this.warn = opts?.warn ?? warnToLogSeam;
|
|
82
|
+
}
|
|
48
83
|
async nowMs() {
|
|
49
|
-
return Date.now();
|
|
84
|
+
return storeClockOf(Date.now(), this.floorMs, "memory", this.warn);
|
|
50
85
|
}
|
|
51
86
|
async consume(sessionId, nonce, expiresAtMs) {
|
|
52
87
|
const k = keyOf(sessionId, nonce);
|
|
@@ -56,10 +91,11 @@ export class MemoryApprovalNonceStore {
|
|
|
56
91
|
return true;
|
|
57
92
|
}
|
|
58
93
|
async reapExpired() {
|
|
59
|
-
const
|
|
94
|
+
const line = await this.nowMs();
|
|
95
|
+
this.floorMs = this.floorMs === undefined ? line : Math.max(this.floorMs, line);
|
|
60
96
|
let n = 0;
|
|
61
97
|
for (const [k, exp] of this.rows) {
|
|
62
|
-
if (exp <=
|
|
98
|
+
if (exp <= line) {
|
|
63
99
|
this.rows.delete(k);
|
|
64
100
|
n++;
|
|
65
101
|
}
|
|
@@ -67,11 +103,15 @@ export class MemoryApprovalNonceStore {
|
|
|
67
103
|
return n;
|
|
68
104
|
}
|
|
69
105
|
}
|
|
70
|
-
const
|
|
71
|
-
what: "approval-nonce
|
|
106
|
+
const NONCE_LOG_LINE_SHAPE = {
|
|
107
|
+
what: "approval-nonce line that is neither a record (string s / string n / numeric e) nor a time floor (numeric f alone)",
|
|
72
108
|
read(record) {
|
|
73
|
-
const { s, n, e } = record;
|
|
74
|
-
|
|
109
|
+
const { s, n, e, f } = record;
|
|
110
|
+
if (typeof s === "string" && typeof n === "string" && typeof e === "number")
|
|
111
|
+
return { s, n, e };
|
|
112
|
+
if (typeof f === "number" && s === undefined && n === undefined && e === undefined)
|
|
113
|
+
return { f };
|
|
114
|
+
return undefined;
|
|
75
115
|
},
|
|
76
116
|
};
|
|
77
117
|
export class FileApprovalNonceStore {
|
|
@@ -80,22 +120,29 @@ export class FileApprovalNonceStore {
|
|
|
80
120
|
rows = new Map();
|
|
81
121
|
log;
|
|
82
122
|
gate;
|
|
123
|
+
floorMs;
|
|
124
|
+
warn;
|
|
83
125
|
constructor(root, opts) {
|
|
126
|
+
this.warn = opts?.warn ?? warnToLogSeam;
|
|
84
127
|
const dir = join(root, "approval-nonces");
|
|
85
128
|
ensureDir(dir);
|
|
86
129
|
this.tmpDir = join(dir, ".tmp");
|
|
87
130
|
ensureDir(this.tmpDir);
|
|
88
131
|
this.path = join(dir, "consumed.jsonl");
|
|
89
|
-
const { records, gate } = replayJsonlGuarded(this.path, "approval-nonce",
|
|
132
|
+
const { records, gate } = replayJsonlGuarded(this.path, "approval-nonce", NONCE_LOG_LINE_SHAPE, opts?.warn);
|
|
90
133
|
this.gate = gate;
|
|
91
|
-
for (const r of records)
|
|
92
|
-
|
|
134
|
+
for (const r of records) {
|
|
135
|
+
if ("f" in r)
|
|
136
|
+
this.floorMs = this.floorMs === undefined ? r.f : Math.max(this.floorMs, r.f);
|
|
137
|
+
else
|
|
138
|
+
this.rows.set(keyOf(r.s, r.n), r);
|
|
139
|
+
}
|
|
93
140
|
}
|
|
94
141
|
logFor() {
|
|
95
142
|
return (this.log ??= new AppendLog(this.path));
|
|
96
143
|
}
|
|
97
144
|
async nowMs() {
|
|
98
|
-
return Date.now();
|
|
145
|
+
return storeClockOf(Date.now(), this.floorMs, "file", this.warn);
|
|
99
146
|
}
|
|
100
147
|
async consume(sessionId, nonce, expiresAtMs) {
|
|
101
148
|
this.gate.assertUsable();
|
|
@@ -109,11 +156,11 @@ export class FileApprovalNonceStore {
|
|
|
109
156
|
}
|
|
110
157
|
async reapExpired() {
|
|
111
158
|
this.gate.assertUsable();
|
|
112
|
-
const
|
|
159
|
+
const line = await this.nowMs();
|
|
113
160
|
const survivors = [];
|
|
114
161
|
let removed = 0;
|
|
115
162
|
for (const record of this.rows.values()) {
|
|
116
|
-
if (record.e <=
|
|
163
|
+
if (record.e <= line) {
|
|
117
164
|
removed++;
|
|
118
165
|
continue;
|
|
119
166
|
}
|
|
@@ -122,9 +169,11 @@ export class FileApprovalNonceStore {
|
|
|
122
169
|
if (removed === 0)
|
|
123
170
|
return 0;
|
|
124
171
|
this.log?.closeForSwap();
|
|
125
|
-
|
|
172
|
+
const floor = { f: this.floorMs === undefined ? line : Math.max(this.floorMs, line) };
|
|
173
|
+
atomicWriteFile(this.tmpDir, this.path, [floor, ...survivors].map((r) => `${JSON.stringify(r)}\n`).join(""));
|
|
174
|
+
this.floorMs = floor.f;
|
|
126
175
|
for (const [k, record] of [...this.rows])
|
|
127
|
-
if (record.e <=
|
|
176
|
+
if (record.e <= line)
|
|
128
177
|
this.rows.delete(k);
|
|
129
178
|
return removed;
|
|
130
179
|
}
|
|
@@ -57,6 +57,8 @@ export declare class MinioBlobBackend implements BlobBackend {
|
|
|
57
57
|
private readonly cfg;
|
|
58
58
|
private readonly keyPrefix;
|
|
59
59
|
private readonly ttl;
|
|
60
|
+
/** 六个站点(put / get / delete / listObjects / headObject / probeBucket)的唯一出口:端点回重定向 ⇒ 拒,预签名 URL 与对象体不被带去 `Location`。 */
|
|
61
|
+
private readonly egressFetch;
|
|
60
62
|
constructor(cfg: MinioBlobBackendConfig);
|
|
61
63
|
private objectKey;
|
|
62
64
|
private presign;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { presignS3Url, presignS3ListUrl } from "./s3-presign.js";
|
|
3
3
|
import { isNoSuchBucketAnswer } from "./s3-answer.js";
|
|
4
|
+
import { createEgressFetch } from "../egress-redirect.js";
|
|
4
5
|
export async function readAtAddress(port, hash) {
|
|
5
6
|
const bytes = await port.get(hash);
|
|
6
7
|
if (bytes === undefined)
|
|
@@ -23,10 +24,12 @@ export class MinioBlobBackend {
|
|
|
23
24
|
cfg;
|
|
24
25
|
keyPrefix;
|
|
25
26
|
ttl;
|
|
27
|
+
egressFetch;
|
|
26
28
|
constructor(cfg) {
|
|
27
29
|
this.cfg = cfg;
|
|
28
30
|
this.keyPrefix = cfg.keyPrefix ?? "blobs/";
|
|
29
31
|
this.ttl = cfg.presignTtlSec ?? 3600;
|
|
32
|
+
this.egressFetch = createEgressFetch("declare the final object-store address as MINIO_ENDPOINT / S3_ENDPOINT", cfg.fetchImpl);
|
|
30
33
|
}
|
|
31
34
|
objectKey(key) {
|
|
32
35
|
return `${this.keyPrefix}${key}`;
|
|
@@ -45,7 +48,7 @@ export class MinioBlobBackend {
|
|
|
45
48
|
}
|
|
46
49
|
async put(key, bytes) {
|
|
47
50
|
const url = this.presign(key, "PUT");
|
|
48
|
-
const res = await
|
|
51
|
+
const res = await this.egressFetch(url, { method: "PUT", body: bytes, signal: AbortSignal.timeout(OBJECT_STORE_IO_TIMEOUT_MS) });
|
|
49
52
|
if (!res.ok) {
|
|
50
53
|
const detail = await res.text().catch(() => "");
|
|
51
54
|
throw new Error(`MinioBlobBackend.put ${key}: HTTP ${res.status} ${detail.slice(0, 200)}`);
|
|
@@ -55,7 +58,7 @@ export class MinioBlobBackend {
|
|
|
55
58
|
const url = this.presign(key, "GET");
|
|
56
59
|
let res;
|
|
57
60
|
try {
|
|
58
|
-
res = await
|
|
61
|
+
res = await this.egressFetch(url, { method: "GET", signal: AbortSignal.timeout(OBJECT_STORE_IO_TIMEOUT_MS) });
|
|
59
62
|
}
|
|
60
63
|
catch (err) {
|
|
61
64
|
throw new Error(`MinioBlobBackend.get ${key}: transient fetch failure: ${err.message}`);
|
|
@@ -74,7 +77,7 @@ export class MinioBlobBackend {
|
|
|
74
77
|
let firstFailure;
|
|
75
78
|
await mapBounded(distinct, MINIO_OP_CONCURRENCY, async (key) => {
|
|
76
79
|
try {
|
|
77
|
-
const res = await
|
|
80
|
+
const res = await this.egressFetch(this.presign(key, "DELETE"), { method: "DELETE", signal: AbortSignal.timeout(OBJECT_STORE_IO_TIMEOUT_MS) });
|
|
78
81
|
if (res.ok || res.status === 404)
|
|
79
82
|
return;
|
|
80
83
|
failed++;
|
|
@@ -89,7 +92,7 @@ export class MinioBlobBackend {
|
|
|
89
92
|
throw new Error(`MinioBlobBackend.delete: ${failed} of ${distinct.length} object(s) could not be deleted (first: ${firstFailure})`);
|
|
90
93
|
}
|
|
91
94
|
async *listObjects() {
|
|
92
|
-
const f = this.
|
|
95
|
+
const f = this.egressFetch;
|
|
93
96
|
let token;
|
|
94
97
|
const MAX_PAGES = 1000;
|
|
95
98
|
let pages = 0;
|
|
@@ -127,7 +130,7 @@ export class MinioBlobBackend {
|
|
|
127
130
|
} while (token !== undefined);
|
|
128
131
|
}
|
|
129
132
|
async headObject(hash) {
|
|
130
|
-
const f = this.
|
|
133
|
+
const f = this.egressFetch;
|
|
131
134
|
const res = await f(this.presign(hash, "HEAD"), { method: "HEAD", signal: AbortSignal.timeout(OBJECT_STORE_IO_TIMEOUT_MS) });
|
|
132
135
|
if (!res.ok)
|
|
133
136
|
return undefined;
|
|
@@ -136,7 +139,7 @@ export class MinioBlobBackend {
|
|
|
136
139
|
return { lastModifiedMs: Number.isFinite(ms) ? ms : Date.now() };
|
|
137
140
|
}
|
|
138
141
|
async probeBucket(timeoutMs = OBJECT_STORE_IO_TIMEOUT_MS) {
|
|
139
|
-
const f = this.
|
|
142
|
+
const f = this.egressFetch;
|
|
140
143
|
const url = presignS3ListUrl({
|
|
141
144
|
endpoint: this.cfg.endpoint,
|
|
142
145
|
bucket: this.cfg.bucket,
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { type AcquiredSession, type PlacedSessionRow, type RetentionDeclaration, type SessionPlacementRecord, type SessionStore, type SessionTreeEntry } from "@sema-agent/core";
|
|
2
|
+
import type { LocalSessionDeletionSection } from "../session-erase.js";
|
|
2
3
|
import type { OwnerAwareSessionStore, SessionListItem } from "../security.js";
|
|
3
4
|
import type { StagingHandle } from "../session-sync-kernel.js";
|
|
5
|
+
import type { SessionDeletionFace } from "../session-deletion.js";
|
|
4
6
|
import { type PlacementAcquireOpts } from "./session-placement.js";
|
|
5
7
|
import type { InstructionSourceStore } from "../instruction-source-notice.js";
|
|
6
8
|
import type { SessionWorkspaceStore } from "../session-workspace.js";
|
|
9
|
+
import { type SessionBirthFace, type SessionWithdrawFace } from "./session-birth.js";
|
|
7
10
|
export interface CachingOptions {
|
|
8
11
|
/** Idle seconds a woken session is kept warm. 0 disables caching (pure passthrough). */
|
|
9
12
|
ttlSec: number;
|
|
@@ -60,7 +63,13 @@ export declare class CachingSessionStore implements SessionStore {
|
|
|
60
63
|
* 缓存的会话活得比「另一只店删掉又重建了这一行」长)。内层店必有(本类的暖命中按它核新鲜)。🔴 必须转发:生产默认把真店包进本类,授权口 / 属主门 /
|
|
61
64
|
* k8s 工作区空间 / SSE 探针 / resume-at 读的都是本类。 */
|
|
62
65
|
readonly headOf: SessionHeadReader["headOf"];
|
|
66
|
+
/** 删除门的头读(`OwnerAwareSessionStore.deletionHeadOf`;local 店才交):**纯转发、不经暖缓存**(与 `headOf` 同理)。内层店不交 ⇒ 本类也不交(删除门读 `headOf`)。 */
|
|
67
|
+
readonly deletionHeadOf?: OwnerAwareSessionStore["deletionHeadOf"];
|
|
63
68
|
readonly register?: (sessionId: string, owner: string | null) => Promise<void>;
|
|
69
|
+
/** 出生回执面(`session-birth.ts`;纯转发 —— 写的是持久行)。🔴 必须转发:授权口读的是本类,不转发 = 永远没有候选 = 永不撤回。 */
|
|
70
|
+
readonly registerWithReceipt?: SessionBirthFace["registerWithReceipt"];
|
|
71
|
+
/** 条件撤回面(`session-birth.ts`;转发后逐出暖缓存,与 `deleteSession` 同一条纪律)。 */
|
|
72
|
+
readonly withdrawBirth?: SessionWithdrawFace["withdrawBirth"];
|
|
64
73
|
/** Delegated SessionRepo seam (§0.5) — list/fork/delete operate on the DURABLE tables directly (they bypass the
|
|
65
74
|
* warm cache by design; a fork/delete must read/write durable state, not a possibly-stale cached view). */
|
|
66
75
|
readonly listSessions?: (opts: {
|
|
@@ -80,7 +89,10 @@ export declare class CachingSessionStore implements SessionStore {
|
|
|
80
89
|
readonly forkTo?: OwnerAwareSessionStore["forkTo"];
|
|
81
90
|
/** 执行席(原样转发:放置是会话**行**上的一格,缓存只缓存会话日志的暖句柄,不缓存行格 —— 读与写都直达内层店)。 */
|
|
82
91
|
readonly executionPlacement?: OwnerAwareSessionStore["executionPlacement"];
|
|
83
|
-
|
|
92
|
+
/** 删净一只在删会话的 local 执行体锁节(转发后逐出暖缓存)。 */
|
|
93
|
+
readonly deleteSession?: LocalSessionDeletionSection;
|
|
94
|
+
/** 删除面(会话三态的围栏 / 复核 / 收尾输入;`fence` 转发后逐出暖缓存 —— 在删即读作不在,暖条目不许再交出那只会话)。内层店不交 ⇒ 本类也不交。 */
|
|
95
|
+
readonly sessionDeletion?: SessionDeletionFace;
|
|
84
96
|
/** The session row's list projection for one id + its writable bits (`title` / `pinned`) — DURABLE, pure pass-through
|
|
85
97
|
* (they read / write `session_meta` / the local sidecars, never the warm cache). 🔴 Must forward (the retention / placements
|
|
86
98
|
* lesson): the production default wraps the real store in this class, and the route's fact `sessionPatch` reads THIS object. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { admitSessionPlacement, compareOccupants } from "@sema-agent/core";
|
|
2
2
|
import { placementCapabilityOf } from "./session-placement.js";
|
|
3
|
+
import { birthFaceOf, withdrawFaceOf } from "./session-birth.js";
|
|
3
4
|
export class CachingSessionStore {
|
|
4
5
|
inner;
|
|
5
6
|
cache = new Map();
|
|
@@ -8,13 +9,17 @@ export class CachingSessionStore {
|
|
|
8
9
|
timer;
|
|
9
10
|
onStaleHit;
|
|
10
11
|
headOf;
|
|
12
|
+
deletionHeadOf;
|
|
11
13
|
register;
|
|
14
|
+
registerWithReceipt;
|
|
15
|
+
withdrawBirth;
|
|
12
16
|
listSessions;
|
|
13
17
|
listSessionRows;
|
|
14
18
|
fork;
|
|
15
19
|
forkTo;
|
|
16
20
|
executionPlacement;
|
|
17
21
|
deleteSession;
|
|
22
|
+
sessionDeletion;
|
|
18
23
|
sessionSummaryOf;
|
|
19
24
|
writeSessionRowCells;
|
|
20
25
|
setTitleIfNull;
|
|
@@ -55,8 +60,24 @@ export class CachingSessionStore {
|
|
|
55
60
|
if (typeof innerPlacementOf === "function")
|
|
56
61
|
this.placementOf = (id) => innerPlacementOf.call(inner, id);
|
|
57
62
|
const ownerAware = inner;
|
|
63
|
+
if (ownerAware.deletionHeadOf)
|
|
64
|
+
this.deletionHeadOf = ownerAware.deletionHeadOf.bind(inner);
|
|
58
65
|
if (ownerAware.register)
|
|
59
66
|
this.register = ownerAware.register.bind(inner);
|
|
67
|
+
const birth = birthFaceOf(inner);
|
|
68
|
+
if (birth !== undefined)
|
|
69
|
+
this.registerWithReceipt = birth.registerWithReceipt;
|
|
70
|
+
const withdraw = withdrawFaceOf(inner);
|
|
71
|
+
if (withdraw !== undefined) {
|
|
72
|
+
this.withdrawBirth = async (b, ownTaskId) => {
|
|
73
|
+
try {
|
|
74
|
+
return await withdraw.withdrawBirth(b, ownTaskId);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
this.evict(b.sessionId);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
60
81
|
if (ownerAware.listSessions)
|
|
61
82
|
this.listSessions = ownerAware.listSessions.bind(inner);
|
|
62
83
|
if (ownerAware.listSessionRows)
|
|
@@ -130,10 +151,28 @@ export class CachingSessionStore {
|
|
|
130
151
|
this.sweepStagingSessions = ownerAware.sweepStagingSessions.bind(inner);
|
|
131
152
|
if (ownerAware.deleteSession) {
|
|
132
153
|
const del = ownerAware.deleteSession.bind(inner);
|
|
133
|
-
this.deleteSession = async (sessionId, owner) => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
154
|
+
this.deleteSession = async (sessionId, owner, token, legs) => {
|
|
155
|
+
try {
|
|
156
|
+
return await del(sessionId, owner, token, legs);
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
this.evict(sessionId);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (ownerAware.sessionDeletion) {
|
|
164
|
+
const face = ownerAware.sessionDeletion;
|
|
165
|
+
this.sessionDeletion = {
|
|
166
|
+
fence: async (sessionId, owner, fenceOpts) => {
|
|
167
|
+
try {
|
|
168
|
+
return await face.fence(sessionId, owner, fenceOpts);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
this.evict(sessionId);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
holds: (sessionId, token) => face.holds(sessionId, token),
|
|
175
|
+
pending: () => face.pending(),
|
|
137
176
|
};
|
|
138
177
|
}
|
|
139
178
|
const interval = opts.sweepIntervalMs ?? Math.min(this.ttlMs || 60_000, 60_000);
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* (`approval_card`,不是 facet —— 存一份 facet 会在 core 改表那天陈旧),谓词由那两张表机械生成({@link CHECKPOINT_FACET_CASES} → {@link CHECKPOINT_FACET_SQL}),
|
|
23
23
|
* 逐行与 `facetOf` 同答(`test/checkpoint-index-columns.test.ts` B 节、db 组同名文件)。本仓不写第二份判据:没有手写门型表、没有手写卡词。
|
|
24
24
|
* 卡那一侧不带「是不是审批门」的合取:列上的卡只在审批门上非 NULL(同一只派生),与 core 对生成谓词的成文形逐字相同。未登记门型 / NULL 门型 ⇒ 表达式 NULL(无 ELSE)。
|
|
25
|
-
*
|
|
25
|
+
* 拒扫腿的选行序与游标谓词见 {@link CHECKPOINT_SWEEP_ORDER_SQL} / {@link checkpointSweepAfterSql}:截止、token 两键;拒扫按游标轮转走过期集,没有哪一行能替它后面的行占住窗。
|
|
26
26
|
*
|
|
27
27
|
* ## 谓词什么时候开
|
|
28
28
|
* core 的迁移条款:存量行的卡列由同一只函数回填,并且只在部署自己记下「回填跑完了」之后才开生成谓词。本仓的记录 = 起服序列:M29 跑在一次性迁移段
|
|
@@ -100,6 +100,27 @@ export declare class CheckpointIndexRefusedError extends Error {
|
|
|
100
100
|
readonly refusal: CheckpointIndexRefusal;
|
|
101
101
|
constructor(sessionId: unknown, refusal: CheckpointIndexRefusal);
|
|
102
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* **一张卡归在哪只会话上**(`checkpoint.host_session_id` 列;local 孪生 = 归属索引的同一个事实)—— 兑现这张卡的那条 run 的会话:续跑链(决断、取消、
|
|
105
|
+
* 停驻收割、续跑输入回收、运维队列行的 run 联结)按它把卡与 run 连起来,本服务在会话上找卡的每一个读口只读它。只在写口 `put` 求值一次;
|
|
106
|
+
* 存量行由一次性迁移 M49 自 `session_id` 回填一次。卡自己的 `session_id`(那条腿的对话)仍在行上,只答「这是哪段对话」(问账匹配、问账留存锚、会话擦除)。
|
|
107
|
+
*
|
|
108
|
+
* 读法 = core 卡上的组合腿 `CheckpointState.compositionLeg`(闭集 `entry`;加一个词 ⇒ 本 `switch` 编译红,由人决定那种腿的卡归谁):
|
|
109
|
+
* · `cascade` —— 梯子的一级:级跑在自己现铸的会话里,卡归**调用方的会话**(腿上的 `hostSessionId`;续跑入口 `resumeCascade` 接着爬梯子);
|
|
110
|
+
* · `verify` —— 验证器自己的腿:本服务兑现不了它(结算时当场作废,`verifier-pause-card.ts`),卡归它**自己的**会话 —— 不挂到宿主 run 上;
|
|
111
|
+
* · 没有组合腿 —— 不是组合入口交出的腿(普通 run、verify 的实现腿与修复轮、委派子代):卡归它自己的会话。
|
|
112
|
+
* 组合腿形坏(不是对象 / `hostSessionId` 不是非空串 / 闭集外的词)⇒ 抛 {@link CheckpointHostSessionRefusedError},写口零写(引擎铸不出这样的卡;只来自嵌入方 / 手改数据)。
|
|
113
|
+
*/
|
|
114
|
+
export declare function hostSessionOf(cp: Pick<Checkpoint, "sessionId" | "state">): string;
|
|
115
|
+
/** 写口对一张说不出归属的卡的拒(零写;理由见 {@link hostSessionOf})。店错误,不是 wire 码。 */
|
|
116
|
+
export declare class CheckpointHostSessionRefusedError extends Error {
|
|
117
|
+
constructor(sessionId: unknown, why: string);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* `host_session_id` 列的定义(两方言建表各插一处;列定义的唯一属主)。可空:存量库缺列 ⇒ 起服列册对账拒启并给 `ADD COLUMN` 句;存量行由 M49 回填,
|
|
121
|
+
* 写口恒写非空值。NULL 只剩一种来历:滚动升级窗里旧副本写下、还没被下一次起服的 M49 补上的行 —— 按会话的读口找不到它(见 MIGRATION 本版那一条)。
|
|
122
|
+
*/
|
|
123
|
+
export declare const CHECKPOINT_HOST_SESSION_COLUMN: Readonly<Record<SqlDialect, string>>;
|
|
103
124
|
/** facet 的词(core 登记表 `facet` 列的值域)。 */
|
|
104
125
|
type Facet = (typeof PAUSE_REGISTRY)[GateKind]["facet"];
|
|
105
126
|
/** 生成谓词的一条 WHEN:某一列的值落在这几个词里 ⇒ 这个 facet。 */
|
|
@@ -121,10 +142,16 @@ export declare const CHECKPOINT_FACET_CASES: readonly FacetCase[];
|
|
|
121
142
|
*/
|
|
122
143
|
export declare const CHECKPOINT_FACET_SQL: Readonly<Record<SqlDialect, string>>;
|
|
123
144
|
/**
|
|
124
|
-
* SLA 拒扫腿(`listExpiredApprovalGates`)
|
|
125
|
-
*
|
|
126
|
-
*
|
|
145
|
+
* SLA 拒扫腿(`listExpiredApprovalGates`)的选行序:deadline、token 两键升序(两方言同一句)。拒扫按这个序**轮转**:每拍从上一拍读到的最后一行之后接着读一页
|
|
146
|
+
* ({@link checkpointSweepAfterSql}),一页不满就回到队首 —— 所以序只决定「一圈里谁先谁后」,不决定「谁轮得到」:一行在这一拍被拒、被跳过、留在停驻,
|
|
147
|
+
* 游标照样越过它,排在它后面的行下一拍就轮到。修前每拍只取序最前的一页,重新停驻、截止不变的行积满一页就把后面所有到期审批挡到收割;为挡住其中一种
|
|
148
|
+
* (混跑窗里旧副本写的卡列为空的行)曾把「卡列为空的排后」加成第一键 —— 轮转之后那一种与其余各种同样挡不住任何行,那一键退役。
|
|
149
|
+
*/
|
|
150
|
+
export declare const CHECKPOINT_SWEEP_ORDER_SQL = "deadline ASC, token ASC";
|
|
151
|
+
/**
|
|
152
|
+
* 拒扫游标的「之后」谓词:严格在游标 `(deadline, token)` 之后 —— 与 {@link CHECKPOINT_SWEEP_ORDER_SQL} 同两键、同方向、同一把比较尺子(列自己的排序规则),
|
|
153
|
+
* 序与谓词住在一处:改了序必须同改这里,否则游标会跳行或重行。`ph(i)` = 第 i 个游标参数的占位符;参数依次是游标的 deadline、deadline、token。
|
|
127
154
|
*/
|
|
128
|
-
export declare
|
|
155
|
+
export declare function checkpointSweepAfterSql(ph: (i: 0 | 1 | 2) => string): string;
|
|
129
156
|
export {};
|
|
130
157
|
//# sourceMappingURL=checkpoint-index-columns.d.ts.map
|
|
@@ -64,6 +64,38 @@ export class CheckpointIndexRefusedError extends Error {
|
|
|
64
64
|
this.refusal = refusal;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
+
export function hostSessionOf(cp) {
|
|
68
|
+
const leg = cp.state?.compositionLeg;
|
|
69
|
+
if (leg === undefined)
|
|
70
|
+
return cp.sessionId;
|
|
71
|
+
if (typeof leg !== "object" || leg === null)
|
|
72
|
+
throw new CheckpointHostSessionRefusedError(cp.sessionId, "its composition leg is not an object");
|
|
73
|
+
const { entry, hostSessionId } = leg;
|
|
74
|
+
switch (entry) {
|
|
75
|
+
case "cascade":
|
|
76
|
+
if (typeof hostSessionId !== "string" || hostSessionId === "")
|
|
77
|
+
throw new CheckpointHostSessionRefusedError(cp.sessionId, "its cascade leg names no host session");
|
|
78
|
+
return hostSessionId;
|
|
79
|
+
case "verify":
|
|
80
|
+
return cp.sessionId;
|
|
81
|
+
case undefined:
|
|
82
|
+
throw new CheckpointHostSessionRefusedError(cp.sessionId, "its composition leg names no entry");
|
|
83
|
+
default: {
|
|
84
|
+
const unknownEntry = entry;
|
|
85
|
+
throw new CheckpointHostSessionRefusedError(cp.sessionId, `its composition leg names an entry this build does not know (${JSON.stringify(unknownEntry)})`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export class CheckpointHostSessionRefusedError extends Error {
|
|
90
|
+
constructor(sessionId, why) {
|
|
91
|
+
super(`the checkpoint row for session ${JSON.stringify(sessionId) ?? "(none)"} was not written: ${why}, so the session it is filed under cannot be read`);
|
|
92
|
+
this.name = "CheckpointHostSessionRefusedError";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export const CHECKPOINT_HOST_SESSION_COLUMN = Object.freeze({
|
|
96
|
+
mysql: "host_session_id VARCHAR(190) NULL",
|
|
97
|
+
pg: `host_session_id VARCHAR(190) COLLATE "C"`,
|
|
98
|
+
});
|
|
67
99
|
function groupByFacet(pairs, column) {
|
|
68
100
|
const groups = new Map();
|
|
69
101
|
for (const [word, facet] of pairs) {
|
|
@@ -87,5 +119,8 @@ export const CHECKPOINT_FACET_SQL = Object.freeze({
|
|
|
87
119
|
mysql: renderFacetCase((column) => `CAST(${column} AS BINARY)`),
|
|
88
120
|
pg: renderFacetCase((column) => column),
|
|
89
121
|
});
|
|
90
|
-
export const CHECKPOINT_SWEEP_ORDER_SQL = "
|
|
122
|
+
export const CHECKPOINT_SWEEP_ORDER_SQL = "deadline ASC, token ASC";
|
|
123
|
+
export function checkpointSweepAfterSql(ph) {
|
|
124
|
+
return `(deadline > ${ph(0)} OR (deadline = ${ph(1)} AND token > ${ph(2)}))`;
|
|
125
|
+
}
|
|
91
126
|
//# sourceMappingURL=checkpoint-index-columns.js.map
|