clawconnect-agent 0.1.21 → 0.1.22
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.
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { ServiceStatus } from "./service-manager-common.js";
|
|
2
2
|
export declare const TASK_NAME = "ClawConnectAgent";
|
|
3
|
+
export declare const WINDOWS_SERVICE_RUNNER_NAME = "clawconnect-service.ps1";
|
|
3
4
|
export declare function windowsTaskName(profile?: string): string;
|
|
4
5
|
export declare function buildWindowsPowerShellBootstrap(command: string): string;
|
|
5
6
|
export declare function normalizeWindowsServiceLogEncoding(path: string): void;
|
|
6
7
|
export declare function buildWindowsServiceProcessCommand(args: string[], logPath: string, errorLogPath: string): string;
|
|
8
|
+
export declare function windowsServiceRunnerPath(profile?: string): string;
|
|
9
|
+
export declare function buildWindowsServiceTaskCommand(runnerPath: string): string;
|
|
10
|
+
export declare function writeWindowsServiceRunner(profile: string | undefined, args: string[], logPath: string, errorLogPath: string): string;
|
|
7
11
|
/**
|
|
8
12
|
* Kill any running node processes that are executing this specific script.
|
|
9
13
|
* Uses execFileSync to bypass cmd.exe, avoiding CMD quote-mangling.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { execFileSync } from "child_process";
|
|
2
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
-
import {
|
|
2
|
+
import { existsSync, readFileSync, unlinkSync, writeFileSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { ensureLogDir, getProfileErrorLogPath, getProfileLogDir, getProfileLogPath, getProgramArgs, resolveServiceEntryPath, setRestrictiveFilePermissions, } from "./service-manager-common.js";
|
|
4
5
|
import { getActiveProfile, normalizeProfileName } from "../config/profile.js";
|
|
5
6
|
import { decodeTextBuffer } from "./text-file-decoder.js";
|
|
6
7
|
export const TASK_NAME = "ClawConnectAgent";
|
|
8
|
+
export const WINDOWS_SERVICE_RUNNER_NAME = "clawconnect-service.ps1";
|
|
7
9
|
export function windowsTaskName(profile) {
|
|
8
10
|
const normalized = normalizeProfileName(profile);
|
|
9
11
|
return normalized ? `${TASK_NAME}-${normalized}` : TASK_NAME;
|
|
@@ -39,6 +41,25 @@ export function buildWindowsServiceProcessCommand(args, logPath, errorLogPath) {
|
|
|
39
41
|
}
|
|
40
42
|
return buildWindowsPowerShellBootstrap(`& ${qps(execPath)} ${execArgs.map((arg) => qps(arg)).join(" ")} >> ${qps(logPath)} 2>> ${qps(errorLogPath)}`);
|
|
41
43
|
}
|
|
44
|
+
export function windowsServiceRunnerPath(profile) {
|
|
45
|
+
return join(getProfileLogDir(profile), WINDOWS_SERVICE_RUNNER_NAME);
|
|
46
|
+
}
|
|
47
|
+
export function buildWindowsServiceTaskCommand(runnerPath) {
|
|
48
|
+
return `powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File "${runnerPath}"`;
|
|
49
|
+
}
|
|
50
|
+
export function writeWindowsServiceRunner(profile, args, logPath, errorLogPath) {
|
|
51
|
+
const runnerPath = windowsServiceRunnerPath(profile);
|
|
52
|
+
const script = `${buildWindowsServiceProcessCommand(args, logPath, errorLogPath)}\r\n`;
|
|
53
|
+
// Windows PowerShell 5.1 treats UTF-8 files without a BOM as the active ANSI
|
|
54
|
+
// code page. Keep the BOM so user names and install paths remain intact.
|
|
55
|
+
const utf8WithBom = Buffer.concat([
|
|
56
|
+
Buffer.from([0xef, 0xbb, 0xbf]),
|
|
57
|
+
Buffer.from(script, "utf8"),
|
|
58
|
+
]);
|
|
59
|
+
writeFileSync(runnerPath, utf8WithBom);
|
|
60
|
+
setRestrictiveFilePermissions(runnerPath);
|
|
61
|
+
return runnerPath;
|
|
62
|
+
}
|
|
42
63
|
/**
|
|
43
64
|
* Kill any running node processes that are executing this specific script.
|
|
44
65
|
* Uses execFileSync to bypass cmd.exe, avoiding CMD quote-mangling.
|
|
@@ -125,6 +146,12 @@ export function installWindowsService(profile) {
|
|
|
125
146
|
// 旧版 PowerShell 可能创建 UTF-16LE 日志;转换后再以 UTF-8 追加,避免一个文件混合两种编码。
|
|
126
147
|
normalizeWindowsServiceLogEncoding(logPath);
|
|
127
148
|
normalizeWindowsServiceLogEncoding(errorLogPath);
|
|
149
|
+
// Keep the scheduled task command short. schtasks limits /tr to 261
|
|
150
|
+
// characters, while NVM/npm paths plus UTF-8 bootstrap and log redirects
|
|
151
|
+
// can easily exceed it when embedded inline.
|
|
152
|
+
const runnerPath = writeWindowsServiceRunner(resolvedProfile, args, logPath, errorLogPath);
|
|
153
|
+
const taskCommand = buildWindowsServiceTaskCommand(runnerPath);
|
|
154
|
+
const taskArguments = taskCommand.slice("powershell.exe ".length);
|
|
128
155
|
// ── Attempt 1: PowerShell ScheduledTasks module ──────────────────────
|
|
129
156
|
// Supports RestartOnFailure (crash recovery) and full settings control.
|
|
130
157
|
// Available on Windows 10 / Server 2016+.
|
|
@@ -133,14 +160,8 @@ export function installWindowsService(profile) {
|
|
|
133
160
|
// This is the most reliable native way to run a background console app on login.
|
|
134
161
|
// Stdout/stderr are redirected to log files, matching the behavior of the
|
|
135
162
|
// Linux (systemd/nohup) and macOS (launchd) service managers.
|
|
136
|
-
const innerCmd = buildWindowsServiceProcessCommand(args, logPath, errorLogPath);
|
|
137
|
-
// The -Argument value uses a PowerShell double-quote string ("" → literal ")
|
|
138
|
-
// so that single quotes from qps() inside it are preserved literally.
|
|
139
|
-
// Escape any `$` or `` ` `` in the paths to prevent PowerShell variable expansion.
|
|
140
|
-
const escapedInner = innerCmd.replace(/`/g, "``").replace(/\$/g, "`$");
|
|
141
|
-
const quotedArg = `"-WindowStyle Hidden -Command ""${escapedInner}"""`;
|
|
142
163
|
const psScript = [
|
|
143
|
-
`$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument ${
|
|
164
|
+
`$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument ${qps(taskArguments)}`,
|
|
144
165
|
`$trigger = New-ScheduledTaskTrigger -AtLogon`,
|
|
145
166
|
`$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Highest`,
|
|
146
167
|
`$settings = New-ScheduledTaskSettingsSet -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries`,
|
|
@@ -154,14 +175,7 @@ export function installWindowsService(profile) {
|
|
|
154
175
|
// Fall through to basic schtasks below
|
|
155
176
|
}
|
|
156
177
|
// ── Attempt 2: Basic schtasks (no crash recovery) ────────────────────
|
|
157
|
-
|
|
158
|
-
// schtasks stores /tr as-is; CreateProcess parses it with CommandLineToArgvW.
|
|
159
|
-
// The inner command is passed as a single argument to -Command via double quotes
|
|
160
|
-
// escaped as \" per CommandLineToArgvW convention.
|
|
161
|
-
// Stdout/stderr are redirected to log files via PowerShell >> / 2>> operators.
|
|
162
|
-
const fallbackInner = buildWindowsServiceProcessCommand(args, logPath, errorLogPath);
|
|
163
|
-
const fallbackTr = `powershell.exe -WindowStyle Hidden -Command "${fallbackInner.replace(/"/g, '\\"')}"`;
|
|
164
|
-
execFileSync("schtasks", ["/create", "/tn", taskName, "/tr", fallbackTr, "/sc", "onlogon", "/f"], { stdio: "pipe" });
|
|
178
|
+
execFileSync("schtasks", ["/create", "/tn", taskName, "/tr", taskCommand, "/sc", "onlogon", "/f"], { stdio: "pipe" });
|
|
165
179
|
execFileSync("schtasks", ["/run", "/tn", taskName], { stdio: "pipe" });
|
|
166
180
|
return true;
|
|
167
181
|
}
|
|
@@ -173,6 +187,7 @@ export function installWindowsService(profile) {
|
|
|
173
187
|
export function uninstallWindowsService(profile) {
|
|
174
188
|
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
175
189
|
const taskName = windowsTaskName(resolvedProfile);
|
|
190
|
+
const runnerPath = windowsServiceRunnerPath(resolvedProfile);
|
|
176
191
|
try {
|
|
177
192
|
let changed = false;
|
|
178
193
|
try {
|
|
@@ -185,6 +200,13 @@ export function uninstallWindowsService(profile) {
|
|
|
185
200
|
if (killWindowsProcess(resolvedProfile)) {
|
|
186
201
|
changed = true;
|
|
187
202
|
}
|
|
203
|
+
try {
|
|
204
|
+
unlinkSync(runnerPath);
|
|
205
|
+
changed = true;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// runner might not exist
|
|
209
|
+
}
|
|
188
210
|
return changed;
|
|
189
211
|
}
|
|
190
212
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-manager-windows.js","sourceRoot":"","sources":["../../src/platform/service-manager-windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"service-manager-windows.js","sourceRoot":"","sources":["../../src/platform/service-manager-windows.ts"],"names":[],"mappings":"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"}
|