@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,11 +1,10 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { createLspManager } from "../host-lsp-manager.js";
|
|
4
4
|
import { TaskEnvRegistry } from "../capabilities/sandbox-file-send.js";
|
|
5
5
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
6
6
|
import { SessionEnvironmentSelection } from "../capabilities/select-environment-tool.js";
|
|
7
7
|
import { sandboxEnvNamesInForce } from "../config.js";
|
|
8
|
-
import { createE2bLspManager } from "../lsp/e2b-manager.js";
|
|
9
8
|
import { evictLspOnDestroy } from "../lsp-evict.js";
|
|
10
9
|
import { PerTaskImageRegistry } from "../per-task-image.js";
|
|
11
10
|
import { adbExecutionEnvFactory } from "../plugins/remote-env-adb.js";
|
|
@@ -17,15 +16,18 @@ import { boundedStoreCall, checkSandboxEgressPolicy, createSandboxPodApi, create
|
|
|
17
16
|
import { podSpecPatchBrokerRefusal, SANDBOX_SECRET_SEAT_VERBS } from "../plugins/k8s-exec-protocol.js";
|
|
18
17
|
import { createSandboxBrokerSeatOf, createSandboxGitPlaneSeat, sandboxGitPlanePremisesOf } from "../sandbox-git-plane.js";
|
|
19
18
|
import { createSandboxPodReaper } from "../plugins/k8s-pod-reaper.js";
|
|
19
|
+
import { createLocalDockerReaper } from "../plugins/local-docker-reaper.js";
|
|
20
20
|
import { recordFailOpen } from "../observability/fail-open.js";
|
|
21
21
|
import { createRunWorkspaceSnapshotSeat } from "../fleet/workspace-snapshot-residual.js";
|
|
22
22
|
import { createSpaceCommitFence } from "../workspace-space-commit.js";
|
|
23
23
|
import { localDockerExecutionEnvFactory } from "../plugins/remote-env-local-docker.js";
|
|
24
|
+
import { createLocalDockerCapacity, localDockerWorkerLabelOf } from "../plugins/local-docker-capacity.js";
|
|
24
25
|
import { sshExecutionEnvFactory } from "../plugins/remote-env-ssh.js";
|
|
25
26
|
import { withRemoteScratchpad } from "../plugins/remote-scratchpad.js";
|
|
26
27
|
import { FileSchedulerBackend, defaultSchedulerStorePath } from "../plugins/scheduler-support.js";
|
|
27
28
|
import * as facts from "../capability-facts.js";
|
|
28
29
|
import { materializeAttachmentsInto } from "../plugins/task-attachment-store.js";
|
|
30
|
+
import { createAttachmentMaterializingFactory } from "../execution-env-purpose.js";
|
|
29
31
|
import { reapOrphanWorktrees, withWorktreeIsolation } from "../plugins/worktree-isolation.js";
|
|
30
32
|
import { derivePkgSourceEnv } from "../sandbox-pkg-source.js";
|
|
31
33
|
import { effectiveHostWorkspace } from "../task-cwd.js";
|
|
@@ -37,7 +39,7 @@ import { workspaceSnapshotTimeoutOf } from "../workspace-space.js";
|
|
|
37
39
|
import { sayEgressPolicyReading } from "../sandbox-egress-policy.js";
|
|
38
40
|
import { sandboxPathEnvSlots, withSandboxPathEnvSlot } from "./deferred-sandbox-path-env.js";
|
|
39
41
|
import { createLaneHomeAbsenceReporter } from "../lane-home-probe.js";
|
|
40
|
-
import {
|
|
42
|
+
import { buildLaneHomeBootNote, buildLaneHomeClaim, capabilitiesFor, laneIsolated, laneSandboxReadFloorState } from "../execution-lane-caps.js";
|
|
41
43
|
import { warnReadDenyFloorUnkept } from "./execution-lane.js";
|
|
42
44
|
import { seatText } from "../trace/exit-seat.js";
|
|
43
45
|
import { countSessionResidentBackground } from "../session-resident-background.js";
|
|
@@ -64,11 +66,13 @@ export function createSessionScopedRegistries(maxEntries = MAX_CWD_SESSIONS) {
|
|
|
64
66
|
const perSessionShellEnv = new Map();
|
|
65
67
|
const perSessionInheritEnv = new Map();
|
|
66
68
|
const owners = new Map();
|
|
69
|
+
const occupants = new Map();
|
|
67
70
|
const dropSession = (sid) => {
|
|
68
71
|
perSessionCwd.delete(sid);
|
|
69
72
|
perSessionShellEnv.delete(sid);
|
|
70
73
|
perSessionInheritEnv.delete(sid);
|
|
71
74
|
owners.delete(sid);
|
|
75
|
+
occupants.delete(sid);
|
|
72
76
|
};
|
|
73
77
|
const touch = (sid, owner) => {
|
|
74
78
|
const next = owner === undefined ? (owners.has(sid) ? owners.get(sid) : null) : owner;
|
|
@@ -98,8 +102,14 @@ export function createSessionScopedRegistries(maxEntries = MAX_CWD_SESSIONS) {
|
|
|
98
102
|
perSessionInheritEnv.set(sid, policy);
|
|
99
103
|
touch(sid, undefined);
|
|
100
104
|
},
|
|
101
|
-
fenceSessionOwner: (sid, owner) => {
|
|
102
|
-
|
|
105
|
+
fenceSessionOwner: (sid, owner, incarnation) => {
|
|
106
|
+
const ownerChanged = owners.has(sid) && owners.get(sid) !== owner;
|
|
107
|
+
const occupantChanged = incarnation !== undefined && occupants.has(sid) && occupants.get(sid) !== incarnation;
|
|
108
|
+
if (incarnation === undefined)
|
|
109
|
+
occupants.delete(sid);
|
|
110
|
+
else
|
|
111
|
+
occupants.set(sid, incarnation);
|
|
112
|
+
if (ownerChanged || occupantChanged) {
|
|
103
113
|
perSessionCwd.delete(sid);
|
|
104
114
|
perSessionShellEnv.delete(sid);
|
|
105
115
|
perSessionInheritEnv.delete(sid);
|
|
@@ -107,6 +117,12 @@ export function createSessionScopedRegistries(maxEntries = MAX_CWD_SESSIONS) {
|
|
|
107
117
|
touch(sid, owner);
|
|
108
118
|
},
|
|
109
119
|
dropSession,
|
|
120
|
+
dropSessionOf: (sid, incarnation) => {
|
|
121
|
+
if (occupants.get(sid) !== incarnation)
|
|
122
|
+
return false;
|
|
123
|
+
dropSession(sid);
|
|
124
|
+
return true;
|
|
125
|
+
},
|
|
110
126
|
};
|
|
111
127
|
}
|
|
112
128
|
export function ownsItsWorkspace(ctx) {
|
|
@@ -220,14 +236,7 @@ function persistNeedsOccupant(persist) {
|
|
|
220
236
|
return false;
|
|
221
237
|
}
|
|
222
238
|
}
|
|
223
|
-
|
|
224
|
-
if (!DEPLOYMENT_SHAPE_PREDICATES.singleMachineDefaultLane.holds({ remoteExec }))
|
|
225
|
-
return "non-isolated target — actions are permanent; rely on the policy gate + HITL (design/61 §5)";
|
|
226
|
-
const sandboxLanes = REMOTE_EXEC_PROVIDER_WORDS.filter((lane) => laneIsolated(lane)).join("|");
|
|
227
|
-
return ("hands run on this machine with no OS sandbox (single-machine default: REMOTE_EXEC unset, CONFIG_PROVIDER=local) — actions are permanent, " +
|
|
228
|
-
"and the Bash read boundary is a text-level friction floor, not a safety boundary; the safety boundary is a sandbox lane: " +
|
|
229
|
-
`set REMOTE_EXEC=${sandboxLanes} (see docs/DEPLOY-PREREQS.md, section "S-281")`);
|
|
230
|
-
}
|
|
239
|
+
const REAL_SYSTEM_NOTE = "non-isolated target — actions are permanent; rely on the policy gate + HITL (design/61 §5)";
|
|
231
240
|
function hostWorktreeUnwrappedRefusal() {
|
|
232
241
|
return Object.assign(new Error('isolation "worktree" was requested but cannot be honored: this host lane has no worktree wrapper active ' +
|
|
233
242
|
"(WORKTREE_ISOLATION_ENABLED=true together with WORKTREE_REPO_ROOT=<a git repository> turns it on; a repo root that does not exist or has no `.git` leaves it off — see the boot log), " +
|
|
@@ -244,14 +253,18 @@ export function createExecutionEnv(ctx) {
|
|
|
244
253
|
const { perSessionCwd, setSessionCwd } = sessionScoped;
|
|
245
254
|
const { perSessionShellEnv, setSessionShellEnv } = sessionScoped;
|
|
246
255
|
const { perSessionInheritEnv, setSessionInheritEnv } = sessionScoped;
|
|
256
|
+
const lspManager = createLspManager(config, (event, fields) => logger.info(event, fields));
|
|
257
|
+
if (lspManager)
|
|
258
|
+
logger.info("lsp_enabled", { provider: config.remoteExec.provider });
|
|
247
259
|
let executionEnvFactory;
|
|
248
260
|
let spaceReclaimer;
|
|
249
261
|
let sandboxSecretSeatGate;
|
|
250
|
-
let
|
|
262
|
+
let sandboxReaper;
|
|
263
|
+
let sandboxCapacity;
|
|
251
264
|
let sandboxGitPlane = createSandboxGitPlaneSeat((r) => sandboxGitPlanePremisesOf(config, r), {});
|
|
252
265
|
let worktreeReap;
|
|
253
266
|
const workspaceFillOf = taskAttachmentStore === undefined ? undefined : (fctx) => createWorkspaceFill({ store: taskAttachmentStore, sessionId: fctx.sessionId, seeds: ownsItsWorkspace(fctx), logger });
|
|
254
|
-
if (config.remoteExec
|
|
267
|
+
if (config.remoteExec.provider === "e2b") {
|
|
255
268
|
executionEnvFactory = e2bExecutionEnvFactory({
|
|
256
269
|
apiKey: config.remoteExec.apiKey,
|
|
257
270
|
...homeDirSeat, ...homeAbsentNotice,
|
|
@@ -267,7 +280,7 @@ export function createExecutionEnv(ctx) {
|
|
|
267
280
|
metrics,
|
|
268
281
|
}, ctx.laneDeps?.e2b);
|
|
269
282
|
}
|
|
270
|
-
else if (config.remoteExec
|
|
283
|
+
else if (config.remoteExec.provider === "k8s") {
|
|
271
284
|
const k8sCfg = {
|
|
272
285
|
image: config.remoteExec.image,
|
|
273
286
|
...homeDirSeat, ...homeAbsentNotice,
|
|
@@ -305,12 +318,12 @@ export function createExecutionEnv(ctx) {
|
|
|
305
318
|
if (k8sCfg.cache !== undefined || k8sCfg.s3Snapshot !== undefined)
|
|
306
319
|
spaceReclaimer = createSpaceReclaimer(k8sCfg);
|
|
307
320
|
sandboxSecretSeatGate = () => ensureSandboxSecretSeat(k8sCfg, logger, undefined, () => readSandboxSecretSeat(k8sCfg, "env"));
|
|
308
|
-
|
|
321
|
+
sandboxReaper = createSandboxPodReaper({ api: createSandboxPodApi(k8sCfg), logger, metrics });
|
|
309
322
|
void checkSandboxEgressPolicy(k8sCfg)
|
|
310
323
|
.then((gaps) => sayEgressPolicyReading(gaps, logger, k8sCfg.namespace))
|
|
311
324
|
.catch((e) => logger.error("sandbox_egress_policy_check_crashed", { error: seatText("operator-log-text", e instanceof Error ? e.message : String(e)), effect: "the sandbox egress self-check did not complete this boot — the lane runs; the egress policy was not read" }));
|
|
312
325
|
}
|
|
313
|
-
else if (config.remoteExec
|
|
326
|
+
else if (config.remoteExec.provider === "ssh") {
|
|
314
327
|
executionEnvFactory = sshExecutionEnvFactory({
|
|
315
328
|
host: config.remoteExec.host,
|
|
316
329
|
username: config.remoteExec.username,
|
|
@@ -319,9 +332,10 @@ export function createExecutionEnv(ctx) {
|
|
|
319
332
|
...(config.remoteExec.port != null ? { port: config.remoteExec.port } : {}),
|
|
320
333
|
...(config.remoteExec.mountPath ? { mountPath: config.remoteExec.mountPath } : {}),
|
|
321
334
|
...(config.remoteExec.hostKey !== undefined ? { hostKey: config.remoteExec.hostKey } : {}),
|
|
335
|
+
logger,
|
|
322
336
|
});
|
|
323
337
|
}
|
|
324
|
-
else if (config.remoteExec
|
|
338
|
+
else if (config.remoteExec.provider === "device") {
|
|
325
339
|
if (ctx.deviceLane) {
|
|
326
340
|
executionEnvFactory = deviceExecutionEnvFactory({
|
|
327
341
|
hub: ctx.deviceLane.hub,
|
|
@@ -336,21 +350,23 @@ export function createExecutionEnv(ctx) {
|
|
|
336
350
|
});
|
|
337
351
|
}
|
|
338
352
|
}
|
|
339
|
-
else if (config.remoteExec
|
|
353
|
+
else if (config.remoteExec.provider === "adb") {
|
|
340
354
|
executionEnvFactory = adbExecutionEnvFactory({
|
|
341
355
|
serial: config.remoteExec.serial,
|
|
342
356
|
...homeDirSeat, ...homeAbsentNotice,
|
|
343
357
|
...(config.remoteExec.adbPath ? { adbPath: config.remoteExec.adbPath } : {}),
|
|
344
358
|
...(config.remoteExec.mountPath ? { mountPath: config.remoteExec.mountPath } : {}),
|
|
359
|
+
logger,
|
|
345
360
|
});
|
|
346
361
|
}
|
|
347
|
-
else if (config.remoteExec
|
|
362
|
+
else if (config.remoteExec.provider === "host") {
|
|
348
363
|
{
|
|
349
364
|
const schedulerStorePath = config.schedulerStorePath ?? defaultSchedulerStorePath(config);
|
|
350
365
|
const hostScheduler = facts.hostScheduler(config).available
|
|
351
366
|
? new FileSchedulerBackend({
|
|
352
367
|
storePath: schedulerStorePath,
|
|
353
368
|
log: logger,
|
|
369
|
+
trust: { declaredOwnerUid: config.configLocalOwnerUid },
|
|
354
370
|
...(config.schedulerSessionWakeup === false || config.schedulerSessionLifetime === false
|
|
355
371
|
? {
|
|
356
372
|
caps: {
|
|
@@ -386,9 +402,12 @@ export function createExecutionEnv(ctx) {
|
|
|
386
402
|
};
|
|
387
403
|
}
|
|
388
404
|
}
|
|
389
|
-
else if (config.remoteExec
|
|
390
|
-
|
|
405
|
+
else if (config.remoteExec.provider === "local-docker") {
|
|
406
|
+
const workerLabel = localDockerWorkerLabelOf(config.localDataRoot);
|
|
407
|
+
sandboxCapacity = config.remoteExec.capacity !== undefined ? createLocalDockerCapacity(config.remoteExec.capacity, { label: workerLabel, logger }) : undefined;
|
|
408
|
+
const localDockerFactory = localDockerExecutionEnvFactory({
|
|
391
409
|
image: config.remoteExec.image,
|
|
410
|
+
workerLabel,
|
|
392
411
|
...(config.remoteExec.mountPath ? { mountPath: config.remoteExec.mountPath } : {}),
|
|
393
412
|
...homeDirSeat, ...homeAbsentNotice,
|
|
394
413
|
...(config.remoteExec.dockerPath ? { dockerPath: config.remoteExec.dockerPath } : {}),
|
|
@@ -402,7 +421,11 @@ export function createExecutionEnv(ctx) {
|
|
|
402
421
|
...(config.remoteExec.env ? { env: config.remoteExec.env } : {}),
|
|
403
422
|
sandboxReadFloor: config.sandboxReadFloor,
|
|
404
423
|
...(workspaceFillOf !== undefined ? { workspaceFillOf } : {}),
|
|
424
|
+
...(sandboxCapacity !== undefined ? { capacity: sandboxCapacity } : {}),
|
|
425
|
+
logger,
|
|
405
426
|
}, ctx.laneDeps?.localDocker);
|
|
427
|
+
executionEnvFactory = localDockerFactory;
|
|
428
|
+
sandboxReaper = createLocalDockerReaper({ port: localDockerFactory.reapPort, logger, metrics, ...(ctx.laneDeps?.localDockerReapNow !== undefined ? { now: ctx.laneDeps.localDockerReapNow } : {}) });
|
|
406
429
|
}
|
|
407
430
|
if (executionEnvFactory && DEPLOYMENT_SHAPE_PREDICATES.remoteScratchpad.holds(config)) {
|
|
408
431
|
executionEnvFactory = withRemoteScratchpad(executionEnvFactory, logger);
|
|
@@ -410,15 +433,15 @@ export function createExecutionEnv(ctx) {
|
|
|
410
433
|
if (config.worktreeIsolation && executionEnvFactory) {
|
|
411
434
|
const wtRoot = config.worktreeIsolation.repoRoot;
|
|
412
435
|
const wtValid = existsSync(wtRoot) && existsSync(join(wtRoot, ".git"));
|
|
413
|
-
if (config.remoteExec
|
|
436
|
+
if (config.remoteExec.provider === "host" && !wtValid) {
|
|
414
437
|
logger.error("worktree_isolation_disabled_bad_repo_root", {
|
|
415
438
|
repoRoot: wtRoot,
|
|
416
439
|
reason: existsSync(wtRoot) ? "not a git repository (no .git)" : "path does not exist",
|
|
417
440
|
note: "WORKTREE_ISOLATION_ENABLED is set but WORKTREE_REPO_ROOT is not a usable git repo — isolation left OFF; isolation:'worktree' workflow agents are refused (isolation.unavailable) until it is fixed. Fix the path or unset the flag.",
|
|
418
441
|
});
|
|
419
442
|
}
|
|
420
|
-
else if (config.remoteExec
|
|
421
|
-
const gitBaseEnv = new RemoteHostExecutionEnv({ workspaceDir: config.worktreeIsolation.repoRoot, inheritEnv: "all", backgroundShell: config.requirePrincipal !== true });
|
|
443
|
+
else if (config.remoteExec.provider === "host") {
|
|
444
|
+
const gitBaseEnv = new RemoteHostExecutionEnv({ workspaceDir: config.worktreeIsolation.repoRoot, inheritEnv: "all", backgroundShell: config.requirePrincipal !== true, gitBase: true });
|
|
422
445
|
executionEnvFactory = withWorktreeIsolation(executionEnvFactory, {
|
|
423
446
|
repoRoot: config.worktreeIsolation.repoRoot,
|
|
424
447
|
...(config.worktreeIsolation.allowedRoots ? { allowedRoots: config.worktreeIsolation.allowedRoots } : {}),
|
|
@@ -444,7 +467,7 @@ export function createExecutionEnv(ctx) {
|
|
|
444
467
|
}
|
|
445
468
|
else {
|
|
446
469
|
logger.warn("worktree_isolation_unsupported_lane", {
|
|
447
|
-
provider: config.remoteExec
|
|
470
|
+
provider: config.remoteExec.provider,
|
|
448
471
|
note: "git-worktree isolation v1 covers only the 'host' lane — isolation:'worktree' is a no-op here (the base env is used). Worktree-rooted remote envs are a follow-on.",
|
|
449
472
|
});
|
|
450
473
|
}
|
|
@@ -456,59 +479,32 @@ export function createExecutionEnv(ctx) {
|
|
|
456
479
|
executionEnvFactory = registry.wrapFactory(executionEnvFactory);
|
|
457
480
|
return registry;
|
|
458
481
|
})();
|
|
459
|
-
if (taskAttachmentStore && executionEnvFactory && !laneIsolated(
|
|
460
|
-
const inner = executionEnvFactory;
|
|
482
|
+
if (taskAttachmentStore && executionEnvFactory && !laneIsolated(config.remoteExec.provider)) {
|
|
461
483
|
const attStore = taskAttachmentStore;
|
|
462
|
-
executionEnvFactory =
|
|
463
|
-
const env = await inner(ctx);
|
|
464
|
-
const n = await materializeAttachmentsInto(env, attStore, ctx.sessionId);
|
|
465
|
-
if (n > 0)
|
|
466
|
-
logger.info("attachments_materialized", { sessionId: ctx.sessionId, count: n });
|
|
467
|
-
return env;
|
|
468
|
-
};
|
|
484
|
+
executionEnvFactory = createAttachmentMaterializingFactory(executionEnvFactory, (env, ctx) => materializeAttachmentsInto(env, attStore, ctx.sessionId), (sessionId, count) => logger.info("attachments_materialized", { sessionId, count }));
|
|
469
485
|
}
|
|
470
486
|
if (executionEnvFactory && DEPLOYMENT_SHAPE_PREDICATES.sandboxPathAdjudication.holds(config)) {
|
|
471
487
|
executionEnvFactory = withSandboxPathEnvSlot(executionEnvFactory, sandboxPathEnvSlots, logger);
|
|
472
488
|
}
|
|
473
489
|
if (executionEnvFactory) {
|
|
474
|
-
const isolated = laneIsolated(
|
|
490
|
+
const isolated = laneIsolated(config.remoteExec.provider);
|
|
475
491
|
const suspendable = DEPLOYMENT_SHAPE_PREDICATES.suspendableHands.holds(config);
|
|
476
492
|
const keepsReadFloor = capabilitiesFor(config).keepsReadFloor;
|
|
477
493
|
const sandboxReadFloor = laneSandboxReadFloorState(config);
|
|
478
494
|
const sandboxEnvKeys = [...sandboxEnvNamesInForce(config)].sort();
|
|
479
495
|
logger.info("remote_exec_enabled", { provider: config.remoteExec.provider, isolated, suspendable, keepsReadFloor, ...(sandboxReadFloor !== undefined ? { sandboxReadFloor } : {}), ...(sandboxEnvKeys.length > 0 ? { sandboxEnvKeys } : {}) });
|
|
480
496
|
if (!isolated)
|
|
481
|
-
logger.warn("remote_exec_real_system", { provider: config.remoteExec.provider, note:
|
|
497
|
+
logger.warn("remote_exec_real_system", { provider: config.remoteExec.provider, note: REAL_SYSTEM_NOTE });
|
|
482
498
|
const homeLine = buildLaneHomeBootNote(config);
|
|
483
499
|
if (homeLine !== undefined)
|
|
484
500
|
logger.warn(homeLine.event, { provider: config.remoteExec.provider, note: homeLine.note });
|
|
485
|
-
if (
|
|
501
|
+
if (config.remoteExec.provider === "host")
|
|
486
502
|
logger.info("task_inherit_env_honored", { honored: taskInheritEnvRefusal(config) === undefined });
|
|
487
503
|
}
|
|
488
504
|
warnReadDenyFloorUnkept(config, logger);
|
|
489
|
-
const lspProvider = config.remoteExec?.provider;
|
|
490
|
-
const lspLane = executionLaneOf(lspProvider);
|
|
491
|
-
const lspLaneBindsReads = lspLane !== undefined && laneBindsReads(lspLane);
|
|
492
|
-
if ((lspProvider === "e2b" || lspProvider === "k8s") && config.lspEnabled && !lspLaneBindsReads) {
|
|
493
|
-
logger.warn("lsp_not_mounted", {
|
|
494
|
-
provider: lspProvider,
|
|
495
|
-
reason: "LSP_ENABLED is set, but this lane's execution environment cannot bind a read to the file that was checked (openBound), so every language-server file sync would be refused; the LSP tool is not mounted on this lane in this version",
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
const lspManager = (lspProvider === "e2b" || lspProvider === "k8s") && config.lspEnabled && lspLaneBindsReads
|
|
499
|
-
? createE2bLspManager({
|
|
500
|
-
log: (event, fields) => logger.info(event, fields),
|
|
501
|
-
scheme: lspProvider === "k8s" ? "ws" : "wss",
|
|
502
|
-
provider: lspProvider,
|
|
503
|
-
metrics,
|
|
504
|
-
})
|
|
505
|
-
:
|
|
506
|
-
lspProvider === "host" && config.lspHostEnabled && config.requirePrincipal !== true && lspLaneBindsReads
|
|
507
|
-
? createHostLspManager(config, (event, fields) => logger.info(event, fields))
|
|
508
|
-
: undefined;
|
|
509
|
-
if (lspManager)
|
|
510
|
-
logger.info("lsp_enabled", { provider: lspProvider });
|
|
511
505
|
const unreadableReported = new Set();
|
|
506
|
+
let stallReapFailureReported = false;
|
|
507
|
+
const stallMs = config.backgroundAgentStallMs;
|
|
512
508
|
const sessionResidentBackground = () => countSessionResidentBackground(sessionScoped.sessionOwners, {
|
|
513
509
|
onUnreadable: (sessionId, err) => {
|
|
514
510
|
if (unreadableReported.has(sessionId))
|
|
@@ -516,13 +512,35 @@ export function createExecutionEnv(ctx) {
|
|
|
516
512
|
unreadableReported.add(sessionId);
|
|
517
513
|
logger.warn("session_resident_background_unreadable", { sessionId, counted: 1, err: seatText("operator-log-text", String(err)) });
|
|
518
514
|
},
|
|
515
|
+
stall: {
|
|
516
|
+
stallMs,
|
|
517
|
+
report: (outcome) => {
|
|
518
|
+
switch (outcome.kind) {
|
|
519
|
+
case "reaped":
|
|
520
|
+
logger.warn("background_agent_stall_reaped", { reaped: outcome.count, stallMs });
|
|
521
|
+
return;
|
|
522
|
+
case "failed":
|
|
523
|
+
if (stallReapFailureReported)
|
|
524
|
+
return;
|
|
525
|
+
stallReapFailureReported = true;
|
|
526
|
+
logger.warn("background_agent_stall_reap_failed", { stallMs, err: seatText("operator-log-text", String(outcome.err)) });
|
|
527
|
+
return;
|
|
528
|
+
default: {
|
|
529
|
+
const unhandled = outcome;
|
|
530
|
+
throw new Error(`background agent stall reap: unknown outcome ${String(unhandled)}`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
},
|
|
519
535
|
});
|
|
520
536
|
return {
|
|
521
537
|
perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv,
|
|
522
538
|
fenceSessionOwner: sessionScoped.fenceSessionOwner,
|
|
523
539
|
dropSessionScoped: sessionScoped.dropSession,
|
|
540
|
+
dropSessionScopedOf: sessionScoped.dropSessionOf,
|
|
524
541
|
sessionResidentBackground,
|
|
525
|
-
executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate,
|
|
542
|
+
executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxReaper, sandboxGitPlane,
|
|
543
|
+
sandboxCapacity,
|
|
526
544
|
};
|
|
527
545
|
}
|
|
528
546
|
//# sourceMappingURL=execution-env.js.map
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { type CrossInvariantView } from "../config-invariants.js";
|
|
2
|
-
import type { ServiceConfig } from "../config-types.js";
|
|
3
|
-
import {
|
|
2
|
+
import type { LoadedConfig, ServiceConfig } from "../config-types.js";
|
|
3
|
+
import { type EntryDeclarableLane } from "../config.js";
|
|
4
|
+
import { buildReadDenyFloorUnkeptNote, type ExecutionLane } from "../execution-lane-caps.js";
|
|
4
5
|
import type { Logger } from "../observability/logger.js";
|
|
5
|
-
/** `config.d/remote-exec.json` 能写进来的车道(文件契约里不带密钥名、可 1:1
|
|
6
|
-
export declare const FILE_SOURCED_LANES: readonly ["host", "local-docker"];
|
|
6
|
+
/** `config.d/remote-exec.json` 能写进来的车道(文件契约里不带密钥名、可 1:1 映射的三条 —— `none` 零字段;e2b/k8s/ssh/adb 要 NAME→值解析,尚未接线)。 */
|
|
7
|
+
export declare const FILE_SOURCED_LANES: readonly ["host", "local-docker", "none"];
|
|
7
8
|
export type FileSourcedLane = (typeof FILE_SOURCED_LANES)[number];
|
|
9
|
+
/** 判点的拒句(一行;两条照旧行为的修法逐字在句中:7.146.0 非 local 未设 ⇒ `REMOTE_EXEC=none`,local 未设 ⇒ `REMOTE_EXEC=host`)。
|
|
10
|
+
* 车道词取自车道表(隔离与否读能力表的唯一布尔口 `laneIsolated`),不手抄清单。 */
|
|
11
|
+
export declare const EXECUTION_LANE_UNDECLARED_REFUSAL: string;
|
|
12
|
+
/**
|
|
13
|
+
* 一个**入口程序**(装配者)对车道说的两句话 —— 合成步对它们只有一条律:声明的先后 = 文件 > env > 入口自身,**在场的最高者终结选择**(文件在场 ⇒ 车道就是文件那一条,
|
|
14
|
+
* 解析不了即拒,不许 env / 入口顶上;文件缺席 ⇒ env;二者都缺席 ⇒ 入口自身);最终车道必须是入口跑得了的,否则拒(起任何任务之前)。
|
|
15
|
+
*/
|
|
16
|
+
export interface ExecutionLaneEntry {
|
|
17
|
+
/** 拒句点名的入口(`run-local` / `the HTTP service` …)。 */
|
|
18
|
+
readonly name: string;
|
|
19
|
+
/**
|
|
20
|
+
* 本入口跑得了的车道(闭集;HTTP 服务 = 全部八条,`run-local` = host 与 none —— 它没有容器 / 远程执行器,`none` 不要执行器)。
|
|
21
|
+
* 能从 `config.d/remote-exec.json` 取的 = 它 ∩ {@link FILE_SOURCED_LANES}(隔离车道 e2b / k8s / ssh / adb 要 NAME→值解析,文件腿尚未接线)。
|
|
22
|
+
*/
|
|
23
|
+
readonly runs: readonly ExecutionLane[];
|
|
24
|
+
/** 入口自身的声明(入口 = 部署者,如 run-local ⇒ `host`):文件与 env 都没点名时才填,排在二者之后;缺席 = 本入口不替部署声明。不写进程 env。 */
|
|
25
|
+
readonly declares?: EntryDeclarableLane;
|
|
26
|
+
}
|
|
27
|
+
/** HTTP 服务这只入口:跑得了全部车道、不替部署声明(它的部署者是运维:声明只来自 env / 文件)。 */
|
|
28
|
+
export declare const HTTP_SERVICE_LANE_ENTRY: ExecutionLaneEntry;
|
|
8
29
|
export interface ExecutionLaneComposeCtx {
|
|
9
30
|
/** 本入口的配置源形态(`configSourceKind` 的答案 —— 与它真建的 provider 同一只判据)。
|
|
10
31
|
* 只有 `local` 才读文件;`undefined` = 纯 env 部署。 */
|
|
@@ -12,12 +33,19 @@ export interface ExecutionLaneComposeCtx {
|
|
|
12
33
|
/** 配置根(与配置源同一个根,不分裂)。 */
|
|
13
34
|
readonly localRoot: string;
|
|
14
35
|
readonly logger: Logger;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
readonly drivesFromFile: readonly FileSourcedLane[];
|
|
36
|
+
/** 装配这台部署的入口程序(跑得了哪些车道、自己声明哪一条)。 */
|
|
37
|
+
readonly entry: ExecutionLaneEntry;
|
|
18
38
|
}
|
|
19
|
-
/**
|
|
20
|
-
|
|
39
|
+
/**
|
|
40
|
+
* 合成 + 判:raw 配置 → composed 配置(**同一个对象**就地覆写并收窄型,交回给装配链往下传)。没有声明 / 坏文件 / 不变量不过 ⇒ 抛(拒启)。
|
|
41
|
+
*/
|
|
42
|
+
export declare function composeExecutionLane(loaded: LoadedConfig, ctx: ExecutionLaneComposeCtx): Promise<ServiceConfig>;
|
|
43
|
+
/**
|
|
44
|
+
* 合成步的**同步尾**(文件覆写之后的一切,恰此一份):入口声明补缺席位 → 入口跑不跑得了 → 判点 → 读面按最终车道派生 + 恰一行通告 → 车道交叉不变量 →
|
|
45
|
+
* `exec_lane_selected {lane}`。{@link composeExecutionLane} 在文件腿之后调它;没有文件腿的纯 env 形(`bench`、测试夹具)直接调它 —— 同一份合成,不是第二个判官。
|
|
46
|
+
* `entry` 缺席 = 这次装配没有入口程序替部署说话(嵌入方 / 脚本:车道只来自 env,跑得了的不设限)。
|
|
47
|
+
*/
|
|
48
|
+
export declare function composeDeclaredExecutionLane(loaded: LoadedConfig, logger: Pick<Logger, "info">, entry?: ExecutionLaneEntry): ServiceConfig;
|
|
21
49
|
/**
|
|
22
50
|
* **宿主车道的 shell 起服解析**(一次)—— 宿主车道(`provider === "host"`)的命令用本机 shell 起(win32 = Git Bash),起服时把它解析落定,
|
|
23
51
|
* 找不到就在这里响亮地说一次(`warn host_shell_unavailable { err, remedy }`),而不是等第一个用户的第一条 Bash 撞上。
|
|
@@ -1,16 +1,62 @@
|
|
|
1
1
|
import { loadRemoteExec } from "@sema-agent/settings-schema/node";
|
|
2
2
|
import { assertLocalConfigDirTrusted } from "../config-dir-trust.js";
|
|
3
3
|
import { crossInvariant } from "../config-invariants.js";
|
|
4
|
-
import {
|
|
4
|
+
import { entryDeclarableRemoteExec } from "../config.js";
|
|
5
|
+
import { ALL_EXECUTION_LANES, buildReadDenyFloorUnkeptNote, laneIsolated, laneWiresExecutionEnv } from "../execution-lane-caps.js";
|
|
5
6
|
import { buildReadFacePostureNotice, settleDerivedReadFace } from "../read-face-posture.js";
|
|
6
7
|
import { settleHostShellAtBoot } from "../plugins/host-platform.js";
|
|
7
8
|
import { seatText } from "../trace/exit-seat.js";
|
|
8
|
-
export const FILE_SOURCED_LANES = ["host", "local-docker"];
|
|
9
|
-
export
|
|
9
|
+
export const FILE_SOURCED_LANES = ["host", "local-docker", "none"];
|
|
10
|
+
export const EXECUTION_LANE_UNDECLARED_REFUSAL = (() => {
|
|
11
|
+
const sandboxLanes = ALL_EXECUTION_LANES.filter((lane) => laneIsolated(lane));
|
|
12
|
+
const otherHandLanes = ALL_EXECUTION_LANES.filter((lane) => lane !== "host" && laneWiresExecutionEnv(lane) && !laneIsolated(lane));
|
|
13
|
+
return ("No execution lane is declared — every deployment names its execution lane: set REMOTE_EXEC (with CONFIG_PROVIDER=local, config.d/remote-exec.json also declares it). " +
|
|
14
|
+
"To keep what this deployment did before 7.147.0: REMOTE_EXEC=none when CONFIG_PROVIDER is not \"local\" (no execution environment — the agent's tool hands never mount), " +
|
|
15
|
+
"REMOTE_EXEC=host when CONFIG_PROVIDER=local (tools run directly on this machine with no OS sandbox). " +
|
|
16
|
+
`Or name a sandbox lane (${sandboxLanes.join(" | ")}) or ${otherHandLanes.join(" | ")} with that lane's required env. ` +
|
|
17
|
+
"CONFIG_PROVIDER only selects where configuration is read from; it does not select an execution lane.");
|
|
18
|
+
})();
|
|
19
|
+
export const HTTP_SERVICE_LANE_ENTRY = { name: "the HTTP service", runs: ALL_EXECUTION_LANES };
|
|
20
|
+
function entryCannotRunLaneRefusal(entry, lane, source) {
|
|
21
|
+
return (`${source} declares the execution lane "${lane}", but ${entry.name} runs only ${entry.runs.join(" / ")} — it has no executor for "${lane}". ` +
|
|
22
|
+
`Refusing before any task starts rather than run on another lane: declare a lane ${entry.name} runs, or serve "${lane}" from an entry that runs it (the HTTP service runs every lane).`);
|
|
23
|
+
}
|
|
24
|
+
function fileLaneUnresolvableRefusal(entry, lane, envReading, root) {
|
|
25
|
+
return (`config.d/remote-exec.json under ${root} declares the execution lane "${lane}", but ${entry.name} reads "${lane}"'s coordinates only from REMOTE_EXEC env ` +
|
|
26
|
+
`(file-source name→value resolution is not wired yet), and ${envReading}. The file's declaration ends the lane selection: no other declaration may stand in for it. ` +
|
|
27
|
+
`Refusing before any task starts: set REMOTE_EXEC=${lane} with that lane's required env, or change the file to the lane you mean.`);
|
|
28
|
+
}
|
|
29
|
+
export async function composeExecutionLane(loaded, ctx) {
|
|
10
30
|
if (ctx.configSource === "local")
|
|
11
|
-
await applyRemoteExecFile(
|
|
12
|
-
|
|
31
|
+
await applyRemoteExecFile(loaded, ctx);
|
|
32
|
+
return composeDeclaredExecutionLane(loaded, ctx.logger, ctx.entry);
|
|
33
|
+
}
|
|
34
|
+
export function composeDeclaredExecutionLane(loaded, logger, entry) {
|
|
35
|
+
if (entry !== undefined)
|
|
36
|
+
settleEntryLane(loaded, entry);
|
|
37
|
+
const config = requireDeclaredExecutionLane(loaded);
|
|
38
|
+
settleReadFaceForFinalLane(config, logger);
|
|
13
39
|
assertExecutionLaneInvariants(config);
|
|
40
|
+
logger.info("exec_lane_selected", { lane: config.remoteExec.provider });
|
|
41
|
+
return config;
|
|
42
|
+
}
|
|
43
|
+
function requireDeclaredExecutionLane(loaded) {
|
|
44
|
+
if (!isComposed(loaded))
|
|
45
|
+
throw new Error(EXECUTION_LANE_UNDECLARED_REFUSAL);
|
|
46
|
+
return loaded;
|
|
47
|
+
}
|
|
48
|
+
function settleEntryLane(loaded, entry) {
|
|
49
|
+
const declaredByEntry = !isComposed(loaded) ? entry.declares : undefined;
|
|
50
|
+
if (declaredByEntry !== undefined)
|
|
51
|
+
loaded.remoteExec = entryDeclarableRemoteExec(declaredByEntry);
|
|
52
|
+
if (!isComposed(loaded))
|
|
53
|
+
return;
|
|
54
|
+
const lane = loaded.remoteExec.provider;
|
|
55
|
+
if (!entry.runs.includes(lane))
|
|
56
|
+
throw new Error(entryCannotRunLaneRefusal(entry, lane, declaredByEntry !== undefined ? `${entry.name} itself` : `REMOTE_EXEC=${lane}`));
|
|
57
|
+
}
|
|
58
|
+
function isComposed(config) {
|
|
59
|
+
return config.remoteExec !== undefined;
|
|
14
60
|
}
|
|
15
61
|
function settleReadFaceForFinalLane(config, logger) {
|
|
16
62
|
if (!settleDerivedReadFace(config, config.requirePrincipal !== true))
|
|
@@ -20,14 +66,14 @@ function settleReadFaceForFinalLane(config, logger) {
|
|
|
20
66
|
logger.info(notice.event, notice.fields);
|
|
21
67
|
}
|
|
22
68
|
export async function settleHostLaneShell(config, logger) {
|
|
23
|
-
if (config.remoteExec
|
|
69
|
+
if (config.remoteExec.provider !== "host")
|
|
24
70
|
return;
|
|
25
71
|
await settleHostShellAtBoot(logger);
|
|
26
72
|
}
|
|
27
73
|
export function warnReadDenyFloorUnkept(config, logger) {
|
|
28
74
|
const note = buildReadDenyFloorUnkeptNote(config);
|
|
29
75
|
if (note !== undefined)
|
|
30
|
-
logger.warn("read_deny_floor_required_unkept", { provider: config.remoteExec
|
|
76
|
+
logger.warn("read_deny_floor_required_unkept", { provider: config.remoteExec.provider, note });
|
|
31
77
|
}
|
|
32
78
|
export function assertExecutionLaneInvariants(config) {
|
|
33
79
|
const judge = (id) => crossInvariant(id).check({ live: config, next: config });
|
|
@@ -61,11 +107,12 @@ async function applyRemoteExecFile(config, ctx) {
|
|
|
61
107
|
}
|
|
62
108
|
if (!fileRx)
|
|
63
109
|
return;
|
|
64
|
-
const
|
|
65
|
-
const disclosePreemption = (winner) => {
|
|
110
|
+
const envDeclared = config.remoteExec?.provider;
|
|
111
|
+
const disclosePreemption = envDeclared === undefined ? (_winner) => { } : (winner) => {
|
|
112
|
+
const preemptedLane = envDeclared;
|
|
66
113
|
if (winner === preemptedLane)
|
|
67
114
|
return;
|
|
68
|
-
const downgrade = laneIsolated(preemptedLane) && !laneIsolated(winner);
|
|
115
|
+
const downgrade = laneIsolated(preemptedLane) && laneWiresExecutionEnv(winner) && !laneIsolated(winner);
|
|
69
116
|
logger.warn("remote_exec_lane_preempted_by_file", {
|
|
70
117
|
preemptedLane,
|
|
71
118
|
effectiveLane: winner,
|
|
@@ -76,7 +123,7 @@ async function applyRemoteExecFile(config, ctx) {
|
|
|
76
123
|
(downgrade ? `. This is an ISOLATION DOWNGRADE: tasks run on a non-isolated target. Delete/fix the file, or unset the lane env if the file is the intended source.` : `. Delete/fix the file, or unset the lane env if the file is the intended source.`),
|
|
77
124
|
});
|
|
78
125
|
};
|
|
79
|
-
const drives = (lane) => ctx.
|
|
126
|
+
const drives = (lane) => ctx.entry.runs.includes(lane);
|
|
80
127
|
if (fileRx.provider === "host" && drives("host")) {
|
|
81
128
|
config.remoteExec = {
|
|
82
129
|
provider: "host",
|
|
@@ -100,18 +147,25 @@ async function applyRemoteExecFile(config, ctx) {
|
|
|
100
147
|
logger.info("remote_exec_from_file", { provider: "local-docker", root: localRoot, image: fileRx.image });
|
|
101
148
|
return;
|
|
102
149
|
}
|
|
150
|
+
if (fileRx.provider === "none" && drives("none")) {
|
|
151
|
+
config.remoteExec = { provider: "none" };
|
|
152
|
+
disclosePreemption("none");
|
|
153
|
+
logger.info("remote_exec_from_file", { provider: "none", root: localRoot });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
103
156
|
const fileLane = fileRx.provider;
|
|
104
|
-
|
|
157
|
+
if (!ctx.entry.runs.includes(fileLane))
|
|
158
|
+
throw new Error(entryCannotRunLaneRefusal(ctx.entry, fileLane, `config.d/remote-exec.json under ${localRoot}`));
|
|
159
|
+
if (envDeclared !== fileLane) {
|
|
160
|
+
const envReading = envDeclared === undefined ? "REMOTE_EXEC is not set" : `REMOTE_EXEC declares "${envDeclared}"`;
|
|
161
|
+
throw new Error(fileLaneUnresolvableRefusal(ctx.entry, fileLane, envReading, localRoot));
|
|
162
|
+
}
|
|
105
163
|
logger.warn("remote_exec_file_isolated_lane_unwired", {
|
|
106
164
|
provider: fileLane,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
`from the file; the HTTP service drives ${FILE_SOURCED_LANES.join(" / ")}) — the env-derived lane above stays in force`
|
|
112
|
-
: `this entry drives ${ctx.drivesFromFile.join(" / ")} from config.d/remote-exec.json; "${fileLane}" (like the other isolated lanes ` +
|
|
113
|
-
`e2b / k8s / ssh / adb) is sourced from REMOTE_EXEC env until file-source NAME→value resolution lands (center field map) — the ` +
|
|
114
|
-
`env-derived lane above stays in force`,
|
|
165
|
+
reason: "needs-name-resolution",
|
|
166
|
+
note: `config.d/remote-exec.json and REMOTE_EXEC both declare "${fileLane}": this entry takes ${FILE_SOURCED_LANES.filter((lane) => ctx.entry.runs.includes(lane)).join(" / ")} ` +
|
|
167
|
+
`from the file; "${fileLane}" (like the other isolated lanes e2b / k8s / ssh / adb) takes its coordinates from REMOTE_EXEC env until file-source NAME→value ` +
|
|
168
|
+
`resolution lands (center field map) — the coordinates written in the file for it are not read`,
|
|
115
169
|
});
|
|
116
170
|
}
|
|
117
171
|
//# sourceMappingURL=execution-lane.js.map
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
* 不是退出边界)。
|
|
25
25
|
*/
|
|
26
26
|
import { type TaskRegistry } from "@sema-agent/core";
|
|
27
|
-
import type
|
|
27
|
+
import { type Logger } from "../observability/logger.js";
|
|
28
28
|
/**
|
|
29
29
|
* 退出边界的硬收面**此刻**会收掉的后台 shell 行数(`background_bash` + `monitor`,在跑,整张进程级注册表,retain 行按
|
|
30
30
|
* {@link PROCESS_EXIT_INCLUDES_RETAINED} 跳过)—— 「引擎现在退,会不会把一条在跑的后台 shell 一起收掉」这一问的**唯一**读法。
|
|
31
31
|
*
|
|
32
32
|
* 一问一源:数与收读同一只 `includeRetained` 常量,core 的 `countRunningBackgroundShells` 与 `killAllBackgroundShellsNow` 又按同一只访问函数选行
|
|
33
33
|
* (core 注:the count and the walk cannot drift)⇒ 这只数就是硬收面会交出的 `killed` 收据数。
|
|
34
|
-
* **不是** `/health.inflightBreakdown.sessionResident`(`session-resident-background.ts`)
|
|
34
|
+
* **不是** `/health.inflightBreakdown.sessionResident`(`session-resident-background.ts`):那一项回答「引擎托管着多少会话驻留的 shell / monitor」,是总数里的一个分项 ——
|
|
35
35
|
* 只数围栏表里会话的、会话驻留的行(挂在 run 腿上的行算在 http 项里,数它是第二次;围栏外的会话它看不见);本函数整表数、不分会话,
|
|
36
36
|
* 腿上的行、围栏外会话的行都在内。两问的关系 = 读得出时本数 ≥ 驻留项(驻留项的每一行都是本数的一行)。
|
|
37
37
|
*
|
|
38
38
|
* 读不出(core:某行 env 的 retain 声明读抛 ⇒ 计数抛)⇒ 按 **1** 计并经 `onUnreadable` 报出 —— 读不出 ⇒ 非空闲,与驻留项同一条律;
|
|
39
39
|
* 本函数在租约拍(定时器回调)、`/health` 与交接口里被调,**不许抛**(定时器里一抛就是 uncaught,一台交接出去的引擎会因此崩掉并收掉它本该留着的 shell)——
|
|
40
|
-
* 报口自己再抛(抛出物转不成文本之类)
|
|
40
|
+
* 报口自己再抛(抛出物转不成文本之类)也一样:落日志出口接缝的文本出口 `writeLogText`(不回同一只报口),读数照返 1。
|
|
41
41
|
* `registry` 只供测试换桩(只用到 `countRunningBackgroundShells`)。
|
|
42
42
|
*/
|
|
43
43
|
export declare function countShellsExitWouldKill(opts: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defaultTaskRegistry } from "@sema-agent/core";
|
|
2
2
|
import { reportHardKillReceipts } from "../background-session-reap.js";
|
|
3
|
+
import { writeLogText } from "../observability/logger.js";
|
|
3
4
|
import { liveHostForegroundChildCount, reapHostForegroundChildren } from "../plugins/host-platform.js";
|
|
4
5
|
import { liveEphemeralHostWorkspaceCount, reapEphemeralHostWorkspaces } from "../plugins/host-workspace-registry.js";
|
|
5
6
|
import { seatText } from "../trace/exit-seat.js";
|
|
@@ -14,7 +15,7 @@ export function countShellsExitWouldKill(opts) {
|
|
|
14
15
|
opts.onUnreadable(err);
|
|
15
16
|
}
|
|
16
17
|
catch (reportErr) {
|
|
17
|
-
|
|
18
|
+
writeLogText("stderr", "engine_handover_shell_count_report_threw", reportErr);
|
|
18
19
|
}
|
|
19
20
|
return 1;
|
|
20
21
|
}
|
|
@@ -70,19 +71,19 @@ export function installProcessExitBoundary({ logger }) {
|
|
|
70
71
|
reapOwnChildProcesses();
|
|
71
72
|
}
|
|
72
73
|
catch (err) {
|
|
73
|
-
|
|
74
|
+
writeLogText("stderr", "shutdown_exit_boundary_child_reap_threw", err);
|
|
74
75
|
}
|
|
75
76
|
try {
|
|
76
77
|
reapBackgroundHard();
|
|
77
78
|
}
|
|
78
79
|
catch (err) {
|
|
79
|
-
|
|
80
|
+
writeLogText("stderr", "shutdown_exit_boundary_background_hard_kill_threw", err);
|
|
80
81
|
}
|
|
81
82
|
try {
|
|
82
83
|
reapOwnHostWorkspaces();
|
|
83
84
|
}
|
|
84
85
|
catch (err) {
|
|
85
|
-
|
|
86
|
+
writeLogText("stderr", "shutdown_exit_boundary_workspace_reap_threw", err);
|
|
86
87
|
}
|
|
87
88
|
const left = { foregroundChildren: liveHostForegroundChildCount(), hostWorkspaces: liveEphemeralHostWorkspaceCount() };
|
|
88
89
|
try {
|
|
@@ -91,7 +92,7 @@ export function installProcessExitBoundary({ logger }) {
|
|
|
91
92
|
logger.warn("shutdown_exit_boundary_incomplete", left);
|
|
92
93
|
}
|
|
93
94
|
catch (err) {
|
|
94
|
-
|
|
95
|
+
writeLogText("stderr", "shutdown_exit_boundary_log_threw", err);
|
|
95
96
|
}
|
|
96
97
|
};
|
|
97
98
|
process.once("exit", onProcessExit);
|
package/dist/boot/exit-last.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { ENGINE_LANES } from "./engine-lease.js";
|
|
5
|
+
import { OWNER_ONLY_FILE_MODE } from "../plugins/owner-only-file-mode.js";
|
|
5
6
|
export const EXIT_LAST_FORMAT = 3;
|
|
6
7
|
const ExitLastSchema = z.object({
|
|
7
8
|
format: z.literal(EXIT_LAST_FORMAT),
|
|
@@ -22,7 +23,7 @@ export function exitLastPath(dataRoot) {
|
|
|
22
23
|
export function writeExitLast(dataRoot, info) {
|
|
23
24
|
try {
|
|
24
25
|
const body = { format: EXIT_LAST_FORMAT, at: new Date().toISOString(), pid: process.pid, ...info };
|
|
25
|
-
writeFileSync(exitLastPath(dataRoot), JSON.stringify(body) + "\n");
|
|
26
|
+
writeFileSync(exitLastPath(dataRoot), JSON.stringify(body) + "\n", { mode: OWNER_ONLY_FILE_MODE });
|
|
26
27
|
}
|
|
27
28
|
catch {
|
|
28
29
|
}
|