@sema-agent/server 7.146.0 → 7.148.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1423 -24
- package/README.md +21 -8
- package/README.zh-CN.md +15 -9
- package/USAGE.md +537 -216
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +18 -7
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +4 -3
- package/deploy/sema-up/cluster-up.sh +75 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/flagshape.sh +4 -0
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/lanes.json +2 -5
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +26 -48
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +18 -5
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +32 -34
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +16 -14
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +17 -9
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +8 -3
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/crash-last.js +2 -1
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +19 -8
- package/dist/boot/execution-env.js +80 -62
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +3 -3
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +18 -16
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +50 -53
- package/dist/boot/memory-consolidation.js +11 -18
- package/dist/boot/org-memory.js +4 -3
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +3 -3
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +20 -17
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +133 -165
- package/dist/boot/retention-lane.d.ts +7 -45
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +17 -7
- package/dist/boot/session-faces.js +122 -96
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +14 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
- package/dist/boot/stage-02-web-admin-pull.js +15 -8
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -1
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +9 -5
- package/dist/boot/stage-05-execution-env.js +5 -5
- package/dist/boot/stage-06-runners.d.ts +13 -15
- package/dist/boot/stage-06-runners.js +24 -18
- package/dist/boot/stage-07-capability-layer.d.ts +14 -11
- package/dist/boot/stage-07-capability-layer.js +9 -12
- package/dist/boot/stage-08-reapers.d.ts +14 -11
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +16 -18
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +16 -18
- package/dist/boot/stage-10-http-server.js +9 -5
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +12 -0
- package/dist/boot/stores.js +39 -17
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +58 -38
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +9 -1
- package/dist/capabilities/center-plugins.js +37 -11
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +3 -2
- package/dist/capabilities/composite-members.js +3 -2
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +38 -33
- package/dist/capabilities/scenarios.js +24 -25
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +6 -6
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +69 -4
- package/dist/capability-facts.js +77 -5
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +10 -5
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +68 -61
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +58 -4
- package/dist/config-invariants.js +104 -23
- package/dist/config-lkg.d.ts +24 -2
- package/dist/config-lkg.js +22 -9
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -108
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +215 -202
- package/dist/config.d.ts +69 -14
- package/dist/config.js +188 -96
- package/dist/degenerate-instrument.js +1 -1
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +51 -16
- package/dist/deployment-shape.js +31 -6
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.d.ts +7 -5
- package/dist/env-facts.js +12 -7
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +53 -103
- package/dist/execution-lane-caps.js +51 -83
- package/dist/execution-placement.d.ts +65 -9
- package/dist/execution-placement.js +58 -0
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.d.ts +2 -2
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +6 -7
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +42 -0
- package/dist/history-anchor.js +34 -0
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +119 -65
- package/dist/hooks/hook-runner.js +415 -217
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +75 -78
- package/dist/http/approval-sweeps.d.ts +5 -8
- package/dist/http/approval-sweeps.js +55 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +77 -31
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +18 -12
- package/dist/http/execution-context.d.ts +18 -42
- package/dist/http/execution-context.js +11 -5
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +7 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +3 -3
- package/dist/http/memory-store-refusal-reply.js +6 -0
- package/dist/http/owner-access.d.ts +391 -56
- package/dist/http/owner-access.js +372 -33
- package/dist/http/principal-gate.d.ts +26 -94
- package/dist/http/principal-gate.js +24 -81
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +10 -14
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +24 -24
- package/dist/http/resume-legs.js +260 -171
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +56 -47
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -88
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +23 -20
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +5 -5
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +3 -1
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +12 -20
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +70 -0
- package/dist/http/routes/projects.js +87 -0
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +50 -7
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +148 -233
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +4 -2
- package/dist/http/routes/session-sync.js +48 -30
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +177 -112
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +144 -122
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +63 -50
- package/dist/http/server.js +52 -16
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +17 -3
- package/dist/http/stored-body-replay.js +11 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +23 -13
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +31 -4
- package/dist/memory-scope.js +65 -16
- package/dist/memory-store-refusal.d.ts +20 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +5 -2
- package/dist/memory-sync-client.js +19 -14
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +51 -28
- package/dist/model-compat.js +55 -23
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +46 -17
- package/dist/model-entry-refusal.js +47 -27
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +28 -2
- package/dist/namespaced-rule-name.js +10 -1
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +75 -47
- package/dist/observability/fail-open.js +77 -47
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +5 -4
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +5 -2
- package/dist/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
- package/dist/orchestration/workflow-completion-inbox.js +65 -46
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +100 -31
- package/dist/parked-decide.js +162 -48
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +28 -9
- package/dist/plugins/approval-ask-store-file.js +74 -18
- package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
- package/dist/plugins/approval-ask-store-memory.js +35 -12
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
- package/dist/plugins/approval-ask-store-sql.js +44 -11
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +40 -195
- package/dist/plugins/blob-backend.js +41 -234
- package/dist/plugins/caching-session-store.d.ts +22 -5
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
- package/dist/plugins/checkpoint-index-columns.js +39 -3
- package/dist/plugins/checkpoint-store-face.d.ts +84 -11
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +6 -10
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +89 -35
- package/dist/plugins/file-run-store.js +197 -142
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +63 -23
- package/dist/plugins/local-checkpoint-store.js +204 -81
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +183 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +13 -0
- package/dist/plugins/local-engine-high-water.js +62 -0
- package/dist/plugins/local-session-store.d.ts +442 -143
- package/dist/plugins/local-session-store.js +941 -289
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +20 -1
- package/dist/plugins/local-task-attachment-store.js +32 -12
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +11 -9
- package/dist/plugins/memory-engine-pg.d.ts +7 -5
- package/dist/plugins/memory-engine-pg.js +18 -9
- package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
- package/dist/plugins/memory-engine-sql-apply.js +7 -9
- package/dist/plugins/memory-engine-tidb.d.ts +12 -7
- package/dist/plugins/memory-engine-tidb.js +18 -10
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +325 -74
- package/dist/plugins/one-time-migrations.js +705 -230
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +11 -11
- package/dist/plugins/permission-rule-store-file.js +14 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +3 -32
- package/dist/plugins/pg-pool.js +27 -11
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +19 -28
- package/dist/plugins/remote-env-e2b.js +40 -29
- package/dist/plugins/remote-env-host.d.ts +11 -10
- package/dist/plugins/remote-env-host.js +40 -27
- package/dist/plugins/remote-env-k8s.d.ts +45 -47
- package/dist/plugins/remote-env-k8s.js +122 -62
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +370 -75
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +158 -0
- package/dist/plugins/retention-deployment.js +119 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +42 -15
- package/dist/plugins/schema-consistency.js +213 -13
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +10 -1
- package/dist/plugins/schema-ensure-legs.js +12 -2
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +98 -0
- package/dist/plugins/session-ext-table.js +134 -0
- package/dist/plugins/session-fork.d.ts +16 -2
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +20 -7
- package/dist/plugins/session-row-sql.js +16 -8
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +157 -0
- package/dist/plugins/session-store-sql.js +398 -0
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
- package/dist/plugins/shared-memory-store-sql.js +15 -14
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +24 -8
- package/dist/plugins/sql-driver.js +43 -9
- package/dist/plugins/sql-errors.d.ts +35 -5
- package/dist/plugins/sql-errors.js +55 -3
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +114 -18
- package/dist/plugins/store-backend.js +340 -87
- package/dist/plugins/store-contracts.d.ts +97 -30
- package/dist/plugins/store-contracts.js +23 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +21 -11
- package/dist/plugins/task-attachment-store.js +37 -19
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +42 -39
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +46 -16
- package/dist/rules-consent.js +102 -53
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +109 -93
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +73 -44
- package/dist/runs.js +65 -43
- package/dist/runtime-caps-resolver.d.ts +36 -14
- package/dist/runtime-caps-resolver.js +31 -14
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -6
- package/dist/sealed-key-layout.js +5 -1
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +116 -26
- package/dist/security.d.ts +133 -161
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +27 -2
- package/dist/server-secret-env.d.ts +23 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +6 -6
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +60 -10
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +29 -47
- package/dist/session-resident-background.js +77 -8
- package/dist/session-row.d.ts +3 -2
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +138 -21
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +21 -16
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +86 -71
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
- package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
- package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +65 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
- package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
- package/dist/stores-sql/windowed-session-storage.js +70 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +18 -17
- package/dist/task-cwd.d.ts +31 -3
- package/dist/task-cwd.js +25 -1
- package/dist/task-mcp.d.ts +11 -3
- package/dist/task-mcp.js +16 -19
- package/dist/task-settings.d.ts +23 -14
- package/dist/task-settings.js +35 -13
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +152 -137
- package/dist/tool-approval.js +199 -199
- package/dist/trace/core-keyset-guard.d.ts +22 -9
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +52 -4
- package/dist/trace/exit-seat.js +43 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +1 -30
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +88 -58
- package/dist/trace/project.js +64 -28
- package/dist/trace/redact.d.ts +124 -28
- package/dist/trace/redact.js +936 -328
- package/dist/trace/self-minted-wire.d.ts +750 -29
- package/dist/trace/self-minted-wire.js +262 -25
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +43 -8
- package/dist/trace/wire-projection-faces.js +28 -3
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -40
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +6 -3
- package/dist/web-admin-client/center-request.js +17 -16
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -2
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +2 -1
- package/dist/web-admin-client/http-client.js +40 -13
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +13 -6
- package/dist/web-admin-client/skills-mcp.d.ts +22 -8
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +35 -51
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +16 -12
- package/scripts/drain-check-local.mjs +118 -173
- package/scripts/drain-check.mysql.sql +20 -16
- package/scripts/drain-check.pg.sql +20 -16
- package/wire-changes/server@7.147.0.json +813 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { FileSessionRepo, type AcquiredSession, type PlacedSessionRow, type SessionHead, type SessionPlacementRecord, type SessionStore, type SessionRepo, type SessionMetadata, type SessionTreeEntry, type StoreDurability } from "@sema-agent/core";
|
|
2
2
|
import { type PlacementAcquireOpts } from "./session-placement.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { StoreBootRefusalError, type SessionRunClaimSource, type SessionRunRollupSource, type SessionSummary } from "./store-contracts.js";
|
|
4
|
+
import { StoreBootRefusalError, type SessionRootRows, type SessionRunClaimSource, type SessionRunRollupSource, type SessionSummary } from "./store-contracts.js";
|
|
5
5
|
import { type ClientSessionRowWrite, type ReplaySessionRowWrite, type ReplaySessionRowWriteOutcome, type SessionRowAnswer, type SessionRowPatch, type SessionRowWriteOutcome } from "../session-row.js";
|
|
6
|
+
import { type SqlJsonColumnProblem } from "./sql-json-column.js";
|
|
6
7
|
import { type LocalArchiveKeptStamped, type LocalArchiveUnreadable } from "./one-time-migrations.js";
|
|
8
|
+
import { type ReleaseTriple } from "./release-version.js";
|
|
7
9
|
import { type Logger } from "../observability/logger.js";
|
|
8
|
-
import {
|
|
9
|
-
import { type
|
|
10
|
+
import type { SessionOccupant } from "../session-erase.js";
|
|
11
|
+
import { type RegisterReceipt, type SessionBirth, type SessionFace, type WithdrawOutcome } from "../session-incarnation.js";
|
|
12
|
+
import type { SessionDeletionFace } from "../session-deletion.js";
|
|
10
13
|
import { type ExecutionPlacementSeat, type LocalPlacementBackfillSeat } from "../execution-placement.js";
|
|
11
14
|
import { type ForkPlacement, type ForkTarget, type ForkToOutcome } from "./session-fork.js";
|
|
12
15
|
import { type InstructionSourceBaseline } from "../instruction-source-notice.js";
|
|
@@ -21,41 +24,152 @@ export declare const SESSION_META_CELL_OBJECT: z.ZodObject<{
|
|
|
21
24
|
owner: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
25
|
execution: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
23
26
|
role: z.ZodLiteral<"writer">;
|
|
24
|
-
lane: z.ZodCustom<
|
|
27
|
+
lane: z.ZodCustom<"none" | "host" | "e2b" | "k8s" | "ssh" | "adb" | "local-docker" | "device", "none" | "host" | "e2b" | "k8s" | "ssh" | "adb" | "local-docker" | "device">;
|
|
25
28
|
}, z.core.$strict>, z.ZodObject<{
|
|
26
29
|
role: z.ZodLiteral<"mirror">;
|
|
27
30
|
}, z.core.$strict>], "role">>;
|
|
28
31
|
forkKey: z.ZodOptional<z.ZodString>;
|
|
29
32
|
createdAt: z.ZodOptional<z.ZodString>;
|
|
30
33
|
forkedFrom: z.ZodOptional<z.ZodString>;
|
|
34
|
+
forkedFromIncarnation: z.ZodOptional<z.ZodString>;
|
|
35
|
+
dropping: z.ZodOptional<z.ZodLiteral<true>>;
|
|
36
|
+
deleting: z.ZodOptional<z.ZodString>;
|
|
37
|
+
clientWrites: z.ZodOptional<z.ZodNumber>;
|
|
31
38
|
}, z.core.$strict>;
|
|
32
|
-
/**
|
|
33
|
-
|
|
39
|
+
/**
|
|
40
|
+
* 数据根对账里一只文件的读数(拒句的逐文件一段;{@link LocalDataRootSchemaMismatchError.findings}):严格边档清册里的一只边档,或引擎版本高水位 marker
|
|
41
|
+
* (`local-engine-high-water.ts`),或跳过了必经一次性迁移的会话存档目录({@link holdArchiveTokenAdoptionDuty})。**判别联合**,判别位 `problem`:
|
|
42
|
+
* `"newer-engine"` ⇒ {@link LocalDataRootNewerEngine}(必带 `engineHighWater`);`"skipped-required-migration"` ⇒ {@link LocalDataRootSkippedMigration}(必带 `skippedMigration`);
|
|
43
|
+
* 别的每一个词 ⇒ {@link LocalDataRootUnreadable}(两样都没有)—— 载荷跟着判别位走,由类型保证,不靠运行时约定。
|
|
44
|
+
*/
|
|
45
|
+
export type LocalDataRootMismatch = LocalDataRootUnreadable | LocalDataRootNewerEngine | LocalDataRootSkippedMigration;
|
|
46
|
+
/**
|
|
47
|
+
* 读不出的种别:形 —— `not-json` / `malformed` / `not-text`(形读者的判词),或 I/O 的 errno(`EACCES` / `EISDIR` / 悬空符号链接的 `ENOENT` …,恒以 `E` 起头);
|
|
48
|
+
* 说不出 errno ⇒ `unreadable`。`newer-engine` 不在其中(那是另一支)。
|
|
49
|
+
*/
|
|
50
|
+
export type LocalDataRootReadProblem = SqlJsonColumnProblem | `E${string}` | "unreadable";
|
|
51
|
+
/** 一只文件本构建读不出(形或 I/O);形读者不认得的键非空 ⇒ 这只文件是更新的引擎写下的(数据根比本构建新)。 */
|
|
52
|
+
export interface LocalDataRootUnreadable {
|
|
34
53
|
/** 文件的绝对路径。 */
|
|
35
54
|
readonly path: string;
|
|
36
|
-
/** 角色(`<文件名> (the local <角色> sidecar)`)。 */
|
|
55
|
+
/** 角色(`<文件名> (the local <角色> sidecar)` / `<文件名> (the local engine high-water marker)`)。 */
|
|
37
56
|
readonly label: string;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/** 格里本构建不认得的键(非空 ⇒ 这只边档是更新的引擎写下的:数据根比本构建新)。 */
|
|
57
|
+
readonly problem: LocalDataRootReadProblem;
|
|
58
|
+
/** 本构建不认得的键(非空 ⇒ 这只文件是更新的引擎写下的:数据根比本构建新)。 */
|
|
41
59
|
readonly unknownFields: readonly string[];
|
|
42
60
|
}
|
|
61
|
+
/** 引擎版本高水位 marker 读得出,而它记的高水位高于本构建:数据根被更新的引擎服务过。 */
|
|
62
|
+
export interface LocalDataRootNewerEngine {
|
|
63
|
+
/** marker 的绝对路径。 */
|
|
64
|
+
readonly path: string;
|
|
65
|
+
/** 角色(`engine-high-water.json (the local engine high-water marker)`)。 */
|
|
66
|
+
readonly label: string;
|
|
67
|
+
readonly problem: "newer-engine";
|
|
68
|
+
readonly unknownFields: readonly [];
|
|
69
|
+
/** marker 记的高水位(纯 `x.y.z`)与本构建的版本串(原样:发布线读得出的 `x.y.z`,可带预发布 / 构建后缀;读不出的构建在判之前就拒了)。 */
|
|
70
|
+
readonly engineHighWater: {
|
|
71
|
+
readonly highWater: string;
|
|
72
|
+
readonly engine: string;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 数据根跳过了一条**必经**的一次性迁移(本构建已不带它),而根里还留着那条迁移要处理的形(今天一条:会话存档在、会话元数据格缺 —— 存档头上的住客令牌没被收进行,
|
|
77
|
+
* {@link holdArchiveTokenAdoptionDuty})。两种来历,由 `skippedMigration` 的两格推出(不另带位):`highWater` 为 `null` 或早于 `requiredSince` ⇒ 带那条迁移的版本从没打开过这只根;
|
|
78
|
+
* 不早于 `requiredSince` ⇒ 带它的版本打开过、没收完(数据根里的收令牌欠账标记还在)—— 出路要一个**不低于 `highWater`**、仍带它的版本(更低的会被高水位拒在门外)。
|
|
79
|
+
*/
|
|
80
|
+
export interface LocalDataRootSkippedMigration {
|
|
81
|
+
/** 那一形住的目录(会话存档目录)的绝对路径。 */
|
|
82
|
+
readonly path: string;
|
|
83
|
+
/** 角色(`sessions (the local session archives)`)。 */
|
|
84
|
+
readonly label: string;
|
|
85
|
+
readonly problem: "skipped-required-migration";
|
|
86
|
+
readonly unknownFields: readonly [];
|
|
87
|
+
/**
|
|
88
|
+
* `highWater` = 这只根记的引擎高水位(纯 `x.y.z`;`null` = 没有 marker:只被不记高水位的引擎打开过 —— 7.148.0 之前的 run-local、7.144.0 之前的服务);
|
|
89
|
+
* `requiredSince` = 那条迁移的引入版本(根必须被它或更新、且仍带它的版本完整起过一次);`sessions` = 那一形的会话数。
|
|
90
|
+
* `highWater` 不早于 `requiredSince` ⇒ 「打开过、没收完」那一支(见类型头注;出路版本不低于 `highWater`)。
|
|
91
|
+
*/
|
|
92
|
+
readonly skippedMigration: {
|
|
93
|
+
readonly highWater: string | null;
|
|
94
|
+
readonly requiredSince: string;
|
|
95
|
+
readonly sessions: number;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
43
98
|
/**
|
|
44
99
|
* **local 数据根的「本构建读不出」拒**(起服对账一族的 local 腿;机读码与 SQL 列册对账同一个 `config.schema_mismatch`,拒句同形)。
|
|
45
100
|
* 一只严格边档用它那一只严格读者读不出 ⇒ 这一只拒,文件原地不动、一个字节不改。两处触发、一只类:
|
|
46
|
-
* · `boot` ——
|
|
101
|
+
* · `boot` —— 两处拒启:local 后端**打开数据根的那一刻**(锁在手之后、本仓任何一只店建起之前;`store-backend.ts` 的 `openLocalBackend`)引擎版本高水位 marker 读不出 / 高于本构建
|
|
102
|
+
* (`local-engine-high-water.ts`,读数种别 `newer-engine` 或读不出的那几种;同一判词「数据根比代码新」的第二种证据 —— 这一拒由公开序列的 `ensureSchema()` 交出);
|
|
103
|
+
* 起服对账(`LocalBackend.ensureSchema()`)里严格边档清册读不出的每一只合成一只({@link LocalSessionStore.assertStrictSidecarsReadable});
|
|
47
104
|
* · `serving` —— 起服之后这只边档第一次被碰时才读不出(嵌入方跳过了 `ensureSchema()`;或起服后别的写者把它写成本构建读不出的形,在替换之前那一读里看见):
|
|
48
105
|
* 读不出的是**形**(`not-json` / `malformed`,确定的判词)⇒ 这只边档在本进程里从此每一读每一写都交这一只(重启才重判);碰它的请求失败(把它交给 HTTP 全局兜底的路由:
|
|
49
106
|
* 500 `internal.error` + 一行 error 级 `request_error` 带本码;自己接住故障的路由按各自的 500 臂答)。I/O 故障(非确定)不粘。
|
|
50
107
|
* 属 {@link StoreBootRefusalError} 族:起服降级臂不吞它(缺省推导的 local 不会被吃成内存后端)。拒句零原文:只点名文件、种别与不认得的键名,不带任何值。
|
|
51
108
|
*/
|
|
52
109
|
export declare class LocalDataRootSchemaMismatchError extends StoreBootRefusalError {
|
|
53
|
-
readonly findings: readonly
|
|
110
|
+
readonly findings: readonly LocalDataRootMismatch[];
|
|
54
111
|
readonly when: "boot" | "serving";
|
|
55
112
|
/** 机读码(与 SQL 列册对账 / 退役 schema 的拒启同一个)。 */
|
|
56
113
|
readonly code = "config.schema_mismatch";
|
|
57
|
-
constructor(findings: readonly
|
|
114
|
+
constructor(findings: readonly LocalDataRootMismatch[], when: "boot" | "serving");
|
|
58
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* 「会话存档在而会话元数据格缺 ⇒ 建一格,化身沿用存档头上的令牌」那条一次性迁移(登记表 M47,`one-time-migrations.ts`)的引入版本 —— 跳版拒启臂的唯一常量。
|
|
118
|
+
* 登记表 M47 行的 `introducedIn` 与它逐字相同(`test/local-root-one-row-store.test.ts` 钉);M47 删码之后行不在了,臂照读这里。
|
|
119
|
+
*/
|
|
120
|
+
export declare const ARCHIVE_TOKEN_ADOPTION_SINCE = "7.148.0";
|
|
121
|
+
/** 本构建带不带那条迁移:登记表里有没有 M47 行(行随码同删 —— 删码那一版起臂恒判、窗内补铸只新铸)。 */
|
|
122
|
+
export declare function archiveTokenAdoptionCarried(): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* 数据根里「存档在而会话元数据格缺」的会话 id(同步一读;读者两位 —— 常驻臂 {@link holdArchiveTokenAdoptionDuty}(在数据根打开的同步段里跑,店还没建、不许写)
|
|
125
|
+
* 与收令牌的证明(`LocalSessionStore.adoptArchiveTokensM47` 的尾部:收齐 = 用常驻臂自己这一只读法读到的,只剩迁移收取范围之外的那几类)。
|
|
126
|
+
* 存档 = 存档目录 `<root>/sessions/` 里的 `<id>.jsonl`(引擎文件仓的命名 —— 本店的存档目录屏障 `syncArchiveDirectory` 读同一个目录名);格 = 会话元数据边档的键(活格与标记格都算有格)。
|
|
127
|
+
* **只会多、不会少**:委派分区的 placed 存档、会话头读不出的存档也算(它们不在列表面上,一次性迁移 M47 不收它们)—— 臂因此在少数根上多拒一次,出路相同、零写;证明按迁移的范围把这两类剔掉。
|
|
128
|
+
* 边档读不出 ⇒ {@link LocalDataRootSchemaMismatchError}(`boot`;与起服严格对账同一判、同一拒);存档目录不在 ⇒ 空;目录读故障原样抛(判不了 ⇒ 不放行)。
|
|
129
|
+
*/
|
|
130
|
+
export declare function archiveIdsWithoutCellSync(root: string): string[];
|
|
131
|
+
/**
|
|
132
|
+
* **判或记收令牌欠账**(无窗;唯一调用点 = `store-backend.ts` 的 `openLocalBackend`,经引擎版本高水位的判前钩 —— 数据根锁在手、高水位判过、**抬之前**、本仓任何一只店建起之前)。
|
|
133
|
+
* 两件事、两只事实:「谁可能写过这只根」归引擎高水位(判过即抬,本函数不动它);「这只根还欠不欠那条迁移」归欠账标记({@link ARCHIVE_TOKEN_ADOPTION_PENDING_FILE})。
|
|
134
|
+
* 「欠账开着吗」只在这一处判 —— 带迁移的构建记、不带迁移的构建拒:
|
|
135
|
+
* · **带迁移**(`adoptionCarried`,{@link archiveTokenAdoptionCarried})⇒ **记账**:打开之前的高水位早于 {@link ARCHIVE_TOKEN_ADOPTION_SINCE} 或缺席(带那条迁移的版本从没打开过这只根)
|
|
136
|
+
* ∧ 存档目录里至少一只存档 ⇒ 原子写欠账标记(`required`;已在也重写)。只读目录、不读会话元数据边档:严格读者不认一次性迁移 M40 的旧车道词(M40 在起服对账里才改名),
|
|
137
|
+
* 在打开这一刻用它会把一只 M40 马上就能修好的根拒掉;多记无害(根里都有格 ⇒ 迁移当次即销)。标记先于高水位落盘 ⇒ 「抬了而没记账」的窗不存在。目录读故障 ⇒ 抛(抬之前拒、零写)。
|
|
138
|
+
* 销账在迁移的尾部:`required` 提交 → 用 {@link archiveIdsWithoutCellSync} 证明收齐 → 删标记(任何一步失败标记留着)。
|
|
139
|
+
* · **不带迁移** ⇒ **常驻臂**:(① 打开之前的高水位早于引入版本或缺席 ∨ ② 欠账标记在)∧ 根里有存档在而格缺的会话({@link archiveIdsWithoutCellSync})⇒
|
|
140
|
+
* {@link LocalDataRootSchemaMismatchError}(`boot`,读数种别 `skipped-required-migration`;② 那一支的拒句点名「打开过它的那一版带这条迁移但没收完」与「不低于已记高水位」的出路)。
|
|
141
|
+
* 拒 ⇒ 高水位不抬、不改既有文件的字节(判拒发生在钥匙对与空账本已落、店尚未开之后;下一版改为判拒先于任何写) ⇒ 拒句点名的那一版(带那条迁移、不比已记高水位旧)仍开得了这只根(抬过之后它会被「数据根比本构建新」拒在门外,出路就断了)。
|
|
142
|
+
* ① ② 都假 ⇒ 带那条迁移的版本收齐过这只根,此后的无格存档只可能是建档与写格之间的崩溃留下的(头令牌从没交出过,补铸无害)。
|
|
143
|
+
* 标记在而无格存档为零(收齐之后、销账之前停了)⇒ 无事可收 = 欠账已清:**销账**(删标记、落盘)后放行 —— 在抬之前:否则本构建抬过窗内版本之后,一只崩溃生的无格存档就让这只根被拒,
|
|
144
|
+
* 而出路要的「不低于已记高水位、仍带那条迁移」的版本不存在。
|
|
145
|
+
* 判拒零写(本仓):记账在本模块的判(高水位读不出 / 高于本构建)之后;不带迁移的构建拒时一个字节不写,放行时只可能删一只已清的欠账标记。
|
|
146
|
+
*/
|
|
147
|
+
export declare function holdArchiveTokenAdoptionDuty(root: string, priorHighWater: ReleaseTriple | undefined, adoptionCarried: boolean): void;
|
|
148
|
+
/** 数据根对账文件的一读的读数(两个出口同形)。 */
|
|
149
|
+
export type DataRootFileText = {
|
|
150
|
+
readonly state: "absent";
|
|
151
|
+
} | {
|
|
152
|
+
readonly state: "unreadable";
|
|
153
|
+
readonly fault: unknown;
|
|
154
|
+
} | {
|
|
155
|
+
readonly state: "text";
|
|
156
|
+
readonly text: string;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* 数据根对账文件的**字节一读**(唯一的判;异步 {@link readDataRootFileText} 与同步 {@link readDataRootFileTextSync} 两个出口只差 I/O 的同步性,`ENOENT` 之后的判都经 {@link judgedAfterEnoent}):
|
|
160
|
+
* 严格边档的三个触点({@link SidecarMap.readDisk})、一次性迁移 M40 的会话腿走异步出口,引擎版本高水位 marker(`local-engine-high-water.ts`,在后端打开的同步段里判)走同步出口,
|
|
161
|
+
* 所以「缺文件 / 读不出(I/O)/ 读到字节」在各处是同一个判决。形判据不在这里:每个调用点用自己的具名形读者解码([ref] 门③:读者不经参数传递,哪一套键判了这只文件在调用点上看得见)。
|
|
162
|
+
* **缺席 = 目录里没有这一项**(不是读不出):`ENOENT` 而这一项还在(悬空符号链接 —— 链接在、目标不在)⇒ 读不出,不当缺席(与配置根的悬空链接同一条律);
|
|
163
|
+
* 读完 `ENOENT` 到 `lstat` 之间这一项被删 ⇒ 缺席;`lstat` 自己判不了(非 `ENOENT`)⇒ 读不出。
|
|
164
|
+
*/
|
|
165
|
+
export declare function readDataRootFileText(path: string): Promise<DataRootFileText>;
|
|
166
|
+
/** {@link readDataRootFileText} 的同步出口(同一判)。 */
|
|
167
|
+
export declare function readDataRootFileTextSync(path: string): DataRootFileText;
|
|
168
|
+
/**
|
|
169
|
+
* 读不出的故障 → 一段读数(唯一一处;严格边档的拒与引擎版本高水位 marker 同经它):形的故障({@link SqlJsonColumnError})带它的种别与形读者不认得的键,
|
|
170
|
+
* I/O 故障带 errno(没有 ⇒ `unreadable`)。
|
|
171
|
+
*/
|
|
172
|
+
export declare function dataRootMismatchOf(path: string, label: string, fault: unknown): LocalDataRootUnreadable;
|
|
59
173
|
/**
|
|
60
174
|
* local 车道会话存档的**唯一 repo 出口**:本仓里每一只读 `<root>/sessions/*.jsonl` 的 `FileSessionRepo` 都从这里取(`LocalSessionStore` 的底座;会话视图窗不再自开 repo,
|
|
61
175
|
* 它的元数据与日志都由店交出 —— `local-session-window.ts`),所以坏记录的披露座只有这一份接线。座 = F 类 `server.session-repo.corrupt-record-skipped`(会话存档里读不出的记录丢的是可用性:
|
|
@@ -82,6 +196,13 @@ export declare class LocalArchiveSnapshotsPresentError extends StoreBootRefusalE
|
|
|
82
196
|
* 目录在而读不了(权限 / I/O)⇒ 同一只拒(判不出里面有没有快照 —— fail-closed,不让起服降级臂把它读成「这台机器存不了盘」)。
|
|
83
197
|
*/
|
|
84
198
|
export declare function assertNoArchiveSnapshots(dir: string): void;
|
|
199
|
+
/** M47 local 腿一次跑的读数({@link LocalSessionStore.adoptArchiveTokensM47};报告键见 `one-time-migrations.ts` 的 `localArchiveTokensAdopted` / `localArchiveTokensMinted`)。 */
|
|
200
|
+
export interface LocalArchiveTokenAdoption {
|
|
201
|
+
/** 建了格、化身沿用存档头令牌的会话数。 */
|
|
202
|
+
readonly adopted: number;
|
|
203
|
+
/** 建了格、存档头没有令牌(7.49.0 之前的存档)而新铸的会话数。 */
|
|
204
|
+
readonly minted: number;
|
|
205
|
+
}
|
|
85
206
|
export interface LocalArchiveMigrationReading {
|
|
86
207
|
/** 补了行事实(建档时刻 / 谱系)的格数(含为盘上有存档而没有格的会话新建的格)。 */
|
|
87
208
|
readonly rowFactsBackfilled: number;
|
|
@@ -103,7 +224,20 @@ export interface LocalSessionStoreDeclaration {
|
|
|
103
224
|
readonly durability?: StoreDurability;
|
|
104
225
|
readonly placements?: NonNullable<SessionStore["placements"]>;
|
|
105
226
|
}
|
|
106
|
-
|
|
227
|
+
/**
|
|
228
|
+
* 条件撤回的 run 半(run 店的窄面;文件 / 内存 run 店都答)—— local 会话店在这只会话的写锁(= 根行锁)里调,实现**不得再取根行锁**(锁不可重入)。
|
|
229
|
+
* 本会话有 `ownTaskId` 之外的 run 行 ⇒ `{ keep: "runs" }`、一个字节不删;否则**严格**删掉本次 run 的部署行(先盘后索引、失败即抛)⇒ `"proceed"`。
|
|
230
|
+
*/
|
|
231
|
+
export interface SessionRunWithdrawSource {
|
|
232
|
+
withdrawRunsOf(sessionId: string, ownTaskId: string | undefined): "proceed" | {
|
|
233
|
+
readonly keep: "runs";
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/** 本店的撤回装配(装配方给;SQL 孪生的部署判据的 local 对位):本会话的续跑输入怎么严格删(数据根上的 checkpoint ctx 档;缺 = 本部署没有续跑输入可删)。 */
|
|
237
|
+
export interface LocalSessionWithdrawDeclaration {
|
|
238
|
+
readonly withdrawCheckpointCtx?: (sessionId: string) => void;
|
|
239
|
+
}
|
|
240
|
+
export declare class LocalSessionStore implements SessionStore, SessionRootRows {
|
|
107
241
|
private readonly repo;
|
|
108
242
|
private readonly runs;
|
|
109
243
|
/** [ref] 车1:托管留存声明 —— **诚实的 none**。本店的行没有任何按期删除的腿(留存 lane 的三方法只实现在
|
|
@@ -132,13 +266,6 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
132
266
|
private readonly recordedPlacementOf;
|
|
133
267
|
/** In-flight acquisitions keyed by id, so concurrent acquire(sameId) in one process share one (mirrors TiDBSessionStore). */
|
|
134
268
|
private readonly pending;
|
|
135
|
-
/**
|
|
136
|
-
* 本进程里删行已经开始的会话 id(删除与 placed 行的 release 都在 {@link dropRowHeld} 第一步登记)。锁外读者的补铸({@link cellOfPresent}:格缺而存档在 ⇒ 当作
|
|
137
|
-
* 7.104.0 之前写下的会话补一格)对登记过的 id 不铸 —— 删行的那一笔与存档的删除不是同一笔(placed 行存档最后删,存档行头是重试判别位),两笔之间盘上正是
|
|
138
|
-
* 「格缺而存档在」那一形;锁外的读若照旧补铸,存档随后删掉就留下一只没有存档的格(读作一只无主会话,再 release 也清不掉)。删行一开始,这一行对读者就不在了;
|
|
139
|
-
* 中途失败、存档还在 ⇒ 读者读作不在,重发收完。进程内只增(一只删掉的会话一个 id);补铸只对格缺的存档起作用,所以同 id 再建(登记 / 导入 / 建会话都自己铸格)不受影响。
|
|
140
|
-
*/
|
|
141
|
-
private readonly rowsDropped;
|
|
142
269
|
/** Last-activity marker (touch) for ordering — the keyset sort key for {@link listSessions}. PERSISTED to a JSON
|
|
143
270
|
* sidecar under {@link dataDir} (when given) so the /resume picker's newest-first order SURVIVES a service restart:
|
|
144
271
|
* without persistence the map starts EMPTY on boot and every session degrades to `createdAt` ordering (the picker
|
|
@@ -158,27 +285,24 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
158
285
|
/** Set by touch/delete when the map mutated; cleared by a write that captured the change. A write that ran while this
|
|
159
286
|
* is set re-runs (a touch that landed during an active write isn't dropped). Drives the chain's re-run guard (bug B). */
|
|
160
287
|
private dirty;
|
|
161
|
-
/** Monotonic per-write counter — feeds a UNIQUE tmp filename per write so overlapping writes can't share one tmp path
|
|
162
|
-
* and tear each other's bytes (bug B). */
|
|
163
|
-
private writeSeq;
|
|
164
288
|
/** Last time a sidecar-write error was warned (bug D): throttle the best-effort warn so a persistently-failing disk
|
|
165
289
|
* doesn't spam the log on every debounced flush. 0 ⇒ never warned. */
|
|
166
290
|
private lastWarnAt;
|
|
167
291
|
/** Absolute path to the lastActivity JSON sidecar, or undefined when not persisting (in-memory-only deployment). */
|
|
168
292
|
private readonly sidecarPath?;
|
|
169
|
-
/** Title map (`session-titles.json`) — the local twin of the SQL `
|
|
293
|
+
/** Title map (`session-titles.json`) — the local twin of the SQL `session_ext.title` column: one cell, two writers
|
|
170
294
|
* (the user's {@link writeSessionRowCells}; the auto-titler's {@link setTitleIfNull}, fills an absent cell
|
|
171
295
|
* only — writer order: `src/session-row.ts`; both under the session write lock). Separate file from the lastActivity sidecar ON PURPOSE (that format is a
|
|
172
296
|
* #10 clobber area); ultra-low-rate. Cross-instance sharing: see {@link SidecarMap}. */
|
|
173
297
|
private readonly titles;
|
|
174
|
-
/** Pin map (`session-pinned.json`, {@link readPinnedSidecar}) — the local twin of `
|
|
298
|
+
/** Pin map (`session-pinned.json`, {@link readPinnedSidecar}) — the local twin of `session_ext.pinned`. Its own file for
|
|
175
299
|
* the same reason titles have theirs (one small map per concern, no format coupling); absent key = not pinned. */
|
|
176
300
|
private readonly pinned;
|
|
177
301
|
/** [ref] — instruction-source baselines (`session-instruction-sources.json`): the chain member the session's previous
|
|
178
|
-
* run selected, encoded like the SQL twins' `
|
|
302
|
+
* run selected, encoded like the SQL twins' `session_ext.instruction_source` column ('' = none; missing key = never
|
|
179
303
|
* recorded). Its own file for the same reason titles have theirs: one small map per concern, no format coupling. */
|
|
180
304
|
private readonly instructionSources;
|
|
181
|
-
/** 会话行的位置与项目那一格(`session-workspaces.json`)—— SQL 孪生 `
|
|
305
|
+
/** 会话行的位置与项目那一格(`session-workspaces.json`)—— SQL 孪生 `session_ext.workspace` 的 local 对位:`{ [sessionId]: 那一格的文本 }`,
|
|
182
306
|
* 文本与 SQL 列同一只编解码(`session-workspace-cell.ts`,一格读不出 ⇒ 读作没有记录并计一次)。缺键 = 没有记录。一事一档,理由同 titles。 */
|
|
183
307
|
private readonly workspaces;
|
|
184
308
|
/**
|
|
@@ -197,7 +321,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
197
321
|
* 没有第二张手写名单。读者只有起服对账 {@link assertStrictSidecarsReadable}。
|
|
198
322
|
*/
|
|
199
323
|
private readonly strictSidecars;
|
|
200
|
-
/**
|
|
324
|
+
/** 本店运维日志行(存档收尾未完成 `session_drop_unfinished`、令牌收养跳过 `archive_token_adoption_skipped`)的出口。 */
|
|
201
325
|
private readonly log;
|
|
202
326
|
/**
|
|
203
327
|
* 按会话的写锁(表见 {@link SESSION_WRITE_LOCKS_BY_ROOT})—— 会话行两位的**每一笔**写(用户的行格写原语:判 → 边档草稿 → 落盘 → 发布;自动标题器的
|
|
@@ -210,33 +334,45 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
210
334
|
private readonly sessionWriteLocks;
|
|
211
335
|
/**
|
|
212
336
|
* 执行席(规则在 `src/execution-placement.ts`):读 = 那一格的 `execution` 位(fork 创建的格而存档不在 ⇒ `forking`);place / markMirror 在这只会话的写锁里判住客
|
|
213
|
-
* (化身 + 头读投影的属主 `owner ?? null`)再只改 `execution` 那一位 —— 住客换了(
|
|
337
|
+
* (化身 + 头读投影的属主 `owner ?? null`)再只改 `execution` 那一位 —— 住客换了(删后重建)⇒ `gone`,不写。
|
|
214
338
|
* 认领(run 店的单活槽,{@link SessionRunClaimSource}):`markMirror` 在同一把写锁里读它、只拦「absent → mirror」这一笔(判序与 SQL 孪生同,见 {@link markMirrorExecution});`place` 是认领持有者自己的初始放置写,不读认领。
|
|
215
|
-
*
|
|
339
|
+
* 导入三写口(整段 `importEntries` / `replaceEntries` / 暂存提交)同在写锁里读它、交 SQL 事务内钩 `import` 臂的那一只判官 {@link judgeSessionWrite}(见 {@link admitImportHeld});路由的认领判(第一阶段写前判 + 提交前复判)是更早的一道,不是唯一一道。
|
|
216
340
|
*/
|
|
217
341
|
readonly executionPlacement: ExecutionPlacementSeat;
|
|
218
342
|
/**
|
|
219
|
-
* 一次性迁移 M32 的 local 腿用的席(随 M32 · 窗口见 `one-time-migrations.ts` 登记表)
|
|
220
|
-
* (
|
|
221
|
-
* `place` 就是席的 `place`。
|
|
343
|
+
* 一次性迁移 M32 的 local 腿用的席(随 M32 · 窗口见 `one-time-migrations.ts` 登记表):唯一成员 `backfill` = {@link backfillPlacement} —— 锁里观察一次、一笔写成 writer
|
|
344
|
+
* (观察抛 ⇒ 答 {@link UnusableArchive} 点名跳过,开机回填不动存档;车道表不是一项 ⇒ `ambiguous`、不写)。
|
|
222
345
|
*/
|
|
223
346
|
readonly executionPlacementBackfill: LocalPlacementBackfillSeat;
|
|
224
347
|
/** 数据根(`resolve()` 之后;内存部署 = `undefined`)—— 一次性迁移 M33 的快照目录住在它下面(窗口见 `plugins/one-time-migrations.ts` 登记表)。 */
|
|
225
348
|
private readonly dataRoot;
|
|
226
349
|
/** 一次性迁移 M33:本进程起服以来消化掉的快照记录数(恢复先行那一步累加,迁移读数交出时清零)。 */
|
|
227
350
|
private archiveSnapshotsSettled;
|
|
351
|
+
/** 撤回时本会话续跑输入的严格删法({@link LocalSessionWithdrawDeclaration};缺 = 没有可删的)。 */
|
|
352
|
+
private readonly withdrawCheckpointCtx;
|
|
228
353
|
/** @param repo the core SessionRepo this store projects into the §0.5 SessionStore shape.
|
|
229
354
|
* @param runs the run store whose per-session projection is the ONLY source of a row's `runCount` / `lastStatus` / `lastRunId` /
|
|
230
355
|
* `lastTaskRunId` (LocalBackend passes its `FileRunStore`). Required — a run-less local session store does not exist.
|
|
231
356
|
* @param dataDir the SAME data dir the file-backed repo persists under (LocalBackend passes `fileBackend.root`).
|
|
232
357
|
* When given, lastActivity is persisted to `<dataDir>/session-last-activity.json` so it survives a
|
|
233
358
|
* restart (the file-backed deployment); omit it for the in-memory deployment (nothing survives).
|
|
234
|
-
* @param opts.log the
|
|
235
|
-
* LOG_LEVEL; absent ⇒ an info-level JSON-line logger
|
|
359
|
+
* @param opts.log the sink of this store's operator log lines (LocalBackend passes a logger at the deployment's
|
|
360
|
+
* LOG_LEVEL; absent ⇒ an info-level JSON-line logger).
|
|
236
361
|
* @param opts.durability / opts.placements the deployment's declaration ({@link LocalSessionStoreDeclaration}; see the two fields). */
|
|
237
362
|
constructor(repo: HeadReadingSessionRepo & Partial<PlacementRecordingRepo>, runs: SessionRunRollupSource & SessionRunClaimSource, dataDir?: string, opts?: {
|
|
238
363
|
log?: Pick<Logger, "info" | "warn">;
|
|
239
|
-
} & LocalSessionStoreDeclaration);
|
|
364
|
+
} & LocalSessionStoreDeclaration & LocalSessionWithdrawDeclaration);
|
|
365
|
+
/**
|
|
366
|
+
* 🔴 一次性迁移 **M40 的 local 会话腿**(窗口见 `plugins/one-time-migrations.ts` 登记表 M40 行;唯一调用点 `LocalBackend.ensureSchema()` 的**第一步**,
|
|
367
|
+
* 排在 {@link assertStrictSidecarsReadable} 之前 —— 严格读的执行位只认本版车道词,旧词先到那里就整只拒启):会话元数据边档里 `execution` 位记成退役词的
|
|
368
|
+
* writer 格改记新名,整只原子重写一次。只改那一个词,别的字节按 JSON 原样写回。字节经边档的唯一一读({@link readDataRootFileText})。
|
|
369
|
+
* 缺文件 / 读不出(I/O 故障如 EACCES / EISDIR、坏 JSON、不是对象)⇒ 不抛、不改,交给其后的严格对账判 —— 它读同一只文件、以 `config.schema_mismatch`
|
|
370
|
+
* 拒(那是这只拒码在本店的唯一铸点);这里抛了,拒码与具名拒都会丢。读得出而写不进 ⇒ {@link ExecutionLaneRenameWriteRefusedError}(拒启,降级臂不吞)。
|
|
371
|
+
* 内存部署 / 没有旧词 ⇒ 零写。返回改了的格数。词的属主 = `execution-lane-rename-m40.ts`。
|
|
372
|
+
*/
|
|
373
|
+
/** 一次性迁移 **M42 的 local 腿**(场景前缀的切换检查;窗口见 `plugins/one-time-migrations.ts` 登记表):会话元数据格里属主以保留前缀开头的会话数(严格边档那一读,零写)。 */
|
|
374
|
+
scenarioPrefixOwnerRowsM42(): Promise<number>;
|
|
375
|
+
renameRetiredExecutionLaneWordM40(): Promise<number>;
|
|
240
376
|
/**
|
|
241
377
|
* [ref] —— **起服对账的 local 腿**(SQL 列册对账的对位;唯一调用点 `LocalBackend.ensureSchema()`,排在 M33 快照消化之前 —— 消化会写会话元数据格):
|
|
242
378
|
* 严格边档清册里的每一只读一次盘(`SidecarMap.reconcile`:冷 ⇒ 载入那一读;已载入 ⇒ 重读只判);读不出的合成**一只** {@link LocalDataRootSchemaMismatchError}
|
|
@@ -246,116 +382,170 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
246
382
|
/**
|
|
247
383
|
* 这一格此刻是不是 `forking`(fork 创建的格 {@link isForkCreatedCell} ∧ 存档不在)。存档在不在只问 repo 的唯一探针 {@link probeArchive} 的「不在」—— **只问有没有**:存档在而用不了(会话头读不出 / 截断)
|
|
248
384
|
* 是「在」,内容读不读得出归真正读内容的那一读(门之后、体之前读一次叶子,读不出 ⇒ `corrupt_session`)。所以带键的会话与不带键的会话在执行席上同形,坏档照样能被换装修好
|
|
249
|
-
* (换装是修坏档的唯一路径)
|
|
250
|
-
* 写口的判、登记、缺档新建臂 —— 看到它就抛),{@link forkingRead} 交出 {@link UnusableArchive}(执行席的读上抛它,回填席点名它)。持这只会话的写锁时读数稳定(改存档在不在的写者都持这把锁);锁外是一次观察。
|
|
385
|
+
* (换装是修坏档的唯一路径)。探针说不出在不在(`storage`)⇒ 原样抛(不替它答 forking 与否)。持这只会话的写锁时读数稳定(改存档在不在的写者都持这把锁);锁外是一次观察。
|
|
251
386
|
*/
|
|
252
|
-
private forkingRead;
|
|
253
|
-
/** {@link forkingRead} 的上抛一形(与 {@link metaOf} 之于 {@link metaRead} 同一条规矩):探针说不出在不在 ⇒ 抛那只故障、原样。 */
|
|
254
387
|
private forkingOf;
|
|
255
388
|
/**
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
389
|
+
* **观察** —— 一只会话此刻的行事实(存档事实的唯一读者,答形见 {@link RowObservation};**不补铸、不写**;存储故障原样抛):
|
|
390
|
+
* 那一格({@link cellStateOf}:标记格 ⇒ `absent`)· 格缺时存档的唯一探针一次 · `want.placement` ⇒ 行头上的元组一次({@link placedRecordOf}:行头读不出 ⇒ 按普通行答)·
|
|
391
|
+
* `want.forking` ⇒ fork 创建的格而存档不在({@link forkingOf};placed 行不问)。交出住客面的读者(头读 / 元数据读 / 执行席的读)在观察之后自己补铸遗留行 —— 那是一次写,
|
|
392
|
+
* 在这只会话的写锁里复判之后才铸({@link metaHeld}):锁外的一次观察可以早于一整条删序,复判挡住「s5 之后补铸幽灵格」。写口在锁里、写之前观察(锁里读数稳定),
|
|
393
|
+
* 写链草稿上的回调同步,只判草稿上的格 + 观察到的存档事实。
|
|
394
|
+
*/
|
|
395
|
+
private observeRow;
|
|
396
|
+
/**
|
|
397
|
+
* 执行席的读(core 席的合同:读故障抛,不吞成 absent):一次观察(格 + 行头元组 + forking),读数见 {@link executionReadingOf}。遗留行(格缺而存档读得出、不是 placed)⇒
|
|
398
|
+
* 进这只会话的写锁**整只重新观察**(格 + 行头元组 + forking)再答 —— 锁外那一读可以早于一整条删除加同 id 重建(重建成 placed 行时,锁外的「不是 placed」与锁里的新格拼不成一只读数);
|
|
399
|
+
* 锁里仍是那只遗留行 ⇒ 补铸({@link mintHeld})后按那一格答。
|
|
259
400
|
*/
|
|
260
|
-
private placementRead;
|
|
261
|
-
/** 执行席的读(core 席的合同:读故障抛,不吞成 absent):{@link placementRead} 的本体,存档读不出 ⇒ 上抛那只故障、原样(与 {@link metaOf} 同一条规矩:要动存档的读者看到读不出就抛)。 */
|
|
262
401
|
private readExecutionPlacement;
|
|
402
|
+
/**
|
|
403
|
+
* 一次性迁移 M32 local 腿的回填(随 M32 · 窗口见 `plugins/one-time-migrations.ts` 登记表;席 {@link executionPlacementBackfill} 的唯一成员):**在这只会话的写锁里观察一次**(格 + 行头元组 + forking),
|
|
404
|
+
* 抛 ⇒ 席接住、转成 {@link UnusableArchive} 点名跳过(一个字节不写;读不出的存档不归回填判)。absent 的那一格(活格没有执行位、不是 forking)或遗留行(格缺而存档读得出、不是 placed)
|
|
405
|
+
* ∧ 车道表只有一项 ⇒ **一笔**写成 writer(格缺就在同一笔里铸化身);车道表不是一项 ⇒ `ambiguous`,不写(调用方循环完响亮拒,「Nothing was changed」是真话);
|
|
406
|
+
* 别的(行不在 / placed / 已有执行位 / forking)⇒ `skipped`。观察与写在同一节锁里 ⇒ 读与写之间没有别的写者(不再按住客谓词重判)。
|
|
407
|
+
*/
|
|
408
|
+
private backfillPlacement;
|
|
263
409
|
/** place(锁内):判官 {@link settledPlaceOutcome} 在写链的草稿上判(与登记的防 clobber 同一处),可写 ⇒ 只改 `execution` 位。 */
|
|
264
410
|
private placeExecution;
|
|
265
411
|
/**
|
|
266
412
|
* identical 臂补 mirror(锁内):先在这只会话的写锁里读 run 认领(行在才读;SQL 孪生:写事务内锁根行后读 `task_active`,根行不在 ⇒ 不读),再交判官 {@link settledMirrorOutcome};
|
|
267
413
|
* 判官的答案先于认领 —— 行不在 / 住客不同 ⇒ `gone`、writer ⇒ `writer`、已是 mirror ⇒ `mirrored`(幂等零写)都不被认领改写;只有「absent → mirror」这一笔写
|
|
268
|
-
* 遇上认领 ⇒ `active`(带那只认领的 task id,格不写)。可写且无认领 ⇒ 只改 `execution` 位为 mirror
|
|
414
|
+
* 遇上认领 ⇒ `active`(带那只认领的 task id,格不写)。可写且无认领 ⇒ 只改 `execution` 位为 mirror。认领唯一的运行期写者(`createRun`)排在同一把锁后面(规则 L),锁内读数稳定。
|
|
269
415
|
*/
|
|
270
416
|
private markMirrorExecution;
|
|
271
417
|
/**
|
|
272
|
-
* 执行位两只写口的锁内一形(调用方持这只会话的写锁)
|
|
273
|
-
*
|
|
418
|
+
* 执行位两只写口的锁内一形(调用方持这只会话的写锁):先观察一次(行头元组 + forking —— 锁内读数稳定),再在写链的草稿上读出这一格、交判官,判官给 `execution` ⇒ 只改那一位。
|
|
419
|
+
* 委派分区行 ⇒ 交判官的是「不在」(判官一字不改:`gone`,不写)。判官 / 解码抛的错收下、写链这一节不写、出链后原样上抛。
|
|
274
420
|
*/
|
|
275
421
|
private settleExecutionHeld;
|
|
276
|
-
/**
|
|
277
|
-
|
|
422
|
+
/**
|
|
423
|
+
* 一格此刻的四态(观察的格那一半;`meta.state.entries` 只由这一只与 {@link liveCellIds} / {@link droppingIds} / {@link deletingIds} 读):活格 ·
|
|
424
|
+
* 在删格(一次删除独占着这只会话;它的终刀若停在删序 s0 之后,格同时带标记 —— 仍是在删格:收完它归删除协议,不归写者律)·
|
|
425
|
+
* 标记格(不在删而字节正在删 —— placed 行的 release / 提交出口撤回的删序停在 s0 之后)· 没有格。
|
|
426
|
+
* 同步读已发布的表(调用方先 `meta.ensureLoaded()`)。
|
|
427
|
+
*/
|
|
428
|
+
private cellStateOf;
|
|
429
|
+
/**
|
|
430
|
+
* 读者律给直读行边档的读者(标题探针 / 指令来源基线 / 工作区):这只会话的格是不是标记格或在删格(删除已开始、还没收完 —— 行边档上的值可能还在盘上)。
|
|
431
|
+
* 是 ⇒ 读者答「行不在」的那一读。没有格的 id 不归这里判(边档读者对它们的答法不变)。
|
|
432
|
+
*/
|
|
433
|
+
private rowDropping;
|
|
434
|
+
/**
|
|
435
|
+
* 列表读间的读者律(列表 / 单行摘要在枚举行集之后还要等预览与 run 汇总):枚举之后这只会话的删除开始了(标记格),或已经收完(枚举时有活格、此刻没有格)⇒ 这一行不交出 ——
|
|
436
|
+
* 否则标记格的属主读作 `null`,带 `includeUnowned` 的调用方会把别人的行当无主行收下(标题、预览照出)。同步判,调用方紧接着同步读属主与行格(同一拍)。
|
|
437
|
+
*/
|
|
438
|
+
private rowGoneSince;
|
|
439
|
+
/** 这只会话的**活格**(读者律:标记格 = 行不在 ⇒ `undefined`,与没有格同答)。同步读(调用方先 `meta.ensureLoaded()`)。 */
|
|
440
|
+
private liveCellOf;
|
|
441
|
+
/** 活格的 id 全集(排序;行集枚举 {@link rowHeaders} 读它;标记格与在删格都不是活格)。 */
|
|
442
|
+
private liveCellIds;
|
|
443
|
+
/** 在删格的 id 全集(带不带删序标记都算;排序;删除面的 `pending` 读它 —— 收尾者的输入)。 */
|
|
444
|
+
private deletingIds;
|
|
445
|
+
/** 标记格的 id 全集(排序;起服扫 {@link finishPendingDrops} 读它)。 */
|
|
446
|
+
private droppingIds;
|
|
278
447
|
/**
|
|
279
448
|
* 把 `sessionId` 那一格写成 `next(before)` 的结果并**落盘**(写链里在草稿上判、写、落盘后才发布给读者 —— 与 instruction-source 同一只 `commit`;
|
|
280
449
|
* 判据建立在每一节之前的盘上状态上,所以防 clobber 的「已记下就不动」写在 `next` 里,不写在链外)。`next` 返回 `undefined` = 不改。
|
|
281
450
|
* 落不了盘 ⇒ 抛(属主与化身都是正确性事实,不做「内存里先记着」的降级:一只没落盘的化身重启后会被换掉 —— 那是另一位住客;
|
|
282
451
|
* 一个没落盘的属主重启后就丢了 —— 那正是 7.119.0 修的病)。返回这一次是否真改了那一格。
|
|
452
|
+
* 🔴 带「删除中」位的 `before` 只归删序({@link dropRowHeld})改:别的写者撞上它 = 不变量破(每一节会话写锁先收完待删,锁里不该再见到它)⇒ 响亮抛、这一节不写。
|
|
453
|
+
* 🔴 在删的 `before` 只归删除面(围栏 / 终刀)改:别的写者撞上它 ⇒ `not_found`(在删读作不在;引擎把它映成 `resume.session_not_found`),这一节不写。
|
|
283
454
|
*/
|
|
284
455
|
private writeMeta;
|
|
285
|
-
/**
|
|
456
|
+
/** 撤回一只刚铸的格(格先、存档后的建行点建存档失败时;落盘;落不了 ⇒ 抛 —— 留下的格就是崩在两步之间的那一形)。不是删一行:删一行只走 {@link dropRowHeld}。 */
|
|
286
457
|
private dropMeta;
|
|
458
|
+
/**
|
|
459
|
+
* 规则 L 的根行面({@link SessionRootRows};唯一的消费方 = 文件 run 店的 `createRun`):在这只会话的写锁里判这一行此刻在不在({@link rowPresentHeld}),交给 `body`。
|
|
460
|
+
* 改行在不在 / 住客 / 读认领的写者(删除 / 导入 / markMirror / placed release / 登记 / 按 id 建 …)都持这把锁,所以 `body` 读到的答案到它完成都成立;
|
|
461
|
+
* 认领在 `body` 里取 ⇒ 全局锁序 = 根行 → 认领(SQL 孪生同序)。锁不可重入:本店任何持锁节都不调 `createRun`。
|
|
462
|
+
*/
|
|
463
|
+
withRootRow<T>(sessionId: string, body: (present: boolean) => Promise<T>): Promise<T>;
|
|
464
|
+
/**
|
|
465
|
+
* 这一行此刻在不在(锁内一形,调用方持这只会话的写锁 —— 节首已收完待删):观察一次 —— 活格 ⇒ 在;遗留行(格缺而存档在,读得出或在而内容用不了)⇒ 在(行在,只是那一格还没补铸);
|
|
466
|
+
* 不在 / 标记格 ⇒ 不在;说不出在不在(`storage`)⇒ 观察抛那只故障(判不了根行在不在,不替它答)。不补铸、不写。
|
|
467
|
+
*/
|
|
468
|
+
private rowPresentHeld;
|
|
287
469
|
/**
|
|
288
470
|
* 在 `sessionId` 的写锁里跑 `body`(锁见 {@link sessionWriteLocks}):排在这只会话此前每一节之后,`body` 完成(或抛)才放下一节。
|
|
471
|
+
* 🔴 **写者律**:每一节做的第一件事 = 收完这只 id 上的待删({@link finishPendingDropHeld}:标记格 ⇒ 走完删序;在删格归删除协议,不在这里收);收尾失败 ⇒ `body` 不跑、原故障上抛。
|
|
472
|
+
* 所以登记 / 按 id 建 / placed 建 / fork 目标 / 导入落格 / place / 行格写 / 自动标题器都不会在标记格上做判;收掉的那一位交给 `body`(删除据它的属主答)。
|
|
289
473
|
* 不可重入 —— 锁里的调用方只调 `…Held` 那一形(它们假定锁已在手),不再回到上锁的公开口。
|
|
290
474
|
*/
|
|
291
475
|
private withSessionWriteLock;
|
|
292
476
|
/**
|
|
293
477
|
* 盘上这只会话的存档此刻是什么状态(repo 的**唯一探针**;`open` 读整只存档,所以只在边档里没有那一格、或要判 `forking` 时才走到这里)。三种答案:
|
|
294
|
-
* 不在(`not_found`)· 在而读得出 ·
|
|
295
|
-
*
|
|
296
|
-
* 要对这份存档动手的({@link existsInRepo};{@link metaOf};{@link readExecutionPlacement})一律上抛它;一次性迁移 M32 的回填({@link executionPlacementBackfill})经
|
|
297
|
-
* {@link metaRead} / {@link forkingRead} 收下它、点名跳过,不上抛。只问有没有的 {@link forkingRead} 把 `corrupt_session` 读作「在」(存档找到了),`storage` 不替它答。
|
|
478
|
+
* 不在(`not_found`)· 在而读得出 · 在而内容用不了(`corrupt_session`,带那只故障)。说不出在不在(`storage` —— 读的时候抛了别的故障,I/O 级;词的读法见 {@link archiveFaultWord})
|
|
479
|
+
* ⇒ **原样抛**(不替它答)。探针不改那只故障:要对这份存档动手的读者({@link existsInRepo})对 `corrupt` 也上抛它;只问有没有的({@link forkingOf} / 根行判)把它读作「在」。
|
|
298
480
|
*/
|
|
299
481
|
private probeArchive;
|
|
300
482
|
/**
|
|
301
|
-
* 委派分区的**唯一一读**(存档行头上的元组,repo 的 `placementOf`;文件头注):placed · 普通 ·
|
|
302
|
-
*
|
|
483
|
+
* 委派分区的**唯一一读**(存档行头上的元组,repo 的 `placementOf`;文件头注):placed · 普通 · 行头读不出(`corrupt_session`,带那只故障)。repo 只吞「不在」;
|
|
484
|
+
* 说不出(`storage`)⇒ 原样抛。由读者决定行头读不出时按普通行答还是上抛。
|
|
303
485
|
*/
|
|
304
486
|
private placementProbe;
|
|
305
487
|
/**
|
|
306
488
|
* 改写面与执行席的读法({@link placementProbe} 的一形):placed ⇒ 那份元组;普通 ⇒ `undefined`;行头读不出(`corrupt_session`)⇒ `undefined` —— 没有可读的
|
|
307
|
-
* placement 记录,这一行按普通行答,内容读不读得出归真正读内容的那一读(坏档照样换得掉,与 forking 探针同一条规矩);说不出(`storage`)⇒
|
|
489
|
+
* placement 记录,这一行按普通行答,内容读不读得出归真正读内容的那一读(坏档照样换得掉,与 forking 探针同一条规矩);说不出(`storage`)⇒ 探针抛那只故障。
|
|
308
490
|
* core 7.61.0 起 repo 的探针按行头的元组自己读、不整头解码:placed 行的属主格坏了探针照答元组(本臂不再接得住 placed 行)—— 探针拒只剩「行头记录整个读不出」,
|
|
309
491
|
* 那时没有任何元组可守(`test/local-session-placement.test.ts` 的 [ref] 三格)。
|
|
310
492
|
*/
|
|
311
493
|
private placedRecordOf;
|
|
312
|
-
/** {@link placedRecordOf} 的是非形。 */
|
|
313
|
-
private isPlacedRow;
|
|
314
494
|
/** 删除与认领的读法({@link placementProbe} 的另一形):读不出的任何一形 ⇒ 抛那只故障(说不准是不是 placed 行,就不删、不写)。 */
|
|
315
495
|
private placedRecordOrThrow;
|
|
316
|
-
/** 盘上有没有一份**读得出**的这只会话的存档(
|
|
496
|
+
/** 盘上有没有一份**读得出**的这只会话的存档(登记 / 导入的落点判 / fork 目标这些要对存档动手的读者用):用不了的存档照旧上抛它的故障。 */
|
|
317
497
|
private existsInRepo;
|
|
318
498
|
/**
|
|
319
|
-
* 一只会话的元数据 —— 属主与化身的**唯一读口**(
|
|
320
|
-
*
|
|
321
|
-
*
|
|
499
|
+
* 一只会话的元数据 —— 属主与化身的**唯一读口**(锁外一形:按 id 读 {@link headOf} / 元数据读口 / 执行席都经它)。`undefined` = 无此会话(含标记格:删除已开始)。
|
|
500
|
+
* 一次观察:活格 ⇒ 它(一次同步读,两样同出一格,不会拼出混世代组合);遗留行(格缺而存档在 —— 7.104.0 之前的会话从没被铸过化身)⇒ 在这只会话的写锁里复判后补铸
|
|
501
|
+
* ({@link metaHeld}:锁外的观察可以早于一整条删序,复判之后才写,挡住幽灵格);存档在而内容用不了 ⇒ 具名拒 {@link SessionOwnerUnreadableError};说不出在不在 ⇒ 观察抛那只故障。
|
|
502
|
+
* 持锁的调用方用 {@link metaHeld}(锁不可重入)。
|
|
322
503
|
*/
|
|
323
504
|
private metaOf;
|
|
324
505
|
/**
|
|
325
|
-
* {@link metaOf}
|
|
326
|
-
*
|
|
327
|
-
|
|
328
|
-
|
|
506
|
+
* {@link metaOf} 的锁内一形(调用方持这只会话的写锁):观察一次 —— 活格 ⇒ 它;不在 ⇒ `undefined`;遗留行 ⇒ 补铸一格只有化身的(属主没有事实可写,不伪造 —— 不写 `owner` 键 =
|
|
507
|
+
* 从没被记下)并落盘后再答(锁里的观察就是存档在盘上的证明);存档在而内容用不了 ⇒ 具名拒(不替一份读不出的存档铸化身)。
|
|
508
|
+
*/
|
|
509
|
+
private metaHeld;
|
|
510
|
+
/**
|
|
511
|
+
* 给一只**已证明在盘上**的会话补铸那一格(锁内:调用方持这只会话的写锁,刚观察到存档 / 刚打开它)—— 只有化身(属主没有事实可写;化身经窗内长第一格的唯一规则
|
|
512
|
+
* {@link firstCellIncarnationHeld});已有格 ⇒ 不写、读它。
|
|
329
513
|
*/
|
|
330
|
-
private
|
|
514
|
+
private mintHeld;
|
|
331
515
|
/**
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
* `undefined` = 补铸落盘之前那一格已被并发删除抹掉(只有锁外的 {@link metaOf} 走得到)。
|
|
516
|
+
* 一只已证在盘、没有会话元数据格的存档长第一格时的化身(锁内:调用方持这只会话的写锁)—— 窗内长第一格的唯一规则 {@link firstCellIncarnationOf} 的按 id 一形:
|
|
517
|
+
* 本构建带收令牌的迁移 ⇒ 读一次存档头({@link archiveHeadOf})取它的令牌(头读抛 ⇒ 原样上抛,不替一份读不出的头铸化身);不带 ⇒ 不读、新铸。
|
|
335
518
|
*/
|
|
336
|
-
private
|
|
519
|
+
private firstCellIncarnationHeld;
|
|
337
520
|
/**
|
|
338
521
|
* core `SessionStore.headOf` —— 本店按 id 读一行的**唯一**读口(SQL 孪生同义;此前的 `ownerOf` / `sessionFaceOf` / `incarnationOf` / `getHead` / `getLeafId`
|
|
339
522
|
* 五只读并进来,规则见 `session-incarnation.ts` 头注)。属主与住客出自 {@link metaOf} 读到的同一格(local 后端属主 + 化身的唯一真源 —— 本店的**行**),
|
|
340
523
|
* 叶子出自会话存档(本店的**内容**;core `SessionRepo.headOf`:File repo 读日志首记录与尾、不重放 —— 存档首行的属主 / 令牌本店不读)。
|
|
341
524
|
* 存档读不出(会话头坏了、I/O 故障)⇒ 头照答行上的属主与住客,叶子那一格带着那只故障(`UnreadableLeaf`,读叶子的人收到它):只判归属的读者
|
|
342
525
|
* 不因坏存档改判,坏存档只让读内容的那一位看见(SQL 孪生的头不碰 `session_event`,同一条律;规则在 `session-incarnation.ts` 头注)。
|
|
343
|
-
* 行本身读不出(边档里还没有这一格、要从存档推出这只会话在不在,而存档读不出 —— {@link metaOf}
|
|
526
|
+
* 行本身读不出(边档里还没有这一格、要从存档推出这只会话在不在,而存档读不出 —— {@link metaOf} 的观察)⇒ 整只拒:会话头坏 / 日志结构走不通 ⇒ 具名拒
|
|
344
527
|
* {@link SessionOwnerUnreadableError}(没有可读的属主;码与句子是原故障的),说不出在不在的 I/O 级故障 ⇒ 原故障。
|
|
345
|
-
* 两样住在两只文件里 ⇒ 先读那一格、读叶子、再同步复读那一格:格没了(读间被删)或换了主 / 换了住客 ⇒ `undefined`(调用方按删处理),
|
|
346
|
-
* 所以一只头从不把这一代的属主配上另一代的叶子([ref] 六轮复审同一条)。`undefined` =
|
|
528
|
+
* 两样住在两只文件里 ⇒ 先读那一格、读叶子、再同步复读那一格:格没了(读间被删 / 落了「删除中」)或换了主 / 换了住客 ⇒ `undefined`(调用方按删处理),
|
|
529
|
+
* 所以一只头从不把这一代的属主配上另一代的叶子([ref] 六轮复审同一条)。`undefined` = 无此会话(标记格同答:读者律)。
|
|
347
530
|
* 化身那一格经 `headFromRow` 的 `absent` 读法(边档对象形恒有令牌;读不出的边档整只严格拒在 `metaOf` 之前)。
|
|
348
531
|
*/
|
|
349
532
|
headOf(sessionId: string): Promise<SessionHead | undefined>;
|
|
350
533
|
/**
|
|
351
|
-
*
|
|
352
|
-
*
|
|
353
|
-
*
|
|
534
|
+
* **删除门的头读**(`OwnerAwareSessionStore.deletionHeadOf`;读者只有删除门 —— 路由的属主门):活行 ⇒ 与 {@link headOf} 同答;
|
|
535
|
+
* 在删格(一次删除独占着它)与标记格(删序停在 s0 之后)⇒ 那一格上的属主与住客(叶子 `null`:内容已在删)—— 开始删它的那位属主重发删除(= 接管)就收得完。
|
|
536
|
+
* 别的读者一律读作不在(读者律);门对别的属主答「不在」的同一句,所以不可探测。SQL 孪生同交这一口(座的原始头读)。
|
|
537
|
+
*/
|
|
538
|
+
deletionHeadOf(sessionId: string): Promise<SessionHead | undefined>;
|
|
539
|
+
/**
|
|
540
|
+
* 引擎仓存档的头(core `SessionRepo.headOf`:日志首记录与尾,不重放)—— 本店按 id 读存档头的**唯一**一处。存档头在本店只有三种读法:叶子(读内容的人要的那一格)、
|
|
541
|
+
* 行代号(暂存提交落点 / 一次性迁移 M33 的 `expect.row`、迁移判「有没有、读不读得出」)与带戳判({@link assertArchiveAnonymous};读的是存档的**形** —— 头上有没有属主戳 —— 不是属主事实);
|
|
542
|
+
* 属主 / 化身 / 建档时刻 / 谱系作为行事实从不从这里读(规则一,行事实只住边档);例外只有窗内无格存档长第一格的那一读({@link firstCellIncarnationHeld},M47 在树时;
|
|
543
|
+
* M47 的起服扫经列表面的行集读同一只令牌)。
|
|
354
544
|
*/
|
|
355
545
|
private archiveHeadOf;
|
|
356
546
|
/**
|
|
357
|
-
* 三条 acquire 腿(无 id 建 / 按 id 打开 / 按 id 首建)交出会话的唯一一处:行事实 = 这只会话那一格({@link
|
|
358
|
-
*
|
|
547
|
+
* 三条 acquire 腿(无 id 建 / 按 id 打开 / 按 id 首建)交出会话的唯一一处:行事实 = 这只会话那一格(刚建,或刚在写锁里打开 —— 就是在盘上的证明,格缺 ⇒ {@link mintHeld} 补铸,
|
|
548
|
+
* 不再回 repo 探一次),经唯一投影 {@link rowMetadataOf}(活住客解码、建档时刻、谱系)挂到交出的会话上({@link occupiedBy})。
|
|
359
549
|
*/
|
|
360
550
|
private handOut;
|
|
361
551
|
/**
|
|
@@ -428,7 +618,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
428
618
|
* 抛 ⇒ 读不出(尾部 I/O 故障之类:行头好、头读照样抛);否则读得出。所以行上的 `unreadable` 与头读、读口对同一只会话的答复同读。
|
|
429
619
|
*/
|
|
430
620
|
private listedRowOf;
|
|
431
|
-
/** [ref] —— 换源通告的基线读(local 孪生;三态读法与 SQL 两孪生的 `
|
|
621
|
+
/** [ref] —— 换源通告的基线读(local 孪生;三态读法与 SQL 两孪生的 `session_ext.instruction_source` 同一只编解码)。 */
|
|
432
622
|
readInstructionSource(sessionId: string): Promise<InstructionSourceBaseline>;
|
|
433
623
|
/**
|
|
434
624
|
* [ref] —— CAS 覆写基线(契约见 `InstructionSourceStore`:期望值不符 ⇒ 不写;**没落盘 ⇒ 内存不动、抛**,与 SQL 孪生
|
|
@@ -493,7 +683,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
493
683
|
/**
|
|
494
684
|
* 带 placement 的按 id 首建(锁内一形,调用方持这只会话的写锁、已判过存档不在且不是 fork 创建的格)。写序 = **格先、存档后**(与登记先记属主再建存档、fork 先写目标格再拷存档、
|
|
495
685
|
* 导入先落格再导条目同一序;普通 acquire 的两条首建 —— 无 id 新建、按 id 缺档新建 —— 仍是存档先、格后:那两处写的属主是「无主」,崩在两笔之间留下的存档补铸后同样读作无主,
|
|
496
|
-
*
|
|
686
|
+
* 与「登记为无主」读作同一个无主,不在本条分):
|
|
497
687
|
* 1. 会话元数据那一格:化身新铸;属主 = `placement.owner` 原样(core 7.62.0 [ref] 盒义务 7:委派树的属主是引擎判的,店只记、不推断;唯一读法 `placedSessionOwnerOf`,
|
|
498
688
|
* 坏值 ⇒ 响亮拒、一个字节不写;SQL 孪生把它与元组写进同一条 INSERT);建档时刻同一笔写(铸行点律);
|
|
499
689
|
* 2. 存档:元组 = `placement` 去掉属主(`SessionPlacementRecord` 没有属主 —— core 自己的店同样只把元组交给 repo),不交属主(引擎仓是匿名内容仓)。
|
|
@@ -502,7 +692,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
502
692
|
* 不另加 fsync 屏障,与另外三个建行点同)。
|
|
503
693
|
* 「placed 存档在而格缺」此后只剩三个来源,都照旧读作无主(补铸的格不写属主:属主没有事实可写),在具名树的停驻挂点被否决、响亮,匿名树 `null === null` 照放 ——
|
|
504
694
|
* ① 7.144.x 及更早崩在两笔之间留下的存量行(当年存档先建;不回填:行头属主格是空的,元组里那一份属主是本店当年漏进去的未声明成员,不作来源);
|
|
505
|
-
* ② `release` 删了格、没删存档就崩(
|
|
695
|
+
* ② 7.147.x 及更早的 `release` 删了格、没删存档就崩(那时格先于存档删;本版起删序是「标记 → 存档 → 格」,不再留下这一形);③ 同一数据根上 run-local 腿经 core 店写下的 placed 存档
|
|
506
696
|
* (core 形:属主在行头,本店不读行头属主)。SQL 孪生的存量无主 placed 行由 M23 在窗内回填。
|
|
507
697
|
* 格已在而存档不在(登记先落了格、存档还没建 —— 一只普通会话的行;或本条崩在两笔之间留下的格)⇒ `placement_refused`(SQL 孪生:登记过的行在,带 placement 的建读回缺席元组,同一判)。
|
|
508
698
|
* 建后读回准入(镜像方向):别的写者在这一刻抢先建了同 id 的存档 ⇒ repo 返回的是那一只 ⇒ 元组缺席 / 异组 ⇒ 响亮拒。
|
|
@@ -533,18 +723,22 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
533
723
|
* overwrite history; create if not), else `headOf` would say a registered-but-never-acquired session exists while `fork` 404s it.
|
|
534
724
|
*
|
|
535
725
|
* 首写判据在写链里判(两只并发登记:先落盘的那一只赢,后一只不改、也不建会话)。一只**盘上已有、属主从没被记下**的会话
|
|
536
|
-
* (边档那一格只有化身 —— 7.118.x 及更早写下的,或更早到连化身都没有)
|
|
537
|
-
*
|
|
538
|
-
* `session_owner_claimed`;否则只补化身(缺就补),属主仍是「没被记下」,读作无主。认领的安全前提是单用户 —— local 后端起服门拒
|
|
539
|
-
* `REQUIRE_PRINCIPAL=true`,授权口也只在那时才把 principal 递过来认领(`security.ts` `createAuthorizer`)。
|
|
726
|
+
* (边档那一格只有化身 —— 7.118.x 及更早写下的,或更早到连化身都没有)不认领:只补化身(缺就补),属主仍是「没被记下」,读作无主 ——
|
|
727
|
+
* core `SessionStore.register` 契约「对已有的行什么都不做」(7.119.0–7.147.x 的升级窗内,一次性迁移 M10 曾让带 principal 的登记认领这种会话;窗关、认领臂删)。
|
|
540
728
|
*/
|
|
541
729
|
register(sessionId: string, owner: string | null): Promise<void>;
|
|
730
|
+
/**
|
|
731
|
+
* 出生回执面(`session-birth.ts`):与 {@link register} 同一笔写。**只有新建会话那一臂**(存档不在 ∧ 这一笔真写下了新格)交回候选 —— 化身是这一笔里铸的那一只,
|
|
732
|
+
* 不复读;已记下属主(并发登记里后到的那一只)/ 只补化身 ⇒ 不交候选。新格同一笔写下客户端写计数 `0`(版本位,见 {@link SessionMetaCellObject.clientWrites})。
|
|
733
|
+
*/
|
|
734
|
+
registerWithReceipt(sessionId: string, owner: string | null): Promise<RegisterReceipt>;
|
|
542
735
|
touch(sessionId: string): Promise<void>;
|
|
543
736
|
/**
|
|
544
737
|
* 普通会话:durable 史留在 repo,只丢 in-flight 那一格(义务 3,与 SQL 孪生同)。
|
|
545
738
|
* 🔴 义务 4 —— **placed 会话:release 是真删除**(联合收割先删 agent 行、赢了才调这里终结转录)。判据 = 存档行头上的元组(冷启动后照样成立);
|
|
546
|
-
* 读不出 ⇒ 上抛、一个字节不删(说不准是不是 placed 行;吞掉 = 收割腿数一条「已终结」而字节还在)
|
|
547
|
-
*
|
|
739
|
+
* 读不出 ⇒ 上抛、一个字节不删(说不准是不是 placed 行;吞掉 = 收割腿数一条「已终结」而字节还在)。**认领政策**(规则 L,与删除同一只判官 {@link judgeSessionWrite} 的 `delete` 臂):
|
|
740
|
+
* 这一行上有活 run 的认领 ⇒ `SessionActiveRunError`,一个字节不删(活 run 的根不删;认领唯一的运行期写者排在同一把锁后面)。删序 = 删除那一条({@link dropRowHeld}:
|
|
741
|
+
* 标记先落、存档后删、格最后删)—— 崩在中途,标记还在:读者已读作不在,重发的 release(节首收尾)、分区收割腿(分区枚举照样列它 —— 行头还在 —— 重发 release)与起服扫都收得完。
|
|
548
742
|
* 整段在这只会话的写锁里(与删除 / 换装 / 登记同一把)。
|
|
549
743
|
*/
|
|
550
744
|
release(sessionId: string): Promise<void>;
|
|
@@ -558,20 +752,20 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
558
752
|
* at the HTTP layer.
|
|
559
753
|
* - `firstActivityAt` — the row's `createdAt` (the session-meta cell — the SQL twins' `session_meta.created_at`; the archive header's copy is not read).
|
|
560
754
|
* - `lastActivityAt` — the touch marker (falls back to `createdAt`); the keyset sort key.
|
|
561
|
-
* - `objectivePreview
|
|
562
|
-
*
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
* `
|
|
566
|
-
*
|
|
755
|
+
* - `runCount`/`lastStatus`/`lastRunId`/`lastTaskRunId`/`objectivePreview` — [ref] / [ref]:read from the run store handed in (`runs`, its
|
|
756
|
+
* narrow face `sessionRunRollups`; the SQL twins LEFT-JOIN `task_run` for the same values — latest run by
|
|
757
|
+
* `created_at DESC, task_id DESC`, count of all, `lastTaskRunId` = that run's `result.runId`, preview = the most recent
|
|
758
|
+
* run whose preview column is a non-empty string). One call per list (not per row); a session with no run row ⇒
|
|
759
|
+
* `0 / "" / null / null` (TiDB's null→"" mapping); a run-store read failure throws (never `0 / ""`).
|
|
760
|
+
* - `?q=` — the same narrow face with `q`: a session is kept iff one of its run rows' preview column contains q
|
|
761
|
+
* (case-insensitive, literal — the SQL twins' EXISTS); filtered BEFORE the sort/keyset slice.
|
|
567
762
|
*
|
|
568
763
|
* - `unreadable` — present-iff the row's head leaf cannot be read ({@link listedRowOf}: the archive header, or the tail the head read
|
|
569
|
-
* scans): the row's facts above still come from its session-meta cell
|
|
570
|
-
* `errorCode` is what the session's own reads answer.
|
|
764
|
+
* scans): the row's facts above still come from its session-meta cell and its run rows (the preview included — it
|
|
765
|
+
* never reads the archive); the marker's `errorCode` is what the session's own reads answer.
|
|
571
766
|
*
|
|
572
767
|
* Keyset matches the contract: STRICTLY older than the cursor, ties broken by id DESC; `limit` is honored after
|
|
573
|
-
* the in-memory sort. Cheap (a local single-user store holds few sessions).
|
|
574
|
-
* degrade that row's preview to null rather than failing the whole list.
|
|
768
|
+
* the in-memory sort. Cheap (a local single-user store holds few sessions).
|
|
575
769
|
*/
|
|
576
770
|
listSessions(opts: {
|
|
577
771
|
owner?: string;
|
|
@@ -601,21 +795,20 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
601
795
|
private ownerCellOf;
|
|
602
796
|
/** 一只会话的列表行 —— {@link listSessions} 与 {@link sessionSummaryOf} 的**同一只**合成(字段来源逐位见 listSessions 的头注)。调用方先 {@link loadRowSidecars}。 */
|
|
603
797
|
private summaryOf;
|
|
798
|
+
/** 列表行的 `forkedFrom` 键:那一格的谱系经三店唯一的读法 `forkLineageOfRow`(没有那一格 / 不是 fork ⇒ 键缺席;住客令牌不上列表行)。 */
|
|
799
|
+
private listedLineageOf;
|
|
604
800
|
/** 列表行的 `rowTag` 键(规则 `session-row.ts`):化身出自会话元数据那一格(与写原语锁住的那一行同读),属主与两格由调用方交 —— 就是这一行交出去的那两位(同一刻读);没有那一格 ⇒ 键缺席。 */
|
|
605
801
|
private rowTagKeyOf;
|
|
606
|
-
/** [ref]:run 店里每个会话的 run 投影(按 sessionId
|
|
607
|
-
*
|
|
608
|
-
*
|
|
802
|
+
/** [ref] / [ref]:run 店里每个会话的 run 投影(按 sessionId 索引;五位,规则在 run 店的窄读面 —— 共用纯函数 `session-run-rollup.ts`)。
|
|
803
|
+
* **一次读**:窄读面按会话聚合全账(无会话过滤口),这里取全量再按会话仓的 id 查表 —— 比逐会话 N 次读便宜,也不在会话店里另存一份 run 账。
|
|
804
|
+
* `q` 在场 ⇒ 只交「有一条 run 行的预览列含 q」的会话(列表的 `?q=`)。读失败 ⇒ 抛(不吞成 `0 / ""`:那会把「读不到」说成「没跑过」)。 */
|
|
609
805
|
private runRollups;
|
|
610
806
|
/**
|
|
611
|
-
*
|
|
612
|
-
* 该会话没有 run 行 ⇒ `0` / `""` / `null`、`lastTaskRunId` 缺席(TiDB 的 `COALESCE(…,0)` / null→"" 映射)。在途的最新一条:`lastRunId` 在场(run 行建出来就有)、
|
|
807
|
+
* 一行里出自 run 行那一半的**唯一出处**(会话行五位一源):全读 {@link runRollups} 的投影(与 SQL 双生的 `task_run` JOIN 同一条规则);
|
|
808
|
+
* 该会话没有 run 行 ⇒ `0` / `""` / `null` / `null`、`lastTaskRunId` 缺席(TiDB 的 `COALESCE(…,0)` / null→"" 映射)。在途的最新一条:`lastRunId` 在场(run 行建出来就有)、
|
|
613
809
|
* `lastTaskRunId` 缺席(`result` 在终局与 park 时才写)。
|
|
614
810
|
*/
|
|
615
|
-
private
|
|
616
|
-
/** Synthesize a session's objective preview = the most-recent USER text message (the objective the run last saw).
|
|
617
|
-
* Reads the session's entries through the repo; any read error degrades to null (never fails the list). */
|
|
618
|
-
private previewOf;
|
|
811
|
+
private runRollupOf;
|
|
619
812
|
/** E17 — fork a session's WHOLE history to a NEW id (core SessionRepo.fork). Returns the new id, or null if the source does not exist.
|
|
620
813
|
* 属主按 core `SessionStore.fork` 契约(core 7.54.0 `sessionStoreContract` 的 [ownership] 格,唯一读法 {@link forkOwnerOf}):显式串 ⇒ 该串;
|
|
621
814
|
* 无参 / 显式 `null` ⇒ **源会话记下的属主**(一份有主历史的拷贝永不降成匿名 —— 匿名的拷贝谁都能认领);源会话没记属主 ⇒ 拷贝也不记(读作无主)。
|
|
@@ -632,7 +825,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
632
825
|
* · **两把写锁**:按 id 字典序依次取源与目标的写锁(锁不可重入;同 id 只取一把)—— 同 id 的每个写者(删除 / 登记 / 导入 / 按 id 首建 / 别的 fork)都在目标那把锁里,
|
|
633
826
|
* core `repo.fork` 的改名覆盖写只在锁内被调;
|
|
634
827
|
* · **源先判**:源存档不在 ⇒ `null`(源被删之后的同键重试答「源不在」);源存档带属主戳 ⇒ {@link StampedSessionArchiveError}(零写);属主读在拷贝之前(源锁持到拷贝落定)—— 唯一读法 `forkOwnerOf`;
|
|
635
|
-
* · **唯一创建点 = 格先、存档后**:锁内「目标格不在 ∧ 目标存档不在」才写目标格(带 fork 键;新住客,执行位 absent
|
|
828
|
+
* · **唯一创建点 = 格先、存档后**:锁内「目标格不在 ∧ 目标存档不在」才写目标格(带 fork 键;新住客,执行位 absent;建档时刻与谱系两位 —— `forkedFrom` = 源 id、`forkedFromIncarnation` = 源那一格的令牌,core `forkRowCells` 铸 —— 同一笔写),再交 core `repo.fork` 写存档
|
|
636
829
|
* (不交属主 —— 引擎仓匿名;子存档的属主格抄自源存档,源匿名 ⇒ 子匿名)。
|
|
637
830
|
* 崩在两步之间 = fork 创建的格而存档不在 = `forking`:普通取用一律 {@link SessionForkInProgressError};同键重试在两把锁内补拷存档、答 `replayed`。
|
|
638
831
|
* 拷贝抛错(不是崩溃)⇒ 撤掉刚写的目标格再上抛(撤不掉 ⇒ 留下的就是 `forking`,与崩在中间同形);
|
|
@@ -692,13 +885,14 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
692
885
|
private withImportLock;
|
|
693
886
|
/**
|
|
694
887
|
* 三个导入写口(`importEntries` / `replaceEntries` / 暂存提交的换装臂)的共用写序(调用方持这只会话的写锁,属主的形已在入口判过):
|
|
695
|
-
* ① 只读、零写:引擎闸 `validateEntriesForImport`(坏包 ⇒ `invalid_session`)·
|
|
696
|
-
*
|
|
697
|
-
*
|
|
888
|
+
* ① 只读、零写:引擎闸 `validateEntriesForImport`(坏包 ⇒ `invalid_session`)· 准入 {@link admitImportHeld}(读 run 认领、交判官 {@link judgeSessionWrite}:活 run 认领 ⇒
|
|
889
|
+
* `SessionActiveRunError` · 本处写者 ⇒ `SessionWriterPresentError` · `forking` ⇒ {@link SessionForkInProgressError};SQL 孪生的事务内钩 `import` 臂同一只判官、同序、同拒;
|
|
890
|
+
* `judged` 在 {@link commitStagedImport} 里准入过,不再来一遍)· 不是这个写口的门判过的行 ⇒ {@link importRowRefused}(判据 {@link importMayLand},按写口带来的
|
|
891
|
+
* {@link ImportLanding};这条路径上唯一一次判属主);
|
|
698
892
|
* ② 行先:{@link landImportCell}(属主重戳为导入者、化身与 fork 键沿用或新铸、执行位 mirror;建档时刻与谱系照带,新行写此刻);
|
|
699
893
|
* ③ 内容,按写口的动词(唯一读法在下面这一只 switch;这里不读那一格、不判属主,只换**内容**;交给引擎仓的属主恒缺席 —— 规则一):
|
|
700
|
-
* · `create` / `judged`(导入)
|
|
701
|
-
*
|
|
894
|
+
* · `create` / `judged`(导入):`create` 以「没有」为 `expect.row`(① 已判过不在,不读存档头;读间抢建的存档 ⇒ 引擎仓拒 `conflict`、零写);
|
|
895
|
+
* `judged` 原地换锁里读到的那一份存档的日志,以锁里读到的存档头为 `expect.row`(**行代号**:读与写之间存档换了一代 ⇒ 引擎仓拒 `conflict`;它判不出同一代里的追加)。匿名导入只换匿名存档的日志 —— 仍带属主戳的存档(更早的版本写下、一次性迁移 M33
|
|
702
896
|
* 改写不了的,或跳版升上来的)到不了这里:暂存提交在一切「谁赢」的判之前就以具名拒答了它({@link assertArchiveAnonymous});`create` 落在没有存档的名上,`replace` 先清存档。
|
|
703
897
|
* 读存档、校验、存档判与写在引擎仓里是一步,抛在哪一处内容都一个字节没动 ⇒ 撤回 ②({@link withdrawImportCell}:行原样 —— 净零写,SQL 孪生的事务回滚同义)再原样上抛;
|
|
704
898
|
* · `replace`(接口句「先清既有对话日志,再导入」):先清掉内容存档(不带 `expect` —— 带了就得先读它的头,读不出的存档就清不掉),再导入一只新存档。
|
|
@@ -711,19 +905,27 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
711
905
|
private importHeld;
|
|
712
906
|
/**
|
|
713
907
|
* 改写面的分区判(调用方持这只会话的写锁):placed 行 ⇒ `placement_refused`(import 面 409 `conflict.session_placed`,`session-error-wire.ts`),一个字节不写。
|
|
714
|
-
* 读法 = {@link
|
|
908
|
+
* 读法 = {@link placedRecordOf}(行头读不出 ⇒ 按普通行答,坏档照样换得掉;说不出 ⇒ 抛)。
|
|
715
909
|
*/
|
|
716
910
|
private assertNotPlacedHeld;
|
|
911
|
+
/**
|
|
912
|
+
* 三个导入写口落 mirror 之前的**准入**(调用方持这只会话的写锁;{@link importHeld} ① 与暂存提交「内容相同、日志不动」那一支都经这一处):**取锁 → 读认领 → 判 → 写**,
|
|
913
|
+
* 与 {@link markMirrorExecution} 同序。判官就是 SQL 孪生事务内钩 `import` 臂的那一只 {@link judgeSessionWrite}(词、拒码、先认领后写者都在判官里,本店不另写一份):
|
|
914
|
+
* 认领读 run 店的单活槽({@link SessionRunClaimSource})、格读 {@link placementCellOf}(`forking` 按 {@link forkingOf} 判好)—— 读口按需:认领在 ⇒ 不探存档。
|
|
915
|
+
* 拒 ⇒ 抛那只 typed 错,此时导入的任何一笔写(格 / 存档 / 新近)都还没发生(读侧的补铸除外:盘上有会话而格缺时,读它的读口先补铸那一格 —— 与别的读口同,幂等)。
|
|
916
|
+
* 路由的认领判(第一阶段写前判 + 提交前复判)仍在、更早一道,不再是唯一防线。
|
|
917
|
+
*/
|
|
918
|
+
private admitImportHeld;
|
|
717
919
|
/**
|
|
718
920
|
* ① 的属主 / 住客条件:这一行此刻是不是这个写口的门判过的行({@link ImportLanding};一次读、零写 —— 格缺时「行在不在」只问存档的唯一探针
|
|
719
921
|
* {@link existsInRepo},不补铸那一格)。属主比的是头读的读法 `owner ?? null`(从没被记下 = 无主;格缺而存档在 = 从没被记下),比较器是删除门的那一只
|
|
720
|
-
* {@link ownerEq}
|
|
721
|
-
*
|
|
922
|
+
* {@link ownerEq}。遗留的「属主未记」格对带 principal 的 `replace` 读作别人的行,拒了之后那一格
|
|
923
|
+
* 原样仍是「未记」(登记也不认领它)。
|
|
722
924
|
*/
|
|
723
925
|
private importMayLand;
|
|
724
926
|
/**
|
|
725
927
|
* ② 推送落下的那一格 —— 三个导入写口与暂存提交「内容相同、日志不动」那一支都经这**一处**(调用方持写锁、① 已判过):属主重戳为导入者;
|
|
726
|
-
* 化身与 fork 键经 {@link carriedRowCells}(
|
|
928
|
+
* 化身与 fork 键经 {@link carriedRowCells}(SQL 两店就地改写同一行、化身与旁表行不动 —— 同一结局)读那一格自己 —— 行在 ⇒ 沿用(同一行 = 同一位住客,属主重戳与否不改这一判),刚建 ⇒ 新铸、不带键;
|
|
727
929
|
* 执行位 = mirror(导入落下的是「写者在别处」;SQL 孪生的提交点同一句写)。**在 `before` 上改这三位**,别的位(建档时刻、谱系)照带;刚建的行建档时刻 = 此刻。
|
|
728
930
|
* 只写这一格:四只行边档与新近不在这里。交回写之前的那一格(`undefined` = 原本没有),③ 撤回用。
|
|
729
931
|
*/
|
|
@@ -764,7 +966,7 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
764
966
|
* {@link LocalStagingHandle.commit} 的整段 —— **一次持锁**(这只会话的写锁,{@link withSessionWriteLock}):属主 CAS(此刻的属主格 = 这次导入的门判过的那一格,
|
|
765
967
|
* 否则抛 {@link StagedCommitOwnerChangedError},一个字节不写;在判目的端日志之前判,SQL 孪生同序)→ 分区判 → 提交时重新分类(目的端此刻的日志 vs staged)→
|
|
766
968
|
* 这一提交要换日志(不是「id 与内容都相同」那一支)⇒ 带戳存档判({@link assertArchiveAnonymous};只有 local 店有带戳存档,SQL 孪生没有这一步)→
|
|
767
|
-
* 拒未经同意的 fork / stale / 载荷分叉(带戳判在它们之前:带戳存档上日志换不了,同步冲突与载荷分叉的出路 —— 带同意重来 —— 无从谈起)→
|
|
969
|
+
* 拒未经同意的 fork / stale / 载荷分叉(带戳判在它们之前:带戳存档上日志换不了,同步冲突与载荷分叉的出路 —— 带同意重来 —— 无从谈起)→ 准入({@link admitImportHeld}:读认领 → 本处写者 / fork 中间态 → 拒;fork 中间态的拒也在这一处,不再在提交入口另判一遍)→ 换装(导入写序 ①②③,落点 `judged` = 上面这一判;化身与 fork 键按换装律沿用)或 identical 且内容相同时日志不动、
|
|
768
970
|
* 行照样落(② 那一格:重戳属主 + mirror)→ 两支同记新近(推送即活动)→ **在同一次持锁里**
|
|
769
971
|
* 读出落定的会话面交回。锁放下之前谁也换不掉这一位住客,所以交回的面就是这次提交落下的那一位(SQL 孪生在提交事务里读同一行,同义);
|
|
770
972
|
* 提交之后按住客条件写的重放(会话行两位)只认这只面,不再重读。改属主的每一条写腿(登记 / 删除 / 导入 / 换装)都在同一把锁里,所以锁内这一读到锁放下都成立。
|
|
@@ -773,34 +975,131 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
773
975
|
relation: SyncRelation["relation"];
|
|
774
976
|
face: SessionFace;
|
|
775
977
|
}>;
|
|
776
|
-
/**
|
|
777
|
-
*
|
|
778
|
-
*
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
*
|
|
782
|
-
*
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
*
|
|
787
|
-
*
|
|
788
|
-
* memoized — first caller pays, rest no-op.
|
|
789
|
-
* [ref]:化身随那一格消失(同 id 重登记铸新的 —— 那就是下一位住客)。
|
|
978
|
+
/**
|
|
979
|
+
* **删净这只在删会话的 local 执行体锁节**(会话三态的 在删 → 没了,律在 `src/session-deletion.ts`;`session-erase.ts` 的 `createLocalSessionEraser` 是唯一调用者):
|
|
980
|
+
* 整段在这只会话的写锁里 —— 行在 ∧ 属主是围栏判过的 `owner`({@link ownerEq})→ 判「这一行处于 `token` 那一次删除的在删态」(判官 {@link judgeSessionWrite} 的 `erase` 词)→
|
|
981
|
+
* **`legs(住客)`**(各店按会话删的动词,按 `SESSION_TREE_LEGS`;住客 = 锁里读到的属主 + 化身)→ 删序({@link dropRowHeld}),交回那一位住客。令牌不是它 ⇒ 抛
|
|
982
|
+
* `SessionDeletionSupersededError`(另一次删除接管了它);行不在 / 属主不是它 ⇒ `undefined` —— 都一行不删。同 id 的 `register` 取同一把写锁、在删的行对它读作「已存在」⇒ 一次陈旧的删除碰不到下一位住客。
|
|
983
|
+
* `legs()` 不得回到本店上锁的公开口(锁不可重入;会话规则店的删除直接转发、附件店删除走它自己的串行段 —— 锁序 根 → 店,与 `withClientWrite` 同向)。
|
|
984
|
+
* 🔴 hydrate FIRST (workflow audit 2026-07-13): after a restart the maps start empty — 删序逐只 `ensureLoaded`。[ref]:化身随那一格消失(同 id 重登记铸新的 —— 那就是下一位住客)。
|
|
985
|
+
*/
|
|
986
|
+
deleteSession(sessionId: string, owner: string | null, token: string, legs: (occupant: SessionOccupant) => Promise<void>): Promise<SessionOccupant | undefined>;
|
|
987
|
+
/**
|
|
988
|
+
* {@link deleteSession} 的锁内一形。节首收掉了一只标记格(release / 撤回的删序停在 s0 之后 —— 不是任何一次删除的在删行)⇒ `undefined`;没有格 ⇒ `undefined`(行不在;
|
|
989
|
+
* 在删的行恒有格 —— 围栏给无格的遗留行也铸了一格)。在删格(本令牌上一次删除停在 s0 之后 ⇒ 格同时带标记)照判令牌、`legs` 重跑(各腿按 id 幂等)、删序从 s0 的重证往下走完。
|
|
790
990
|
*/
|
|
791
991
|
private deleteSessionHeld;
|
|
992
|
+
/** 这只会话此刻的在删令牌(同步读已发布的表;调用方先 `meta.ensureLoaded()`):没有格 / 不在删 ⇒ `null`。 */
|
|
993
|
+
private deletingTokenOf;
|
|
994
|
+
/** 删除面(会话三态的围栏 / 复核 / 收尾输入;律在 `src/session-deletion.ts`)。 */
|
|
995
|
+
readonly sessionDeletion: SessionDeletionFace;
|
|
996
|
+
/** 一只在删格上的属主(遗留行围栏时没有记下属主 ⇒ 读作无主,与删除门的读法同)。 */
|
|
997
|
+
private deletionOwnerOf;
|
|
998
|
+
/**
|
|
999
|
+
* 围栏的锁内一形(调用方持这只会话的写锁):节首收掉了一只待删(删序停在 s0 之后)⇒ 行已没了 ⇒ `undefined`。否则 ——
|
|
1000
|
+
* 在删格 ⇒ 属主等 ∧(不带 `expect` 或持有的就是它)⇒ 持有者在本进程还在跑(`holder` 答 `running`)⇒ `{ inProgress }`;否则 **接管**(换新令牌;数据根独占 ⇒ 不是本进程
|
|
1001
|
+
* 在跑的令牌一律是死的;在删期间规则 L 不让认领落下,不再判);活行 / 遗留行(格缺而存档在)⇒ 带 `expect`(收尾者)⇒ `undefined`;属主等({@link ownerEq};遗留行读作无主)⇒
|
|
1002
|
+
* 判认领(判官 {@link judgeSessionWrite} 的 `delete` 臂,读 run 店的认领;在 ⇒ 抛 `SessionActiveRunError`,一个字节不写)⇒ 写新令牌。行不在 / 属主不等 ⇒ `undefined`。
|
|
1003
|
+
* 写令牌 `required`(文件 + 目录 fsync):落不了 ⇒ 抛,什么都没删(围栏没立)。遗留行铸一格(化身新铸、只带令牌;回执的化身 `undefined` —— 它的住客从没被记下,没有空间)。
|
|
1004
|
+
*/
|
|
1005
|
+
private fenceDeletionHeld;
|
|
1006
|
+
/**
|
|
1007
|
+
* 客户端写计数 +1(锁内一形,调用方持这只会话的写锁):活格 ⇒ `clientWrites` = 原值(缺 ⇒ 0)+ 1,**落盘必须成功**(`required`;落不了 ⇒ 抛,调用方的写不发生);
|
|
1008
|
+
* 没有活格(行不在 / 遗留行)⇒ 不计(没有可撤的候选)。
|
|
1009
|
+
*/
|
|
1010
|
+
private bumpClientWritesHeld;
|
|
1011
|
+
/**
|
|
1012
|
+
* 客户端可见会话态的**本店之外**的写者(会话规则、附件绑定)经这一口:取这只会话的写锁(根行锁;全局锁序 根 → 写者自己的锁)跑 `write`,交给它一只 `count` ——
|
|
1013
|
+
* 写者判定这一次**真要写**之后、自己落盘之前 `await count()`(行在 ⇒ 客户端写计数 +1、落盘必须成功;落不了 ⇒ 抛,写者的写不发生)。会话规则每次写都计;
|
|
1014
|
+
* 附件绑定只在真绑上行时计(无效附件 / 空数组 / 绑定前拒不计)。撤回排在同一把锁上,读到的计数与这一笔写互不穿插。
|
|
1015
|
+
* `write` 不得回到本店上锁的公开口(锁不可重入);`count` 只在这一节里有效(节外调用 ⇒ 抛)。
|
|
1016
|
+
*/
|
|
1017
|
+
withClientWrite<T>(sessionId: string, write: (count: () => Promise<void>) => Promise<T>): Promise<T>;
|
|
1018
|
+
/**
|
|
1019
|
+
* 条件撤回面(`session-birth.ts` 头注的判序;SQL 孪生的一只事务 = 本店这只会话的写锁一节):
|
|
1020
|
+
* 节首收掉了这只 id 的待删 / 行不在 ⇒ `absent`;遗留行、化身或属主不是候选 ⇒ `incarnation`;没有计数版本位 ⇒ `upgrade_pending`;存档里有可撤集合之外的条目 ⇒ `content`;
|
|
1021
|
+
* 认领在(判官 {@link judgeSessionWrite} 的 `delete` 臂)⇒ `claim`;客户端写过 ⇒ `client_writes`;run 半(run 店的 {@link SessionRunWithdrawSource})答别的 run ⇒ `runs`,
|
|
1022
|
+
* 否则它已严格删掉本次 run 的部署行 → 严格删本会话的续跑输入 → 删序 {@link dropRowHeld}。
|
|
1023
|
+
* 两态(如实):删序的标记(s0)落盘**之前**失败 ⇒ 抛、这一格原样在 —— 会话完整可见(本次零工作 run 的行可能已部分不在);标记落盘**之后**失败 ⇒ 抛、会话已对每个读者不在,
|
|
1024
|
+
* 下一次取这只 id 的锁或下一次起服({@link finishPendingDrops})按既有删序收完。run 店不答 run 半 ⇒ 响亮抛(判不了「别的 run」,不替它答)。
|
|
1025
|
+
*/
|
|
1026
|
+
withdrawBirth(birth: SessionBirth, ownTaskId: string | undefined): Promise<WithdrawOutcome>;
|
|
792
1027
|
/**
|
|
793
|
-
*
|
|
794
|
-
*
|
|
795
|
-
|
|
796
|
-
|
|
1028
|
+
* 撤回的内容判(锁内一形):存档里有没有可撤集合之外的条目(型判据只有 `entryTypeWithdrawable` 那一只)。repo 不答导出 ⇒ 判不了 ⇒ 当作有(留,fail-closed);
|
|
1029
|
+
* 存档不在 ⇒ 没有条目;别的故障原样抛。读 repo 的导出口,不经本店上锁的公开口。
|
|
1030
|
+
*/
|
|
1031
|
+
private archiveHasContentHeld;
|
|
1032
|
+
/**
|
|
1033
|
+
* 删一行的**唯一删序**(调用方持这只会话的写锁、已判过:删除 = 行在 → 认领 → 属主;placed release = 行头是 placed → 认领;节首收尾 = 这一格已带标记)——
|
|
1034
|
+
* 删的是 SQL 孪生 `session_meta` 那一行在本店的全部对位:
|
|
1035
|
+
* · s0 **落标记**:那一格写上「删除中」(`required`:文件 + 目录各 fsync;格缺的遗留行 = 铸一格只带化身与标记)。标记已在(上一次停在 s0 之后)⇒ 重证它在盘上。
|
|
1036
|
+
* 落不了 / 证不到 ⇒ 抛,一个字节都没清(改名落了而目录项没证 ⇒ 内存跟盘走、同读「删除中」,见 `SidecarMap.commit`)。从这一笔起这一行对每个读者都不在;
|
|
1037
|
+
* · s1 四只行边档(标题 / 置顶 / 指令来源 / 工作区)各删那一键(`required`;没有那一键 ⇒ 重证盘上那一份)—— 留在盘上的值会挂到同 id 的下一位住客身上;
|
|
1038
|
+
* · s2 新近:先把盘上那一份读进来再删(冷起服后的第一笔就是删 ⇒ 删的若是空表,随后那次落盘会把盘上那一笔并回去),防抖落盘(只管排序的装饰位,沿用既有 F 类 warn,不作判据);
|
|
1039
|
+
* · s3 删存档(`not_found` 照常);
|
|
1040
|
+
* · s4 **屏障**:fsync 存档目录({@link syncArchiveDirectory};core 的文件仓删存档只删文件、不 fsync 目录)—— 删格之前确知 s1–s3 在盘上;
|
|
1041
|
+
* · s5 删格(`required`)。
|
|
1042
|
+
* 每一步落不了 ⇒ 抛,后面的步不走;标记还在 ⇒ 下一次取这只 id 的锁(写者律)或下一次起服({@link finishPendingDrops})从 s0 的重证往下走完(每一步都幂等)。
|
|
1043
|
+
* 三档保证:普通异常 ⇒ 不撤回、往前收;进程终止 ⇒ 同(标记是一次原子改名);掉电 ⇒ 在 fsync 是真屏障的平台上同,别的平台只保证前两档。交回收掉的那一格(删除节据它的属主答)。
|
|
797
1044
|
*/
|
|
798
1045
|
private dropRowHeld;
|
|
799
1046
|
/**
|
|
800
|
-
* 引擎文件仓的存档目录(`<数据根>/sessions`,`FileSessionRepo` 的布局)fsync 一次,失败即抛 ——
|
|
801
|
-
* (
|
|
1047
|
+
* 引擎文件仓的存档目录(`<数据根>/sessions`,`FileSessionRepo` 的布局)fsync 一次,失败即抛 —— 常设屏障:删序的 s4(删格之前确知删掉的存档目录项在盘上;core 的文件仓删存档只删文件、
|
|
1048
|
+
* 不 fsync 目录)与一次性迁移 M33(删快照之前确知新写的存档目录项在盘上;引擎的导入只尽力 fsync 目录,吞掉失败)。repo 不是文件仓(内存部署 / 内存 repo)⇒ 没有存档文件,无事;
|
|
1049
|
+
* win32 不 fsync 目录(打不开目录 fd;与原子写同一条平台律 —— 那里的掉电保证只到普通异常与进程终止两档);文件仓而目录不在 ⇒ 抛(布局变了就响亮,不静默跳过屏障)。
|
|
802
1050
|
*/
|
|
803
1051
|
private syncArchiveDirectory;
|
|
1052
|
+
/**
|
|
1053
|
+
* **写者律**的那一步({@link withSessionWriteLock} 的每一节先调,调用方持这只会话的写锁):这只 id 是**标记格**(不在删而带「删除中」—— release / 撤回的删序停在 s0 之后)⇒
|
|
1054
|
+
* 走完删序({@link dropRowHeld},从 s0 的重证开始),交回收掉的那一格;没有待删 ⇒ `undefined`。收不完 ⇒ 抛(这一节不跑,原故障上抛)。
|
|
1055
|
+
* 在删格(哪怕同时带标记 —— 它的终刀停在 s0 之后)**不归这里收**:收它归删除协议(围栏接管 → 协调器各腿 → 终刀,`src/session-deletion.ts`)—— 写者律收了它,
|
|
1056
|
+
* 同 id 的重登记就会抢在协调器其余各腿之前收尾,而后那些腿删到的是新住客的状态。
|
|
1057
|
+
*/
|
|
1058
|
+
private finishPendingDropHeld;
|
|
1059
|
+
/**
|
|
1060
|
+
* **起服扫**(唯一调用点 `LocalBackend.ensureSchema()`,排在严格边档对账之后):每一只标记格(上一个进程的 release / 撤回停在 s0 之后;在删格不在此列 —— 它们由删除协调器的起服收尾收)取一次它的锁 —— 节首收尾走完删序。
|
|
1061
|
+
* 收不完 ⇒ 每只一行 warn `session_drop_unfinished`(id + 故障),照常服务:读者律已让它不可见,下一次取这只 id 的锁时再收。内存部署(没有数据根)⇒ 零读。
|
|
1062
|
+
*/
|
|
1063
|
+
finishPendingDrops(): Promise<void>;
|
|
1064
|
+
/**
|
|
1065
|
+
* 一次性迁移 **M48 的 local 腿**(会话行半场;窗、删法与删后谁接住:窗口见 `plugins/one-time-migrations.ts` 登记表):属主恰为 cli 哨兵(`shell-sentinel-owner-m48.ts`)的
|
|
1066
|
+
* 会话元数据格改写成无主(`owner: null`),一次边档提交(落不了盘 ⇒ 响亮抛,不当已改)。带「删除中」位的格不碰(删序正在收它)。起服时调(`LocalBackend.runOneTimeMigrations`,
|
|
1067
|
+
* 任何读者之前);数据根独占 ⇒ 没有混跑窗。幂等:写后不再有哨兵值 ⇒ 第二跑零命中、不落盘。
|
|
1068
|
+
*/
|
|
1069
|
+
clearShellSentinelOwnersM48(): Promise<number>;
|
|
1070
|
+
/**
|
|
1071
|
+
* 一次性迁移 M47 的 local 腿(`LocalBackend.ensureSchema` 调,紧随快照消化、先于整段 `runOneTimeMigrations` —— 迁移段里任何一步拒启也不再挡在它前面;起服、先于任何请求;窗内每次起服都跑,第二次起零命中):
|
|
1072
|
+
* 列表面行集({@link rowHeaders})里每一只**存档头读得出、会话元数据格缺**的会话 —— 主要来源是 7.148.0 之前的 run-local(它经引擎的文件仓直接建档、续跑,从不写格),
|
|
1073
|
+
* 其次是建档与写格之间的崩溃 —— 建一格:化身经窗内长第一格的唯一规则 {@link firstCellIncarnationOf}(存档头上的令牌;没有 ⇒ 新铸 —— 7.49.0 之前的存档头没有令牌),
|
|
1074
|
+
* 建档时刻 / 谱系 = 存档头的(与 M33 行回填同一只读法 {@link archivedRowFactsOf}),属主键不写(从没被记下,与补铸同义)。格在的一个字节不动。一次边档提交。
|
|
1075
|
+
* 为什么取头令牌:格缺 ⇒ 没有竞争的令牌;存档头那只是唯一交给过消费者的值 —— 7.148.0 之前 run-local 的记忆引擎按它落记录(采集 opt-out、污染标记),收进行之后两条入口照样绑;
|
|
1076
|
+
* 崩溃生的无格存档,头令牌从没交出过(交出在写格之后,{@link handOut}),取它也无害。本条是那条规则的急切版(窗内按 id 打开 / 登记 / 回填走同一只函数)。
|
|
1077
|
+
*
|
|
1078
|
+
* **欠账起服**(数据根里有收令牌欠账标记 —— 带本条的构建打开这只根时它还欠,`holdArchiveTokenAdoptionDuty` 在抬高水位之前记下的)多两步,收齐才**销账**:
|
|
1079
|
+
* 1. 边档提交用 `required`(有改动 ⇒ 写并证目录项;零改动 ⇒ 重证盘上那一份 —— 上一次可能正停在「落了、没证」;证不了 ⇒ 拒);
|
|
1080
|
+
* 2. **证明收齐**({@link assertArchiveTokensAdoptedM47}):用常驻臂自己那一只读法(`archiveIdsWithoutCellSync`:失败即抛的目录读 + 盘上的严格边档读)再读一遍,
|
|
1081
|
+
* 剩下的无格存档必须都在本条的收取范围之外(placed、存档头读不出)—— 引擎的列表在目录读失败时降级为空列表(列表面的成文降级),本条读到空列表会「什么都没收」,
|
|
1082
|
+
* 证明把它变成拒,在 M33 与任何请求之前;
|
|
1083
|
+
* 3. 删标记(落盘)。任何一步失败 ⇒ 拒启、标记留着,下一次窗内起服重来;窗关之后的构建见标记 ∧ 无格存档 ⇒ 拒(出路 = 不低于已记高水位、仍带本条的版本起一次)。
|
|
1084
|
+
* 非欠账起服(无标记:高水位不早于引入版本 ∧ 收齐过)照旧 `best-effort`,零命中不写也不重证(每次窗内起服不多一次 fsync、不因它拒启)。
|
|
1085
|
+
*/
|
|
1086
|
+
adoptArchiveTokensM47(): Promise<LocalArchiveTokenAdoption>;
|
|
1087
|
+
/**
|
|
1088
|
+
* M47 欠账起服的**证明**(销账之前;拒 ⇒ 标记留着):盘上「存档在而格缺」的每一只(常驻臂的同一只读法 {@link archiveIdsWithoutCellSync}:目录读失败即抛)都必须在本条的收取范围之外
|
|
1089
|
+
* ({@link adoptionScopeOf});范围之内还剩 ⇒ `SessionError("storage")`(只点名只数)。
|
|
1090
|
+
*/
|
|
1091
|
+
private assertArchiveTokensAdoptedM47;
|
|
1092
|
+
/**
|
|
1093
|
+
* 一只无格存档在不在 M47 的收取范围里(= 引擎列表面的行:行头读得出、非 placed —— 本条从那里取行;列表对行头读抛的存档一律跳过并披露)。两步,只把**行头**读不出剔出去:
|
|
1094
|
+
* ① 行头上的元组({@link recordedPlacementOf}:只读首记录)—— 读抛(没有头记录 / 元组那一格坏 / 首记录读不了)⇒ `out`;placed ⇒ `out`;
|
|
1095
|
+
* ② 普通行再读头({@link archiveHeadOf}:首记录 + 尾)—— 不在 ⇒ `out`(无事可收);`corrupt_session`(此时只剩属主那一格坏 —— 首记录与元组在 ① 已读得出)⇒ `out`;
|
|
1096
|
+
* 读得出 ⇒ `in`;别的故障(读尾的 I/O 等:行头 ① 已证读得出,列表本该列它)⇒ `in`(漏收就是漏收,拒、不剔)。
|
|
1097
|
+
* 剔出去的(行头读不出)每只一行 warn `archive_token_adoption_skipped`(id + 故障):本条与任何读者此刻都取不到它的令牌 —— 剔除并披露,与一次性迁移 M32「一只读不出的旧会话不拒启」同一条律;
|
|
1098
|
+
* 它若在窗关之后才读得出,第一次读新铸。
|
|
1099
|
+
*/
|
|
1100
|
+
private adoptionScopeOf;
|
|
1101
|
+
/** {@link adoptionScopeOf} 的剔除披露(行头读不出的无格存档):一行 warn,答 `out`。 */
|
|
1102
|
+
private skippedFromAdoption;
|
|
804
1103
|
/** 快照目录(数据根下;内存部署 ⇒ `undefined`:没有持久存档,迁移零动作)。 */
|
|
805
1104
|
private archiveSnapshotDir;
|
|
806
1105
|
/**
|
|
@@ -815,14 +1114,14 @@ export declare class LocalSessionStore implements SessionStore {
|
|
|
815
1114
|
settleArchiveSnapshots(): Promise<number>;
|
|
816
1115
|
/** 消化一份快照记录(步 0 的一条;拒 ⇒ {@link LocalArchiveSnapshotsPresentError},记录原样留着)。 */
|
|
817
1116
|
private settleArchiveSnapshot;
|
|
818
|
-
/** 把行事实补进那一格(格缺 ⇒
|
|
1117
|
+
/** 把行事实补进那一格(格缺 ⇒ 建一格,化身经窗内长第一格的唯一规则;已有的位一个不动)并落盘。`archiveToken` = 快照记下的那一代存档头上的令牌。 */
|
|
819
1118
|
private fillRowFacts;
|
|
820
1119
|
/**
|
|
821
1120
|
* 一次性迁移 M33 的 local 腿(`LocalBackend.runOneTimeMigrations` 调;起服、先于任何请求;窗内每次起服都跑,第二次起零命中):
|
|
822
1121
|
* 0. 恢复先行({@link settleArchiveSnapshots},幂等);
|
|
823
1122
|
* 1. **枚举**(行集 `rowHeaders`):id 全集 = 引擎仓的列表(读得出头的存档)∪ 边档全部键;只在边档里的、头读抛且不是 placed 行(行头读得出)的 ⇒ 计 unreadable(步 3 整档读抛的同计)。两边都不在的读不出存档(列表跳过它、边档里没它的格)
|
|
824
1123
|
* 对本店与引擎同样不可见,不计;
|
|
825
|
-
* 2. **行回填**:列表里每一只存档 —— 格缺 ⇒ 建一格(
|
|
1124
|
+
* 2. **行回填**:列表里每一只存档 —— 格缺 ⇒ 建一格(化身经窗内长第一格的唯一规则 {@link firstCellIncarnationOf}、属主「从没被记下」,与补铸同义);格缺建档时刻 ⇒ 写存档头的;格缺谱系而存档头有 ⇒ 写它。只写行(边档的一次提交),
|
|
826
1125
|
* 然后一道**落盘屏障**(边档文件与目录各 fsync)—— 在这之前不碰任何存档;
|
|
827
1126
|
* 3. **存档归一**(每只头上带属主戳的存档,在它的会话写锁里):a 整档一次读(读时跳过了记录 ⇒ 留着,计 kept `records_skipped`:重写会抹掉盘上那几行读不出的字节)→
|
|
828
1127
|
* b 先验(引擎导入闸,带 `preserveActorAssertions`:同部署迁移,发言者归属不剥)—— 抛 ⇒ kept `invalid`;验后的日志与原日志不逐条相等(引擎导入会改写内容)⇒ kept `normalizes`;
|