@sema-agent/server 7.147.0 → 7.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { SCENARIO_SUBJECT_PREFIX } from "../owner-brands.js";
|
|
2
|
+
import { redactErrorMessage, redactLedgerEventData, runRowErrorCodeOf, sealRunRowResult } from "../observability/run-terminal.js";
|
|
3
|
+
import { outwardPlane, persistedPlaneOf } from "../terminal.js";
|
|
3
4
|
import { projectUsageStats, USAGE_SCAN_LIMIT } from "../usage-analytics.js";
|
|
4
5
|
import { join } from "node:path";
|
|
5
|
-
import { existsSync, readFileSync, readdirSync, renameSync, rmSync, statSync } from "node:fs";
|
|
6
|
+
import { closeSync, existsSync, fsyncSync, openSync, readFileSync, readdirSync, renameSync, rmSync, statSync } from "node:fs";
|
|
7
|
+
import { IS_WIN32 } from "./host-platform.js";
|
|
6
8
|
import { randomBytes } from "node:crypto";
|
|
7
9
|
import { AppendLog, atomicWriteFile, ensureDir, isProcessLive, processFingerprint, sanitizePathComponent, sanitizeScope, writeThenLink } from "@sema-agent/core";
|
|
8
10
|
import { recordFailOpen } from "../observability/fail-open.js";
|
|
9
11
|
import { replayJsonlSkipping } from "../observability/corrupt-read-seat.js";
|
|
10
12
|
import { joinFromStore, splitForStore } from "./wiring-section-codec.js";
|
|
11
|
-
import { RUN_HOLDER_DEATH_CODES, RUN_ORPHANED_ERROR, RUN_STALLED_ERROR, StoreBootRefusalError, buildRunOrphanedError, isTerminalRunStatus, settledLegObservationOf } from "./store-contracts.js";
|
|
13
|
+
import { RUN_HOLDER_DEATH_CODES, RUN_ORPHANED_ERROR, RUN_STALLED_ERROR, RUN_STALL_DEFAULT_WIRING, RUN_STALL_VERDICT_UNLANDED_TAG, StoreBootRefusalError, mintRunLegId, runLivenessOf, buildRunOrphanedError, isTerminalRunStatus, settledLegObservationOf } from "./store-contracts.js";
|
|
14
|
+
import { buildSessionRunRollups } from "./session-run-rollup.js";
|
|
15
|
+
import { normalizedRunPreviewM45 } from "./run-preview-m45.js";
|
|
16
|
+
import { isShellSentinelOwnerM48 } from "./shell-sentinel-owner-m48.js";
|
|
12
17
|
import { notifyRunTerminal } from "../observability/run-terminal.js";
|
|
13
18
|
import { readRunIdentityCells, runIdentityCells } from "../identity-source.js";
|
|
14
19
|
import { createInProcessSpaceCommitTable, fenceSpaceCommitAtTerminal, SPACE_COMMIT_RECORD_SCHEMA } from "../workspace-space-commit.js";
|
|
@@ -80,10 +85,14 @@ export class FileRunStore {
|
|
|
80
85
|
claimOwner = { nonce: randomBytes(12).toString("hex"), ...processFingerprint() };
|
|
81
86
|
claimLocks = new Map();
|
|
82
87
|
logger;
|
|
88
|
+
rootRows;
|
|
83
89
|
strictHydrate;
|
|
90
|
+
stall;
|
|
84
91
|
constructor(root, opts) {
|
|
85
92
|
this.logger = opts;
|
|
86
|
-
this.
|
|
93
|
+
this.stall = opts.stall ?? RUN_STALL_DEFAULT_WIRING;
|
|
94
|
+
this.rootRows = opts.rootRows;
|
|
95
|
+
this.strictHydrate = opts.strictHydrate === true;
|
|
87
96
|
const dirs = fileRunStoreDirsFor(root);
|
|
88
97
|
this.runsDir = dirs.runs;
|
|
89
98
|
this.activeDir = dirs.active;
|
|
@@ -165,6 +174,7 @@ export class FileRunStore {
|
|
|
165
174
|
return {
|
|
166
175
|
...rest,
|
|
167
176
|
result: d.result ?? null,
|
|
177
|
+
legId: typeof d.legId === "string" ? d.legId : null,
|
|
168
178
|
idemKey: typeof d.idemKey === "string" ? d.idemKey : null,
|
|
169
179
|
idemBodyFingerprint: typeof d.idemBodyFingerprint === "string" ? d.idemBodyFingerprint : null,
|
|
170
180
|
identity: readRunIdentityCells(identitySource, identityScope, identityPrincipalInc),
|
|
@@ -189,6 +199,7 @@ export class FileRunStore {
|
|
|
189
199
|
source: r.source,
|
|
190
200
|
identity: r.identity,
|
|
191
201
|
instanceId: r.instanceId,
|
|
202
|
+
legId: r.legId,
|
|
192
203
|
cancelRequested: r.cancelRequested,
|
|
193
204
|
objectivePreview: r.objectivePreview,
|
|
194
205
|
createdAt: r.createdAt.toISOString(),
|
|
@@ -379,13 +390,17 @@ export class FileRunStore {
|
|
|
379
390
|
}
|
|
380
391
|
async createRun(taskId, sessionId, owner, instanceId, meta = {}) {
|
|
381
392
|
const idemKey = meta.idem?.key ?? null;
|
|
382
|
-
return this.
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
393
|
+
return this.rootRows().withRootRow(sessionId, async (present) => {
|
|
394
|
+
if (!present)
|
|
395
|
+
return { ok: false, sessionAbsent: true };
|
|
396
|
+
return this.withClaimLock(sessionId, async () => {
|
|
397
|
+
const acquired = await this.acquireClaim(sessionId, taskId);
|
|
398
|
+
if (!acquired.ok) {
|
|
399
|
+
const existing = this.submittedRow(taskId, idemKey);
|
|
400
|
+
return existing ? { ok: false, existing: this.toRecord(existing) } : acquired;
|
|
401
|
+
}
|
|
402
|
+
return this.commitNewRun(taskId, sessionId, owner, instanceId, meta, idemKey);
|
|
403
|
+
});
|
|
389
404
|
});
|
|
390
405
|
}
|
|
391
406
|
submittedRow(taskId, idemKey) {
|
|
@@ -408,6 +423,7 @@ export class FileRunStore {
|
|
|
408
423
|
}
|
|
409
424
|
this.active.set(sessionId, taskId);
|
|
410
425
|
const now = new Date();
|
|
426
|
+
const legId = mintRunLegId();
|
|
411
427
|
try {
|
|
412
428
|
this.persist({
|
|
413
429
|
taskId,
|
|
@@ -420,6 +436,7 @@ export class FileRunStore {
|
|
|
420
436
|
jobId: meta.jobId ?? null,
|
|
421
437
|
source: meta.source ?? null,
|
|
422
438
|
instanceId,
|
|
439
|
+
legId,
|
|
423
440
|
objectivePreview: meta.objectivePreview ?? null,
|
|
424
441
|
idemKey,
|
|
425
442
|
idemBodyFingerprint: meta.idem?.bodyFingerprint ?? null,
|
|
@@ -436,7 +453,7 @@ export class FileRunStore {
|
|
|
436
453
|
}
|
|
437
454
|
if (idemKey !== null)
|
|
438
455
|
this.byIdem.set(idemKey, taskId);
|
|
439
|
-
return { ok: true };
|
|
456
|
+
return { ok: true, legId };
|
|
440
457
|
}
|
|
441
458
|
async fillObjectivePreview(taskId, preview) {
|
|
442
459
|
const r = this.runs.get(taskId);
|
|
@@ -470,6 +487,7 @@ export class FileRunStore {
|
|
|
470
487
|
const r = this.runs.get(taskId);
|
|
471
488
|
if (r && ownerEq(r.owner, owner) && r.status === "running")
|
|
472
489
|
this.persist({ ...r, updatedAt: new Date() });
|
|
490
|
+
return r !== undefined && r.status === "running";
|
|
473
491
|
}
|
|
474
492
|
async appendEvent(taskId, seq, type, data) {
|
|
475
493
|
data = redactLedgerEventData(type, data);
|
|
@@ -572,7 +590,7 @@ export class FileRunStore {
|
|
|
572
590
|
}
|
|
573
591
|
let pending;
|
|
574
592
|
if (r.status === "running" || r.status === "suspended" || r.status === "needs_review") {
|
|
575
|
-
const errorCode =
|
|
593
|
+
const errorCode = runRowErrorCodeOf(result);
|
|
576
594
|
this.persist({ ...r, status, result, error, errorCode, updatedAt: new Date() });
|
|
577
595
|
pending = {
|
|
578
596
|
runId: taskId,
|
|
@@ -592,34 +610,39 @@ export class FileRunStore {
|
|
|
592
610
|
notifyRunTerminal(pending);
|
|
593
611
|
return fenced;
|
|
594
612
|
}
|
|
595
|
-
async setSuspended(taskId, result) {
|
|
613
|
+
async setSuspended(taskId, result, legId) {
|
|
596
614
|
const sealed = sealRunRowResult(result);
|
|
597
615
|
const r = this.runs.get(taskId);
|
|
598
|
-
if (r
|
|
599
|
-
|
|
600
|
-
}
|
|
616
|
+
if (!r || r.legId !== legId || (r.status !== "running" && r.status !== "suspended") || r.cancelRequested)
|
|
617
|
+
return false;
|
|
618
|
+
this.persist({ ...r, status: "suspended", result: sealed, errorCode: runRowErrorCodeOf(sealed), updatedAt: new Date() });
|
|
619
|
+
return true;
|
|
601
620
|
}
|
|
602
|
-
async setNeedsReview(taskId, result) {
|
|
621
|
+
async setNeedsReview(taskId, result, legId) {
|
|
603
622
|
const sealed = sealRunRowResult(result);
|
|
604
623
|
const r = this.runs.get(taskId);
|
|
605
|
-
if (r
|
|
606
|
-
|
|
607
|
-
}
|
|
624
|
+
if (!r || r.legId !== legId || (r.status !== "running" && r.status !== "needs_review") || r.cancelRequested)
|
|
625
|
+
return false;
|
|
626
|
+
this.persist({ ...r, status: "needs_review", result: sealed, errorCode: runRowErrorCodeOf(sealed), updatedAt: new Date() });
|
|
627
|
+
return true;
|
|
608
628
|
}
|
|
609
629
|
async markResuming(taskId, instanceId) {
|
|
610
630
|
const r = this.runs.get(taskId);
|
|
611
631
|
if (!r || (r.status !== "suspended" && r.status !== "needs_review"))
|
|
612
|
-
return
|
|
632
|
+
return undefined;
|
|
633
|
+
const legId = mintRunLegId();
|
|
613
634
|
this.persist({
|
|
614
635
|
...r,
|
|
615
636
|
status: "running",
|
|
616
637
|
result: null,
|
|
638
|
+
errorCode: null,
|
|
617
639
|
instanceId,
|
|
640
|
+
legId,
|
|
618
641
|
cancelRequested: false,
|
|
619
642
|
preemptRequested: false,
|
|
620
643
|
updatedAt: new Date(),
|
|
621
644
|
});
|
|
622
|
-
return
|
|
645
|
+
return legId;
|
|
623
646
|
}
|
|
624
647
|
async getActiveTaskId(sessionId) {
|
|
625
648
|
return this.active.get(sessionId);
|
|
@@ -638,13 +661,31 @@ export class FileRunStore {
|
|
|
638
661
|
}
|
|
639
662
|
async releaseIdemKey(taskId) {
|
|
640
663
|
const r = this.runs.get(taskId);
|
|
641
|
-
if (
|
|
664
|
+
if (r)
|
|
665
|
+
this.dropIdemBinding(r);
|
|
666
|
+
}
|
|
667
|
+
dropIdemBinding(r) {
|
|
668
|
+
if (r.idemKey === null && r.idemBodyFingerprint === null)
|
|
642
669
|
return;
|
|
643
670
|
const key = r.idemKey;
|
|
644
671
|
this.persist({ ...r, idemKey: null, idemBodyFingerprint: null });
|
|
645
|
-
if (key !== null && this.byIdem.get(key) === taskId)
|
|
672
|
+
if (key !== null && this.byIdem.get(key) === r.taskId)
|
|
646
673
|
this.byIdem.delete(key);
|
|
647
674
|
}
|
|
675
|
+
async withdrawMintedRun(taskId, legId) {
|
|
676
|
+
const r = this.runs.get(taskId);
|
|
677
|
+
if (r === undefined || r.legId !== legId)
|
|
678
|
+
return false;
|
|
679
|
+
if (r.status !== "running") {
|
|
680
|
+
if (isTerminalRunStatus(r.status))
|
|
681
|
+
this.dropIdemBinding(r);
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
684
|
+
this.dropRun(taskId);
|
|
685
|
+
if (this.active.get(r.sessionId) === taskId)
|
|
686
|
+
this.releaseClaim(r.sessionId);
|
|
687
|
+
return true;
|
|
688
|
+
}
|
|
648
689
|
async bindIdemBodyFingerprint(taskId, idem) {
|
|
649
690
|
const r = this.runs.get(taskId);
|
|
650
691
|
if (!r || r.idemKey !== idem.key)
|
|
@@ -696,62 +737,10 @@ export class FileRunStore {
|
|
|
696
737
|
}
|
|
697
738
|
return latest === undefined ? undefined : settledLegObservationOf(latest.taskId, latest.result);
|
|
698
739
|
}
|
|
699
|
-
async
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
continue;
|
|
704
|
-
const arr = bySession.get(r.sessionId) ?? [];
|
|
705
|
-
arr.push(r);
|
|
706
|
-
bySession.set(r.sessionId, arr);
|
|
707
|
-
}
|
|
708
|
-
const cursorAt = opts.cursor ? Date.parse(opts.cursor.lastActivityAt) : undefined;
|
|
709
|
-
const qlc = opts.q?.toLowerCase();
|
|
710
|
-
const summaries = [];
|
|
711
|
-
for (const [sessionId, arr] of bySession) {
|
|
712
|
-
if (qlc && !arr.some((r) => r.objectivePreview?.toLowerCase().includes(qlc)))
|
|
713
|
-
continue;
|
|
714
|
-
const sorted = [...arr].sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime() || (a.taskId < b.taskId ? 1 : a.taskId > b.taskId ? -1 : 0));
|
|
715
|
-
const latest = sorted[0];
|
|
716
|
-
const latestRunId = latest.result?.runId;
|
|
717
|
-
let last = -Infinity;
|
|
718
|
-
let first = Infinity;
|
|
719
|
-
for (const r of arr) {
|
|
720
|
-
const t = r.createdAt.getTime();
|
|
721
|
-
if (t > last)
|
|
722
|
-
last = t;
|
|
723
|
-
if (t < first)
|
|
724
|
-
first = t;
|
|
725
|
-
}
|
|
726
|
-
summaries.push({
|
|
727
|
-
sessionId,
|
|
728
|
-
owner: latest.owner,
|
|
729
|
-
lastActivityAt: new Date(last).toISOString(),
|
|
730
|
-
firstActivityAt: new Date(first).toISOString(),
|
|
731
|
-
runCount: arr.length,
|
|
732
|
-
objectivePreview: latest.objectivePreview,
|
|
733
|
-
lastStatus: latest.status,
|
|
734
|
-
lastRunId: latest.taskId,
|
|
735
|
-
...(typeof latestRunId === "string" && latestRunId !== "" ? { lastTaskRunId: latestRunId } : {}),
|
|
736
|
-
title: null,
|
|
737
|
-
pinned: false,
|
|
738
|
-
});
|
|
739
|
-
}
|
|
740
|
-
return summaries
|
|
741
|
-
.filter((s) => {
|
|
742
|
-
if (cursorAt === undefined)
|
|
743
|
-
return true;
|
|
744
|
-
const t = Date.parse(s.lastActivityAt);
|
|
745
|
-
return t < cursorAt || (t === cursorAt && s.sessionId < opts.cursor.sessionId);
|
|
746
|
-
})
|
|
747
|
-
.sort((a, b) => Date.parse(b.lastActivityAt) - Date.parse(a.lastActivityAt) || (a.sessionId < b.sessionId ? 1 : a.sessionId > b.sessionId ? -1 : 0))
|
|
748
|
-
.slice(0, opts.limit);
|
|
749
|
-
}
|
|
750
|
-
async deleteBySession(sessionId, expectedSessionOwner) {
|
|
751
|
-
void expectedSessionOwner;
|
|
752
|
-
const claimed = this.active.get(sessionId);
|
|
753
|
-
if (claimed !== undefined)
|
|
754
|
-
return { active: claimed };
|
|
740
|
+
async sessionRunRollups(opts = {}) {
|
|
741
|
+
return buildSessionRunRollups(this.runs.values(), opts);
|
|
742
|
+
}
|
|
743
|
+
async deleteBySession(sessionId) {
|
|
755
744
|
this.dropSectionBlobs(sessionId);
|
|
756
745
|
let removed = 0;
|
|
757
746
|
for (const [taskId, r] of [...this.runs]) {
|
|
@@ -814,9 +803,31 @@ export class FileRunStore {
|
|
|
814
803
|
this.sweepClaims();
|
|
815
804
|
return reaped;
|
|
816
805
|
}
|
|
817
|
-
async reapStale(
|
|
818
|
-
const
|
|
819
|
-
|
|
806
|
+
async reapStale() {
|
|
807
|
+
const nowMs = Date.now();
|
|
808
|
+
const windowMs = this.stall.windowMs();
|
|
809
|
+
const reaped = this.reapRunning((r) => runLivenessOf(this.toRecord(r), nowMs, windowMs) === "due", RUN_STALLED_ERROR, RUN_HOLDER_DEATH_CODES.stalled);
|
|
810
|
+
if (reaped > 0)
|
|
811
|
+
this.stall.onVerdicts(reaped);
|
|
812
|
+
return reaped;
|
|
813
|
+
}
|
|
814
|
+
async observeRun(row) {
|
|
815
|
+
const nowMs = Date.now();
|
|
816
|
+
const windowMs = this.stall.windowMs();
|
|
817
|
+
if (runLivenessOf(row, nowMs, windowMs) !== "due")
|
|
818
|
+
return row;
|
|
819
|
+
let landed = 0;
|
|
820
|
+
try {
|
|
821
|
+
landed = this.reapRunning((r) => r.taskId === row.taskId && runLivenessOf(this.toRecord(r), nowMs, windowMs) === "due", RUN_STALLED_ERROR, RUN_HOLDER_DEATH_CODES.stalled);
|
|
822
|
+
}
|
|
823
|
+
catch (err) {
|
|
824
|
+
recordFailOpen(RUN_STALL_VERDICT_UNLANDED_TAG, err instanceof Error ? err.message : String(err));
|
|
825
|
+
return row;
|
|
826
|
+
}
|
|
827
|
+
if (landed > 0)
|
|
828
|
+
this.stall.onVerdicts(landed);
|
|
829
|
+
const r = this.runs.get(row.taskId);
|
|
830
|
+
return r ? this.toRecord(r) : row;
|
|
820
831
|
}
|
|
821
832
|
async reclaimOrphanedAtBoot(isResumable) {
|
|
822
833
|
const orphans = [];
|
|
@@ -961,7 +972,19 @@ export class FileRunStore {
|
|
|
961
972
|
const verdict = await this.judgeClaim(sessionId, claim, holder);
|
|
962
973
|
if (verdict.kind === "live")
|
|
963
974
|
return { ok: false, activeTaskId: verdict.holderTaskId ?? holder };
|
|
964
|
-
|
|
975
|
+
const stalled = verdict.code === RUN_HOLDER_DEATH_CODES.stalled;
|
|
976
|
+
let taken;
|
|
977
|
+
try {
|
|
978
|
+
taken = this.takeOverClaim(sessionId, verdict.reason, verdict.snapshot, verdict.code);
|
|
979
|
+
}
|
|
980
|
+
catch (e) {
|
|
981
|
+
if (!stalled)
|
|
982
|
+
throw e;
|
|
983
|
+
recordFailOpen(RUN_STALL_VERDICT_UNLANDED_TAG, e instanceof Error ? e.message : String(e));
|
|
984
|
+
return { ok: false, activeTaskId: verdict.snapshot.taskId || holder };
|
|
985
|
+
}
|
|
986
|
+
if (taken && stalled)
|
|
987
|
+
this.stall.onVerdicts(1);
|
|
965
988
|
}
|
|
966
989
|
}
|
|
967
990
|
try {
|
|
@@ -1019,6 +1042,8 @@ export class FileRunStore {
|
|
|
1019
1042
|
return live();
|
|
1020
1043
|
return { kind: "stale", reason: `parked run (${row.status}) has no resumable checkpoint — claim reclaimed`, snapshot };
|
|
1021
1044
|
}
|
|
1045
|
+
if (row && runLivenessOf(this.toRecord(row), Date.now(), this.stall.windowMs()) === "due")
|
|
1046
|
+
return { kind: "stale", reason: RUN_STALLED_ERROR, snapshot, code: RUN_HOLDER_DEATH_CODES.stalled };
|
|
1022
1047
|
const mine = owner?.nonce === this.claimOwner.nonce;
|
|
1023
1048
|
const ownerGone = owner !== undefined && !isProcessLive(owner);
|
|
1024
1049
|
if (!mine && !ownerGone)
|
|
@@ -1051,7 +1076,7 @@ export class FileRunStore {
|
|
|
1051
1076
|
if (row?.status !== snapshot.status || row?.updatedAt.getTime() !== snapshot.updatedAtMs)
|
|
1052
1077
|
return false;
|
|
1053
1078
|
if (row && (row.status === "running" || row.status === "suspended" || row.status === "needs_review")) {
|
|
1054
|
-
this.persist({ ...row, status: "failed", error: reason,
|
|
1079
|
+
this.persist({ ...row, status: "failed", result: null, error: reason, errorCode: code ?? null, updatedAt: new Date() });
|
|
1055
1080
|
}
|
|
1056
1081
|
const quarantine = join(this.tmpDir, `stale-claim.${sanitizePathComponent(sessionId)}.${process.pid}.${randomBytes(6).toString("hex")}`);
|
|
1057
1082
|
try {
|
|
@@ -1093,23 +1118,81 @@ export class FileRunStore {
|
|
|
1093
1118
|
}
|
|
1094
1119
|
this.eventLogs.delete(taskId);
|
|
1095
1120
|
}
|
|
1121
|
+
const dir = this.runDir(taskId);
|
|
1122
|
+
rmSync(dir, { recursive: true, force: true });
|
|
1123
|
+
if (!IS_WIN32 && existsSync(this.runsDir)) {
|
|
1124
|
+
const fd = openSync(this.runsDir, "r");
|
|
1125
|
+
try {
|
|
1126
|
+
fsyncSync(fd);
|
|
1127
|
+
}
|
|
1128
|
+
finally {
|
|
1129
|
+
closeSync(fd);
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1096
1132
|
this.events.delete(taskId);
|
|
1097
1133
|
const dropped = this.runs.get(taskId);
|
|
1098
1134
|
if (dropped?.idemKey != null && this.byIdem.get(dropped.idemKey) === taskId)
|
|
1099
1135
|
this.byIdem.delete(dropped.idemKey);
|
|
1100
1136
|
this.runs.delete(taskId);
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1137
|
+
}
|
|
1138
|
+
withdrawRunsOf(sessionId, ownTaskId) {
|
|
1139
|
+
for (const r of this.runs.values())
|
|
1140
|
+
if (r.sessionId === sessionId && r.taskId !== ownTaskId)
|
|
1141
|
+
return { keep: "runs" };
|
|
1142
|
+
const own = ownTaskId === undefined ? undefined : this.runs.get(ownTaskId);
|
|
1143
|
+
if (own !== undefined && own.sessionId !== sessionId)
|
|
1144
|
+
throw new Error(`FileRunStore.withdrawRunsOf: run ${ownTaskId} belongs to session ${own.sessionId}, not ${sessionId} — refusing to delete it`);
|
|
1145
|
+
this.dropSectionBlobs(sessionId);
|
|
1146
|
+
if (own !== undefined)
|
|
1147
|
+
this.dropRun(own.taskId);
|
|
1148
|
+
return "proceed";
|
|
1149
|
+
}
|
|
1150
|
+
migrateRunErrorCodeColumnM44() {
|
|
1151
|
+
let migrated = 0;
|
|
1152
|
+
for (const r of this.runs.values()) {
|
|
1153
|
+
const target = r.status === "running" ? null : r.result === null ? r.errorCode : (persistedPlaneOf(r.result).errorCode ?? r.errorCode);
|
|
1154
|
+
if (target === r.errorCode)
|
|
1155
|
+
continue;
|
|
1156
|
+
this.persist({ ...r, errorCode: target });
|
|
1157
|
+
migrated += 1;
|
|
1158
|
+
}
|
|
1159
|
+
return migrated;
|
|
1160
|
+
}
|
|
1161
|
+
migrateRunObjectivePreviewM45() {
|
|
1162
|
+
let migrated = 0;
|
|
1163
|
+
for (const r of this.runs.values()) {
|
|
1164
|
+
if (typeof r.objectivePreview !== "string")
|
|
1165
|
+
continue;
|
|
1166
|
+
const target = normalizedRunPreviewM45(r.objectivePreview);
|
|
1167
|
+
if (target === undefined || target === r.objectivePreview)
|
|
1168
|
+
continue;
|
|
1169
|
+
this.persist({ ...r, objectivePreview: target });
|
|
1170
|
+
migrated += 1;
|
|
1108
1171
|
}
|
|
1172
|
+
return migrated;
|
|
1173
|
+
}
|
|
1174
|
+
clearShellSentinelOwnersM48() {
|
|
1175
|
+
const hits = this.shellSentinelRunsM48();
|
|
1176
|
+
for (const r of hits)
|
|
1177
|
+
this.persist({ ...r, owner: null });
|
|
1178
|
+
return hits.length;
|
|
1179
|
+
}
|
|
1180
|
+
countShellSentinelOwnersM48() {
|
|
1181
|
+
return this.shellSentinelRunsM48().length;
|
|
1182
|
+
}
|
|
1183
|
+
shellSentinelRunsM48() {
|
|
1184
|
+
return [...this.runs.values()].filter((r) => isShellSentinelOwnerM48(r.owner));
|
|
1109
1185
|
}
|
|
1110
1186
|
sessionIdsWithRuns() {
|
|
1111
1187
|
return new Set([...this.runs.values()].map((r) => r.sessionId));
|
|
1112
1188
|
}
|
|
1189
|
+
scenarioPrefixOwnerRowsM42() {
|
|
1190
|
+
let n = 0;
|
|
1191
|
+
for (const r of this.runs.values())
|
|
1192
|
+
if (r.owner !== null && r.owner.startsWith(SCENARIO_SUBJECT_PREFIX))
|
|
1193
|
+
n += 1;
|
|
1194
|
+
return n;
|
|
1195
|
+
}
|
|
1113
1196
|
dispose() {
|
|
1114
1197
|
for (const log of [...this.eventLogs.values(), ...this.blobLogs.values()]) {
|
|
1115
1198
|
try {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* structural tests only on mac/Linux; behavior-level bite happens on the first Windows-runner green.
|
|
33
33
|
*/
|
|
34
34
|
import type { ChildProcess } from "node:child_process";
|
|
35
|
-
import { killProcessTree, type BackgroundHardKillOutcome } from "@sema-agent/core";
|
|
35
|
+
import { killProcessTree, signalProcessTree, type BackgroundHardKillOutcome } from "@sema-agent/core";
|
|
36
36
|
import type { Logger } from "../observability/logger.js";
|
|
37
37
|
/** 平台读点全仓一处(`test/host-shell-settle-order.test.ts` 源码钉);别处要平台串从这里取,不直读 Node 的平台字段。 */
|
|
38
38
|
export declare const HOST_PLATFORM: NodeJS.Platform;
|
|
@@ -133,8 +133,29 @@ export declare function hardKillGroupNow(pid: number): BackgroundHardKillOutcome
|
|
|
133
133
|
*/
|
|
134
134
|
export declare function killTreeSoft(pid: number): void;
|
|
135
135
|
/** Graceful tree kill where the CALLER has no escalation timer of its own (currently unused by the host lane —
|
|
136
|
-
* exported for parity with core's surface; the bg driver keeps its own HOST_BG_KILL_GRACE_MS ladder).
|
|
137
|
-
|
|
136
|
+
* exported for parity with core's surface; the bg driver keeps its own HOST_BG_KILL_GRACE_MS ladder).
|
|
137
|
+
* `signalProcessTree` = ONE signal to the whole tree (POSIX: a `ps` snapshot of the descendants of `pid` + the group
|
|
138
|
+
* signal + each descendant; win32: taskkill /T). Never throws. Its root must be a pid that is still OURS (an unreaped
|
|
139
|
+
* child): a reaped pid may already be a stranger's, and a descendant walk from a stranger's pid kills the stranger's
|
|
140
|
+
* children — the one caller (the command-hook ladder) guards that on the child handle. */
|
|
141
|
+
export { killProcessTree, signalProcessTree };
|
|
142
|
+
/**
|
|
143
|
+
* Group probe for a REAPED leader: does the group of `pid` still hold an ORIGINAL member? Ask it only after node reaped the
|
|
144
|
+
* leader (an unreaped leader keeps the pid ours — no question to ask). POSIX reads two numbers:
|
|
145
|
+
* · `kill(-pid, 0)` — is anyone in the group;
|
|
146
|
+
* · `kill(pid, 0)` — is any process holding the number itself.
|
|
147
|
+
* Group empty (ESRCH) ⇒ false. Group non-empty and nobody holds the number (ESRCH) ⇒ true: the kernel never hands out a number that a
|
|
148
|
+
* process still uses as its process-group id, so the number was not recycled and the members are the original ones (Linux's pid
|
|
149
|
+
* allocator; BSD / darwin allocate the same way — inferred, not read from kernel source). Group non-empty and the number IS held
|
|
150
|
+
* (success / EPERM) ⇒ false: while an original member lived the number could not have been handed out, so every original is dead and what
|
|
151
|
+
* answers now is a stranger's new process / group — never ours, so the caller sends it nothing. EPERM on the group probe reads
|
|
152
|
+
* "non-empty" (darwin answers EPERM for a group holding only unreaped zombies, indistinguishable from a live member we may not signal:
|
|
153
|
+
* one extra shot, never a missed member); EPERM on the number probe reads "held" (the process exists, we just cannot touch it).
|
|
154
|
+
* win32 has no process group ⇒ always false (the tree is discovered only at signal time, by taskkill /T, and only from an unreaped
|
|
155
|
+
* root). Never throws. The only residual is the instant between the two probes (an original member dying and its number being
|
|
156
|
+
* recycled inside it) — microseconds, not the grace window.
|
|
157
|
+
*/
|
|
158
|
+
export declare function reapedLeaderGroupAlive(pid: number): boolean;
|
|
138
159
|
/**
|
|
139
160
|
* 登记回执 = 注销的**唯一**凭据(身份即凭据,见簿注)+ 一只幂等的注销把手。
|
|
140
161
|
*
|
|
@@ -127,7 +127,21 @@ export function killTreeSoft(pid) {
|
|
|
127
127
|
}
|
|
128
128
|
process.kill(-pid, "SIGTERM");
|
|
129
129
|
}
|
|
130
|
-
export { killProcessTree };
|
|
130
|
+
export { killProcessTree, signalProcessTree };
|
|
131
|
+
export function reapedLeaderGroupAlive(pid) {
|
|
132
|
+
if (IS_WIN32)
|
|
133
|
+
return false;
|
|
134
|
+
const answers = (target) => {
|
|
135
|
+
try {
|
|
136
|
+
process.kill(target, 0);
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return err.code !== "ESRCH";
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
return answers(-pid) && !answers(pid);
|
|
144
|
+
}
|
|
131
145
|
const liveHostForegroundGroups = new Set();
|
|
132
146
|
export function trackHostForegroundChild(pid) {
|
|
133
147
|
const ticket = {
|
|
@@ -136,6 +136,8 @@ function refusingBakeRow(read) {
|
|
|
136
136
|
export const IMAGE_BAKE_INDEXES = [
|
|
137
137
|
{ table: "image_bake", name: "idx_image_bake_status", columns: ["status"] },
|
|
138
138
|
{ table: "image_bake", name: "idx_image_bake_created", columns: ["created_at"] },
|
|
139
|
+
{ table: "image_bake", name: "uq_image_bake_idem", columns: ["idem_key"], unique: true },
|
|
140
|
+
{ table: "image_bake_event", name: "uq_image_bake_event_line", columns: ["bake_id", "line_ord"], unique: true },
|
|
139
141
|
];
|
|
140
142
|
export async function ensurePgImageBakeSchema(pool, poolName = "standard") {
|
|
141
143
|
for (const stmt of PG_IMAGE_BAKE_SCHEMA)
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* 另两种店**答了**却做不了的(没有写面或写面拒 / 并发争不过)⇒ 点名跳过,下一次起服再试,其间那几行照旧放行,每次起服都点名。
|
|
41
41
|
*/
|
|
42
42
|
import { type DurableRulePartitionProvider, type PersistedRule, type RuleAdd, type RuleOwner } from "@sema-agent/core";
|
|
43
|
-
/** 一只被退役的导入 add 所在的行(一行一条读数)。**不带规则正文**(
|
|
43
|
+
/** 一只被退役的导入 add 所在的行(一行一条读数)。**不带规则正文**(规则正文不出店)—— 桶键 + 工具名足够让运维去列举面对上它。 */
|
|
44
44
|
export interface ImportedLayerRootAllowRetired {
|
|
45
45
|
/** 桶键(`buildRuleOwnerKey`:属主的单向摘要;两种店同一把,日志里不出属主名)。 */
|
|
46
46
|
readonly ownerKey: string;
|
|
@@ -61,7 +61,7 @@ export type ImportedLayerRootSkipReason = "bucket_unreadable" | "vanished" | "no
|
|
|
61
61
|
export interface ImportedLayerRootBucketSkipped {
|
|
62
62
|
readonly ownerKey: string;
|
|
63
63
|
readonly reason: ImportedLayerRootSkipReason;
|
|
64
|
-
/** 一句不带行内容的话:读 / 解析桶抛出来的东西只报它的种类(原句可能引到桶里的行 ——
|
|
64
|
+
/** 一句不带行内容的话:读 / 解析桶抛出来的东西只报它的种类(原句可能引到桶里的行 —— 规则正文不出店;
|
|
65
65
|
* 原句由店自己的披露口说,File 店的 `permission_rule_store_disclosure`、SQL 店的整桶拒句);写面拒的是闭集词,原样带。 */
|
|
66
66
|
readonly why: string;
|
|
67
67
|
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* 每轮一行结构化日志 `sandbox_pod_reap_round`(扫了几只、按闭集原因分的删 / 跳过计数),每删一只一行 `sandbox_pod_reaped`;**列举失败**这一轮一只都删不了 ——
|
|
26
26
|
* F 类兜底口 `server.sandbox-pod-reaper.list-failed` 计一次 + 一行 warn `sandbox_pod_reap_list_failed`(下一轮一个周期后照常再列);**某一只删失败**不挡其余 ——
|
|
27
27
|
* 与连接清理同一只上报口 `reportPodDeleteFailed`(F 类计数 `server.sandbox-pod.delete-failed` + 一行 error `sandbox_pod_delete_failed`,`why=reaper_<删它的理由>`,下一轮再判再删)。
|
|
28
|
-
* 每副本起服后第一个维护 tick 跑一次、此后每
|
|
28
|
+
* 每副本起服后第一个维护 tick 跑一次、此后每 `SANDBOX_REAP_PERIOD_MS` 一次(`boot/reapers.ts` 的沙箱回收腿,与 local-docker 车道的容器回收器共一只座一个节拍:`sandbox-reaper.ts`);多副本同时删同一只 ⇒ 404 计 `gone`。
|
|
29
29
|
*/
|
|
30
30
|
import type { Logger } from "../observability/logger.js";
|
|
31
31
|
import type { Metrics } from "../observability/metrics.js";
|
|
@@ -33,8 +33,6 @@ import type { Metrics } from "../observability/metrics.js";
|
|
|
33
33
|
export declare const SANDBOX_POD_REAP_GRACE_MS = 60000;
|
|
34
34
|
/** ① 的上界:`max(租约上限 + 宽限, 快照时限 + 引擎拆环境放行)`。唯一的调用方 = 适配器建 Pod 的那一拍(快照时限 = 建它的副本的 `dataTimeoutMs`),结果写进 Pod 的注解。 */
|
|
35
35
|
export declare function sandboxRunEndHoldMs(snapshotTimeoutMs: number): number;
|
|
36
|
-
/** 一个副本两轮回收之间的间隔。常量。 */
|
|
37
|
-
export declare const SANDBOX_POD_REAP_PERIOD_MS: number;
|
|
38
36
|
/** 列举出来的一只沙箱 Pod(只带判官要读的几样;时刻是毫秒)。 */
|
|
39
37
|
export interface SandboxPodListing {
|
|
40
38
|
readonly name: string;
|
|
@@ -15,7 +15,6 @@ function runEndHoldOf(raw) {
|
|
|
15
15
|
const ms = Number(raw);
|
|
16
16
|
return Number.isSafeInteger(ms) && ms >= RUN_END_HOLD_READABLE.min && ms <= RUN_END_HOLD_READABLE.max ? ms : undefined;
|
|
17
17
|
}
|
|
18
|
-
export const SANDBOX_POD_REAP_PERIOD_MS = 5 * 60_000;
|
|
19
18
|
const CLASS_VERDICT = {
|
|
20
19
|
live: "live",
|
|
21
20
|
parked: "live",
|
|
@@ -2,10 +2,16 @@ import type { Pool as MySqlPool } from "mysql2/promise";
|
|
|
2
2
|
import type { Pool as PgPool } from "pg";
|
|
3
3
|
import { type SqlDriver } from "./sql-driver.js";
|
|
4
4
|
import { type IndexSpec } from "./ensure-index.js";
|
|
5
|
+
import { type RunIdentity } from "../identity-source.js";
|
|
5
6
|
/** 表名([ref] 单数纪律;`schema-naming-invariants` 的闭集词表执法)。 */
|
|
6
7
|
export declare const LEADER_RUN_TABLE = "leader_run";
|
|
7
8
|
/** leader run 的四态 —— 与 `leader/endpoint.ts` 的 `LeaderRun["status"]` 同词表(闭集)。 */
|
|
8
9
|
export type LeaderRunStatus = "running" | "completed" | "failed" | "needs_human";
|
|
10
|
+
/**
|
|
11
|
+
* 终局行的机读码闭集(`error_code` 列;与 run / bake 的取消终局同词:`failed` + `cancelled`)。今天唯一的成员 = 取消口停下的 run;
|
|
12
|
+
* 其余终局(自然失败、陈旧清算)不带码 ⇒ 列 NULL。读出表外词 ⇒ 响亮拒(与 {@link statusOf} 同)。
|
|
13
|
+
*/
|
|
14
|
+
export type LeaderRunErrorCode = "cancelled";
|
|
9
15
|
/** 库里一行 leader run 的读出形。`result` 是 `LeaderResult` 的 JSON 原样(店不解释它的内部结构)。 */
|
|
10
16
|
export interface LeaderRunRecord {
|
|
11
17
|
id: string;
|
|
@@ -17,6 +23,12 @@ export interface LeaderRunRecord {
|
|
|
17
23
|
objectivePreview: string | null;
|
|
18
24
|
result?: unknown;
|
|
19
25
|
error?: string;
|
|
26
|
+
/** 只在取消口停下的终局上在场(列 NULL ⇒ 缺席)。 */
|
|
27
|
+
errorCode?: LeaderRunErrorCode;
|
|
28
|
+
/** 耐久取消旗(`cancel_requested` 列):取消口翻过、行当时还在跑 ⇒ `true`。只翻 `running` 行;终局之后不再变。 */
|
|
29
|
+
cancelRequested: boolean;
|
|
30
|
+
/** 受理时验过的身份元组(三列;律在 `identity-source.ts` 头注)。`null` = 不合格(列之前的行 / 无鉴权写面 / 别人替属主按下)。不上 wire。 */
|
|
31
|
+
identity: RunIdentity | null;
|
|
20
32
|
startedAtMs: number;
|
|
21
33
|
finishedAtMs?: number;
|
|
22
34
|
}
|
|
@@ -26,12 +38,16 @@ export interface NewLeaderRun {
|
|
|
26
38
|
owner: string | null;
|
|
27
39
|
/** 已 scope 过的幂等键(唯一铸法 `idemKeyOf(raw, caller, "leader")`,`http/idempotency.ts`;sha256 hex 定宽 64);null = 不去重。 */
|
|
28
40
|
idemKey: string | null;
|
|
41
|
+
/** 受理时的身份元组 —— 凭据门铸、提交路由经 `runIdentityOf` 交来,原样写入,之后只读(店不重算)。 */
|
|
42
|
+
identity: RunIdentity | null;
|
|
29
43
|
}
|
|
30
44
|
/** 终局补丁 —— `finishRun` 一次写完(状态 + 结果/错误 + 完成时刻)。 */
|
|
31
45
|
export interface LeaderRunTerminal {
|
|
32
46
|
status: Exclude<LeaderRunStatus, "running">;
|
|
33
47
|
result?: unknown;
|
|
34
48
|
error?: string;
|
|
49
|
+
/** 取消口停下的终局带 `cancelled`;其余缺席(列写 NULL)。 */
|
|
50
|
+
errorCode?: LeaderRunErrorCode;
|
|
35
51
|
}
|
|
36
52
|
/** `objective_preview` 的字符上限,与 DDL 的 VARCHAR(160) 同源(`task_run.objective_preview` 先例同宽)。 */
|
|
37
53
|
export declare const LEADER_OBJECTIVE_PREVIEW_CHARS = 160;
|
|
@@ -67,6 +83,12 @@ export declare class SqlLeaderRunStore {
|
|
|
67
83
|
getRun(id: string): Promise<LeaderRunRecord | undefined>;
|
|
68
84
|
/** 按幂等键读回既有行(dup-key 观察臂;也给集成套件直查)。 */
|
|
69
85
|
getByIdem(idemKey: string): Promise<LeaderRunRecord | undefined>;
|
|
86
|
+
/**
|
|
87
|
+
* 翻耐久取消旗 —— **只翻 `running` 行**(CAS:`WHERE status = 'running'`,与 task_run / image_bake 的 `requestCancel` 同形)。
|
|
88
|
+
* 回执 = 是否真的翻了:`false` ⇒ 行不在或已终局(取消口据此重读、按终局臂答)。驱动这条 run 的副本在下一个存活心跳拍读到它并中止;
|
|
89
|
+
* 与 {@link finishRun} 同一只谓词 ⇒ 两写在库里有先后:旗先到 ⇒ 终局写落定后的复读看得见它;终局先到 ⇒ 本 CAS 打空。
|
|
90
|
+
*/
|
|
91
|
+
requestCancel(id: string): Promise<boolean>;
|
|
70
92
|
/**
|
|
71
93
|
* 陈旧 `running` 清算(codex 交叉复审 R1-high②,验真后修)。
|
|
72
94
|
*
|