@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,38 +1,71 @@
|
|
|
1
1
|
import { StoredSession, SessionError, uuidv7, validateEntriesForImport, leafIdAfterEntry, admitSessionPlacement } from "@sema-agent/core";
|
|
2
2
|
import { TiDBSessionStorage } from "./tidb-session-storage.js";
|
|
3
3
|
import { decodeSessionEventPayload } from "./session-event-payload.js";
|
|
4
|
-
import { jsonColumnText } from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { decodeSessionWorkspaceCell, encodeSessionWorkspaceCell } from "./session-workspace-cell.js";
|
|
8
|
-
import { MANAGED_RETENTION, UNMANAGED_RETENTION } from "./retention-store-sql.js";
|
|
9
|
-
import { carriedRowCells, headFromRow, incarnationFromCell, mintSessionIncarnation, sessionFaceFromRow } from "../session-incarnation.js";
|
|
10
|
-
import { sessionRowTagKey } from "../session-row.js";
|
|
11
|
-
import { writeSessionRowCellsSql } from "./session-row-sql.js";
|
|
4
|
+
import { jsonColumnText } from "../plugins/sql-json-column.js";
|
|
5
|
+
import { MANAGED_RETENTION, UNMANAGED_RETENTION } from "../plugins/retention-declaration.js";
|
|
6
|
+
import { headFromRow, mintSessionIncarnation, sessionFaceFromRow } from "../session-incarnation.js";
|
|
12
7
|
import { contentForkRelation, fastForwardSharedContentDiverged } from "../session-sync-content.js";
|
|
13
|
-
import { placementCapabilityOf, LIST_PLACED_BATCH, PLACEMENT_SELECT_COLUMNS, placedRowFromRow, placementFromRow,
|
|
8
|
+
import { placementCapabilityOf, LIST_PLACED_BATCH, PLACEMENT_SELECT_COLUMNS, placedRowFromRow, placementFromRow, placementInsertCells, SESSION_DURABILITY, SESSION_PLACEMENTS, } from "../plugins/session-placement.js";
|
|
14
9
|
import { classifySyncRelationshipByIds, SyncConflictError, StagedCommitOwnerChangedError, stagingIdFor, STAGING_ID_MARKER, STAGING_GC_GRACE_MS, } from "../session-sync-kernel.js";
|
|
15
|
-
import { assertFirstOwnerWritable, forkOwnerOf, isSessionOwnerValue, placedSessionOwnerOf } from "
|
|
16
|
-
import { selectForkRows } from "@sema-agent/core";
|
|
17
|
-
import { FORK_LOG_ROW_SHAPE, ForkTargetUnsettledError, classifyForkTarget, forkByFreshId, forkPointOf } from "
|
|
18
|
-
import { isMysqlDupKeyError } from "
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
import { assertFirstOwnerWritable, forkOwnerOf, isSessionOwnerValue, placedSessionOwnerOf } from "../plugins/session-ownership.js";
|
|
11
|
+
import { forkRowCells, selectForkRows } from "@sema-agent/core";
|
|
12
|
+
import { FORK_LOG_ROW_SHAPE, ForkTargetUnsettledError, classifyForkTarget, forkByFreshId, forkPointOf, sameSourceGeneration } from "../plugins/session-fork.js";
|
|
13
|
+
import { isMysqlDupKeyError } from "../plugins/sql-errors.js";
|
|
14
|
+
const statementsOn = (conn) => ({
|
|
15
|
+
async query(sql, params) {
|
|
16
|
+
const [res] = await conn.query(sql, params ?? []);
|
|
17
|
+
return Array.isArray(res) ? { rows: res, affected: 0 } : { rows: [], affected: res.affectedRows };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
function withdrawPlaceholders(dialect, from, count) {
|
|
21
|
+
return Array.from({ length: count }, (_, i) => (dialect === "pg" ? `$${from + i}` : "?"));
|
|
22
|
+
}
|
|
23
|
+
const keptAs = (word) => ({ withdrawn: false, kept: word });
|
|
24
|
+
export async function withdrawSessionOn(tx, dialect, hooks, sessionId, cond) {
|
|
25
|
+
const [p1] = withdrawPlaceholders(dialect, 1, 1);
|
|
26
|
+
const root = (await tx.query(`SELECT owner, incarnation FROM session_meta WHERE session_id = ${p1} FOR UPDATE`, [sessionId])).rows[0];
|
|
27
|
+
if (root === undefined)
|
|
28
|
+
return keptAs("absent");
|
|
29
|
+
const owner = root.owner === null || root.owner === undefined ? null : String(root.owner);
|
|
30
|
+
if (String(root.incarnation ?? "") !== cond.expect.incarnation || owner !== cond.expect.owner)
|
|
31
|
+
return keptAs("incarnation");
|
|
32
|
+
const types = withdrawPlaceholders(dialect, 2, cond.withdrawableEntryTypes.length);
|
|
33
|
+
const content = await tx.query(`SELECT type FROM session_event WHERE session_id = ${p1} AND type NOT IN (${types.join(", ")}) LIMIT 1 FOR UPDATE`, [sessionId, ...cond.withdrawableEntryTypes]);
|
|
34
|
+
if (content.rows.length > 0)
|
|
35
|
+
return keptAs("content");
|
|
36
|
+
if ((await hooks.beforeCommit(tx, { op: "delete", rootSessionId: sessionId })) !== "proceed")
|
|
37
|
+
return keptAs("claim");
|
|
38
|
+
const judged = await cond.judge(tx);
|
|
39
|
+
if (judged !== "proceed")
|
|
40
|
+
return keptAs(judged.keep);
|
|
41
|
+
await tx.query(`DELETE FROM session_event WHERE session_id = ${p1}`, [sessionId]);
|
|
42
|
+
const [q1, q2] = withdrawPlaceholders(dialect, 1, 2);
|
|
43
|
+
const gone = await tx.query(`DELETE FROM session_meta WHERE session_id = ${q1} AND incarnation = ${q2}`, [sessionId, cond.expect.incarnation]);
|
|
44
|
+
if (gone.affected !== 1)
|
|
45
|
+
throw new Error(`withdraw of session ${sessionId}: the root row this transaction holds locked matched ${gone.affected} rows on delete — engine/driver anomaly, refusing to commit`);
|
|
46
|
+
return { withdrawn: true };
|
|
47
|
+
}
|
|
48
|
+
class HookRefusal {
|
|
49
|
+
refuse;
|
|
50
|
+
constructor(refuse) {
|
|
51
|
+
this.refuse = refuse;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function settleHookVerdict(verdict) {
|
|
55
|
+
if (verdict !== "proceed")
|
|
56
|
+
throw new HookRefusal(verdict.refuse);
|
|
57
|
+
}
|
|
23
58
|
export class TiDBSessionStore {
|
|
24
59
|
pool;
|
|
25
60
|
retention;
|
|
26
61
|
placements = SESSION_PLACEMENTS;
|
|
27
62
|
durability = SESSION_DURABILITY;
|
|
28
63
|
pending = new Map();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
constructor(pool, opts = {}) {
|
|
64
|
+
hooks;
|
|
65
|
+
constructor(pool, opts) {
|
|
32
66
|
this.pool = pool;
|
|
33
67
|
this.retention = opts.retention ?? UNMANAGED_RETENTION;
|
|
34
|
-
this.
|
|
35
|
-
this.executionPlacement = createSqlExecutionPlacementSeat(this.db);
|
|
68
|
+
this.hooks = opts.hooks;
|
|
36
69
|
}
|
|
37
70
|
async acquire(sessionId, opts) {
|
|
38
71
|
if (!sessionId) {
|
|
@@ -69,21 +102,45 @@ export class TiDBSessionStore {
|
|
|
69
102
|
return { session: new StoredSession(storage), sessionId };
|
|
70
103
|
}
|
|
71
104
|
async register(sessionId, owner) {
|
|
105
|
+
await this.registerWithReceipt(sessionId, owner);
|
|
106
|
+
}
|
|
107
|
+
async registerWithReceipt(sessionId, owner) {
|
|
72
108
|
if (!isSessionOwnerValue(owner)) {
|
|
73
109
|
if ((await this.headOf(sessionId)) !== undefined)
|
|
74
|
-
return;
|
|
110
|
+
return {};
|
|
75
111
|
assertFirstOwnerWritable(sessionId, owner);
|
|
76
112
|
}
|
|
77
|
-
|
|
113
|
+
const incarnation = mintSessionIncarnation();
|
|
114
|
+
await this.insertMeta(sessionId, owner, undefined, incarnation);
|
|
115
|
+
return { minted: { sessionId, owner, incarnation } };
|
|
116
|
+
}
|
|
117
|
+
async deleteSessionIf(sessionId, cond) {
|
|
118
|
+
const conn = await this.pool.getConnection();
|
|
119
|
+
try {
|
|
120
|
+
await conn.beginTransaction();
|
|
121
|
+
const outcome = await withdrawSessionOn(statementsOn(conn), "mysql", this.hooks, sessionId, cond);
|
|
122
|
+
if (outcome.withdrawn)
|
|
123
|
+
await conn.commit();
|
|
124
|
+
else
|
|
125
|
+
await conn.rollback();
|
|
126
|
+
return outcome;
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
await conn.rollback().catch(() => undefined);
|
|
130
|
+
throw err;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
conn.release();
|
|
134
|
+
}
|
|
78
135
|
}
|
|
79
136
|
async createOnAcquire(sessionId, placement) {
|
|
80
137
|
await this.insertMeta(sessionId, placement === undefined ? null : placedSessionOwnerOf(sessionId, placement), placement);
|
|
81
138
|
}
|
|
82
|
-
async insertMeta(sessionId, owner, placement) {
|
|
139
|
+
async insertMeta(sessionId, owner, placement, incarnation = mintSessionIncarnation()) {
|
|
83
140
|
const now = new Date();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"VALUES (?,?,?,?,NULL,0,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE
|
|
141
|
+
const placed = placementInsertCells(placement, now);
|
|
142
|
+
await this.pool.query(`INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation, ${placed.columns}) ` +
|
|
143
|
+
"VALUES (?,?,?,?,NULL,0,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE leaf_seq = leaf_seq", [sessionId, owner, now, now, incarnation, ...placed.values]);
|
|
87
144
|
}
|
|
88
145
|
async placementOf(sessionId) {
|
|
89
146
|
const [rows] = await this.pool.query(`SELECT ${PLACEMENT_SELECT_COLUMNS} FROM session_meta WHERE session_id = ?`, [sessionId]);
|
|
@@ -151,104 +208,6 @@ export class TiDBSessionStore {
|
|
|
151
208
|
conn.release();
|
|
152
209
|
}
|
|
153
210
|
}
|
|
154
|
-
async listSessions(opts) {
|
|
155
|
-
return (await this.listSessionRows(opts)).map((a) => a.row);
|
|
156
|
-
}
|
|
157
|
-
async listSessionRows(opts) {
|
|
158
|
-
const params = [];
|
|
159
|
-
const where = ["sm.placement_kind IS NULL"];
|
|
160
|
-
if (opts.owner !== undefined) {
|
|
161
|
-
where.push(opts.includeUnowned ? "(sm.owner = ? OR sm.owner IS NULL)" : "sm.owner = ?");
|
|
162
|
-
params.push(opts.owner);
|
|
163
|
-
}
|
|
164
|
-
if (opts.q) {
|
|
165
|
-
where.push("EXISTS (SELECT 1 FROM task_run tr WHERE tr.session_id = sm.session_id AND LOWER(tr.objective_preview) LIKE LOWER(?) ESCAPE '\\\\')");
|
|
166
|
-
params.push(`%${escapeLike(opts.q)}%`);
|
|
167
|
-
}
|
|
168
|
-
if (opts.cursor) {
|
|
169
|
-
where.push("(sm.updated_at < ? OR (sm.updated_at = ? AND sm.session_id < ?))");
|
|
170
|
-
params.push(new Date(opts.cursor.lastActivityAt), new Date(opts.cursor.lastActivityAt), opts.cursor.sessionId);
|
|
171
|
-
}
|
|
172
|
-
return this.selectListRows({ where, params, limit: opts.limit });
|
|
173
|
-
}
|
|
174
|
-
async sessionSummaryOf(sessionId) {
|
|
175
|
-
return (await this.listRowOf(sessionId))?.row;
|
|
176
|
-
}
|
|
177
|
-
async listRowOf(sessionId) {
|
|
178
|
-
return (await this.selectListRows({ where: ["sm.placement_kind IS NULL", "sm.session_id = ?"], params: [sessionId], limit: 1, runSessionId: sessionId }))[0];
|
|
179
|
-
}
|
|
180
|
-
async writeSessionRowCells(sessionId, cells, how) {
|
|
181
|
-
return writeSessionRowCellsSql(this.db, sessionId, cells, how, (id) => this.listRowOf(id));
|
|
182
|
-
}
|
|
183
|
-
async selectListRows(q) {
|
|
184
|
-
const runWhere = q.runSessionId !== undefined ? " WHERE session_id = ?" : "";
|
|
185
|
-
const runParams = q.runSessionId !== undefined ? [q.runSessionId, q.runSessionId] : [];
|
|
186
|
-
const sql = "SELECT sm.session_id, sm.owner, sm.incarnation, sm.updated_at AS last_activity, sm.created_at AS first_activity, sm.title, sm.pinned, " +
|
|
187
|
-
" COALESCE(r.run_count, 0) AS run_count, latest.objective_preview, latest.status, latest.task_id AS last_run_id, latest.last_task_run_id " +
|
|
188
|
-
"FROM session_meta sm " +
|
|
189
|
-
"LEFT JOIN (SELECT session_id, COUNT(*) AS run_count FROM task_run" + runWhere + " GROUP BY session_id) r ON r.session_id = sm.session_id " +
|
|
190
|
-
"LEFT JOIN (SELECT session_id, objective_preview, status, task_id, last_task_run_id FROM (" +
|
|
191
|
-
" SELECT session_id, objective_preview, status, task_id, JSON_UNQUOTE(JSON_EXTRACT(result, '$.runId')) AS last_task_run_id, " +
|
|
192
|
-
" ROW_NUMBER() OVER (PARTITION BY session_id ORDER BY created_at DESC, task_id DESC) AS rn FROM task_run" + runWhere +
|
|
193
|
-
" ) lr WHERE rn = 1) latest ON latest.session_id = sm.session_id " +
|
|
194
|
-
(q.where.length ? "WHERE " + q.where.join(" AND ") + " " : "") +
|
|
195
|
-
"ORDER BY sm.updated_at DESC, sm.session_id DESC LIMIT ?";
|
|
196
|
-
const [rows] = await this.pool.query(sql, [...runParams, ...q.params, q.limit]);
|
|
197
|
-
return rows.map((r) => {
|
|
198
|
-
const runId = r.last_task_run_id;
|
|
199
|
-
const sessionId = String(r.session_id);
|
|
200
|
-
const owner = r.owner ?? null;
|
|
201
|
-
const incarnation = incarnationFromCell(sessionId, r.incarnation, "absent");
|
|
202
|
-
const title = r.title ?? null;
|
|
203
|
-
const pinned = Number(r.pinned) === 1;
|
|
204
|
-
const row = {
|
|
205
|
-
sessionId,
|
|
206
|
-
owner,
|
|
207
|
-
lastActivityAt: r.last_activity instanceof Date ? r.last_activity.toISOString() : String(r.last_activity),
|
|
208
|
-
firstActivityAt: r.first_activity instanceof Date ? r.first_activity.toISOString() : String(r.first_activity),
|
|
209
|
-
runCount: Number(r.run_count),
|
|
210
|
-
objectivePreview: r.objective_preview ?? null,
|
|
211
|
-
lastStatus: r.status == null ? "" : String(r.status),
|
|
212
|
-
lastRunId: r.last_run_id ?? null,
|
|
213
|
-
...(typeof runId === "string" && runId !== "" ? { lastTaskRunId: runId } : {}),
|
|
214
|
-
title,
|
|
215
|
-
pinned,
|
|
216
|
-
...sessionRowTagKey({ sessionId, owner, incarnation, cells: { title, pinned } }),
|
|
217
|
-
};
|
|
218
|
-
return { row, occupant: { owner, incarnation } };
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
async probeTitle(sessionId) {
|
|
222
|
-
const [rows] = await this.pool.query("SELECT title FROM session_meta WHERE session_id = ?", [sessionId]);
|
|
223
|
-
if (!rows[0])
|
|
224
|
-
return "none";
|
|
225
|
-
return rows[0].title == null ? "untitled" : "titled";
|
|
226
|
-
}
|
|
227
|
-
async setTitleIfNull(sessionId, title) {
|
|
228
|
-
const [r] = await this.pool.query("UPDATE session_meta SET title = ? WHERE session_id = ? AND title IS NULL", [title, sessionId]);
|
|
229
|
-
return r.affectedRows > 0;
|
|
230
|
-
}
|
|
231
|
-
async readInstructionSource(sessionId) {
|
|
232
|
-
const [rows] = await this.pool.query({ sql: "SELECT instruction_source FROM session_meta WHERE session_id = ?", timeout: BASELINE_IO_DEADLINE_MS }, [sessionId]);
|
|
233
|
-
return decodeInstructionSource(rows[0]?.instruction_source);
|
|
234
|
-
}
|
|
235
|
-
async recordInstructionSource(sessionId, expected, source) {
|
|
236
|
-
const next = encodeInstructionSource(source);
|
|
237
|
-
if (expected.recorded) {
|
|
238
|
-
await this.pool.query({ sql: "UPDATE session_meta SET instruction_source = ? WHERE session_id = ? AND instruction_source = ?", timeout: BASELINE_IO_DEADLINE_MS }, [next, sessionId, encodeInstructionSource(expected.source)]);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
await this.pool.query({ sql: "UPDATE session_meta SET instruction_source = ? WHERE session_id = ? AND instruction_source IS NULL", timeout: BASELINE_IO_DEADLINE_MS }, [next, sessionId]);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
async readSessionWorkspace(sessionId) {
|
|
245
|
-
const [rows] = await this.pool.query(`SELECT ${jsonColumnText("mysql", "workspace")} FROM session_meta WHERE session_id = ?`, [sessionId]);
|
|
246
|
-
const row = rows[0];
|
|
247
|
-
return row === undefined ? undefined : decodeSessionWorkspaceCell(row.workspace, sessionId);
|
|
248
|
-
}
|
|
249
|
-
async recordSessionWorkspace(sessionId, incarnation, workspace) {
|
|
250
|
-
await this.pool.query("UPDATE session_meta SET workspace = ? WHERE session_id = ? AND incarnation = ?", [encodeSessionWorkspaceCell(workspace, JSON.stringify, sessionId), sessionId, incarnation]);
|
|
251
|
-
}
|
|
252
211
|
async fork(sourceId, owner, opts) {
|
|
253
212
|
return forkByFreshId((s, o, t) => this.forkTo(s, o, t), sourceId, owner, opts);
|
|
254
213
|
}
|
|
@@ -261,7 +220,8 @@ export class TiDBSessionStore {
|
|
|
261
220
|
throw new ForkTargetUnsettledError(target.id);
|
|
262
221
|
}
|
|
263
222
|
async forkToOnce(sourceId, owner, target) {
|
|
264
|
-
const
|
|
223
|
+
const sourceRow = "SELECT leaf_id, owner, incarnation FROM session_meta WHERE session_id = ?";
|
|
224
|
+
const [metaRows] = await this.pool.query(sourceRow, [sourceId]);
|
|
265
225
|
if (!metaRows[0])
|
|
266
226
|
return null;
|
|
267
227
|
const leafId = metaRows[0].leaf_id ?? null;
|
|
@@ -270,16 +230,20 @@ export class TiDBSessionStore {
|
|
|
270
230
|
if (storage === null)
|
|
271
231
|
return null;
|
|
272
232
|
const point = await forkPointOf(storage);
|
|
233
|
+
const cells = forkRowCells(await storage.getMetadata());
|
|
273
234
|
const [allRows] = await this.pool.query(`SELECT entry_id, parent_id, type, ${jsonColumnText("mysql", "payload")}, ts FROM session_event WHERE session_id = ? ORDER BY seq ASC`, [sourceId]);
|
|
235
|
+
const [afterRows] = await this.pool.query(sourceRow, [sourceId]);
|
|
236
|
+
if (!sameSourceGeneration(cells.forkedFromIncarnation, metaRows[0].incarnation, afterRows[0]?.incarnation))
|
|
237
|
+
return null;
|
|
274
238
|
const { rows: eventRows, leafId: forkLeafId } = selectForkRows(allRows, leafId, point, FORK_LOG_ROW_SHAPE);
|
|
275
239
|
const now = new Date();
|
|
276
240
|
const conn = await this.pool.getConnection();
|
|
277
241
|
let collided = false;
|
|
278
242
|
try {
|
|
279
243
|
await conn.beginTransaction();
|
|
244
|
+
const placed = placementInsertCells(target.placement, now);
|
|
280
245
|
try {
|
|
281
|
-
await conn.query(
|
|
282
|
-
"placement_kind, placement_scope, placement_parent_session_id, placement_root_session_id, placement_handle, placed_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [target.id, forkOwner, now, now, forkLeafId, eventRows.length, mintSessionIncarnation(), target.key ?? null, ...placementInsertValues(target.placement, now)]);
|
|
246
|
+
await conn.query(`INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation, ${placed.columns}, forked_from, forked_from_incarnation) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, [target.id, forkOwner, now, now, forkLeafId, eventRows.length, mintSessionIncarnation(), ...placed.values, cells.forkedFrom, cells.forkedFromIncarnation ?? null]);
|
|
283
247
|
}
|
|
284
248
|
catch (err) {
|
|
285
249
|
if (!isMysqlDupKeyError(err))
|
|
@@ -287,6 +251,8 @@ export class TiDBSessionStore {
|
|
|
287
251
|
collided = true;
|
|
288
252
|
}
|
|
289
253
|
if (!collided) {
|
|
254
|
+
if (target.key !== undefined)
|
|
255
|
+
await this.hooks.keyedFork.record(statementsOn(conn), { rootSessionId: target.id, forkKey: target.key });
|
|
290
256
|
for (let seq = 0; seq < eventRows.length; seq++) {
|
|
291
257
|
const r = eventRows[seq];
|
|
292
258
|
const payload = String(r.payload);
|
|
@@ -303,14 +269,15 @@ export class TiDBSessionStore {
|
|
|
303
269
|
}
|
|
304
270
|
catch {
|
|
305
271
|
}
|
|
272
|
+
if (err instanceof HookRefusal)
|
|
273
|
+
throw err.refuse;
|
|
306
274
|
throw err instanceof SessionError ? err : new SessionError("storage", `fork of session ${sourceId} failed`, err instanceof Error ? err : undefined);
|
|
307
275
|
}
|
|
308
276
|
finally {
|
|
309
277
|
conn.release();
|
|
310
278
|
}
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
return row === undefined ? "unsettled" : classifyForkTarget(target, { owner: row.owner ?? null, forkKey: row.fork_key ?? null }, forkOwner);
|
|
279
|
+
const existing = await this.hooks.keyedFork.targetOf(target.id);
|
|
280
|
+
return existing === undefined ? "unsettled" : classifyForkTarget(target, existing, forkOwner);
|
|
314
281
|
}
|
|
315
282
|
async exportEntries(sessionId) {
|
|
316
283
|
const [metaRows] = await this.pool.query("SELECT 1 FROM session_meta WHERE session_id = ?", [sessionId]);
|
|
@@ -350,7 +317,7 @@ export class TiDBSessionStore {
|
|
|
350
317
|
const conn = await this.pool.getConnection();
|
|
351
318
|
try {
|
|
352
319
|
await conn.beginTransaction();
|
|
353
|
-
await this.writeImportedLog(conn, sessionId, owner, validated,
|
|
320
|
+
await this.writeImportedLog(conn, sessionId, owner, validated, "create");
|
|
354
321
|
await conn.commit();
|
|
355
322
|
}
|
|
356
323
|
catch (err) {
|
|
@@ -359,7 +326,9 @@ export class TiDBSessionStore {
|
|
|
359
326
|
}
|
|
360
327
|
catch {
|
|
361
328
|
}
|
|
362
|
-
if (err instanceof
|
|
329
|
+
if (err instanceof HookRefusal)
|
|
330
|
+
throw err.refuse;
|
|
331
|
+
if (err instanceof SessionError)
|
|
363
332
|
throw err;
|
|
364
333
|
throw new SessionError("storage", `import of session ${sessionId} failed`, err instanceof Error ? err : undefined);
|
|
365
334
|
}
|
|
@@ -373,21 +342,13 @@ export class TiDBSessionStore {
|
|
|
373
342
|
const conn = await this.pool.getConnection();
|
|
374
343
|
try {
|
|
375
344
|
await conn.beginTransaction();
|
|
376
|
-
const [
|
|
377
|
-
const prior =
|
|
345
|
+
const [lockedRows] = await conn.query("SELECT placement_kind FROM session_meta WHERE session_id = ? FOR UPDATE", [sessionId]);
|
|
346
|
+
const prior = lockedRows[0];
|
|
378
347
|
if (prior?.placement_kind != null) {
|
|
379
348
|
await conn.rollback();
|
|
380
349
|
throw new SessionError("placement_refused", `session ${sessionId} belongs to the ${String(prior.placement_kind)} placement partition — a session-sync replace cannot overwrite a delegation transcript`);
|
|
381
350
|
}
|
|
382
|
-
|
|
383
|
-
const swapped = purged.affectedRows === 1 ? prior : undefined;
|
|
384
|
-
const cells = carriedRowCells(sessionId, swapped === undefined ? undefined : { incarnation: swapped.incarnation, forkKey: swapped.fork_key });
|
|
385
|
-
const priorCell = swapped === undefined ? undefined : placementCellFromRow(sessionId, swapped);
|
|
386
|
-
if (priorCell?.role === "writer") {
|
|
387
|
-
await conn.rollback();
|
|
388
|
-
throw new SessionWriterPresentError(sessionId, priorCell.lane);
|
|
389
|
-
}
|
|
390
|
-
await this.writeImportedLog(conn, sessionId, owner, validated, cells, "replace");
|
|
351
|
+
await this.writeImportedLog(conn, sessionId, owner, validated, prior === undefined ? "create" : "replace");
|
|
391
352
|
await conn.commit();
|
|
392
353
|
}
|
|
393
354
|
catch (err) {
|
|
@@ -396,7 +357,9 @@ export class TiDBSessionStore {
|
|
|
396
357
|
}
|
|
397
358
|
catch {
|
|
398
359
|
}
|
|
399
|
-
if (err instanceof
|
|
360
|
+
if (err instanceof HookRefusal)
|
|
361
|
+
throw err.refuse;
|
|
362
|
+
if (err instanceof SessionError)
|
|
400
363
|
throw err;
|
|
401
364
|
throw new SessionError("storage", `replace of session ${sessionId} failed`, err instanceof Error ? err : undefined);
|
|
402
365
|
}
|
|
@@ -404,23 +367,26 @@ export class TiDBSessionStore {
|
|
|
404
367
|
conn.release();
|
|
405
368
|
}
|
|
406
369
|
}
|
|
407
|
-
async writeImportedLog(conn, sessionId, owner, validated,
|
|
370
|
+
async writeImportedLog(conn, sessionId, owner, validated, mode) {
|
|
408
371
|
let leafId = null;
|
|
409
372
|
for (const e of validated)
|
|
410
373
|
leafId = leafIdAfterEntry(e);
|
|
411
374
|
const now = new Date();
|
|
412
|
-
const imported = importedRowCells(cells.forkKey);
|
|
413
|
-
await conn.query(`INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation, ${imported.columns}) VALUES (?,?,?,?,?,?,?,?,?)` +
|
|
414
|
-
(mode === "create" ? " ON DUPLICATE KEY UPDATE session_id = session_id" : ""), [sessionId, owner, now, now, leafId, validated.length, cells.incarnation, ...imported.values]);
|
|
415
375
|
if (mode === "create") {
|
|
376
|
+
const minted = mintSessionIncarnation();
|
|
377
|
+
await conn.query("INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation) VALUES (?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE leaf_seq = leaf_seq", [sessionId, owner, now, now, leafId, validated.length, minted]);
|
|
416
378
|
const [held] = await conn.query("SELECT incarnation FROM session_meta WHERE session_id = ? FOR UPDATE", [sessionId]);
|
|
417
|
-
if (String(held[0]?.incarnation) !==
|
|
379
|
+
if (String(held[0]?.incarnation) !== minted) {
|
|
418
380
|
throw new SessionError("storage", `import of session ${sessionId} failed`, new Error(`session ${sessionId} already exists — importEntries only creates a session (replaceEntries rewrites one); nothing was written`));
|
|
419
381
|
}
|
|
420
382
|
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
383
|
+
else {
|
|
384
|
+
const [rewritten] = await conn.query("UPDATE session_meta SET owner = ?, created_at = ?, updated_at = ?, leaf_id = ?, leaf_seq = ? WHERE session_id = ? AND owner <=> ? AND placement_kind IS NULL", [owner, now, now, leafId, validated.length, sessionId, owner]);
|
|
385
|
+
if (rewritten.affectedRows !== 1) {
|
|
386
|
+
throw new SessionError("storage", `replace of session ${sessionId} failed`, new Error(`session ${sessionId} belongs to another owner — a replace rewrites only the importer's own session; nothing was written`));
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
settleHookVerdict(await this.hooks.beforeCommit(statementsOn(conn), { op: "import", rootSessionId: sessionId }));
|
|
424
390
|
if (mode === "replace")
|
|
425
391
|
await conn.query("DELETE FROM session_event WHERE session_id = ?", [sessionId]);
|
|
426
392
|
for (let seq = 0; seq < validated.length; seq++) {
|
|
@@ -429,7 +395,7 @@ export class TiDBSessionStore {
|
|
|
429
395
|
}
|
|
430
396
|
}
|
|
431
397
|
beginImportStaging(realSessionId, token) {
|
|
432
|
-
return new TiDBStagingHandle(this.pool, realSessionId, stagingIdFor(realSessionId, token));
|
|
398
|
+
return new TiDBStagingHandle(this.pool, this.hooks, realSessionId, stagingIdFor(realSessionId, token));
|
|
433
399
|
}
|
|
434
400
|
async assertNotPlaced(sessionId, what) {
|
|
435
401
|
const placed = await this.placementOf(sessionId);
|
|
@@ -453,33 +419,6 @@ export class TiDBSessionStore {
|
|
|
453
419
|
}
|
|
454
420
|
return removed;
|
|
455
421
|
}
|
|
456
|
-
async deleteSession(sessionId, owner) {
|
|
457
|
-
const conn = await this.pool.getConnection();
|
|
458
|
-
try {
|
|
459
|
-
await conn.beginTransaction();
|
|
460
|
-
const claim = await lockRootAndReadClaim(rowsOnConnection(conn), "mysql", sessionId);
|
|
461
|
-
if (claim.activeTaskId !== null) {
|
|
462
|
-
await conn.rollback();
|
|
463
|
-
throw new SessionActiveRunError(sessionId, claim.activeTaskId);
|
|
464
|
-
}
|
|
465
|
-
const [metaRes] = await conn.query("DELETE FROM session_meta WHERE session_id = ? AND owner <=> ?", [sessionId, owner]);
|
|
466
|
-
if (metaRes.affectedRows > 0)
|
|
467
|
-
await conn.query("DELETE FROM session_event WHERE session_id = ?", [sessionId]);
|
|
468
|
-
await conn.commit();
|
|
469
|
-
return metaRes.affectedRows > 0;
|
|
470
|
-
}
|
|
471
|
-
catch (err) {
|
|
472
|
-
try {
|
|
473
|
-
await conn.rollback();
|
|
474
|
-
}
|
|
475
|
-
catch {
|
|
476
|
-
}
|
|
477
|
-
throw err;
|
|
478
|
-
}
|
|
479
|
-
finally {
|
|
480
|
-
conn.release();
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
422
|
get size() {
|
|
484
423
|
return this.pending.size;
|
|
485
424
|
}
|
|
@@ -489,12 +428,14 @@ export class TiDBSessionStore {
|
|
|
489
428
|
}
|
|
490
429
|
class TiDBStagingHandle {
|
|
491
430
|
pool;
|
|
431
|
+
hooks;
|
|
492
432
|
realSessionId;
|
|
493
433
|
stagingId;
|
|
494
434
|
nextSeq = 0;
|
|
495
435
|
seen = new Set();
|
|
496
|
-
constructor(pool, realSessionId, stagingId) {
|
|
436
|
+
constructor(pool, hooks, realSessionId, stagingId) {
|
|
497
437
|
this.pool = pool;
|
|
438
|
+
this.hooks = hooks;
|
|
498
439
|
this.realSessionId = realSessionId;
|
|
499
440
|
this.stagingId = stagingId;
|
|
500
441
|
}
|
|
@@ -533,18 +474,14 @@ class TiDBStagingHandle {
|
|
|
533
474
|
}
|
|
534
475
|
}
|
|
535
476
|
else {
|
|
536
|
-
await conn.query("INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation) VALUES (?,?,?,?,NULL,0,?) ON DUPLICATE KEY UPDATE
|
|
477
|
+
await conn.query("INSERT INTO session_meta (session_id, owner, created_at, updated_at, leaf_id, leaf_seq, incarnation) VALUES (?,?,?,?,NULL,0,?) ON DUPLICATE KEY UPDATE leaf_seq = leaf_seq", [this.realSessionId, owner, now, now, minted]);
|
|
537
478
|
const [claimed] = await conn.query("SELECT incarnation FROM session_meta WHERE session_id = ? FOR UPDATE", [this.realSessionId]);
|
|
538
479
|
if (String(claimed[0]?.incarnation) !== minted) {
|
|
539
480
|
await conn.rollback();
|
|
540
481
|
throw new StagedCommitOwnerChangedError(this.realSessionId);
|
|
541
482
|
}
|
|
542
483
|
}
|
|
543
|
-
|
|
544
|
-
if (claim.activeTaskId !== null) {
|
|
545
|
-
await conn.rollback();
|
|
546
|
-
throw new SessionActiveRunError(this.realSessionId, claim.activeTaskId);
|
|
547
|
-
}
|
|
484
|
+
settleHookVerdict(await this.hooks.beforeCommit(statementsOn(conn), { op: "import", rootSessionId: this.realSessionId }));
|
|
548
485
|
const [stagedRows] = await conn.query("SELECT entry_id FROM session_event WHERE session_id = ? ORDER BY seq ASC FOR UPDATE", [this.stagingId]);
|
|
549
486
|
const [dstRows] = await conn.query("SELECT entry_id FROM session_event WHERE session_id = ? ORDER BY seq ASC FOR UPDATE", [this.realSessionId]);
|
|
550
487
|
const [dstMeta] = await conn.query("SELECT placement_kind FROM session_meta WHERE session_id = ?", [this.realSessionId]);
|
|
@@ -579,16 +516,7 @@ class TiDBStagingHandle {
|
|
|
579
516
|
let leafId = null;
|
|
580
517
|
if (lastRow[0])
|
|
581
518
|
leafId = leafIdAfterEntry(decodeSessionEventPayload(lastRow[0].payload, this.realSessionId, "last staged row"));
|
|
582
|
-
|
|
583
|
-
if (settle.affectedRows !== 1) {
|
|
584
|
-
const locked = readPlacementRowStatement("mysql", this.realSessionId, { lock: true });
|
|
585
|
-
const [lockedRows] = await conn.query(locked.text, [...locked.values]);
|
|
586
|
-
const cell = lockedRows[0] === undefined ? undefined : placementCellFromRow(this.realSessionId, lockedRows[0]);
|
|
587
|
-
await conn.rollback();
|
|
588
|
-
if (cell?.role === "writer")
|
|
589
|
-
throw new SessionWriterPresentError(this.realSessionId, cell.lane);
|
|
590
|
-
throw new SessionError("storage", `staged commit for ${this.realSessionId}: the commit point matched no row under a held row lock and the row is not a writer — refusing to guess`);
|
|
591
|
-
}
|
|
519
|
+
await conn.query("UPDATE session_meta SET owner = ?, updated_at = ?, leaf_id = ?, leaf_seq = ? WHERE session_id = ?", [owner, now, leafId, srcIds.length, this.realSessionId]);
|
|
592
520
|
const [afterMeta] = await conn.query("SELECT placement_kind, owner, incarnation FROM session_meta WHERE session_id = ?", [this.realSessionId]);
|
|
593
521
|
if (afterMeta[0]?.placement_kind != null) {
|
|
594
522
|
await conn.rollback();
|
|
@@ -603,7 +531,9 @@ class TiDBStagingHandle {
|
|
|
603
531
|
await conn.rollback();
|
|
604
532
|
}
|
|
605
533
|
catch { }
|
|
606
|
-
if (err instanceof
|
|
534
|
+
if (err instanceof HookRefusal)
|
|
535
|
+
throw err.refuse;
|
|
536
|
+
if (err instanceof SyncConflictError || err instanceof SessionError)
|
|
607
537
|
throw err;
|
|
608
538
|
throw new SessionError("storage", `staged commit for ${this.realSessionId} failed`, err instanceof Error ? err : undefined);
|
|
609
539
|
}
|
|
@@ -31,7 +31,7 @@ export declare function assertToolResultProvenanceSchema(query: (sql: string) =>
|
|
|
31
31
|
export declare class SqlToolResultStore implements ToolResultStore {
|
|
32
32
|
protected readonly db: SqlDriver;
|
|
33
33
|
/** 托管留存声明 = 装配交给它的词(后端按扫车道开不开给;不给 ⇒ `"none"`)。读法与「为什么 SQL 店答 managed 而三方法的实现体在
|
|
34
|
-
* `retention-store-sql.ts`」逐字见 {@link MANAGED_RETENTION}(扫车道开着时本店的 `tool_result` 行由那只聚合店按期清:随会话树删 + 孤儿腿)。 */
|
|
34
|
+
* `retention-store-sql.ts`」逐字见 `plugins/retention-declaration.ts` 的 {@link MANAGED_RETENTION}(扫车道开着时本店的 `tool_result` 行由那只聚合店按期清:随会话树删 + 孤儿腿)。 */
|
|
35
35
|
readonly retention: RetentionDeclaration;
|
|
36
36
|
constructor(db: SqlDriver, opts?: {
|
|
37
37
|
readonly retention?: RetentionDeclaration;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MAX_MINTED_TOOL_RESULT_REF_CHARS, assertSafeToolResultRef, assertToolResultProvenanceMatch, normalizeToolResultProvenance } from "@sema-agent/core";
|
|
2
2
|
import { pgSanitizeText } from "../plugins/pg-safe-json.js";
|
|
3
3
|
import { mysqlDriver, pgDriver } from "../plugins/sql-driver.js";
|
|
4
|
-
import { MANAGED_RETENTION, UNMANAGED_RETENTION } from "../plugins/retention-
|
|
4
|
+
import { MANAGED_RETENTION, UNMANAGED_RETENTION } from "../plugins/retention-declaration.js";
|
|
5
5
|
import { ensureIndexes } from "../plugins/ensure-index.js";
|
|
6
6
|
import { describeProbedTableDrift, schemaWaysOut } from "../plugins/schema-drift-sentence.js";
|
|
7
7
|
import { isMissingColumnError } from "../plugins/sql-errors.js";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 两只 SQL 会话存储(`tidb-session-storage.ts` / `pg-session-storage.ts`)共用的**窗口视图** —— 一次唤醒读出的有界日志 `[floor .. leaf]`。
|
|
3
|
+
*
|
|
4
|
+
* ## 组合,不继承
|
|
5
|
+
* 会话树的读法(按 id 取、按类型找、标签、到根的路径、叶子、日志标记、地板、回放丢失)只有引擎那一份:本类把唤醒读出的窗口交给引擎的
|
|
6
|
+
* `InMemorySessionStorage`(组合),每个读都转给它;方言孪生只说两件 SQL 的事 —— 一笔写怎么落库({@link persist}),地板之下按 id 回读一条
|
|
7
|
+
* ({@link readBelowFloor})。不再 `extends` 引擎的存储基类:方言店继承引擎的店基类造第二份店,是依赖方向门 R5′ 拒的形。
|
|
8
|
+
*
|
|
9
|
+
* ## 写序
|
|
10
|
+
* 先落库(方言孪生在自己的事务里按叶子 CAS),落成才记进窗口 —— 与引擎存储「先判后记」同序;落库被拒(CAS 输)时窗口一个字节不动。
|
|
11
|
+
* 记进窗口走引擎存储的追加口(不带期望叶:CAS 已在库里判过,窗口只是跟上那一笔)。
|
|
12
|
+
*
|
|
13
|
+
* ## 叶子是行说的那一格
|
|
14
|
+
* 叶子 = 库里那一格(`session_meta.leaf_id`,引擎存储契约里「后端说出的头」),不是窗口末条之后的叶子(fork 拷整份日志带着别的分支时两者不同)。
|
|
15
|
+
* 窗口(引擎的存储)从条目推叶子、不收后端说的头 ⇒ 叶子由本类自己持有:唤醒时取行上那一格(它不在窗口里 ⇒ `corrupt_session`,与引擎存储基类同一判、同一句),
|
|
16
|
+
* 之后每落一笔前进到「这一笔之后的叶子」(与库里同一事务写下的值同一读法)。窗口里那只按条目推出的叶子不被读。
|
|
17
|
+
*/
|
|
18
|
+
import { InMemorySessionStorage, type SessionLogMark, type SessionMetadata, type SessionStorage, type SessionTreeEntry, type SessionWriteOptions } from "@sema-agent/core";
|
|
19
|
+
export declare abstract class WindowedSessionStorage implements SessionStorage {
|
|
20
|
+
/** 唤醒读出的窗口(引擎的存储;叶子以外的每个读都是它的读)。 */
|
|
21
|
+
private readonly view;
|
|
22
|
+
/** 叶子(头注「叶子是行说的那一格」)。 */
|
|
23
|
+
private leaf;
|
|
24
|
+
/**
|
|
25
|
+
* `entries` = 窗口(按 `seq` 升序);`statedLeafId` = 行上那一格叶子;`floorEntryId` = 窗口的地板(没有压缩 ⇒ `null`,整条日志都在窗口里)。
|
|
26
|
+
* 地板不在窗口里 ⇒ 引擎存储拒 `corrupt_session`;行上的叶子不在窗口里 ⇒ 本类拒 `corrupt_session`(引擎存储基类的同一判、同一句)。
|
|
27
|
+
*/
|
|
28
|
+
protected constructor(metadata: SessionMetadata, entries: SessionTreeEntry[], statedLeafId: string | null, floorEntryId: string | null);
|
|
29
|
+
/** 一笔写落库(方言孪生的事务:叶子 CAS + 追加事件)。抛 ⇒ 窗口不记。 */
|
|
30
|
+
protected abstract persist(entry: SessionTreeEntry, opts?: SessionWriteOptions): Promise<void>;
|
|
31
|
+
/** 地板之下按 id 回读一条(窗口里没有的;标签目标等)。没有 ⇒ `undefined`。 */
|
|
32
|
+
protected abstract readBelowFloor(id: string): Promise<SessionTreeEntry | undefined>;
|
|
33
|
+
getMetadata(): Promise<SessionMetadata>;
|
|
34
|
+
getLeafId(): Promise<string | null>;
|
|
35
|
+
createEntryId(): Promise<string>;
|
|
36
|
+
findEntries<TType extends SessionTreeEntry["type"]>(type: TType): Promise<Array<Extract<SessionTreeEntry, {
|
|
37
|
+
type: TType;
|
|
38
|
+
}>>>;
|
|
39
|
+
getLabel(id: string): Promise<string | undefined>;
|
|
40
|
+
getPathToRoot(leafId: string | null): Promise<SessionTreeEntry[]>;
|
|
41
|
+
getEntries(): Promise<SessionTreeEntry[]>;
|
|
42
|
+
/** 窗口的地板(没有压缩 ⇒ `null`)。 */
|
|
43
|
+
getFloorId(): string | null;
|
|
44
|
+
/** SQL 唤醒没有回放可丢(行是逐条读的):恒 `undefined`,经引擎存储原样答。 */
|
|
45
|
+
getReplayLoss(): ReturnType<InMemorySessionStorage["getReplayLoss"]>;
|
|
46
|
+
/** 窗口此刻的日志标记(同步读;引擎存储的读法)。 */
|
|
47
|
+
logMarkNow(): SessionLogMark;
|
|
48
|
+
/**
|
|
49
|
+
* 窗口的地板那一条(窗口里就有,不另读库)—— 地板之下的 epoch 锚从它的父起沿分支走(`plugins/session-epoch-anchor.ts` 的 `epochFloorOf`)。
|
|
50
|
+
* 没有地板(整条日志都在窗口里)⇒ `undefined`;地板 id 指向窗口里没有的条目 ⇒ 坏会话(响亮)。
|
|
51
|
+
*/
|
|
52
|
+
protected windowFloorEntry(): Promise<SessionTreeEntry | undefined>;
|
|
53
|
+
/** 窗口里没有的 id(地板之下)回落到库。 */
|
|
54
|
+
getEntry(id: string): Promise<SessionTreeEntry | undefined>;
|
|
55
|
+
appendEntry(entry: SessionTreeEntry, opts?: SessionWriteOptions): Promise<void>;
|
|
56
|
+
/** 落成的一笔记进窗口,叶子前进到这一笔之后的叶子。 */
|
|
57
|
+
private record;
|
|
58
|
+
/** 叶子移动本身是一条落库的 `leaf` 条目,父 = 当前叶子(引擎存储的同一形:目标不在窗口里 ⇒ `not_found`,id 由引擎的铸法给)。 */
|
|
59
|
+
setLeafId(leafId: string | null, opts?: SessionWriteOptions): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=windowed-session-storage.d.ts.map
|