@sema-agent/server 7.43.0 → 7.44.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/USAGE.md +18 -0
- package/dist/adoption/plan.js +31 -192
- package/dist/adoption/quiesce.js +3 -86
- package/dist/adoption/runner.js +3 -140
- package/dist/adoption/sql.js +0 -74
- package/dist/adoption/wire.js +0 -80
- package/dist/approval-ask-machine.js +0 -75
- package/dist/approval-card.js +0 -323
- package/dist/approval-deny-reasons.js +0 -42
- package/dist/approval-hmac.js +0 -35
- package/dist/approval-reconciler.js +8 -166
- package/dist/approval.js +4 -67
- package/dist/audit.js +1 -44
- package/dist/auth-bridge.js +4 -47
- package/dist/auth-keys.js +0 -23
- package/dist/bake-runner/main.js +4 -65
- package/dist/bake-runner/protocol.js +3 -58
- package/dist/bake-runner/runner.js +5 -91
- package/dist/bench/l8/artifact.js +2 -61
- package/dist/bench/l8/escape.js +0 -25
- package/dist/bench/l8/index.js +0 -14
- package/dist/bench/l8/probes.js +0 -60
- package/dist/bench/l8/run-probes.js +2 -45
- package/dist/bench/s1/arms.js +14 -189
- package/dist/bench/s1/live-deps.js +11 -253
- package/dist/bench/s1/oracle.js +1 -36
- package/dist/bench/s1/repair-oracle-adapter.js +0 -30
- package/dist/bench/s1/reviewer.js +0 -34
- package/dist/bench/s1/row.js +0 -62
- package/dist/bench/s1/run-firm.js +4 -70
- package/dist/bench/s1/runner-ctx.js +0 -40
- package/dist/bench/s1/tasks.js +0 -115
- package/dist/boot/adoption.js +0 -20
- package/dist/boot/budget-tracing.js +3 -55
- package/dist/boot/config-center.js +43 -551
- package/dist/boot/coordinators.js +1 -69
- package/dist/boot/crash-last.js +0 -18
- package/dist/boot/deferred-sandbox-path-env.js +3 -119
- package/dist/boot/execution-env.js +5 -171
- package/dist/boot/governance-seams.js +0 -92
- package/dist/boot/leader.js +0 -69
- package/dist/boot/limit-sync.js +0 -2
- package/dist/boot/memory-boundary.js +3 -91
- package/dist/boot/org-memory.js +1 -25
- package/dist/boot/parked-revive-gate.js +0 -150
- package/dist/boot/permission-rules-audit.js +1 -56
- package/dist/boot/reapers.js +15 -273
- package/dist/boot/resolve-spec.js +9 -768
- package/dist/boot/retention-lane.js +4 -87
- package/dist/boot/runner-deps.js +3 -297
- package/dist/boot/runtime-caps.js +0 -40
- package/dist/boot/session-faces.js +2 -133
- package/dist/boot/shutdown.js +9 -83
- package/dist/boot/side-query-lane.js +2 -137
- package/dist/boot/stores.js +15 -215
- package/dist/boot/task-list-lane.js +0 -18
- package/dist/boot/webfetch-summarize-lane.js +0 -47
- package/dist/boot/workflow-orchestration.js +3 -99
- package/dist/boot-reclaim.js +0 -20
- package/dist/bounded-session-map.js +0 -19
- package/dist/brain.js +2 -139
- package/dist/budget.js +9 -244
- package/dist/capabilities/builtin-tools.js +0 -3
- package/dist/capabilities/center-plugins.js +6 -51
- package/dist/capabilities/center-prompts.js +6 -71
- package/dist/capabilities/code-review-council.js +7 -40
- package/dist/capabilities/collab-workflows.js +1 -44
- package/dist/capabilities/hands-lane.js +0 -65
- package/dist/capabilities/memory-notice.js +0 -70
- package/dist/capabilities/prompt.js +0 -14
- package/dist/capabilities/prompts/code-review.js +0 -14
- package/dist/capabilities/prompts/identity.js +0 -6
- package/dist/capabilities/prompts/team.js +0 -4
- package/dist/capabilities/repo-tools.js +0 -34
- package/dist/capabilities/sandbox-file-send.js +3 -92
- package/dist/capabilities/scenarios.d.ts +0 -1
- package/dist/capabilities/scenarios.js +18 -279
- package/dist/capabilities/select-environment-tool.js +0 -32
- package/dist/capabilities/send-user-file-tool.js +2 -66
- package/dist/capabilities/skills.d.ts +1 -2
- package/dist/capabilities/skills.js +3 -21
- package/dist/capabilities/team.d.ts +3 -11
- package/dist/capabilities/team.js +3 -51
- package/dist/capabilities/tool-defer.js +0 -3
- package/dist/config-center/apply-effective.js +15 -330
- package/dist/config-center/apply-ledger.js +5 -38
- package/dist/config-center/facade.js +0 -41
- package/dist/config-center/hot-keys-registry.js +0 -20
- package/dist/config-center/http-client.js +2 -125
- package/dist/config-center/mcp-revocation.js +2 -34
- package/dist/config-center/read-face.js +0 -59
- package/dist/config-center/restart-signal.js +1 -85
- package/dist/config-center/skills-mcp.d.ts +1 -1
- package/dist/config-center/skills-mcp.js +9 -76
- package/dist/config-center/stage-limits.js +8 -35
- package/dist/config-invariants.js +0 -16
- package/dist/config-lkg.js +0 -42
- package/dist/config-provider.js +3 -186
- package/dist/config-types.js +0 -5
- package/dist/config.js +107 -1145
- package/dist/degenerate-instrument.js +3 -67
- package/dist/deployment-governance.js +0 -124
- package/dist/digest-form.js +0 -12
- package/dist/elicitation.js +3 -86
- package/dist/env-facts.js +7 -75
- package/dist/fleet/fleet-bus.js +34 -507
- package/dist/fleet/fleet-reconciler.js +9 -149
- package/dist/fleet/fleet-terminal-window.js +10 -178
- package/dist/fleet/subagent-tail-bus.js +3 -72
- package/dist/fleet-client.js +10 -70
- package/dist/fleet-lease.js +5 -79
- package/dist/git-api-kind.js +0 -3
- package/dist/governance-ask-marks.js +2 -78
- package/dist/hooks/branch-transcript.js +0 -74
- package/dist/hooks/cc-agent-hook-prompt.js +0 -29
- package/dist/hooks/cc-stop-prompt.js +1 -46
- package/dist/hooks/hook-llm.js +1 -53
- package/dist/hooks/hook-runner.js +20 -414
- package/dist/http/active-run-conflict.js +4 -129
- package/dist/http/cursor-fingerprint.d.ts +5 -0
- package/dist/http/cursor-fingerprint.js +5 -0
- package/dist/http/idempotency.js +0 -37
- package/dist/http/principal-gate.js +3 -40
- package/dist/http/route-ctx.js +0 -9
- package/dist/http/routes/a2a-serve.js +7 -319
- package/dist/http/routes/admin-config-refresh.js +0 -4
- package/dist/http/routes/admin-drain.js +0 -10
- package/dist/http/routes/adoption.js +1 -29
- package/dist/http/routes/agents-roster.js +1 -47
- package/dist/http/routes/approvals-assistant.js +32 -395
- package/dist/http/routes/attachments.js +4 -22
- package/dist/http/routes/capabilities.js +3 -420
- package/dist/http/routes/diagnostics.js +1 -81
- package/dist/http/routes/fleet.js +9 -185
- package/dist/http/routes/images.js +14 -239
- package/dist/http/routes/leader.js +0 -13
- package/dist/http/routes/memory-bundle.js +1 -61
- package/dist/http/routes/memory-policy.js +9 -99
- package/dist/http/routes/notify-wake.js +3 -37
- package/dist/http/routes/observability.js +2 -19
- package/dist/http/routes/retention-ops.js +2 -34
- package/dist/http/routes/rules.js +1 -93
- package/dist/http/routes/runs.js +64 -873
- package/dist/http/routes/session-sync.js +19 -258
- package/dist/http/routes/sessions-list.js +17 -43
- package/dist/http/routes/sessions.js +34 -226
- package/dist/http/routes/shared-memory.js +5 -36
- package/dist/http/routes/side-query.js +1 -87
- package/dist/http/routes/tasks.js +52 -722
- package/dist/http/routes/trace-usage.js +32 -195
- package/dist/http/routes/workflows.js +19 -195
- package/dist/http/run-meta.js +0 -6
- package/dist/http/send.js +0 -32
- package/dist/http/server.js +92 -1597
- package/dist/http/sse-lifecycle.js +2 -13
- package/dist/http/sse-log.js +3 -48
- package/dist/http/tar.js +5 -21
- package/dist/http/verify-rounds.js +0 -5
- package/dist/http/wire-gate.js +0 -9
- package/dist/http/workspace-content.js +0 -10
- package/dist/images/bake-validate.js +1 -70
- package/dist/images/manifest.js +1 -6
- package/dist/index.js +0 -21
- package/dist/key-resolver.js +2 -17
- package/dist/leader/diffout.js +1 -20
- package/dist/leader/diffup.js +0 -47
- package/dist/leader/endpoint.js +2 -57
- package/dist/leader/fanout.js +3 -45
- package/dist/leader/grader-env-factory.js +3 -72
- package/dist/leader/leader.js +5 -156
- package/dist/leader/merge.js +8 -115
- package/dist/leader/planner.js +3 -54
- package/dist/leader/repair-oracle.js +1 -60
- package/dist/leader/repair-wire.js +2 -79
- package/dist/leader/wire.js +8 -307
- package/dist/lsp/e2b-bridge.js +4 -64
- package/dist/lsp/e2b-manager.js +6 -94
- package/dist/lsp/lsp-frames.js +0 -12
- package/dist/lsp/manager.js +4 -96
- package/dist/lsp/ws-transport.js +5 -55
- package/dist/lsp-evict.js +1 -15
- package/dist/main.js +57 -765
- package/dist/memory-bundle-engine.js +0 -55
- package/dist/memory-export.js +0 -4
- package/dist/memory-posture.js +1 -15
- package/dist/memory-scope.js +11 -148
- package/dist/memory-sync-client.js +2 -44
- package/dist/memory-sync.js +1 -80
- package/dist/model-select.js +3 -80
- package/dist/observability/cost-quota.js +1 -17
- package/dist/observability/cost-taxonomy.js +0 -34
- package/dist/observability/fail-open.js +7 -86
- package/dist/observability/logger.js +0 -6
- package/dist/observability/metrics.js +0 -94
- package/dist/observability/otel-exporter.js +3 -13
- package/dist/observability/principal-context.js +0 -9
- package/dist/observability/prompt-manifest.js +1 -37
- package/dist/observability/rate-limit.js +0 -4
- package/dist/observability/secret-env-scrub.js +2 -56
- package/dist/observability/tool-trace.js +1 -70
- package/dist/orchestration/hardened-vm-runner.js +4 -118
- package/dist/orchestration/hardened-vm-worker-runner.js +1 -26
- package/dist/orchestration/hardened-vm-worker.js +0 -27
- package/dist/orchestration/subagent-steer.js +1 -45
- package/dist/orchestration/workflow-agent-steer.js +1 -80
- package/dist/orchestration/workflow-completion-inbox.js +32 -285
- package/dist/orchestration/workflow-notify-journal.js +16 -259
- package/dist/org-memory-admission.js +3 -47
- package/dist/parent-watch.js +2 -48
- package/dist/parked-decide.js +1 -109
- package/dist/per-task-image.js +0 -57
- package/dist/plan-cache-probe.js +3 -27
- package/dist/plugins/adoption-log-sql.js +2 -119
- package/dist/plugins/approval-ask-store-memory.js +3 -38
- package/dist/plugins/approval-ask-store-sql.js +6 -188
- package/dist/plugins/approval-exemption-store.js +2 -28
- package/dist/plugins/background-agent-store-sql.js +4 -105
- package/dist/plugins/background-shell-support.js +14 -122
- package/dist/plugins/blob-backend.js +6 -169
- package/dist/plugins/breaker-state-sql.js +8 -46
- package/dist/plugins/caching-session-store.js +4 -106
- package/dist/plugins/checkpoint-store-sql.js +18 -505
- package/dist/plugins/e2b-orphan-reclaim.js +0 -45
- package/dist/plugins/file-outcome-sink.js +0 -9
- package/dist/plugins/file-resume-anchor-store.js +4 -43
- package/dist/plugins/file-run-store.js +26 -364
- package/dist/plugins/file-snapshot-store-sql.js +10 -181
- package/dist/plugins/fork-routing-session-store.js +8 -111
- package/dist/plugins/host-platform.js +2 -91
- package/dist/plugins/image-bake-store-sql.js +7 -250
- package/dist/plugins/image-index-sql.js +4 -123
- package/dist/plugins/k8s-bg-scripts.js +4 -88
- package/dist/plugins/k8s-exec-protocol.js +0 -41
- package/dist/plugins/leader-run-store-sql.js +0 -101
- package/dist/plugins/local-checkpoint-store.js +8 -128
- package/dist/plugins/local-session-store.js +34 -296
- package/dist/plugins/local-task-attachment-store.js +2 -16
- package/dist/plugins/mailbox-store-sql.js +8 -65
- package/dist/plugins/memory-embedder-fingerprint.js +5 -166
- package/dist/plugins/memory-embedder.js +4 -70
- package/dist/plugins/memory-engine-pg.js +6 -170
- package/dist/plugins/memory-engine-tidb.js +7 -155
- package/dist/plugins/memory-engine-vector-util.js +0 -10
- package/dist/plugins/memory-key-guards.js +0 -34
- package/dist/plugins/memory-origin-law.js +0 -187
- package/dist/plugins/memory-resume-anchor-store.js +0 -17
- package/dist/plugins/memory-run-store.js +12 -89
- package/dist/plugins/memory-session-policy-store.js +0 -17
- package/dist/plugins/memory-sync-store-pg.js +4 -49
- package/dist/plugins/memory-sync-store-tidb.js +3 -35
- package/dist/plugins/outcome-ledger-sql.js +3 -97
- package/dist/plugins/permission-rule-store-file.js +5 -133
- package/dist/plugins/permission-rule-store-sql.d.ts +3 -0
- package/dist/plugins/permission-rule-store-sql.js +50 -307
- package/dist/plugins/pg-cost-quota.js +0 -7
- package/dist/plugins/pg-pool.js +0 -92
- package/dist/plugins/pg-rate-limiter.js +2 -13
- package/dist/plugins/pg-safe-json.js +4 -40
- package/dist/plugins/pg-session-storage.js +25 -189
- package/dist/plugins/posix-shell-fs.js +1 -31
- package/dist/plugins/remote-env-adb.js +12 -101
- package/dist/plugins/remote-env-e2b.js +40 -371
- package/dist/plugins/remote-env-file-error.js +0 -37
- package/dist/plugins/remote-env-host.js +63 -483
- package/dist/plugins/remote-env-k8s.js +32 -326
- package/dist/plugins/remote-env-local-docker.js +24 -157
- package/dist/plugins/remote-env-ssh.js +20 -128
- package/dist/plugins/remote-scratchpad.js +2 -32
- package/dist/plugins/remote-shell.js +1 -32
- package/dist/plugins/resume-anchor-store-sql.js +0 -11
- package/dist/plugins/retention-lane-store-sql.js +0 -108
- package/dist/plugins/retention-store-sql.js +4 -383
- package/dist/plugins/roster-store-sql.js +0 -55
- package/dist/plugins/run-store-sql.js +14 -251
- package/dist/plugins/s3-presign.js +2 -49
- package/dist/plugins/scheduler-support.js +3 -80
- package/dist/plugins/send-file-ledger.js +4 -53
- package/dist/plugins/send-user-file.js +4 -94
- package/dist/plugins/session-placement.js +1 -89
- package/dist/plugins/session-policy-store-sql.js +3 -81
- package/dist/plugins/session-store.js +0 -57
- package/dist/plugins/shared-memory-store-sql.js +4 -167
- package/dist/plugins/sql-driver.js +0 -17
- package/dist/plugins/sql-errors.js +0 -7
- package/dist/plugins/sql-escape.js +0 -8
- package/dist/plugins/sql-row-helpers.js +0 -25
- package/dist/plugins/store-backend.js +42 -222
- package/dist/plugins/store-contracts.js +2 -46
- package/dist/plugins/task-attachment-store.js +3 -49
- package/dist/plugins/task-list-store-sql.js +0 -79
- package/dist/plugins/tidb-cost-quota.js +1 -4
- package/dist/plugins/tidb-pool.js +1 -207
- package/dist/plugins/tidb-rate-limiter.js +3 -9
- package/dist/plugins/tidb-session-storage.js +4 -70
- package/dist/plugins/tidb-session-store.js +19 -341
- package/dist/plugins/tool-result-store-sql.js +4 -179
- package/dist/plugins/usage-window-store-sql.js +0 -8
- package/dist/plugins/web-search.js +10 -132
- package/dist/plugins/workflow-journal-store-sql.js +2 -58
- package/dist/plugins/workflow-run-store-sql.js +6 -91
- package/dist/plugins/worktree-isolation.js +6 -126
- package/dist/plugins/write-behind-counter.js +16 -75
- package/dist/principal-jwt.js +5 -60
- package/dist/project-memory.js +15 -146
- package/dist/prompts-domain-validate.js +1 -51
- package/dist/question.js +2 -111
- package/dist/resource-suspend.js +0 -18
- package/dist/router/route-orchestration.js +0 -77
- package/dist/rules-consent.d.ts +44 -5
- package/dist/rules-consent.js +75 -215
- package/dist/run-local.js +14 -381
- package/dist/runs.js +29 -617
- package/dist/runtime-caps-resolver.js +6 -132
- package/dist/runtime-governance.js +1 -232
- package/dist/sandbox-pkg-source.js +0 -37
- package/dist/sealed-key.js +3 -68
- package/dist/security.js +6 -291
- package/dist/session-leaf-bus.js +0 -32
- package/dist/session-sync-content.js +1 -69
- package/dist/session-sync-kernel.js +3 -60
- package/dist/session-sync.js +3 -66
- package/dist/session-titler.js +7 -41
- package/dist/session-watch.js +9 -73
- package/dist/shared-memory-scope-authorizer.js +0 -18
- package/dist/sighup-idle.js +1 -12
- package/dist/spec-fields.js +4 -143
- package/dist/store-live-probe.js +3 -49
- package/dist/task-a2a.js +1 -126
- package/dist/task-cwd.js +1 -103
- package/dist/task-mcp.js +1 -89
- package/dist/task-settings.js +10 -300
- package/dist/task-workflow.js +8 -75
- package/dist/tool-approval.d.ts +28 -1
- package/dist/tool-approval.js +70 -1430
- package/dist/trace/artifacts.js +5 -20
- package/dist/trace/engine-notice-wire.js +6 -138
- package/dist/trace/ledger-sink.js +7 -96
- package/dist/trace/project.js +4 -448
- package/dist/trace/redact.js +9 -77
- package/dist/turn-activity.js +1 -27
- package/dist/usage-analytics.js +4 -34
- package/dist/wall-clock-jump-guard.js +1 -68
- package/package.json +3 -3
- package/dist/capabilities/scenario-alias.d.ts +0 -27
- package/dist/capabilities/scenario-alias.js +0 -61
|
@@ -1,54 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host-lane PLATFORM seam (DESIGN-windows-native.md, FINAL r3) — the ONE place the host exec adapter's
|
|
3
|
-
* POSIX/win32 differences live, so `remote-env-host.ts` stays a single code path with platform-gated leaves.
|
|
4
|
-
*
|
|
5
|
-
* 🔴 Iron invariant (design §4.1): the POSIX path is BYTE-IDENTICAL to the pre-Windows code — every helper is
|
|
6
|
-
* `win32 ? new : exactly-what-the-inline-code-did` (same syscall, same throw behavior). Never "improve" POSIX
|
|
7
|
-
* here; the existing full test suite is the regression net.
|
|
8
|
-
*
|
|
9
|
-
* win32 semantics (design D1-D4):
|
|
10
|
-
* - shell = Git Bash via core 1.224 `getShellConfig` (WSL-launcher-filtered — the `System32\bash.exe`
|
|
11
|
-
* trap). Fail-LOUD when absent; never silently degrade to cmd (D1).
|
|
12
|
-
* - kill = core 1.224 `signalProcessTree` (taskkill /T, /F for hard). Soft is a no-op for console trees
|
|
13
|
-
* (taskkill errors "can only be terminated forcefully") — the SIGTERM→grace→SIGKILL ladder is
|
|
14
|
-
* effectively delay→hard-kill on win32; accepted, CC-identical (D2).
|
|
15
|
-
* - spawn = `detached:false` + `windowsHide:true` (no console window; no POSIX process group — the kill
|
|
16
|
-
* side uses the tree, not the group) (D3).
|
|
17
|
-
* - env = case-insensitive key collapse before spawn (win32 env keys are case-insensitive; a `Path`+`PATH`
|
|
18
|
-
* pair from case-sensitive Object.assign reaches CreateProcess as ONE undefined-which
|
|
19
|
-
* entry). Canonical casing = the first-seen key (process.env's native casing wins since the
|
|
20
|
-
* inherit base is spread first).
|
|
21
|
-
*
|
|
22
|
-
* ⚠️ The win32 branches are UNVERIFIED on a real machine until S5 (Windows CI runner) — design D5 discipline:
|
|
23
|
-
* structural tests only on mac/Linux; behavior-level bite happens on the first Windows-runner green.
|
|
24
|
-
*/
|
|
25
1
|
import os from "node:os";
|
|
26
2
|
import { getShellConfig, killProcessTree, signalProcessTree } from "@sema-agent/core";
|
|
27
3
|
export const IS_WIN32 = process.platform === "win32";
|
|
28
|
-
/** S1([1870] test AI 全归因,2026-07-27):POSIX 不再硬编码 `/bin/sh`——Debian/Ubuntu 的 /bin/sh 是
|
|
29
|
-
* dash,TB 实测三类病:`$'a\tb'` **静默错字节**(exit 0、输出字面 5 字节)、`[[ ]]` 127、进程替换
|
|
30
|
-
* 语法错;CC 对照从不用 /bin/sh。改为与 win32 同源:core `getShellConfig()`(/bin/bash → PATH bash
|
|
31
|
-
* → `sh` 诚实兜底,core 六版逐字节稳定被 test AI 洗清)。旧「POSIX byte-identical」铁律就此**有意**
|
|
32
|
-
* 打破——它防的是 Windows 改动误伤 POSIX,这次是带失分证据 + CC 对照的 POSIX 行为修正。
|
|
33
|
-
* 极罕的无 bash 宿主(alpine 裸机)拿 core 的 `sh` 兜底,行为=修前。 */
|
|
34
4
|
const POSIX_SH_FALLBACK = { shell: "/bin/sh", args: ["-c"] };
|
|
35
5
|
let cachedWinShell;
|
|
36
6
|
let cachedPosixShell;
|
|
37
|
-
/**
|
|
38
|
-
* Resolve the host shell ONCE per process (cached). POSIX resolves synchronously to `/bin/sh` — zero behavior
|
|
39
|
-
* change. win32 defers to core's `getShellConfig` (explicit `HOST_SHELL_PATH` override → Git-for-Windows
|
|
40
|
-
* install dirs → PATH `bash.exe` with the WSL-launcher filter) and THROWS a self-explaining error when no
|
|
41
|
-
* usable bash exists (design D1 fail-loud: "install Git for Windows", never a silent cmd fallback).
|
|
42
|
-
*
|
|
43
|
-
* Call sites: `shellReady()` awaits this once (all exec/bg/stream spawns are behind it), then the spawn sites
|
|
44
|
-
* read the cached value synchronously via {@link hostShell}.
|
|
45
|
-
*/
|
|
46
7
|
export async function resolveHostShell() {
|
|
47
8
|
if (!IS_WIN32) {
|
|
48
9
|
if (cachedPosixShell)
|
|
49
10
|
return cachedPosixShell;
|
|
50
|
-
// S1:POSIX 与 win32 同源(core getShellConfig:/bin/bash → PATH bash → sh 兜底;POSIX 分支
|
|
51
|
-
// 恒 ok——sh 兜底也是 ok 形,故这里不需要 win32 的 fail-loud 臂)。HOST_SHELL_PATH 同一覆写口。
|
|
52
11
|
const posixCfg = await getShellConfig(process.env.HOST_SHELL_PATH || undefined);
|
|
53
12
|
cachedPosixShell = posixCfg.ok ? { shell: posixCfg.value.shell, args: posixCfg.value.args } : POSIX_SH_FALLBACK;
|
|
54
13
|
return cachedPosixShell;
|
|
@@ -65,38 +24,21 @@ export async function resolveHostShell() {
|
|
|
65
24
|
cachedWinShell = { shell: cfg.value.shell, args: cfg.value.args };
|
|
66
25
|
return cachedWinShell;
|
|
67
26
|
}
|
|
68
|
-
/** Synchronous read of the resolved shell — valid only AFTER {@link resolveHostShell} settled (the spawn sites
|
|
69
|
-
* are all behind `shellReady()`, which awaits it). POSIX never needs the async step. Throws on a mis-ordered
|
|
70
|
-
* call (a programming bug, not an operator condition — fail loud, not /bin/sh-on-windows). */
|
|
71
27
|
export function hostShell() {
|
|
72
28
|
if (!IS_WIN32) {
|
|
73
|
-
// S1 后 POSIX 也走异步解析;未解析先到的同步读拿 sh 兜底(修前字节形)而非 throw——POSIX 的
|
|
74
|
-
// 病是 dash 语义不是缺 shell,这里降级无害且绝不把既有调用序变成崩溃。解析后即恒 bash。
|
|
75
29
|
return cachedPosixShell ?? POSIX_SH_FALLBACK;
|
|
76
30
|
}
|
|
77
31
|
if (!cachedWinShell)
|
|
78
32
|
throw new Error("host shell not resolved yet — resolveHostShell() must settle before any spawn (shellReady ordering bug)");
|
|
79
33
|
return cachedWinShell;
|
|
80
34
|
}
|
|
81
|
-
/** test-only: reset the shell caches (each test can re-drive resolution). */
|
|
82
35
|
export function resetHostShellCacheForTest() {
|
|
83
36
|
cachedWinShell = undefined;
|
|
84
37
|
cachedPosixShell = undefined;
|
|
85
38
|
}
|
|
86
|
-
/** Per-platform spawn options for a group-killable child (design D3).
|
|
87
|
-
* POSIX: `detached:true` — child becomes its own process-group leader (pgid === pid) so `kill(-pid)` reaps the
|
|
88
|
-
* whole group. BYTE-IDENTICAL to the previous inline `detached: true`.
|
|
89
|
-
* win32: `detached:false` (a detached child opens a console; there is no killable POSIX group either way —
|
|
90
|
-
* the kill side uses taskkill's tree) + `windowsHide:true` (no flashing console window). */
|
|
91
39
|
export function spawnGroupOptions() {
|
|
92
40
|
return IS_WIN32 ? { detached: false, windowsHide: true } : { detached: true };
|
|
93
41
|
}
|
|
94
|
-
/**
|
|
95
|
-
* HARD kill of the child's whole tree (design D2). POSIX = `process.kill(-pid, "SIGKILL")` — byte-identical,
|
|
96
|
-
* INCLUDING the throw on a dead group (ESRCH): every call site already wraps in its own try/catch with its own
|
|
97
|
-
* fallback (e.g. `child.kill("SIGKILL")`), and that structure must not change.
|
|
98
|
-
* win32 = core `signalProcessTree(pid,"SIGKILL")` → `taskkill /F /T` (never throws — fire-and-forget spawn).
|
|
99
|
-
*/
|
|
100
42
|
export function killTreeHard(pid) {
|
|
101
43
|
if (IS_WIN32) {
|
|
102
44
|
signalProcessTree(pid, "SIGKILL");
|
|
@@ -104,14 +46,6 @@ export function killTreeHard(pid) {
|
|
|
104
46
|
}
|
|
105
47
|
process.kill(-pid, "SIGKILL");
|
|
106
48
|
}
|
|
107
|
-
/**
|
|
108
|
-
* SOFT kill (design D2 — the bg KillShell/timeout-wall first rung; the caller owns the grace→hard escalation
|
|
109
|
-
* timer, unchanged). POSIX = `process.kill(-pid, "SIGTERM")` byte-identical (throws on dead group — the caller
|
|
110
|
-
* treats that as "already dead, skip escalation"). win32 = `taskkill /T` without /F — which for a typical
|
|
111
|
-
* all-console tree ERRORS AND KILLS NOTHING: the ladder degrades to delay→hard-kill there;
|
|
112
|
-
* accepted + documented (CC-identical). It never throws, so the caller's "already dead → return" branch never
|
|
113
|
-
* fires on win32 — the escalation timer always arms, which is exactly what we want given soft is a no-op.
|
|
114
|
-
*/
|
|
115
49
|
export function killTreeSoft(pid) {
|
|
116
50
|
if (IS_WIN32) {
|
|
117
51
|
signalProcessTree(pid, "SIGTERM");
|
|
@@ -119,40 +53,17 @@ export function killTreeSoft(pid) {
|
|
|
119
53
|
}
|
|
120
54
|
process.kill(-pid, "SIGTERM");
|
|
121
55
|
}
|
|
122
|
-
/** Graceful tree kill where the CALLER has no escalation timer of its own (currently unused by the host lane —
|
|
123
|
-
* exported for parity with core's surface; the bg driver keeps its own HOST_BG_KILL_GRACE_MS ladder). */
|
|
124
56
|
export { killProcessTree };
|
|
125
|
-
/**
|
|
126
|
-
* win32 env-key case collapse (design D1). Windows env keys are case-insensitive; Node hands the
|
|
127
|
-
* object to CreateProcess as-is, so a case-sensitive merge that produced BOTH `Path` (inherited) and `PATH`
|
|
128
|
-
* (caller override) yields one-of-them-undefined-which in the child. Collapse case-duplicate keys LAST-WRITE-WINS
|
|
129
|
-
* in iteration order — matching what `Object.assign` semantics promised the caller (per-command overrides beat
|
|
130
|
-
* config env beats inherited base) — while keeping the FIRST-SEEN casing (the inherited base is assigned first,
|
|
131
|
-
* so `Path=…` inherited + `PATH=x` override collapses to `Path=x`: native casing, override value).
|
|
132
|
-
* POSIX: returns the input UNTOUCHED (case-sensitive env is real there — `Path` and `PATH` are distinct).
|
|
133
|
-
*/
|
|
134
57
|
export function collapseWin32EnvKeys(env) {
|
|
135
58
|
if (!IS_WIN32)
|
|
136
59
|
return env;
|
|
137
60
|
return collapseEnvKeysCaseInsensitive(env);
|
|
138
61
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Conventional exit-code mapping for a process killed by a signal (128 + signal number). Single pattern-home
|
|
141
|
-
* construction point for every exec adapter that must turn a `close` event's external-kill case
|
|
142
|
-
* (`code===null`, `signal` set) into an exit code instead of silently reporting a fake success 0 — the host
|
|
143
|
-
* lane, ssh, adb, and local-docker all consume THIS function; none of them may hand-write their own signal
|
|
144
|
-
* table. Uses Node's authoritative platform table (`os.constants.signals`) rather than a hand-written list —
|
|
145
|
-
* a hand-written table has previously missed `SIGABRT`/`SIGPIPE` (`kill -ABRT` reported 137, impersonating
|
|
146
|
-
* `SIGKILL`). Callers keep a `?? 9` fallback for a name the platform table doesn't define, matching core's
|
|
147
|
-
* `SIGNUM[signal] ?? 9`.
|
|
148
|
-
*/
|
|
149
62
|
export function signalNumber(signal) {
|
|
150
63
|
return os.constants.signals[signal];
|
|
151
64
|
}
|
|
152
|
-
/** The platform-free collapse algorithm (exported so the mac/Linux suite can pin the win32 behavior — design
|
|
153
|
-
* D5: structural verification everywhere, behavioral bite on the Windows runner). */
|
|
154
65
|
export function collapseEnvKeysCaseInsensitive(env) {
|
|
155
|
-
const canonical = new Map();
|
|
66
|
+
const canonical = new Map();
|
|
156
67
|
const out = {};
|
|
157
68
|
for (const [k, v] of Object.entries(env)) {
|
|
158
69
|
if (v === undefined)
|
|
@@ -164,7 +75,7 @@ export function collapseEnvKeysCaseInsensitive(env) {
|
|
|
164
75
|
out[k] = v;
|
|
165
76
|
}
|
|
166
77
|
else {
|
|
167
|
-
out[keep] = v;
|
|
78
|
+
out[keep] = v;
|
|
168
79
|
}
|
|
169
80
|
}
|
|
170
81
|
return out;
|