remote-pi 0.5.0 → 0.5.1

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.
@@ -43,7 +43,7 @@ export declare function findSupervisorScript(): string;
43
43
  */
44
44
  export declare function findRemotePiScript(): string;
45
45
  export declare function findNodeBinary(): string;
46
- export declare function findTemplate(name: "systemd" | "launchd" | "taskscheduler"): string;
46
+ export declare function findTemplate(name: "systemd" | "launchd" | "taskscheduler" | "vbs-launcher"): string;
47
47
  export declare function systemdUnitPath(): string;
48
48
  export declare function launchdPlistPath(): string;
49
49
  export declare const LAUNCHD_LABEL = "dev.remotepi.supervisord";
@@ -53,6 +53,19 @@ export declare const SYSTEMD_UNIT = "remote-pi-supervisord.service";
53
53
  export declare const WINDOWS_TASK_NAME = "RemotePiSupervisor";
54
54
  /** Path of the rendered Task Scheduler XML (input to `schtasks /Create /XML`). */
55
55
  export declare function taskXmlPath(): string;
56
+ /**
57
+ * Path of the rendered VBScript launcher the Task Scheduler action invokes
58
+ * via `wscript.exe` (plan/40, Windows). Launching node through this hidden
59
+ * wrapper is what keeps the supervisor from flashing a console window.
60
+ */
61
+ export declare function vbsLauncherPath(): string;
62
+ /**
63
+ * Combined stdout/stderr log for the Windows supervisor. The Task Scheduler
64
+ * launches it hidden via wscript, so without this redirect its output (and the
65
+ * forwarded daemon-child stderr) would vanish — mirrors launchd/systemd, which
66
+ * already log to `~/.pi/remote/supervisord.log`.
67
+ */
68
+ export declare function supervisordLogPath(): string;
56
69
  export interface RenderVars {
57
70
  node: string;
58
71
  supervisor: string;
@@ -61,9 +74,15 @@ export interface RenderVars {
61
74
  /** PATH inherited so `pi --mode rpc` resolves the same way it does
62
75
  * interactively. We snapshot `process.env.PATH` at install time. */
63
76
  path: string;
77
+ /** Windows only: absolute path of the VBScript launcher the Task Scheduler
78
+ * action runs via `wscript.exe`. Empty on POSIX (templates ignore `{VBS}`). */
79
+ vbs: string;
80
+ /** Windows only: combined stdout/stderr log the hidden supervisor appends to.
81
+ * Empty on POSIX (templates ignore `{LOG}`). */
82
+ logPath: string;
64
83
  }
65
84
  export declare function defaultRenderVars(): RenderVars;
66
- /** Replace `{NODE}` / `{SUPERVISOR}` / `{USER}` / `{HOME}` / `{PATH}`. */
85
+ /** Replace `{NODE}` / `{SUPERVISOR}` / `{USER}` / `{HOME}` / `{PATH}` / `{VBS}` / `{LOG}`. */
67
86
  export declare function renderTemplate(template: string, vars: RenderVars): string;
68
87
  export interface InstallResult {
69
88
  platform: SupervisorPlatform;
@@ -86,6 +105,13 @@ export interface UninstallResult {
86
105
  log: string[];
87
106
  }
88
107
  export declare function uninstallService(): UninstallResult;
108
+ /**
109
+ * Build the batch script run elevated. Each command line redirects its output
110
+ * to `logFile` so the (separate, elevated) process's output can be read back by
111
+ * the parent. Control-flow lines (`if`/`exit`/`rem`/`@`) run bare — redirecting
112
+ * them would swallow the exit code. Pure + exported for tests.
113
+ */
114
+ export declare function buildElevatedCmd(lines: string[], logFile: string): string;
89
115
  export interface LinkBinariesResult {
90
116
  /** `~/.local/bin/`. The two symlinks land here. */
91
117
  binDir: string;
@@ -120,7 +146,12 @@ export declare function isOnPath(dir: string, envPath?: string): boolean;
120
146
  export declare function linkCliBinaries(home?: string, paths?: {
121
147
  remotePi?: string;
122
148
  supervisord?: string;
149
+ }, opts?: {
150
+ node?: string;
151
+ mutatePath?: boolean;
123
152
  }): LinkBinariesResult;
153
+ /** A Windows `.cmd` shim that forwards all args to `node "<target>"`. Pure. */
154
+ export declare function buildCmdShim(node: string, target: string): string;
124
155
  /**
125
156
  * Remove the symlinks `linkCliBinaries` created. Idempotent — missing
126
157
  * links are a no-op. Returns whether each link was actually present so
@@ -1,7 +1,7 @@
1
1
  import { execFileSync } from "node:child_process";
2
2
  import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
3
3
  import { delimiter } from "node:path";
4
- import { homedir, platform, userInfo } from "node:os";
4
+ import { homedir, platform, tmpdir, userInfo } from "node:os";
5
5
  import { dirname, join, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  export function detectPlatform() {
@@ -60,7 +60,8 @@ export function findTemplate(name) {
60
60
  const pkgRoot = resolve(dirname(dirname(dirname(here)))); // package root
61
61
  const file = name === "systemd" ? "systemd.service.template" :
62
62
  name === "launchd" ? "launchd.plist.template" :
63
- "task-scheduler.xml.template";
63
+ name === "vbs-launcher" ? "task-launcher.vbs.template" :
64
+ "task-scheduler.xml.template";
64
65
  return resolve(pkgRoot, "service-templates", file);
65
66
  }
66
67
  // ── Service paths ──────────────────────────────────────────────────────────
@@ -79,6 +80,23 @@ export const WINDOWS_TASK_NAME = "RemotePiSupervisor";
79
80
  export function taskXmlPath() {
80
81
  return join(homedir(), ".pi", "remote", "RemotePiSupervisor.xml");
81
82
  }
83
+ /**
84
+ * Path of the rendered VBScript launcher the Task Scheduler action invokes
85
+ * via `wscript.exe` (plan/40, Windows). Launching node through this hidden
86
+ * wrapper is what keeps the supervisor from flashing a console window.
87
+ */
88
+ export function vbsLauncherPath() {
89
+ return join(homedir(), ".pi", "remote", "RemotePiSupervisorLauncher.vbs");
90
+ }
91
+ /**
92
+ * Combined stdout/stderr log for the Windows supervisor. The Task Scheduler
93
+ * launches it hidden via wscript, so without this redirect its output (and the
94
+ * forwarded daemon-child stderr) would vanish — mirrors launchd/systemd, which
95
+ * already log to `~/.pi/remote/supervisord.log`.
96
+ */
97
+ export function supervisordLogPath() {
98
+ return join(homedir(), ".pi", "remote", "supervisord.log");
99
+ }
82
100
  export function defaultRenderVars() {
83
101
  return {
84
102
  node: findNodeBinary(),
@@ -86,16 +104,20 @@ export function defaultRenderVars() {
86
104
  home: homedir(),
87
105
  user: userInfo().username,
88
106
  path: process.env["PATH"] ?? "/usr/local/bin:/usr/bin:/bin",
107
+ vbs: vbsLauncherPath(),
108
+ logPath: supervisordLogPath(),
89
109
  };
90
110
  }
91
- /** Replace `{NODE}` / `{SUPERVISOR}` / `{USER}` / `{HOME}` / `{PATH}`. */
111
+ /** Replace `{NODE}` / `{SUPERVISOR}` / `{USER}` / `{HOME}` / `{PATH}` / `{VBS}` / `{LOG}`. */
92
112
  export function renderTemplate(template, vars) {
93
113
  return template
94
114
  .replace(/\{NODE\}/g, vars.node)
95
115
  .replace(/\{SUPERVISOR\}/g, vars.supervisor)
96
116
  .replace(/\{USER\}/g, vars.user)
97
117
  .replace(/\{HOME\}/g, vars.home)
98
- .replace(/\{PATH\}/g, vars.path);
118
+ .replace(/\{PATH\}/g, vars.path)
119
+ .replace(/\{VBS\}/g, vars.vbs)
120
+ .replace(/\{LOG\}/g, vars.logPath);
99
121
  }
100
122
  /**
101
123
  * Writes the unit/plist, runs the platform's activation command. Throws
@@ -108,7 +130,7 @@ export function installService(vars = defaultRenderVars()) {
108
130
  const plat = detectPlatform();
109
131
  const log = [];
110
132
  if (plat === "unsupported") {
111
- throw new Error(`unsupported platform: ${platform()}. Only macOS and Linux.`);
133
+ throw new Error(`unsupported platform: ${platform()}. Only macOS, Linux, and Windows.`);
112
134
  }
113
135
  // Sanity: supervisor script must exist on disk.
114
136
  if (!existsSync(vars.supervisor)) {
@@ -151,12 +173,27 @@ export function installService(vars = defaultRenderVars()) {
151
173
  log.push("activated via systemctl --user enable --now");
152
174
  }
153
175
  else {
154
- // windows — Task Scheduler (plan/40). End any prior instance, (re)create
155
- // the task from the rendered XML (user-level, restart-on-failure), run now.
176
+ // windows — Task Scheduler (plan/40). The action runs `wscript.exe
177
+ // <launcher.vbs>` (not node directly) so the supervisor starts hidden,
178
+ // with no console window. Render + write that launcher first.
179
+ const vbsTpl = findTemplate("vbs-launcher");
180
+ if (!existsSync(vbsTpl))
181
+ throw new Error(`vbs launcher template missing: ${vbsTpl}`);
182
+ const vbsPath = vars.vbs;
183
+ writeFileSync(vbsPath, renderTemplate(readFileSync(vbsTpl, "utf8"), vars));
184
+ log.push(`wrote ${vbsPath}`);
185
+ // Only `schtasks /Create` modifies the root task store → that single op
186
+ // needs admin (elevate it via UAC). `/End` (stop a prior instance) and
187
+ // `/Run` (start it) act on a task we already own and work un-elevated — the
188
+ // very ops `remote-pi restart-supervisor` runs without elevation. Keeping
189
+ // them un-elevated narrows the admin surface to the one operation that
190
+ // truly requires it.
156
191
  _tryExec("schtasks", ["/End", "/TN", WINDOWS_TASK_NAME], log);
157
- _exec("schtasks", ["/Create", "/XML", unitPath, "/TN", WINDOWS_TASK_NAME, "/F"], log);
192
+ _execElevatedWindows([
193
+ `schtasks /Create /XML "${unitPath}" /TN ${WINDOWS_TASK_NAME} /F`,
194
+ ], log);
158
195
  _exec("schtasks", ["/Run", "/TN", WINDOWS_TASK_NAME], log);
159
- log.push(`activated via schtasks /Create + /Run (${WINDOWS_TASK_NAME})`);
196
+ log.push(`activated via schtasks /Create (elevated) + /Run (${WINDOWS_TASK_NAME})`);
160
197
  }
161
198
  return { platform: plat, unitPath, log };
162
199
  }
@@ -164,7 +201,7 @@ export function uninstallService() {
164
201
  const plat = detectPlatform();
165
202
  const log = [];
166
203
  if (plat === "unsupported") {
167
- throw new Error(`unsupported platform: ${platform()}. Only macOS and Linux.`);
204
+ throw new Error(`unsupported platform: ${platform()}. Only macOS, Linux, and Windows.`);
168
205
  }
169
206
  const unitPath = plat === "macos" ? launchdPlistPath() : plat === "linux" ? systemdUnitPath() : taskXmlPath();
170
207
  if (plat === "macos") {
@@ -178,10 +215,17 @@ export function uninstallService() {
178
215
  log.push("deactivated via systemctl --user disable --now");
179
216
  }
180
217
  else {
181
- // windows — Task Scheduler (plan/40): stop + delete the task.
218
+ // windows — Task Scheduler (plan/40): stop + delete the task. Only
219
+ // `/Delete` modifies the root task store → that's the op that needs admin.
220
+ // `/End` stops the running task and works un-elevated (own task), like
221
+ // restart-supervisor. `exit /b 0` keeps uninstall best-effort: a missing
222
+ // task (already removed) is success, not an error.
182
223
  _tryExec("schtasks", ["/End", "/TN", WINDOWS_TASK_NAME], log);
183
- _tryExec("schtasks", ["/Delete", "/TN", WINDOWS_TASK_NAME, "/F"], log);
184
- log.push(`deactivated via schtasks /Delete (${WINDOWS_TASK_NAME})`);
224
+ _execElevatedWindows([
225
+ `schtasks /Delete /TN ${WINDOWS_TASK_NAME} /F`,
226
+ `exit /b 0`,
227
+ ], log);
228
+ log.push(`deactivated via elevated schtasks /Delete (${WINDOWS_TASK_NAME})`);
185
229
  }
186
230
  let removed = false;
187
231
  if (existsSync(unitPath)) {
@@ -194,6 +238,19 @@ export function uninstallService() {
194
238
  log.push(`failed to remove ${unitPath}: ${String(e)}`);
195
239
  }
196
240
  }
241
+ // Windows: also drop the hidden VBScript launcher we wrote alongside the XML.
242
+ if (plat === "windows") {
243
+ const vbsPath = vbsLauncherPath();
244
+ if (existsSync(vbsPath)) {
245
+ try {
246
+ unlinkSync(vbsPath);
247
+ log.push(`removed ${vbsPath}`);
248
+ }
249
+ catch (e) {
250
+ log.push(`failed to remove ${vbsPath}: ${String(e)}`);
251
+ }
252
+ }
253
+ }
197
254
  if (plat === "linux") {
198
255
  _tryExec("systemctl", ["--user", "daemon-reload"], log);
199
256
  }
@@ -225,6 +282,76 @@ function _tryExec(cmd, args, log) {
225
282
  }
226
283
  catch { /* expected, suppress */ }
227
284
  }
285
+ // ── Windows elevation (plan/40) ────────────────────────────────────────────
286
+ //
287
+ // `schtasks /Create` and `/Delete` register/remove the task in the root folder,
288
+ // which requires administrator rights. We can't elevate the current Node
289
+ // process, so we render the schtasks sequence into a temp `.cmd`, run it
290
+ // through an elevated `cmd.exe` via PowerShell `Start-Process -Verb RunAs`
291
+ // (one UAC prompt), and read the output back from a log file the script
292
+ // redirects into.
293
+ /**
294
+ * Build the batch script run elevated. Each command line redirects its output
295
+ * to `logFile` so the (separate, elevated) process's output can be read back by
296
+ * the parent. Control-flow lines (`if`/`exit`/`rem`/`@`) run bare — redirecting
297
+ * them would swallow the exit code. Pure + exported for tests.
298
+ */
299
+ export function buildElevatedCmd(lines, logFile) {
300
+ const redirect = ` >> "${logFile}" 2>&1`;
301
+ const body = lines.map((ln) => /^\s*(if|exit|rem|@)/i.test(ln) ? ln : ln + redirect);
302
+ return ["@echo off", ...body].join("\r\n") + "\r\n";
303
+ }
304
+ function _readIfExists(p) {
305
+ try {
306
+ return readFileSync(p, "utf8");
307
+ }
308
+ catch {
309
+ return "";
310
+ }
311
+ }
312
+ /**
313
+ * Run a schtasks command sequence elevated (UAC). Throws a clear error when the
314
+ * prompt is declined or the task operation fails (`Start-Process -Verb RunAs`
315
+ * throws → PowerShell exits non-zero → `execFileSync` throws). Captured schtasks
316
+ * output is appended to `log` either way.
317
+ */
318
+ function _execElevatedWindows(lines, log) {
319
+ const base = join(tmpdir(), `remote-pi-elevate-${process.pid}`);
320
+ const cmdPath = `${base}.cmd`;
321
+ const logFile = `${base}.log`;
322
+ writeFileSync(cmdPath, buildElevatedCmd(lines, logFile));
323
+ try {
324
+ unlinkSync(logFile);
325
+ }
326
+ catch { /* none yet */ }
327
+ let thrown = null;
328
+ try {
329
+ execFileSync("powershell", [
330
+ "-NoProfile", "-NonInteractive", "-Command",
331
+ `$p = Start-Process -FilePath cmd.exe -ArgumentList '/c','"${cmdPath}"' ` +
332
+ "-Verb RunAs -Wait -PassThru -WindowStyle Hidden; exit $p.ExitCode",
333
+ ], { stdio: ["ignore", "pipe", "pipe"] });
334
+ }
335
+ catch (e) {
336
+ thrown = e;
337
+ }
338
+ const out = _readIfExists(logFile).trim();
339
+ if (out)
340
+ log.push(out);
341
+ try {
342
+ unlinkSync(cmdPath);
343
+ }
344
+ catch { /* best-effort */ }
345
+ try {
346
+ unlinkSync(logFile);
347
+ }
348
+ catch { /* best-effort */ }
349
+ if (thrown) {
350
+ throw new Error("administrator privileges required — the UAC prompt was declined or the " +
351
+ "schtasks operation failed. Run the command again and accept the Windows " +
352
+ `elevation prompt.${out ? `\n${out}` : ""}`);
353
+ }
354
+ }
228
355
  export function userLocalBinDir(home = homedir()) {
229
356
  return join(home, ".local", "bin");
230
357
  }
@@ -247,18 +374,13 @@ export function isOnPath(dir, envPath = process.env["PATH"] ?? "") {
247
374
  * The caller is responsible for surfacing the shell-rc instruction —
248
375
  * we don't edit the user's shell config files automatically.
249
376
  */
250
- export function linkCliBinaries(home = homedir(), paths = {}) {
377
+ export function linkCliBinaries(home = homedir(), paths = {}, opts = {}) {
251
378
  const binDir = userLocalBinDir(home);
252
- // Windows (plan/40): no POSIX symlinks / `~/.local/bin`. The supported path
253
- // is `npm install -g remote-pi`, which provides the `remote-pi` /
254
- // `pi-supervisord` command shims (`.cmd`) on PATH. Skip linking, don't fail.
379
+ // Windows (plan/40): no POSIX symlinks. Installing via Pi (`pi install
380
+ // npm:remote-pi`) never reaches PATH, so write real `.cmd` shims into
381
+ // `~/.local/bin` and add that dir to the user's PATH (HKCU no admin).
255
382
  if (platform() === "win32") {
256
- return {
257
- binDir,
258
- links: [],
259
- onPath: true,
260
- log: ["Windows: skipping CLI symlinks — `npm install -g remote-pi` provides the command shims."],
261
- };
383
+ return _linkCliBinariesWindows(home, binDir, paths, opts);
262
384
  }
263
385
  const log = [];
264
386
  mkdirSync(binDir, { recursive: true });
@@ -300,10 +422,79 @@ export function linkCliBinaries(home = homedir(), paths = {}) {
300
422
  }
301
423
  return { binDir, links, onPath, log };
302
424
  }
425
+ /**
426
+ * Windows variant of `linkCliBinaries`: writes `remote-pi.cmd` +
427
+ * `pi-supervisord.cmd` shims into `~/.local/bin` and ensures that dir is on the
428
+ * user's PATH (User scope — no admin). `opts.node` overrides the node binary
429
+ * (tests); `opts.mutatePath === false` skips the real PATH mutation (tests).
430
+ */
431
+ function _linkCliBinariesWindows(home, binDir, paths, opts) {
432
+ void home;
433
+ const log = [];
434
+ mkdirSync(binDir, { recursive: true });
435
+ log.push(`ensured ${binDir}`);
436
+ const node = opts.node ?? findNodeBinary();
437
+ const remotePi = paths.remotePi ?? findRemotePiScript();
438
+ const supervisord = paths.supervisord ?? findSupervisorScript();
439
+ if (!existsSync(remotePi)) {
440
+ throw new Error(`remote-pi script not found at ${remotePi}. ` +
441
+ "Run `pnpm build` (dev) or reinstall the extension.");
442
+ }
443
+ if (!existsSync(supervisord)) {
444
+ throw new Error(`supervisor script not found at ${supervisord}. ` +
445
+ "Run `pnpm build` (dev) or reinstall the extension.");
446
+ }
447
+ const links = [
448
+ { name: "remote-pi.cmd", path: join(binDir, "remote-pi.cmd"), target: remotePi },
449
+ { name: "pi-supervisord.cmd", path: join(binDir, "pi-supervisord.cmd"), target: supervisord },
450
+ ];
451
+ for (const link of links) {
452
+ writeFileSync(link.path, buildCmdShim(node, link.target));
453
+ log.push(`wrote ${link.path}`);
454
+ }
455
+ const onPath = isOnPath(binDir);
456
+ if (!onPath && opts.mutatePath !== false) {
457
+ try {
458
+ _addUserPath(binDir);
459
+ log.push(`added ${binDir} to your user PATH — open a NEW terminal for \`remote-pi\` to resolve.`);
460
+ }
461
+ catch (e) {
462
+ log.push(`WARNING: ${binDir} is not on PATH and auto-add failed (${String(e)}). ` +
463
+ `Add it manually: setx PATH "%PATH%;${binDir}"`);
464
+ }
465
+ }
466
+ return { binDir, links, onPath, log };
467
+ }
468
+ /** A Windows `.cmd` shim that forwards all args to `node "<target>"`. Pure. */
469
+ export function buildCmdShim(node, target) {
470
+ return `@echo off\r\n"${node}" "${target}" %*\r\n`;
471
+ }
472
+ /**
473
+ * Append `dir` to the User-scope PATH via PowerShell (HKCU\Environment — no
474
+ * admin). Idempotent: skips when `dir` is already an exact PATH segment. Single-
475
+ * quoted PS literal (backslashes are literal in PS single quotes) with embedded
476
+ * `'` doubled.
477
+ */
478
+ function _addUserPath(dir) {
479
+ const lit = `'${dir.replace(/'/g, "''")}'`;
480
+ execFileSync("powershell", [
481
+ "-NoProfile", "-NonInteractive", "-Command",
482
+ `$d = ${lit}; ` +
483
+ "$p = [Environment]::GetEnvironmentVariable('Path','User'); " +
484
+ "if (-not $p) { $p = '' }; " +
485
+ "$parts = $p.Split(';') | Where-Object { $_ -ne '' }; " +
486
+ "if ($parts -notcontains $d) { " +
487
+ "[Environment]::SetEnvironmentVariable('Path', (($parts + $d) -join ';'), 'User') }",
488
+ ], { stdio: ["ignore", "pipe", "pipe"] });
489
+ }
303
490
  export function unlinkCliBinaries(home = homedir()) {
304
491
  const binDir = userLocalBinDir(home);
305
492
  const log = [];
306
- const names = ["remote-pi", "pi-supervisord"];
493
+ // Windows shims are `.cmd` files (linkCliBinaries writes those); POSIX uses
494
+ // extensionless symlinks. Match what was actually created on this platform.
495
+ const names = platform() === "win32"
496
+ ? ["remote-pi.cmd", "pi-supervisord.cmd"]
497
+ : ["remote-pi", "pi-supervisord"];
307
498
  const removed = [];
308
499
  for (const name of names) {
309
500
  const path = join(binDir, name);
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/daemon/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/daemon/install.ts"],"names":[],"mappings":"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"}
@@ -53,8 +53,39 @@ export declare const EXIT_DAEMON_FRESH_SESSION = 42;
53
53
  * which risks shell injection). An explicit path or an already-suffixed name is
54
54
  * used as-is. POSIX returns the name unchanged. Best-effort: if `where` fails,
55
55
  * fall back to the bare name (spawn will surface ENOENT honestly).
56
+ *
57
+ * `where` lists every match in PATH order, which on pi-node installs puts the
58
+ * extensionless `pi` (a shell script) BEFORE `pi.cmd`. Naively taking the first
59
+ * line spawns the unrunnable script → ENOENT → "crashed". So we prefer a result
60
+ * with a real Windows executable extension and only fall back to the first line.
56
61
  */
57
62
  export declare function resolvePiBin(piBin: string, plat?: NodeJS.Platform): string;
63
+ /** What to pass to `spawn`: the executable and any args to prepend before the
64
+ * caller's args. On POSIX (and for `.exe`) `prefixArgs` is empty. */
65
+ export interface PiSpawnTarget {
66
+ command: string;
67
+ prefixArgs: string[];
68
+ }
69
+ /**
70
+ * Resolve `pi` to a directly-spawnable target (plan/40). On Windows `pi` is an
71
+ * npm `.cmd` shim, which modern Node refuses to `spawn` without `shell:true`
72
+ * (EINVAL, post CVE-2024-27980). Wrapping it in `cmd.exe` would (a) add a layer
73
+ * that orphans the real `node` on kill and (b) complicate stdio — both fatal for
74
+ * a long-lived RPC daemon the supervisor must stop/restart cleanly. Instead we
75
+ * parse the shim to recover the underlying `node <cli.js>` and spawn that
76
+ * directly: one process, clean signals, clean stdio.
77
+ *
78
+ * Falls back to the bare resolved path when not a parseable shim (e.g. a real
79
+ * `pi.exe`, or POSIX) so `spawn` surfaces any real error honestly.
80
+ */
81
+ export declare function resolvePiSpawn(piBin: string, plat?: NodeJS.Platform, nodeExe?: string): PiSpawnTarget;
82
+ /**
83
+ * Extract the JS entry an npm `.cmd` shim launches. npm shims invoke
84
+ * `"%_prog%" "%dp0%\<relative>\entry.js" %*`; we recover `<dir>\<relative>\entry.js`
85
+ * (dir = the shim's own folder, i.e. `%dp0%`). Returns null when the shim
86
+ * doesn't match the expected shape or the target is missing.
87
+ */
88
+ export declare function _npmShimTarget(cmdPath: string): string | null;
58
89
  /**
59
90
  * Maps an RPC stdout line to a busy-state transition: `message_start` → true
60
91
  * (a message is streaming), `message_end` → false. Other lines → null (no
@@ -1,7 +1,14 @@
1
1
  import { execFileSync, spawn } from "node:child_process";
2
2
  import { EventEmitter } from "node:events";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { dirname, join } from "node:path";
3
5
  import { defaultAgentName, loadLocalConfig } from "../session/local_config.js";
4
6
  export const EXIT_DAEMON_FRESH_SESSION = 42;
7
+ /** Windows extensions `spawn` (without `shell`) can actually launch, in
8
+ * preference order: native `.exe` first, then the `.cmd`/`.bat` shims (run via
9
+ * cmd.exe). An extensionless `pi` is a Unix shell script Node CANNOT spawn on
10
+ * Windows — picking it yields `spawn … ENOENT` and the daemon shows "crashed". */
11
+ const WIN_EXECUTABLE_EXTS = [".exe", ".cmd", ".bat", ".com"];
5
12
  /**
6
13
  * Resolve the `pi` executable for `spawn` (plan/40, decision C). On Windows a
7
14
  * bare `pi` is actually `pi.cmd`/`pi.ps1`, and `spawn` won't find it without an
@@ -9,6 +16,11 @@ export const EXIT_DAEMON_FRESH_SESSION = 42;
9
16
  * which risks shell injection). An explicit path or an already-suffixed name is
10
17
  * used as-is. POSIX returns the name unchanged. Best-effort: if `where` fails,
11
18
  * fall back to the bare name (spawn will surface ENOENT honestly).
19
+ *
20
+ * `where` lists every match in PATH order, which on pi-node installs puts the
21
+ * extensionless `pi` (a shell script) BEFORE `pi.cmd`. Naively taking the first
22
+ * line spawns the unrunnable script → ENOENT → "crashed". So we prefer a result
23
+ * with a real Windows executable extension and only fall back to the first line.
12
24
  */
13
25
  export function resolvePiBin(piBin, plat = process.platform) {
14
26
  if (plat !== "win32")
@@ -17,15 +29,60 @@ export function resolvePiBin(piBin, plat = process.platform) {
17
29
  return piBin;
18
30
  try {
19
31
  const out = execFileSync("where", [piBin], { encoding: "utf8" });
20
- const first = out.split(/\r?\n/).map((l) => l.trim()).filter(Boolean)[0];
21
- if (first)
22
- return first;
32
+ const lines = out.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
33
+ const runnable = lines.find((l) => WIN_EXECUTABLE_EXTS.some((ext) => l.toLowerCase().endsWith(ext)));
34
+ const chosen = runnable ?? lines[0];
35
+ if (chosen)
36
+ return chosen;
23
37
  }
24
38
  catch {
25
39
  /* `where` unavailable or `pi` not found — fall back to the bare name */
26
40
  }
27
41
  return piBin;
28
42
  }
43
+ /**
44
+ * Resolve `pi` to a directly-spawnable target (plan/40). On Windows `pi` is an
45
+ * npm `.cmd` shim, which modern Node refuses to `spawn` without `shell:true`
46
+ * (EINVAL, post CVE-2024-27980). Wrapping it in `cmd.exe` would (a) add a layer
47
+ * that orphans the real `node` on kill and (b) complicate stdio — both fatal for
48
+ * a long-lived RPC daemon the supervisor must stop/restart cleanly. Instead we
49
+ * parse the shim to recover the underlying `node <cli.js>` and spawn that
50
+ * directly: one process, clean signals, clean stdio.
51
+ *
52
+ * Falls back to the bare resolved path when not a parseable shim (e.g. a real
53
+ * `pi.exe`, or POSIX) so `spawn` surfaces any real error honestly.
54
+ */
55
+ export function resolvePiSpawn(piBin, plat = process.platform, nodeExe = process.execPath) {
56
+ const resolved = resolvePiBin(piBin, plat);
57
+ if (plat !== "win32")
58
+ return { command: resolved, prefixArgs: [] };
59
+ if (/\.(cmd|bat)$/i.test(resolved)) {
60
+ const target = _npmShimTarget(resolved);
61
+ if (target)
62
+ return { command: nodeExe, prefixArgs: [target] };
63
+ }
64
+ return { command: resolved, prefixArgs: [] };
65
+ }
66
+ /**
67
+ * Extract the JS entry an npm `.cmd` shim launches. npm shims invoke
68
+ * `"%_prog%" "%dp0%\<relative>\entry.js" %*`; we recover `<dir>\<relative>\entry.js`
69
+ * (dir = the shim's own folder, i.e. `%dp0%`). Returns null when the shim
70
+ * doesn't match the expected shape or the target is missing.
71
+ */
72
+ export function _npmShimTarget(cmdPath) {
73
+ let content;
74
+ try {
75
+ content = readFileSync(cmdPath, "utf8");
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ const m = content.match(/"%dp0%\\([^"]+\.[cm]?js)"/i);
81
+ if (!m)
82
+ return null;
83
+ const target = join(dirname(cmdPath), m[1]);
84
+ return existsSync(target) ? target : null;
85
+ }
29
86
  /**
30
87
  * Maps an RPC stdout line to a busy-state transition: `message_start` → true
31
88
  * (a message is streaming), `message_end` → false. Other lines → null (no
@@ -151,7 +208,7 @@ export class RpcChild extends EventEmitter {
151
208
  this._stopping = false; // fresh start — a later signal IS a real crash
152
209
  this._busy = false;
153
210
  this._state = "starting";
154
- const piBin = resolvePiBin(this.opts.piBin ?? "pi");
211
+ const piTarget = resolvePiSpawn(this.opts.piBin ?? "pi");
155
212
  // Name the (single) daemon session after the daemon's configured identity,
156
213
  // so it shows up stably instead of an auto-generated name on each restart.
157
214
  // Prefer the supervisor-injected config; fall back to the on-disk file.
@@ -159,7 +216,9 @@ export class RpcChild extends EventEmitter {
159
216
  const sessionName = cfg.agent_name ?? defaultAgentName(this.opts.cwd);
160
217
  const useContinue = !this.forceFreshSessionOnNextSpawn;
161
218
  this.forceFreshSessionOnNextSpawn = false;
162
- const args = rpcSpawnArgs(this.opts.extensionPath, sessionName, useContinue);
219
+ // On Windows `prefixArgs` carries pi's cli.js (we spawn node directly); on
220
+ // POSIX it's empty and `command` is `pi` itself.
221
+ const args = [...piTarget.prefixArgs, ...rpcSpawnArgs(this.opts.extensionPath, sessionName, useContinue)];
163
222
  const env = {
164
223
  ...process.env,
165
224
  ...this.opts.env,
@@ -169,10 +228,15 @@ export class RpcChild extends EventEmitter {
169
228
  // Inject the daemon config inline so the child needs no config file.
170
229
  ...(this.opts.config ? { REMOTE_PI_DIRECT_CONFIG: JSON.stringify(this.opts.config) } : {}),
171
230
  };
172
- const child = spawn(piBin, args, {
231
+ const child = spawn(piTarget.command, args, {
173
232
  cwd: this.opts.cwd,
174
233
  env,
175
234
  stdio: ["pipe", "pipe", "pipe"],
235
+ // Windows: suppress any console window the child might allocate. With the
236
+ // node+cli.js path (resolvePiSpawn) there's no cmd.exe layer, but keep this
237
+ // as belt-and-suspenders alongside the supervisor's hidden wscript launcher
238
+ // (service-templates/task-launcher.vbs.template). No-op on POSIX.
239
+ windowsHide: process.platform === "win32",
176
240
  });
177
241
  this.child = child;
178
242
  this._startedAt = Date.now();