peerllm-host-cli 2.2.0 → 2.2.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/cli/commands/service.d.ts +21 -0
- package/dist/cli/commands/service.d.ts.map +1 -1
- package/dist/cli/commands/service.js +53 -13
- package/dist/cli/commands/service.js.map +1 -1
- package/package.json +1 -1
- package/templates/launchd/com.peerllm.host.plist +1 -3
- package/templates/systemd/peerllm-host.service +3 -2
- package/templates/windows/install-service.ps1 +5 -4
|
@@ -1,3 +1,24 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
interface DaemonExec {
|
|
3
|
+
program: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve how the installed service unit should launch the daemon. launchd and
|
|
8
|
+
* systemd run with a minimal PATH, so a bare command name — or the `peerllm-host`
|
|
9
|
+
* wrapper, whose `#!/usr/bin/env node` shebang still needs `node` on PATH — fails to
|
|
10
|
+
* start on Homebrew/nvm installs where node lives outside launchd's default PATH.
|
|
11
|
+
* We instead invoke the *current* Node binary and this CLI's entry script, both by
|
|
12
|
+
* absolute path, so the unit is fully PATH-independent. `--cli-bin` overrides with a
|
|
13
|
+
* single executable (arg0) for anyone who deliberately wants the wrapper form.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveDaemonExec(cliBinOverride?: string): DaemonExec;
|
|
16
|
+
/** Full argv the service unit runs: <program> [args…] start --foreground. */
|
|
17
|
+
export declare function daemonArgv(exec: DaemonExec): string[];
|
|
18
|
+
/** Render argv as indented plist <string> lines for ProgramArguments. */
|
|
19
|
+
export declare function plistProgramArgs(argv: string[]): string;
|
|
20
|
+
/** Render argv as a systemd ExecStart line, quoting args that contain whitespace. */
|
|
21
|
+
export declare function execStartLine(argv: string[]): string;
|
|
2
22
|
export declare function makeServiceCommand(): Command;
|
|
23
|
+
export {};
|
|
3
24
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAYrE;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAErD;AAMD,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEvD;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEpD;AA0MD,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
3
3
|
import { mkdir, writeFile, unlink } from "node:fs/promises";
|
|
4
4
|
import { homedir, platform as osPlatform, userInfo } from "node:os";
|
|
5
5
|
import { dirname, join, resolve } from "node:path";
|
|
@@ -13,26 +13,58 @@ const __dirname = dirname(__filename);
|
|
|
13
13
|
function templatesDir() {
|
|
14
14
|
return resolve(__dirname, "..", "..", "..", "templates");
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Resolve how the installed service unit should launch the daemon. launchd and
|
|
18
|
+
* systemd run with a minimal PATH, so a bare command name — or the `peerllm-host`
|
|
19
|
+
* wrapper, whose `#!/usr/bin/env node` shebang still needs `node` on PATH — fails to
|
|
20
|
+
* start on Homebrew/nvm installs where node lives outside launchd's default PATH.
|
|
21
|
+
* We instead invoke the *current* Node binary and this CLI's entry script, both by
|
|
22
|
+
* absolute path, so the unit is fully PATH-independent. `--cli-bin` overrides with a
|
|
23
|
+
* single executable (arg0) for anyone who deliberately wants the wrapper form.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveDaemonExec(cliBinOverride) {
|
|
26
|
+
if (cliBinOverride)
|
|
27
|
+
return { program: cliBinOverride, args: [] };
|
|
28
|
+
const entryPath = resolve(__dirname, "..", "index.js");
|
|
29
|
+
// realpathSync collapses Homebrew/nvm symlinks; fall back to the resolved path
|
|
30
|
+
// if it can't be stat'd (never let the install throw over path resolution).
|
|
31
|
+
let entry = entryPath;
|
|
32
|
+
try {
|
|
33
|
+
entry = realpathSync(entryPath);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// keep entryPath
|
|
37
|
+
}
|
|
38
|
+
return { program: process.execPath, args: [entry] };
|
|
39
|
+
}
|
|
40
|
+
/** Full argv the service unit runs: <program> [args…] start --foreground. */
|
|
41
|
+
export function daemonArgv(exec) {
|
|
42
|
+
return [exec.program, ...exec.args, "start", "--foreground"];
|
|
43
|
+
}
|
|
44
|
+
function escapeXml(value) {
|
|
45
|
+
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
46
|
+
}
|
|
47
|
+
/** Render argv as indented plist <string> lines for ProgramArguments. */
|
|
48
|
+
export function plistProgramArgs(argv) {
|
|
49
|
+
return argv.map((arg) => ` <string>${escapeXml(arg)}</string>`).join("\n");
|
|
50
|
+
}
|
|
51
|
+
/** Render argv as a systemd ExecStart line, quoting args that contain whitespace. */
|
|
52
|
+
export function execStartLine(argv) {
|
|
53
|
+
return argv.map((arg) => (/\s/.test(arg) ? `"${arg}"` : arg)).join(" ");
|
|
22
54
|
}
|
|
23
55
|
function fillTemplate(content, vars) {
|
|
24
56
|
return content.replace(/\{([A-Z_]+)\}/g, (_match, key) => Object.prototype.hasOwnProperty.call(vars, key) ? (vars[key] ?? "") : `{${key}}`);
|
|
25
57
|
}
|
|
26
58
|
function buildContext(opts) {
|
|
27
59
|
return {
|
|
28
|
-
|
|
60
|
+
exec: resolveDaemonExec(opts.cliBin),
|
|
29
61
|
configDir: opts.configDir,
|
|
30
62
|
paths: resolvePaths({ configDirOverride: opts.configDir }),
|
|
31
63
|
};
|
|
32
64
|
}
|
|
33
65
|
async function installSystemd(ctx) {
|
|
34
66
|
const template = readFileSync(join(templatesDir(), "systemd", "peerllm-host.service"), "utf8");
|
|
35
|
-
const rendered = fillTemplate(template, {
|
|
67
|
+
const rendered = fillTemplate(template, { EXEC_START: execStartLine(daemonArgv(ctx.exec)) });
|
|
36
68
|
const unitDir = join(homedir(), ".config", "systemd", "user");
|
|
37
69
|
const unitPath = join(unitDir, "peerllm-host.service");
|
|
38
70
|
await mkdir(unitDir, { recursive: true });
|
|
@@ -58,7 +90,7 @@ async function uninstallSystemd() {
|
|
|
58
90
|
async function installLaunchd(ctx) {
|
|
59
91
|
const template = readFileSync(join(templatesDir(), "launchd", "com.peerllm.host.plist"), "utf8");
|
|
60
92
|
const rendered = fillTemplate(template, {
|
|
61
|
-
|
|
93
|
+
PROGRAM_ARGS: plistProgramArgs(daemonArgv(ctx.exec)),
|
|
62
94
|
LOG_DIR: ctx.paths.logsDir,
|
|
63
95
|
});
|
|
64
96
|
await mkdir(ctx.paths.logsDir, { recursive: true });
|
|
@@ -84,14 +116,22 @@ async function uninstallLaunchd() {
|
|
|
84
116
|
}
|
|
85
117
|
async function installWindows(ctx) {
|
|
86
118
|
const scriptPath = join(templatesDir(), "windows", "install-service.ps1");
|
|
119
|
+
const argv = daemonArgv(ctx.exec);
|
|
120
|
+
const execute = argv[0] ?? process.execPath;
|
|
121
|
+
const taskArgs = argv
|
|
122
|
+
.slice(1)
|
|
123
|
+
.map((arg) => (/\s/.test(arg) ? `"${arg}"` : arg))
|
|
124
|
+
.join(" ");
|
|
87
125
|
const result = spawnSync("powershell.exe", [
|
|
88
126
|
"-NoProfile",
|
|
89
127
|
"-ExecutionPolicy",
|
|
90
128
|
"Bypass",
|
|
91
129
|
"-File",
|
|
92
130
|
scriptPath,
|
|
93
|
-
"-
|
|
94
|
-
|
|
131
|
+
"-Execute",
|
|
132
|
+
execute,
|
|
133
|
+
"-Arguments",
|
|
134
|
+
taskArgs,
|
|
95
135
|
], { encoding: "utf8" });
|
|
96
136
|
if (result.status !== 0) {
|
|
97
137
|
throw new Error(result.stderr.trim() || "PowerShell install failed");
|
|
@@ -119,7 +159,7 @@ async function uninstallWindows() {
|
|
|
119
159
|
function makeInstall() {
|
|
120
160
|
return new Command("install")
|
|
121
161
|
.description("Install the platform-appropriate service unit (user-level)")
|
|
122
|
-
.option("--cli-bin <path>", "absolute path to
|
|
162
|
+
.option("--cli-bin <path>", "absolute path to a launcher binary (default: current node + this CLI's entry script, PATH-independent)")
|
|
123
163
|
.option("--config-dir <path>", "override config directory")
|
|
124
164
|
.action(async (opts) => {
|
|
125
165
|
const ctx = buildContext(opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,8 +5,9 @@ Wants=network-online.target
|
|
|
5
5
|
|
|
6
6
|
[Service]
|
|
7
7
|
Type=simple
|
|
8
|
-
#
|
|
9
|
-
|
|
8
|
+
# Rendered at install time by `peerllm-host service install` as an absolute
|
|
9
|
+
# node binary + this CLI's entry script, so the unit does not depend on PATH.
|
|
10
|
+
ExecStart={EXEC_START}
|
|
10
11
|
Restart=on-failure
|
|
11
12
|
RestartSec=5
|
|
12
13
|
# Daemon writes its own logs under ~/PeerLLM/logs/; journal also captures stderr.
|
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
# is out of v1 scope.
|
|
5
5
|
|
|
6
6
|
param(
|
|
7
|
-
[string]$
|
|
7
|
+
[string]$Execute = "node",
|
|
8
|
+
[string]$Arguments = "start --foreground",
|
|
8
9
|
[string]$TaskName = "PeerLLM Host"
|
|
9
10
|
)
|
|
10
11
|
|
|
11
|
-
if (-not (Test-Path $
|
|
12
|
-
Write-Error "
|
|
12
|
+
if (-not (Test-Path $Execute)) {
|
|
13
|
+
Write-Error "launcher not found at $Execute"
|
|
13
14
|
exit 1
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
$action = New-ScheduledTaskAction -Execute $
|
|
17
|
+
$action = New-ScheduledTaskAction -Execute $Execute -Argument $Arguments
|
|
17
18
|
$trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
|
|
18
19
|
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd `
|
|
19
20
|
-AllowStartIfOnBatteries -ExecutionTimeLimit 0
|