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.
- package/dist/daemon/install.d.ts +33 -2
- package/dist/daemon/install.js +215 -24
- package/dist/daemon/install.js.map +1 -1
- package/dist/daemon/rpc_child.d.ts +31 -0
- package/dist/daemon/rpc_child.js +70 -6
- package/dist/daemon/rpc_child.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/service-templates/task-launcher.vbs.template +10 -0
- package/service-templates/task-scheduler.xml.template +3 -3
package/dist/daemon/install.d.ts
CHANGED
|
@@ -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
|
package/dist/daemon/install.js
CHANGED
|
@@ -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-
|
|
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
|
|
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).
|
|
155
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
184
|
-
|
|
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
|
|
253
|
-
//
|
|
254
|
-
// `
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1I,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA4BzC,MAAM,UAAU,cAAc;IAC5B,QAAQ,QAAQ,EAAE,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC;QAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC/B,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC;IAChC,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAU,yBAAyB;IAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAuB,cAAc;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAmB,OAAO;IAC9D,OAAO,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAU,yBAAyB;IAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAuB,cAAc;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAmB,OAAO;IAC9D,OAAO,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,uEAAuE;IACvE,mEAAmE;IACnE,qEAAqE;IACrE,+BAA+B;IAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAA6C;IACxE,6EAA6E;IAC7E,0DAA0D;IAC1D,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAU,yBAAyB;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,eAAe;IAC1E,MAAM,IAAI,GACR,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACjD,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAC/C,6BAA6B,CAAC;IAChC,OAAO,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,+BAA+B,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,gCAAgC,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACxD,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAC5D,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,kFAAkF;AAClF,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACpE,CAAC;AAcD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,IAAI,EAAE,cAAc,EAAE;QACtB,UAAU,EAAE,oBAAoB,EAAE;QAClC,IAAI,EAAE,OAAO,EAAE;QACf,IAAI,EAAE,QAAQ,EAAE,CAAC,QAAQ;QACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,8BAA8B;KAC5D,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAgB;IAC/D,OAAO,QAAQ;SACZ,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;SAC/B,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC;SAC3C,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;SAC/B,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;SAC/B,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAmB,iBAAiB,EAAE;IACnE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAChF,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,UAAU,IAAI;YACrD,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;IACnG,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9G,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,2EAA2E;QAC3E,4EAA4E;QAC5E,iEAAiE;QACjE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B;QAClE,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,0BAA0B;IAChE,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAE9B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,mEAAmE;QACnE,sEAAsE;QACtE,kEAAkE;QAClE,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,GAAG,CAAC,IAAI,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,+BAA+B,CAAC,EAAE,GAAG,CAAC,CAAC;QACxF,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,4EAA4E;QAC5E,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACtF,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,0CAA0C,iBAAiB,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC3C,CAAC;AASD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9G,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,+BAA+B,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,8DAA8D;QAC9D,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACvE,GAAG,CAAC,IAAI,CAAC,qCAAqC,iBAAiB,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAC9E,OAAO,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,KAAK,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,WAAW,aAAa,GAAG,CAAC,CAAC;IAE5D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACpD,CAAC;AAED,8EAA8E;AAE9E,SAAS,KAAK,CAAC,GAAW,EAAE,IAAc,EAAE,GAAa;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YACjE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAmE,CAAC;QAChF,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,MAAM,IAAI,KAAK,CACb,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;0EAC0E;AAC1E,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAc,EAAE,GAAa;IAC1D,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;AACnE,CAAC;AAoCD,MAAM,UAAU,eAAe,CAAC,OAAe,OAAO,EAAE;IACtD,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,UAAkB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;IAC/E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,OAAO,EAAE,EACxB,QAAqD,EAAE;IAEvD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAErC,4EAA4E;IAC5E,kEAAkE;IAClE,6EAA6E;IAC7E,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM;YACN,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,CAAC,yFAAyF,CAAC;SACjG,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,kBAAkB,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAAC;IAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,IAAI;YAC7C,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,kCAAkC,WAAW,IAAI;YACjD,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,qEAAqE;IACrE,qDAAqD;IACrD,IAAI,CAAC;QAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,CAAC;QAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAElE,MAAM,KAAK,GAAgC;QACzC,EAAE,IAAI,EAAE,WAAW,EAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAO,MAAM,EAAE,QAAQ,EAAE;QACjF,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;KACtF,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CACN,YAAY,MAAM,oBAAoB;YACtC,8DAA8D;YAC9D,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACxC,CAAC;AAcD,MAAM,UAAU,iBAAiB,CAAC,OAAe,OAAO,EAAE;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAoC,EAAE,CAAC;IAEpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,mEAAmE;YACnE,8DAA8D;YAC9D,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnD,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,QAAgB,EAAE,MAAc,EAAE,GAAa;IACtE,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IAEjD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,WAAW,QAAQ,MAAM,MAAM,cAAc,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,sEAAsE;IACtE,IAAI,CAAC;QAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5D,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,CAAC,WAAW,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
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
|
package/dist/daemon/rpc_child.js
CHANGED
|
@@ -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
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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();
|