@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,3 +1,4 @@
|
|
|
1
|
+
import { writeLogText } from "../observability/logger.js";
|
|
1
2
|
import { spawn } from "node:child_process";
|
|
2
3
|
import os from "node:os";
|
|
3
4
|
import path from "node:path";
|
|
@@ -13,10 +14,12 @@ import { IS_WIN32, resolveHostShell, hostShell, pinHostShell, spawnGroupOptions,
|
|
|
13
14
|
import { BackgroundShellManager, seedMemStream, feedMemStream, drainMemStream } from "./background-shell-support.js";
|
|
14
15
|
import { FileError, NodeExecutionEnv, inheritEnvPolicyProblem, ExecutionError, RemoteExecutionError, RollingTailBuffer, walkSymlinkChain, markTruncated, SchedulerError, BackgroundShellError, } from "@sema-agent/core";
|
|
15
16
|
import { capabilitiesFor } from "../execution-lane-caps.js";
|
|
17
|
+
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
16
18
|
import { LaneHomeSeat, laneHomeRefusal } from "../lane-home-probe.js";
|
|
17
19
|
import { composeHostSubprocessEnv, hostSubprocessEnv, withheldFromHostSubprocess } from "../server-secret-env.js";
|
|
18
20
|
import { nameTooLongCode } from "./remote-env-file-error.js";
|
|
19
21
|
import { trackEphemeralHostWorkspace, untrackEphemeralHostWorkspace } from "./host-workspace-registry.js";
|
|
22
|
+
import { createWorkspaceCustody } from "./workspace-custody.js";
|
|
20
23
|
import { OWNER_ONLY_FILE_MODE } from "./owner-only-file-mode.js";
|
|
21
24
|
const PROVIDER = "host";
|
|
22
25
|
const DEFAULT_COMMAND_TIMEOUT_MS = 30 * 60_000;
|
|
@@ -33,6 +36,8 @@ const unsupported = (op) => ({
|
|
|
33
36
|
ok: false,
|
|
34
37
|
error: new RemoteExecutionError("unsupported", `${op} is not supported on a host target (the operator's own machine — no container boundary, not snapshotable; capabilities.suspendable=false)`),
|
|
35
38
|
});
|
|
39
|
+
const BORROWED = Object.freeze({ kind: "borrowed" });
|
|
40
|
+
const RELEASED = Object.freeze({ kind: "released" });
|
|
36
41
|
const UNSUPPORTED_SCHEDULER_CAPS = {
|
|
37
42
|
supported: false,
|
|
38
43
|
maxScheduledPerScope: 0,
|
|
@@ -79,6 +84,8 @@ export class RemoteHostExecutionEnv {
|
|
|
79
84
|
cfg;
|
|
80
85
|
prepared = false;
|
|
81
86
|
destroyed = false;
|
|
87
|
+
teardown;
|
|
88
|
+
teardownSettled = false;
|
|
82
89
|
spoolRootDir;
|
|
83
90
|
liveFgSpools = new Set();
|
|
84
91
|
inflightFs = new Set();
|
|
@@ -105,7 +112,7 @@ export class RemoteHostExecutionEnv {
|
|
|
105
112
|
const drained = (await Promise.race([settled, deadline])) !== timedOut;
|
|
106
113
|
if (!drained && !this.inflightFsDrainWarned) {
|
|
107
114
|
this.inflightFsDrainWarned = true;
|
|
108
|
-
|
|
115
|
+
writeLogText("stderr", `RemoteHostExecutionEnv.destroy: ${this.inflightFs.size} in-flight filesystem write(s) did not settle within ` +
|
|
109
116
|
`${waitMs}ms — returning from teardown now; removal of ${this.workspaceDir} stays ordered AFTER those writes ` +
|
|
110
117
|
`and will land when they finish (a write that never settles, e.g. a FIFO target inside the workspace, defers it)`);
|
|
111
118
|
}
|
|
@@ -121,20 +128,21 @@ export class RemoteHostExecutionEnv {
|
|
|
121
128
|
this.spoolRootDir = mkdtempSync(path.join(os.tmpdir(), "sema-host-spool-"));
|
|
122
129
|
return this.spoolRootDir;
|
|
123
130
|
}
|
|
124
|
-
|
|
131
|
+
tenure;
|
|
125
132
|
preparing;
|
|
126
133
|
handle;
|
|
127
134
|
constructor(config = {}) {
|
|
128
135
|
if (config.workspaceDir) {
|
|
129
136
|
this.workspaceDir = path.resolve(config.workspaceDir);
|
|
130
|
-
|
|
137
|
+
const shared = config.custody?.sharedRoot;
|
|
138
|
+
this.tenure = shared !== undefined ? { kind: "held", root: path.resolve(shared) } : BORROWED;
|
|
131
139
|
}
|
|
132
140
|
else {
|
|
133
141
|
const base = config.workspaceBase ?? os.tmpdir();
|
|
134
142
|
const id = config.id ?? randomBytes(6).toString("hex");
|
|
135
143
|
const suffix = randomBytes(4).toString("hex");
|
|
136
144
|
this.workspaceDir = path.resolve(base, `sema-host-${sanitizeId(id)}-${suffix}`);
|
|
137
|
-
this.
|
|
145
|
+
this.tenure = { kind: "held", root: this.workspaceDir };
|
|
138
146
|
}
|
|
139
147
|
const inheritEnvProblem = inheritEnvPolicyProblem(config.inheritEnv);
|
|
140
148
|
if (inheritEnvProblem !== undefined)
|
|
@@ -155,6 +163,19 @@ export class RemoteHostExecutionEnv {
|
|
|
155
163
|
if (homeVerdict !== undefined)
|
|
156
164
|
throw laneHomeRefusal(homeVerdict);
|
|
157
165
|
}
|
|
166
|
+
get releasing() {
|
|
167
|
+
return this.teardown;
|
|
168
|
+
}
|
|
169
|
+
get released() {
|
|
170
|
+
return this.teardownSettled;
|
|
171
|
+
}
|
|
172
|
+
leftover = undefined;
|
|
173
|
+
get settled() {
|
|
174
|
+
return this.teardownSettled && this.tenure.kind !== "held";
|
|
175
|
+
}
|
|
176
|
+
get heldWorkspace() {
|
|
177
|
+
return this.tenure.kind === "held" ? this.tenure.root : undefined;
|
|
178
|
+
}
|
|
158
179
|
workspaceHandle() {
|
|
159
180
|
return this.handle;
|
|
160
181
|
}
|
|
@@ -189,9 +210,13 @@ export class RemoteHostExecutionEnv {
|
|
|
189
210
|
return { ok: false, error: new RemoteExecutionError("connect_failed", "execution env already destroyed") };
|
|
190
211
|
return ok(this.handle);
|
|
191
212
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
213
|
+
destroy() {
|
|
214
|
+
this.teardown ??= this.tearDown().finally(() => {
|
|
215
|
+
this.teardownSettled = true;
|
|
216
|
+
});
|
|
217
|
+
return this.teardown;
|
|
218
|
+
}
|
|
219
|
+
async tearDown() {
|
|
195
220
|
this.destroyed = true;
|
|
196
221
|
const p = this.preparing;
|
|
197
222
|
this.preparing = undefined;
|
|
@@ -214,11 +239,15 @@ export class RemoteHostExecutionEnv {
|
|
|
214
239
|
catch { }
|
|
215
240
|
this.spoolRootDir = undefined;
|
|
216
241
|
}
|
|
217
|
-
|
|
242
|
+
const tenure = this.tenure;
|
|
243
|
+
if (tenure.kind !== "held")
|
|
244
|
+
return;
|
|
245
|
+
this.tenure = RELEASED;
|
|
246
|
+
if (this.cfg.custody?.heldElsewhere(this, tenure.root) === true)
|
|
218
247
|
return;
|
|
219
248
|
try {
|
|
220
|
-
await fs.rm(
|
|
221
|
-
untrackEphemeralHostWorkspace(
|
|
249
|
+
await fs.rm(tenure.root, { recursive: true, force: true });
|
|
250
|
+
untrackEphemeralHostWorkspace(tenure.root);
|
|
222
251
|
}
|
|
223
252
|
catch {
|
|
224
253
|
}
|
|
@@ -227,12 +256,13 @@ export class RemoteHostExecutionEnv {
|
|
|
227
256
|
return this.destroy();
|
|
228
257
|
}
|
|
229
258
|
get backgroundCapabilities() {
|
|
259
|
+
const backgroundShellOn = (this.cfg.backgroundShell ?? DEPLOYMENT_SHAPE_PREDICATES.backgroundShell.holds({ remoteExec: { provider: PROVIDER } })) && hostBackgroundShellEnabled();
|
|
230
260
|
return {
|
|
231
|
-
supported:
|
|
261
|
+
supported: backgroundShellOn,
|
|
232
262
|
maxConcurrent: HOST_BG_MAX_CONCURRENT,
|
|
233
263
|
defaultBgTimeoutSec: HOST_BG_DEFAULT_TIMEOUT_SEC,
|
|
234
264
|
maxBgTimeoutSec: HOST_BG_MAX_TIMEOUT_SEC,
|
|
235
|
-
supportsDetach:
|
|
265
|
+
supportsDetach: backgroundShellOn,
|
|
236
266
|
};
|
|
237
267
|
}
|
|
238
268
|
_bgManager;
|
|
@@ -420,14 +450,15 @@ export class RemoteHostExecutionEnv {
|
|
|
420
450
|
const cwd = this.resolve(options?.cwd ?? this.cwd);
|
|
421
451
|
const timeoutMs = options?.timeout != null ? options.timeout * 1000 : this.cfg.commandTimeoutMs;
|
|
422
452
|
const detachSignal = options?.detachSignal;
|
|
453
|
+
const adoptOnTimeout = detachSignal !== undefined && options?.autoBackgroundOnTimeout === true;
|
|
423
454
|
if (!IS_WIN32 && hostExecSpoolEnabled()) {
|
|
424
455
|
const spool = this.openFgSpool();
|
|
425
456
|
if (spool)
|
|
426
|
-
return this.execViaSpool(command, options, cwd, timeoutMs, detachSignal, spool);
|
|
457
|
+
return this.execViaSpool(command, options, cwd, timeoutMs, detachSignal, adoptOnTimeout, spool);
|
|
427
458
|
}
|
|
428
|
-
return this.execViaPipes(command, options, cwd, timeoutMs, detachSignal);
|
|
459
|
+
return this.execViaPipes(command, options, cwd, timeoutMs, detachSignal, adoptOnTimeout);
|
|
429
460
|
}
|
|
430
|
-
execViaPipes(command, options, cwd, timeoutMs, detachSignal) {
|
|
461
|
+
execViaPipes(command, options, cwd, timeoutMs, detachSignal, adoptOnTimeout) {
|
|
431
462
|
return new Promise((resolve) => {
|
|
432
463
|
const outBuf = new RollingTailBuffer();
|
|
433
464
|
const errBuf = new RollingTailBuffer();
|
|
@@ -466,6 +497,8 @@ export class RemoteHostExecutionEnv {
|
|
|
466
497
|
forceSettleTimer ??= armPipeDestroyGrace(child);
|
|
467
498
|
};
|
|
468
499
|
const timer = setTimeout(() => {
|
|
500
|
+
if (adoptOnTimeout && onDetach("timeout"))
|
|
501
|
+
return;
|
|
469
502
|
kill();
|
|
470
503
|
finish({ ok: false, error: createCutError({ code: "timeout", message: `host exec exceeded ${timeoutMs}ms` }, buildCapturedOutput(outBuf, errBuf)) });
|
|
471
504
|
}, timeoutMs);
|
|
@@ -475,9 +508,9 @@ export class RemoteHostExecutionEnv {
|
|
|
475
508
|
};
|
|
476
509
|
if (options?.abortSignal)
|
|
477
510
|
options.abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
478
|
-
const onDetach = () => {
|
|
511
|
+
const onDetach = (cause) => {
|
|
479
512
|
if (settled)
|
|
480
|
-
return;
|
|
513
|
+
return false;
|
|
481
514
|
const out = outBuf.result();
|
|
482
515
|
const err = errBuf.result();
|
|
483
516
|
child.stdout?.off("data", onExecOut);
|
|
@@ -488,15 +521,17 @@ export class RemoteHostExecutionEnv {
|
|
|
488
521
|
if (shellId === undefined) {
|
|
489
522
|
child.stdout?.on("data", onExecOut);
|
|
490
523
|
child.stderr?.on("data", onExecErr);
|
|
491
|
-
return;
|
|
524
|
+
return false;
|
|
492
525
|
}
|
|
493
526
|
clearTimeout(timer);
|
|
494
527
|
if (forceSettleTimer)
|
|
495
528
|
clearTimeout(forceSettleTimer);
|
|
496
529
|
options?.abortSignal?.removeEventListener("abort", onAbort);
|
|
530
|
+
removeDetachListener?.();
|
|
497
531
|
ticket?.release();
|
|
498
532
|
settled = true;
|
|
499
|
-
resolve(ok({ stdout: seedOut, stderr: seedErr, exitCode: 0, detached: { shellId } }));
|
|
533
|
+
resolve(ok({ stdout: seedOut, stderr: seedErr, exitCode: 0, detached: { shellId, ...(cause !== undefined ? { cause } : {}) } }));
|
|
534
|
+
return true;
|
|
500
535
|
};
|
|
501
536
|
const onExecOut = (d) => { outBuf.push(d); if (tee)
|
|
502
537
|
feedMemStream(tee.out, d, HOST_BG_MEM_CAP); options?.onStdout?.(d.toString()); };
|
|
@@ -505,11 +540,12 @@ export class RemoteHostExecutionEnv {
|
|
|
505
540
|
child.stdout?.on("data", onExecOut);
|
|
506
541
|
child.stderr?.on("data", onExecErr);
|
|
507
542
|
if (detachSignal) {
|
|
543
|
+
const onDetachSignal = () => void onDetach();
|
|
508
544
|
if (detachSignal.aborted)
|
|
509
|
-
|
|
545
|
+
onDetachSignal();
|
|
510
546
|
else {
|
|
511
|
-
detachSignal.addEventListener("abort",
|
|
512
|
-
removeDetachListener = () => detachSignal.removeEventListener("abort",
|
|
547
|
+
detachSignal.addEventListener("abort", onDetachSignal, { once: true });
|
|
548
|
+
removeDetachListener = () => detachSignal.removeEventListener("abort", onDetachSignal);
|
|
513
549
|
}
|
|
514
550
|
}
|
|
515
551
|
child.on("error", (e) => {
|
|
@@ -550,7 +586,7 @@ export class RemoteHostExecutionEnv {
|
|
|
550
586
|
return undefined;
|
|
551
587
|
}
|
|
552
588
|
}
|
|
553
|
-
execViaSpool(command, options, cwd, timeoutMs, detachSignal, spool) {
|
|
589
|
+
execViaSpool(command, options, cwd, timeoutMs, detachSignal, adoptOnTimeout, spool) {
|
|
554
590
|
const EXIT_SETTLE_DRAIN_MS = 500;
|
|
555
591
|
const PUMP_MS = 200;
|
|
556
592
|
const ROTATE_BYTES = 8 * 1024 * 1024;
|
|
@@ -740,7 +776,11 @@ export class RemoteHostExecutionEnv {
|
|
|
740
776
|
return { ok: false, error: createCutError(c, captured()) };
|
|
741
777
|
});
|
|
742
778
|
};
|
|
743
|
-
const timer = setTimeout(() =>
|
|
779
|
+
const timer = setTimeout(() => {
|
|
780
|
+
if (adoptOnTimeout && onDetach("timeout"))
|
|
781
|
+
return;
|
|
782
|
+
cut({ code: "timeout", message: `host exec exceeded ${timeoutMs}ms` });
|
|
783
|
+
}, timeoutMs);
|
|
744
784
|
const onAbort = () => cut({ code: "aborted", message: "host exec aborted" });
|
|
745
785
|
if (options?.abortSignal?.aborted) {
|
|
746
786
|
onAbort();
|
|
@@ -750,29 +790,30 @@ export class RemoteHostExecutionEnv {
|
|
|
750
790
|
options.abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
751
791
|
pump = setInterval(() => pumpOnce(feed), PUMP_MS);
|
|
752
792
|
pump.unref?.();
|
|
753
|
-
const onDetach = () => {
|
|
793
|
+
const onDetach = (cause) => {
|
|
754
794
|
if (settled || exited)
|
|
755
|
-
return;
|
|
795
|
+
return false;
|
|
756
796
|
pumpOnce(feed);
|
|
757
797
|
if (settled)
|
|
758
|
-
return;
|
|
798
|
+
return false;
|
|
759
799
|
const fgDropped = spoolRemoved.out + spoolRemoved.err;
|
|
760
800
|
const shellId = this.adoptRunningExecSpool(child, spool, { out: 0, err: 0 }, fgDropped);
|
|
761
801
|
if (shellId === undefined)
|
|
762
|
-
return;
|
|
802
|
+
return false;
|
|
763
803
|
handedOver = true;
|
|
764
|
-
finish(() => {
|
|
804
|
+
return finish(() => {
|
|
765
805
|
const o = outBuf.result();
|
|
766
806
|
const e = errBuf.result();
|
|
767
|
-
return ok({ stdout: markTruncated(o.text, o.droppedBytes), stderr: markTruncated(e.text, e.droppedBytes), exitCode: 0, detached: { shellId } });
|
|
807
|
+
return ok({ stdout: markTruncated(o.text, o.droppedBytes), stderr: markTruncated(e.text, e.droppedBytes), exitCode: 0, detached: { shellId, ...(cause !== undefined ? { cause } : {}) } });
|
|
768
808
|
});
|
|
769
809
|
};
|
|
770
810
|
if (detachSignal) {
|
|
811
|
+
const onDetachSignal = () => void onDetach();
|
|
771
812
|
if (detachSignal.aborted)
|
|
772
|
-
|
|
813
|
+
onDetachSignal();
|
|
773
814
|
else {
|
|
774
|
-
detachSignal.addEventListener("abort",
|
|
775
|
-
removeDetachListener = () => detachSignal.removeEventListener("abort",
|
|
815
|
+
detachSignal.addEventListener("abort", onDetachSignal, { once: true });
|
|
816
|
+
removeDetachListener = () => detachSignal.removeEventListener("abort", onDetachSignal);
|
|
776
817
|
}
|
|
777
818
|
}
|
|
778
819
|
const settleFromTermination = (code, signal) => {
|
|
@@ -1239,7 +1280,7 @@ export class RemoteHostExecutionEnv {
|
|
|
1239
1280
|
ensurePrepared() {
|
|
1240
1281
|
if (this.prepared)
|
|
1241
1282
|
return Promise.resolve();
|
|
1242
|
-
if (
|
|
1283
|
+
if (this.cfg.workspaceDir === undefined) {
|
|
1243
1284
|
try {
|
|
1244
1285
|
this.assertWorkspaceParentWritable();
|
|
1245
1286
|
}
|
|
@@ -1252,8 +1293,8 @@ export class RemoteHostExecutionEnv {
|
|
|
1252
1293
|
.mkdir(this.workspaceDir, { recursive: true })
|
|
1253
1294
|
.then(() => {
|
|
1254
1295
|
this.prepared = true;
|
|
1255
|
-
if (
|
|
1256
|
-
trackEphemeralHostWorkspace(this.
|
|
1296
|
+
if (this.tenure.kind === "held")
|
|
1297
|
+
trackEphemeralHostWorkspace(this.tenure.root);
|
|
1257
1298
|
})
|
|
1258
1299
|
.catch((e) => {
|
|
1259
1300
|
this.preparing = undefined;
|
|
@@ -1293,7 +1334,7 @@ export class RemoteHostExecutionEnv {
|
|
|
1293
1334
|
const rel = path.relative(real(root), real(abs));
|
|
1294
1335
|
return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
1295
1336
|
};
|
|
1296
|
-
return (this.spoolRootDir !== undefined && inside(this.spoolRootDir)) || (this.
|
|
1337
|
+
return (this.spoolRootDir !== undefined && inside(this.spoolRootDir)) || (this.tenure.kind === "borrowed" && inside(this.workspaceDir));
|
|
1297
1338
|
}
|
|
1298
1339
|
async fsReady(p, opts) {
|
|
1299
1340
|
if (this.destroyed) {
|
|
@@ -1377,11 +1418,39 @@ function asError(e) {
|
|
|
1377
1418
|
function signalNumber(signal) {
|
|
1378
1419
|
return os.constants.signals[signal];
|
|
1379
1420
|
}
|
|
1380
|
-
export function hostExecutionEnvFactory(config = {}) {
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1421
|
+
export function hostExecutionEnvFactory(config = {}, legOf = () => ({})) {
|
|
1422
|
+
const custody = createWorkspaceCustody();
|
|
1423
|
+
const heldElsewhere = (self, root) => custody.holder((m) => m !== self && m.heldWorkspace === root) !== undefined;
|
|
1424
|
+
return (ctx) => {
|
|
1425
|
+
const { minted, ...leg } = legOf(ctx);
|
|
1426
|
+
const identity = ctx.taskId ?? ctx.sessionId;
|
|
1427
|
+
return custody.envOf(identity, () => {
|
|
1428
|
+
const dir = leg.workspaceDir ?? config.workspaceDir;
|
|
1429
|
+
const sharedRoot = dir === undefined ? undefined : custody.holder((m) => m.heldWorkspace !== undefined && dirWithin(dir, m.heldWorkspace))?.heldWorkspace;
|
|
1430
|
+
const env = new RemoteHostExecutionEnv({ ...config, ...leg, id: config.id ?? identity, custody: { heldElsewhere, ...(sharedRoot !== undefined ? { sharedRoot } : {}) } });
|
|
1431
|
+
minted?.(env);
|
|
1432
|
+
return env;
|
|
1433
|
+
});
|
|
1434
|
+
};
|
|
1435
|
+
}
|
|
1436
|
+
function dirWithin(dir, root) {
|
|
1437
|
+
const inside = (d, r) => {
|
|
1438
|
+
const rel = path.relative(r, d);
|
|
1439
|
+
return rel === "" || (rel.split(path.sep)[0] !== ".." && !path.isAbsolute(rel));
|
|
1440
|
+
};
|
|
1441
|
+
return inside(path.resolve(dir), path.resolve(root)) || inside(physicalPathOf(dir), physicalPathOf(root));
|
|
1442
|
+
}
|
|
1443
|
+
function physicalPathOf(p) {
|
|
1444
|
+
let head = path.resolve(p);
|
|
1445
|
+
const tail = [];
|
|
1446
|
+
while (!existsSync(head)) {
|
|
1447
|
+
const up = path.dirname(head);
|
|
1448
|
+
if (up === head)
|
|
1449
|
+
return path.resolve(p);
|
|
1450
|
+
tail.unshift(path.basename(head));
|
|
1451
|
+
head = up;
|
|
1452
|
+
}
|
|
1453
|
+
return path.join(realpathSync(head), ...tail);
|
|
1385
1454
|
}
|
|
1386
1455
|
export { localDockerExecutionEnvFactory, RemoteLocalDockerExecutionEnv } from "./remote-env-local-docker.js";
|
|
1387
1456
|
//# sourceMappingURL=remote-env-host.js.map
|
|
@@ -2,7 +2,7 @@ import { type SpaceReclaimer, type WorkspaceSpacePolicy, type CacheReclaimReason
|
|
|
2
2
|
import { type SpaceCommitFence } from "../workspace-space-commit.js";
|
|
3
3
|
import { type CacheMissMemory, type WorkspaceCacheCapability } from "../workspace-cache.js";
|
|
4
4
|
import { type SandboxEgressGap, type SandboxIpv6 } from "../sandbox-egress-policy.js";
|
|
5
|
-
import { FileError, ExecutionError, RemoteExecutionError, type ExecutionEnv, type RemoteExecutionEnv, type WorkspaceHandle, type FileInfo, type Result, type SymlinkChain, type OutputChunk, type ExecStreamOptions, type RemoteConnectConfig, type SnapshotId, type SessionToken, type VmLifecycleOptions, type ExecutionEnvFactory, type BackgroundShellCapability, type BackgroundShellId, type BackgroundShellError, type BackgroundSpawnOptions, type BackgroundPoll, type ExecutionEnvCapabilities } from "@sema-agent/core";
|
|
5
|
+
import { FileError, ExecutionError, RemoteExecutionError, type ExecutionEnv, type ExecResult, type RemoteExecutionEnv, type WorkspaceHandle, type FileInfo, type Result, type SymlinkChain, type OutputChunk, type ExecStreamOptions, type RemoteConnectConfig, type SnapshotId, type SessionToken, type VmLifecycleOptions, type ExecutionEnvFactory, type BackgroundShellCapability, type BackgroundShellId, type BackgroundShellError, type BackgroundSpawnOptions, type BackgroundPoll, type ExecutionEnvCapabilities } from "@sema-agent/core";
|
|
6
6
|
import { type SandboxReadFloorKnob } from "../execution-lane-caps.js";
|
|
7
7
|
import { type SandboxReadFloor } from "./sandbox-read-floor.js";
|
|
8
8
|
import type { PodSpecPatch } from "./k8s-exec-protocol.js";
|
|
@@ -207,7 +207,7 @@ export interface K8sEnvDeps {
|
|
|
207
207
|
}>;
|
|
208
208
|
openExec?: (url: string, headers: Record<string, string>) => ExecSocket;
|
|
209
209
|
connectOnce?: (signal?: AbortSignal) => Promise<ConnectResult>;
|
|
210
|
-
/** Worker-side object-store requests (the space pointer, listing, deletes). Default: global `fetch
|
|
210
|
+
/** Worker-side object-store requests (the space pointer, listing, deletes). Default: global `fetch`; either way the request goes out through the egress exit (an endpoint that answers with a redirect is refused, never followed). */
|
|
211
211
|
fetch?: typeof fetch;
|
|
212
212
|
/** 这只环境手里的读地板模块(缺席 ⇒ `createSandboxReadFloor` 按旋钮选;钉注入守地板的模块)。能力块的 `keepsReadFloor` 读它的状态。 */
|
|
213
213
|
readFloor?: SandboxReadFloor;
|
|
@@ -308,9 +308,6 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
308
308
|
private readonly floor;
|
|
309
309
|
cwd: string;
|
|
310
310
|
private podName?;
|
|
311
|
-
/** Cluster-internal pod address, captured when the pod reaches Running — the LSP `getHost` surface.
|
|
312
|
-
* Lifecycle mirrors podName exactly (set on connect, cleared on suspend/destroy/dead-reconnect). */
|
|
313
|
-
private podIP?;
|
|
314
311
|
/** The broker lease seat of the pod this env holds (set with {@link podName}; read through {@link sandboxLeaseRef}). */
|
|
315
312
|
private leaseRef?;
|
|
316
313
|
private destroyed;
|
|
@@ -586,24 +583,33 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
586
583
|
/** Worker-side object-store request, bounded by the control-plane RPC wall-clock — or a tighter caller deadline — and
|
|
587
584
|
* the caller's abort. */
|
|
588
585
|
private storeFetch;
|
|
589
|
-
/** Read one space pointer object: its trimmed body, or `undefined` = absent (404 — the bucket is there, the key is
|
|
590
|
-
* `NoSuchBucket` is NOT absence — the bucket itself is missing
|
|
591
|
-
* `connect_failed` naming the pointer. */
|
|
586
|
+
/** Read one space pointer object — the ONE reading of a pointer answer: its trimmed body, or `undefined` = absent (404 — the bucket is there, the key is
|
|
587
|
+
* not); a 404 that says `NoSuchBucket` is NOT absence — the bucket itself is missing (`bucketMissing`; what that means is the caller's: a connect refuses
|
|
588
|
+
* the run, {@link readLatest}; a write's read-back reads it as not done, {@link writePointer}); any other failure is a typed `connect_failed` naming the pointer. */
|
|
592
589
|
private readPointer;
|
|
593
590
|
/**
|
|
594
|
-
* The store answered the `latest` read
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
591
|
+
* The store answered `404 NoSuchBucket` — to the space's `latest` read (`read: "pointer"`) or to a restore's archive GET (`read: "archive"`, either lane:
|
|
592
|
+
* the pod relays the store's answer, {@link restoreSnapshot}): the workspace snapshot bucket does not exist, so this workspace can be neither restored nor
|
|
593
|
+
* saved — a run started on it would work on an empty /workspace and lose everything it wrote. One fact, one consequence on both lanes and both reads: the
|
|
594
|
+
* env's refusal ({@link holdRefusal}) naming the bucket and the knob that picks it — the pointer read in the one space-read failure form ({@link spaceReadFailed}),
|
|
595
|
+
* the archive read in the same words — and one `workspace_snapshot_bucket_missing{bucket, code, effect}` line per env, carrying `space` on the space lane and
|
|
596
|
+
* `sessionId` on the park lane (the refusal stands until destroy: later connects and operations answer it without another read or line; a retry of the run
|
|
597
|
+
* builds a fresh env, which asks the store afresh — a bucket created in between is found). The boot probe (`snapshot-bucket-presence.ts`) refuses a boot
|
|
598
|
+
* where the bucket is already missing; this is the same judgement ({@link isNoSuchBucketAnswer}) for a bucket that went missing afterwards or that the probe
|
|
599
|
+
* could not prove either way.
|
|
600
600
|
*/
|
|
601
601
|
private refuseMissingBucket;
|
|
602
|
-
/** Read the space's `latest` pointer. The body's shape is checked
|
|
603
|
-
* (the one segment check). */
|
|
602
|
+
/** Read the space's `latest` pointer for a connect: a `NoSuchBucket` answer refuses the run ({@link refuseMissingBucket}). The body's shape is checked
|
|
603
|
+
* where it is used — restoreSnapshot → presignSnapshot (the one segment check). */
|
|
604
604
|
private readLatest;
|
|
605
605
|
/** PUT one space pointer object (a single-object PUT replaces the object atomically) or DELETE it; `timeoutMs` = a
|
|
606
|
-
* caller deadline tighter than the RPC bound.
|
|
606
|
+
* caller deadline tighter than the RPC bound. The outcome is what an answer the worker holds proves: the store's own answer to the request
|
|
607
|
+
* when it reached the worker (2xx — or 404 to a DELETE — ⇒ done; any other status ⇒ not done); a request whose answer did NOT reach the worker
|
|
608
|
+
* (it threw: a reset, the bound, a refused redirect) may have taken effect all the same ⇒ decided by reading the pointer back ({@link readPointer},
|
|
609
|
+
* the one pointer reading): it names `body` (a DELETE: it is absent) ⇒ done; anything else, or a read-back that fails ⇒ not done. The read-back decides
|
|
610
|
+
* only INSIDE the caller's deadline (`timeoutMs`, counted from the call): the commit's deadline is its fence's, and past it a next run may already have
|
|
611
|
+
* abandoned this commit and be restoring the previous `latest` — a write seen landing after that is not this commit's to call done (its `done` would
|
|
612
|
+
* let the commit prune the archive that run is restoring). No time left, or a read-back that answers after the deadline ⇒ not done. */
|
|
607
613
|
private writePointer;
|
|
608
614
|
/**
|
|
609
615
|
* Wait out the previous run's space commit — its row in the run store's `workspace_space_commit` (the ONE seat of
|
|
@@ -649,12 +655,20 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
649
655
|
error: RemoteExecutionError;
|
|
650
656
|
}>;
|
|
651
657
|
/**
|
|
652
|
-
* The ONE tar upload (both lanes): tar the workspace to a pod-local file, presigned PUT into the lane's namespace,
|
|
653
|
-
* release the pod. `suspendVM` = lane `park`; the run-end space snapshot = lane `space` (its open space). The exclusion
|
|
658
|
+
* The ONE tar upload (both lanes): tar the workspace to a pod-local file, presigned PUT into the lane's namespace, read the object back
|
|
659
|
+
* ({@link archiveStored} — the ONE success judgement), release the pod. `suspendVM` = lane `park`; the run-end space snapshot = lane `space` (its open space). The exclusion
|
|
654
660
|
* table (`snapshotExclude`) is applied HERE and nowhere else — each item one `--exclude=./<item>` argument through the one
|
|
655
661
|
* `shellQuote`, anchored at the workspace root (`-C <mount> .` names every member `./…`); no table ⇒ the command as it always was.
|
|
656
662
|
*/
|
|
657
663
|
private uploadSnapshot;
|
|
664
|
+
/**
|
|
665
|
+
* Is the archive the upload just wrote in the store? — a presigned HEAD of the object, sent by the worker: the ONE success judgement of the tar upload
|
|
666
|
+
* (both lanes; the space lane moves `latest` only after it, the park lane hands the id to the engine only after it). The id is minted fresh for this
|
|
667
|
+
* upload, and an object PUT is atomic, so an object under it is this upload, whole. 2xx ⇒ stored; any other status, or a request that failed (a
|
|
668
|
+
* redirect is refused by the store egress) ⇒ not proven, a failed upload. `timeoutMs` = what is left of the upload's bound (the save's one data
|
|
669
|
+
* bound covers its proof too); none left ⇒ not proven. `why` never carries the presigned URL.
|
|
670
|
+
*/
|
|
671
|
+
private archiveStored;
|
|
658
672
|
/**
|
|
659
673
|
* Resume a parked run's workspace onto a FRESH pod (resume = executionEnvFactory rebuild + resumeVM). Where the leg's workspace comes from is
|
|
660
674
|
* read off the park's snapshot id — it says what the park packed ({@link snapshotIdHolds}), never guessed from what the store answers:
|
|
@@ -679,9 +693,11 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
679
693
|
/**
|
|
680
694
|
* The ONE tar download (both lanes): provision a FRESH pod, download + untar the lane's archive into the workspace. Only an id that names an
|
|
681
695
|
* archive reaches it ({@link snapshotIdHolds}: a park that packed nothing resumes through {@link establish}; `latest` names only an object
|
|
682
|
-
* that was written).
|
|
683
|
-
* bucket
|
|
684
|
-
*
|
|
696
|
+
* that was written). A 404 is read off the store's own answer, which the pod relays ({@link RESTORE_404_MARKER}): `NoSuchBucket` ({@link isNoSuchBucketAnswer})
|
|
697
|
+
* ⇒ the bucket itself is missing — the pod is released and the env refused, both lanes ({@link refuseMissingBucket}, never an empty workspace); any other 404
|
|
698
|
+
* is a missing archive, one fact on both lanes — the restore point names data that is gone (removed later, by the bucket's lifecycle rule or a hand) ⇒
|
|
699
|
+
* loud and continuable, ONE rule: {@link dropDangling} (one `workspace_latest_dangling` line), and the run continues on the clean workspace, origin
|
|
700
|
+
* `minted` (no restorable tree ⇒ the restore point seeds it, exactly as on a fresh connect).
|
|
685
701
|
* An attempt that does not complete releases the pod it provisioned: no tool and no run-end snapshot may ever see a torn
|
|
686
702
|
* workspace. A transient class ({@link restoreFailureIsTransient}) is tried again on a fresh pod after the `retry.backoffMs`
|
|
687
703
|
* pause, up to the lane's {@link RESTORE_MAX_ATTEMPTS}; a non-transient one ends the restore at once. The lane then says what
|
|
@@ -713,7 +729,7 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
713
729
|
/**
|
|
714
730
|
* Honest post-resume consistency ([ref] §5 council #8): the workspace FILES are restored byte-for-byte
|
|
715
731
|
* from the snapshot, so read-before-edit hashing already lines up — there's nothing to re-fetch. In-VM
|
|
716
|
-
* process state (a
|
|
732
|
+
* process state (a background process) is gone by design; whoever needs it re-establishes it lazily. So
|
|
717
733
|
* this is a successful no-op rather than the previous `unsupported` (which forced a cold rebuild).
|
|
718
734
|
*/
|
|
719
735
|
postResumeInit(): Promise<{
|
|
@@ -798,33 +814,12 @@ export declare class RemoteK8sExecutionEnv implements RemoteExecutionEnv, Backgr
|
|
|
798
814
|
* kill the remote process (disposable-pod posture, see header).
|
|
799
815
|
*/
|
|
800
816
|
private runExec;
|
|
801
|
-
exec(command: string, options?: ExecOpts): Promise<Result<
|
|
802
|
-
stdout: string;
|
|
803
|
-
stderr: string;
|
|
804
|
-
exitCode: number;
|
|
805
|
-
detached?: {
|
|
806
|
-
shellId: string;
|
|
807
|
-
};
|
|
808
|
-
}, ExecutionError>>;
|
|
817
|
+
exec(command: string, options?: ExecOpts): Promise<Result<ExecResult, ExecutionError>>;
|
|
809
818
|
/** 文件面探针的 exec(车PL 验修 ③):只用绝对路径,**不进工作目录**、没有 cwd 守卫 —— 工作目录进不去时探针照样答真话(`permission_denied` /
|
|
810
819
|
* `not_found` 由命令自己的 stderr 归),core 的 `isDeadCwd` 不会把「进不去」读成「没了」。 */
|
|
811
820
|
private fsExec;
|
|
812
821
|
/** buffered exec 的唯一体:`call` 定了整串、stderr 的 started 行剥法与收口(`remote-shell.ts` `createCwdGuardedCall`)。 */
|
|
813
822
|
private execCall;
|
|
814
|
-
/**
|
|
815
|
-
* LSP surface (lsp/manager.ts `isLspCapable` duck-type, [ref] §13.1): cluster-internal address for a
|
|
816
|
-
* port on the sandbox pod. The E2B counterpart returns a public proxy host; a pod has none — the WORKER
|
|
817
|
-
* must be able to reach pod IPs (in-cluster deployment, or on-node), and the transport is plain `ws://`
|
|
818
|
-
* (cluster network, no TLS — the per-session bridge token still gates access like on E2B).
|
|
819
|
-
*/
|
|
820
|
-
getHost(port: number): Promise<string | undefined>;
|
|
821
|
-
/**
|
|
822
|
-
* Start a long-lived helper (the LSP bridge) detached from this exec session. Unlike E2B — which reaps a
|
|
823
|
-
* foreground command's process group on completion, forcing a native background API — k8s exec just closes
|
|
824
|
-
* the session: a `nohup`'d child with detached stdio survives, reparented to the container's PID 1 (the
|
|
825
|
-
* gate#2 background-gradle runs proved this through the production path). Output goes to /tmp for postmortem.
|
|
826
|
-
*/
|
|
827
|
-
startBackground(command: string): Promise<void>;
|
|
828
823
|
execStream(command: string, options?: ExecStreamOptions): AsyncIterable<OutputChunk>;
|
|
829
824
|
/**
|
|
830
825
|
* A background job cannot outlive its pod (`activeDeadlineSeconds` ≈ `timeoutMs`), so the BG ceiling is clamped to
|