clawconnect-agent 0.1.17 → 0.1.21
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/.env.example +22 -2
- package/README.md +8 -0
- package/README.zh-CN.md +29 -0
- package/dist/commands/install.js +3 -19
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/send-file.js +15 -2
- package/dist/commands/send-file.js.map +1 -1
- package/dist/commands/set-token.js +2 -1
- package/dist/commands/set-token.js.map +1 -1
- package/dist/commands/status.js +34 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/config/config.d.ts +1 -1
- package/dist/config/config.js +38 -10
- package/dist/config/config.js.map +1 -1
- package/dist/config/env.d.ts +2 -1
- package/dist/config/env.js +32 -2
- package/dist/config/env.js.map +1 -1
- package/dist/core/relay/chat-send-idempotency.d.ts +61 -0
- package/dist/core/relay/chat-send-idempotency.js +201 -0
- package/dist/core/relay/chat-send-idempotency.js.map +1 -0
- package/dist/core/relay/file-upload.d.ts +2 -0
- package/dist/core/relay/file-upload.js +4 -1
- package/dist/core/relay/file-upload.js.map +1 -1
- package/dist/core/relay/voice-input.js +13 -7
- package/dist/core/relay/voice-input.js.map +1 -1
- package/dist/hermes/hermes-relay-manager.d.ts +40 -0
- package/dist/hermes/hermes-relay-manager.js +249 -23
- package/dist/hermes/hermes-relay-manager.js.map +1 -1
- package/dist/hermes/relay/hermes-state-db-realtime.js +4 -21
- package/dist/hermes/relay/hermes-state-db-realtime.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-api-client.js +5 -30
- package/dist/hermes/runtime/hermes-runtime-api-client.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-api-settings.d.ts +19 -0
- package/dist/hermes/runtime/hermes-runtime-api-settings.js +69 -0
- package/dist/hermes/runtime/hermes-runtime-api-settings.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-backups.js +6 -4
- package/dist/hermes/runtime/hermes-runtime-backups.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-chat.d.ts +2 -0
- package/dist/hermes/runtime/hermes-runtime-chat.js +44 -4
- package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-lifecycle.js +3 -2
- package/dist/hermes/runtime/hermes-runtime-lifecycle.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-paths.d.ts +9 -0
- package/dist/hermes/runtime/hermes-runtime-paths.js +67 -0
- package/dist/hermes/runtime/hermes-runtime-paths.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-process.d.ts +2 -0
- package/dist/hermes/runtime/hermes-runtime-process.js +70 -30
- package/dist/hermes/runtime/hermes-runtime-process.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-skills.js +10 -5
- package/dist/hermes/runtime/hermes-runtime-skills.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-state-db.js +3 -18
- package/dist/hermes/runtime/hermes-runtime-state-db.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/openclaw/backups/backup-manager.js +10 -8
- package/dist/openclaw/backups/backup-manager.js.map +1 -1
- package/dist/openclaw/config/provider-config.js +19 -19
- package/dist/openclaw/config/provider-config.js.map +1 -1
- package/dist/openclaw/handlers/local-handlers.d.ts +1 -0
- package/dist/openclaw/handlers/local-handlers.js +29 -45
- package/dist/openclaw/handlers/local-handlers.js.map +1 -1
- package/dist/openclaw/relay/chat-send-attachments.d.ts +6 -0
- package/dist/openclaw/relay/chat-send-attachments.js +89 -9
- package/dist/openclaw/relay/chat-send-attachments.js.map +1 -1
- package/dist/openclaw/relay/outgoing-media-relay.d.ts +1 -0
- package/dist/openclaw/relay/outgoing-media-relay.js +148 -38
- package/dist/openclaw/relay/outgoing-media-relay.js.map +1 -1
- package/dist/openclaw/relay/session-context.js +2 -3
- package/dist/openclaw/relay/session-context.js.map +1 -1
- package/dist/openclaw/relay-manager.js +82 -45
- package/dist/openclaw/relay-manager.js.map +1 -1
- package/dist/openclaw/runtime/local-runtime.d.ts +1 -0
- package/dist/openclaw/runtime/local-runtime.js +81 -50
- package/dist/openclaw/runtime/local-runtime.js.map +1 -1
- package/dist/openclaw/runtime/openclaw-paths.d.ts +15 -0
- package/dist/openclaw/runtime/openclaw-paths.js +52 -0
- package/dist/openclaw/runtime/openclaw-paths.js.map +1 -0
- package/dist/openclaw/session-store.js +3 -3
- package/dist/openclaw/session-store.js.map +1 -1
- package/dist/platform/process-invocation.d.ts +14 -0
- package/dist/platform/process-invocation.js +72 -0
- package/dist/platform/process-invocation.js.map +1 -0
- package/dist/platform/service-manager-windows.d.ts +14 -5
- package/dist/platform/service-manager-windows.js +90 -80
- package/dist/platform/service-manager-windows.js.map +1 -1
- package/dist/platform/service-manager.js +5 -5
- package/dist/platform/service-manager.js.map +1 -1
- package/dist/platform/text-file-decoder.d.ts +5 -0
- package/dist/platform/text-file-decoder.js +40 -0
- package/dist/platform/text-file-decoder.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* OpenClaw 官方允许安装方式和运行用户独立于状态目录。
|
|
5
|
+
* 所有 ClawConnect 功能必须经过同一解析器,避免连接端口正确但日志、会话或备份仍误读 ~/.openclaw。
|
|
6
|
+
*/
|
|
7
|
+
export function resolveOpenClawStateDir(options = {}) {
|
|
8
|
+
const env = options.env ?? process.env;
|
|
9
|
+
const systemHome = options.systemHome ?? homedir();
|
|
10
|
+
const explicitStateDir = firstNonEmpty(env.OPENCLAW_STATE_DIR, env.CLAWCONNECT_OPENCLAW_HOME);
|
|
11
|
+
if (explicitStateDir) {
|
|
12
|
+
return resolveConfiguredPath(explicitStateDir, systemHome);
|
|
13
|
+
}
|
|
14
|
+
const openClawHome = firstNonEmpty(env.OPENCLAW_HOME);
|
|
15
|
+
return openClawHome
|
|
16
|
+
? join(resolveConfiguredPath(openClawHome, systemHome), ".openclaw")
|
|
17
|
+
: join(systemHome, ".openclaw");
|
|
18
|
+
}
|
|
19
|
+
export function resolveOpenClawConfigPath(options = {}) {
|
|
20
|
+
const env = options.env ?? process.env;
|
|
21
|
+
const systemHome = options.systemHome ?? homedir();
|
|
22
|
+
const explicitConfigPath = firstNonEmpty(env.OPENCLAW_CONFIG_PATH);
|
|
23
|
+
return explicitConfigPath
|
|
24
|
+
? resolveConfiguredPath(explicitConfigPath, systemHome)
|
|
25
|
+
: join(resolveOpenClawStateDir({ env, systemHome }), "openclaw.json");
|
|
26
|
+
}
|
|
27
|
+
export function resolveOpenClawConfigDir(options = {}) {
|
|
28
|
+
return dirname(resolveOpenClawConfigPath(options));
|
|
29
|
+
}
|
|
30
|
+
export function resolveOpenClawAgentsDir(options = {}) {
|
|
31
|
+
return join(resolveOpenClawStateDir(options), "agents");
|
|
32
|
+
}
|
|
33
|
+
export function resolveConfiguredPath(value, systemHome = homedir()) {
|
|
34
|
+
const trimmed = value.trim();
|
|
35
|
+
if (trimmed === "~") {
|
|
36
|
+
return systemHome;
|
|
37
|
+
}
|
|
38
|
+
if (trimmed.startsWith("~/") || trimmed.startsWith("~\\")) {
|
|
39
|
+
return resolve(systemHome, trimmed.slice(2));
|
|
40
|
+
}
|
|
41
|
+
return resolve(trimmed);
|
|
42
|
+
}
|
|
43
|
+
function firstNonEmpty(...values) {
|
|
44
|
+
for (const value of values) {
|
|
45
|
+
const trimmed = value?.trim();
|
|
46
|
+
if (trimmed) {
|
|
47
|
+
return trimmed;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=openclaw-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-paths.js","sourceRoot":"","sources":["../../../src/openclaw/runtime/openclaw-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcnD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAA+B,EAAE;IACvE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IACnD,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC9F,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,YAAY;QACjB,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAA+B,EAAE;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IACnD,MAAM,kBAAkB,GAAG,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnE,OAAO,kBAAkB;QACvB,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,UAAU,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA+B,EAAE;IACxE,OAAO,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA+B,EAAE;IACxE,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,UAAU,GAAG,OAAO,EAAE;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,GAAG,MAAiC;IACzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readdir, readFile } from "fs/promises";
|
|
2
|
-
import { homedir } from "os";
|
|
3
2
|
import { basename, isAbsolute, join, resolve } from "path";
|
|
4
|
-
|
|
3
|
+
import { resolveOpenClawStateDir } from "./runtime/openclaw-paths.js";
|
|
4
|
+
export async function inferLatestOpenClawSessionKey(sessionStoreRoot = resolveOpenClawStateDir()) {
|
|
5
5
|
const agentsDir = join(sessionStoreRoot, "agents");
|
|
6
6
|
let agentEntries;
|
|
7
7
|
try {
|
|
@@ -107,7 +107,7 @@ function userTurnRunId(message, parsed) {
|
|
|
107
107
|
function assistantToolRunId(message, parsed) {
|
|
108
108
|
return normalizeRunId(firstString(message.sourceRunId, message.source_run_id, message.runId, message.run_id, message.turnId, message.turn_id, message.messageId, message.message_id, message.id, parsed.id));
|
|
109
109
|
}
|
|
110
|
-
async function resolveOpenClawSessionLogPath(sessionKey, sessionStoreRoot =
|
|
110
|
+
async function resolveOpenClawSessionLogPath(sessionKey, sessionStoreRoot = resolveOpenClawStateDir()) {
|
|
111
111
|
const trimmedSessionKey = sessionKey.trim();
|
|
112
112
|
if (!trimmedSessionKey) {
|
|
113
113
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/openclaw/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/openclaw/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ProcessInvocation {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
}
|
|
5
|
+
/** Windows 不能由 CreateProcess 直接执行 .cmd/.bat;统一经 cmd.exe,JS 入口统一经当前 Node。 */
|
|
6
|
+
export declare function buildExecutableInvocation(executable: string, args: string[], options?: {
|
|
7
|
+
platform?: NodeJS.Platform;
|
|
8
|
+
nodePath?: string;
|
|
9
|
+
commandShell?: string;
|
|
10
|
+
powershellPath?: string;
|
|
11
|
+
}): ProcessInvocation;
|
|
12
|
+
export declare function buildWindowsCommandLine(args: string[]): string;
|
|
13
|
+
export declare function buildShellCommandInvocation(command: string, platform?: NodeJS.Platform): ProcessInvocation;
|
|
14
|
+
export declare function quoteShellArgument(value: string, platform?: NodeJS.Platform): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { extname } from "node:path";
|
|
2
|
+
/** Windows 不能由 CreateProcess 直接执行 .cmd/.bat;统一经 cmd.exe,JS 入口统一经当前 Node。 */
|
|
3
|
+
export function buildExecutableInvocation(executable, args, options = {}) {
|
|
4
|
+
const platform = options.platform ?? process.platform;
|
|
5
|
+
if (platform !== "win32") {
|
|
6
|
+
return { command: executable, args };
|
|
7
|
+
}
|
|
8
|
+
const extension = extname(executable).toLowerCase();
|
|
9
|
+
if ([".js", ".mjs", ".cjs"].includes(extension)) {
|
|
10
|
+
return { command: options.nodePath ?? process.execPath, args: [executable, ...args] };
|
|
11
|
+
}
|
|
12
|
+
if (extension === ".cmd" || extension === ".bat") {
|
|
13
|
+
return {
|
|
14
|
+
command: options.commandShell ?? process.env.ComSpec ?? "cmd.exe",
|
|
15
|
+
args: ["/d", "/s", "/c", buildWindowsCommandLine([executable, ...args])],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (extension === ".ps1") {
|
|
19
|
+
return {
|
|
20
|
+
command: options.powershellPath ?? "powershell.exe",
|
|
21
|
+
args: ["-NoProfile", "-NonInteractive", "-File", executable, ...args],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return { command: executable, args };
|
|
25
|
+
}
|
|
26
|
+
export function buildWindowsCommandLine(args) {
|
|
27
|
+
return args.map(quoteWindowsArgument).join(" ");
|
|
28
|
+
}
|
|
29
|
+
export function buildShellCommandInvocation(command, platform = process.platform) {
|
|
30
|
+
if (platform !== "win32") {
|
|
31
|
+
return { command: "sh", args: ["-lc", command] };
|
|
32
|
+
}
|
|
33
|
+
const utf8Bootstrap = [
|
|
34
|
+
"$utf8NoBom = [System.Text.UTF8Encoding]::new($false)",
|
|
35
|
+
"[Console]::InputEncoding = $utf8NoBom",
|
|
36
|
+
"[Console]::OutputEncoding = $utf8NoBom",
|
|
37
|
+
"$OutputEncoding = $utf8NoBom",
|
|
38
|
+
command,
|
|
39
|
+
].join("; ");
|
|
40
|
+
return {
|
|
41
|
+
command: "powershell.exe",
|
|
42
|
+
args: ["-NoProfile", "-NonInteractive", "-Command", utf8Bootstrap],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function quoteShellArgument(value, platform = process.platform) {
|
|
46
|
+
if (platform === "win32") {
|
|
47
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
48
|
+
}
|
|
49
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
50
|
+
}
|
|
51
|
+
function quoteWindowsArgument(arg) {
|
|
52
|
+
if (!/[\s"]/.test(arg)) {
|
|
53
|
+
return arg;
|
|
54
|
+
}
|
|
55
|
+
let result = '"';
|
|
56
|
+
let backslashes = 0;
|
|
57
|
+
for (const char of arg) {
|
|
58
|
+
if (char === "\\") {
|
|
59
|
+
backslashes += 1;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (char === '"') {
|
|
63
|
+
result += "\\".repeat(backslashes * 2 + 1) + '"';
|
|
64
|
+
backslashes = 0;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
result += "\\".repeat(backslashes) + char;
|
|
68
|
+
backslashes = 0;
|
|
69
|
+
}
|
|
70
|
+
return result + "\\".repeat(backslashes * 2) + '"';
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=process-invocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-invocation.js","sourceRoot":"","sources":["../../src/platform/process-invocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import type { ServiceStatus } from "./service-manager-common.js";
|
|
2
2
|
export declare const TASK_NAME = "ClawConnectAgent";
|
|
3
|
+
export declare function windowsTaskName(profile?: string): string;
|
|
3
4
|
export declare function buildWindowsPowerShellBootstrap(command: string): string;
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export declare function normalizeWindowsServiceLogEncoding(path: string): void;
|
|
6
|
+
export declare function buildWindowsServiceProcessCommand(args: string[], logPath: string, errorLogPath: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Kill any running node processes that are executing this specific script.
|
|
9
|
+
* Uses execFileSync to bypass cmd.exe, avoiding CMD quote-mangling.
|
|
10
|
+
* Returns true if any processes were killed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildWindowsProcessQueryScript(profile?: string): string;
|
|
13
|
+
export declare function installWindowsService(profile?: string): boolean;
|
|
14
|
+
export declare function uninstallWindowsService(profile?: string): boolean;
|
|
15
|
+
export declare function restartWindowsService(profile?: string): boolean;
|
|
16
|
+
export declare function stopWindowsService(profile?: string): boolean;
|
|
17
|
+
export declare function getWindowsServiceStatus(profile?: string): ServiceStatus;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { execFileSync } from "child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { ensureLogDir, getProfileErrorLogPath, getProfileLogPath, getProgramArgs, resolveServiceEntryPath, } from "./service-manager-common.js";
|
|
4
|
+
import { getActiveProfile, normalizeProfileName } from "../config/profile.js";
|
|
5
|
+
import { decodeTextBuffer } from "./text-file-decoder.js";
|
|
3
6
|
export const TASK_NAME = "ClawConnectAgent";
|
|
7
|
+
export function windowsTaskName(profile) {
|
|
8
|
+
const normalized = normalizeProfileName(profile);
|
|
9
|
+
return normalized ? `${TASK_NAME}-${normalized}` : TASK_NAME;
|
|
10
|
+
}
|
|
4
11
|
function qps(value) {
|
|
5
12
|
return `'${value.replace(/'/g, "''")}'`;
|
|
6
13
|
}
|
|
@@ -16,64 +23,49 @@ export function buildWindowsPowerShellBootstrap(command) {
|
|
|
16
23
|
command,
|
|
17
24
|
].join("; ");
|
|
18
25
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// 2. each " becomes \"
|
|
35
|
-
// 3. wrap the result in quotes
|
|
36
|
-
let result = "";
|
|
37
|
-
for (let i = 0; i < arg.length; i++) {
|
|
38
|
-
let backslashCount = 0;
|
|
39
|
-
while (i < arg.length && arg[i] === "\\") {
|
|
40
|
-
backslashCount++;
|
|
41
|
-
i++;
|
|
42
|
-
}
|
|
43
|
-
if (i >= arg.length) {
|
|
44
|
-
// All backslashes at end: double them before the closing quote
|
|
45
|
-
result += "\\".repeat(backslashCount * 2);
|
|
46
|
-
}
|
|
47
|
-
else if (arg[i] === '"') {
|
|
48
|
-
// Backslashes before a quote: double + add escape quote
|
|
49
|
-
result += "\\".repeat(backslashCount * 2 + 1);
|
|
50
|
-
result += '"';
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// Normal character: backslashes are literal
|
|
54
|
-
result += "\\".repeat(backslashCount);
|
|
55
|
-
result += arg[i];
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return `"${result}"`;
|
|
59
|
-
}
|
|
60
|
-
return arg;
|
|
61
|
-
})
|
|
62
|
-
.join(" ");
|
|
26
|
+
export function normalizeWindowsServiceLogEncoding(path) {
|
|
27
|
+
if (!existsSync(path)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const decoded = decodeTextBuffer(readFileSync(path));
|
|
31
|
+
if (decoded.encoding !== "utf8") {
|
|
32
|
+
writeFileSync(path, decoded.text, "utf8");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function buildWindowsServiceProcessCommand(args, logPath, errorLogPath) {
|
|
36
|
+
const [execPath, ...execArgs] = args;
|
|
37
|
+
if (!execPath) {
|
|
38
|
+
throw new Error("Windows service executable is required");
|
|
39
|
+
}
|
|
40
|
+
return buildWindowsPowerShellBootstrap(`& ${qps(execPath)} ${execArgs.map((arg) => qps(arg)).join(" ")} >> ${qps(logPath)} 2>> ${qps(errorLogPath)}`);
|
|
63
41
|
}
|
|
64
42
|
/**
|
|
65
43
|
* Kill any running node processes that are executing this specific script.
|
|
66
44
|
* Uses execFileSync to bypass cmd.exe, avoiding CMD quote-mangling.
|
|
67
45
|
* Returns true if any processes were killed.
|
|
68
46
|
*/
|
|
69
|
-
function
|
|
47
|
+
export function buildWindowsProcessQueryScript(profile) {
|
|
48
|
+
const profileFilter = normalizeProfileName(profile)
|
|
49
|
+
? `($_.CommandLine -match ('(?:^|\\s)--profile(?:\\s+|=)' + [regex]::Escape($env:CLAW_PROFILE_NAME) + '(?:\\s|$)'))`
|
|
50
|
+
: `($_.CommandLine -notmatch '(?:^|\\s)--profile(?:\\s|=)')`;
|
|
51
|
+
return `Get-CimInstance Win32_Process -Filter "Name = 'node.exe'" | Where-Object { $_.CommandLine -match [regex]::Escape($env:CLAW_SCRIPT_PATH) -and ${profileFilter} } | Select-Object -ExpandProperty ProcessId`;
|
|
52
|
+
}
|
|
53
|
+
function windowsProcessQueryEnv(profile) {
|
|
54
|
+
const scriptPath = process.argv[1];
|
|
55
|
+
return {
|
|
56
|
+
...process.env,
|
|
57
|
+
CLAW_SCRIPT_PATH: scriptPath ? resolveServiceEntryPath(scriptPath) : "",
|
|
58
|
+
CLAW_PROFILE_NAME: normalizeProfileName(profile) ?? "",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function killWindowsProcess(profile) {
|
|
70
62
|
const scriptPath = process.argv[1];
|
|
71
63
|
if (!scriptPath)
|
|
72
64
|
return false;
|
|
73
65
|
const currentPid = process.pid;
|
|
74
66
|
try {
|
|
75
|
-
const psScript =
|
|
76
|
-
const output = execFileSync("powershell", ["-NoProfile", "-Command", psScript], { stdio: "pipe", env:
|
|
67
|
+
const psScript = buildWindowsProcessQueryScript(profile);
|
|
68
|
+
const output = execFileSync("powershell", ["-NoProfile", "-Command", psScript], { stdio: "pipe", env: windowsProcessQueryEnv(profile) })
|
|
77
69
|
.toString()
|
|
78
70
|
.trim();
|
|
79
71
|
const pids = output
|
|
@@ -115,21 +107,33 @@ function killWindowsProcess() {
|
|
|
115
107
|
return false;
|
|
116
108
|
}
|
|
117
109
|
}
|
|
118
|
-
export function installWindowsService() {
|
|
119
|
-
const
|
|
110
|
+
export function installWindowsService(profile) {
|
|
111
|
+
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
112
|
+
const taskName = windowsTaskName(resolvedProfile);
|
|
113
|
+
const logPath = getProfileLogPath(resolvedProfile);
|
|
114
|
+
const errorLogPath = getProfileErrorLogPath(resolvedProfile);
|
|
115
|
+
const args = getProgramArgs(resolvedProfile);
|
|
120
116
|
try {
|
|
121
|
-
ensureLogDir();
|
|
117
|
+
ensureLogDir(resolvedProfile);
|
|
118
|
+
try {
|
|
119
|
+
execFileSync("schtasks", ["/end", "/tn", taskName], { stdio: "pipe" });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// First install or already stopped.
|
|
123
|
+
}
|
|
124
|
+
killWindowsProcess(resolvedProfile);
|
|
125
|
+
// 旧版 PowerShell 可能创建 UTF-16LE 日志;转换后再以 UTF-8 追加,避免一个文件混合两种编码。
|
|
126
|
+
normalizeWindowsServiceLogEncoding(logPath);
|
|
127
|
+
normalizeWindowsServiceLogEncoding(errorLogPath);
|
|
122
128
|
// ── Attempt 1: PowerShell ScheduledTasks module ──────────────────────
|
|
123
129
|
// Supports RestartOnFailure (crash recovery) and full settings control.
|
|
124
130
|
// Available on Windows 10 / Server 2016+.
|
|
125
131
|
try {
|
|
126
|
-
const execPath = args[0];
|
|
127
|
-
const execArgs = args.slice(1);
|
|
128
132
|
// We use 'powershell -WindowStyle Hidden' to launch node without a visible console window.
|
|
129
133
|
// This is the most reliable native way to run a background console app on login.
|
|
130
134
|
// Stdout/stderr are redirected to log files, matching the behavior of the
|
|
131
135
|
// Linux (systemd/nohup) and macOS (launchd) service managers.
|
|
132
|
-
const innerCmd =
|
|
136
|
+
const innerCmd = buildWindowsServiceProcessCommand(args, logPath, errorLogPath);
|
|
133
137
|
// The -Argument value uses a PowerShell double-quote string ("" → literal ")
|
|
134
138
|
// so that single quotes from qps() inside it are preserved literally.
|
|
135
139
|
// Escape any `$` or `` ` `` in the paths to prevent PowerShell variable expansion.
|
|
@@ -140,28 +144,25 @@ export function installWindowsService() {
|
|
|
140
144
|
`$trigger = New-ScheduledTaskTrigger -AtLogon`,
|
|
141
145
|
`$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Highest`,
|
|
142
146
|
`$settings = New-ScheduledTaskSettingsSet -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries`,
|
|
143
|
-
`Register-ScheduledTask -TaskName ${qps(
|
|
147
|
+
`Register-ScheduledTask -TaskName ${qps(taskName)} -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Force | Out-Null`,
|
|
144
148
|
].join("\n");
|
|
145
149
|
execFileSync("powershell", ["-NoProfile", "-Command", psScript], { stdio: "pipe" });
|
|
146
|
-
execFileSync("schtasks", ["/run", "/tn",
|
|
150
|
+
execFileSync("schtasks", ["/run", "/tn", taskName], { stdio: "pipe" });
|
|
147
151
|
return true;
|
|
148
152
|
}
|
|
149
153
|
catch (err) {
|
|
150
154
|
// Fall through to basic schtasks below
|
|
151
155
|
}
|
|
152
156
|
// ── Attempt 2: Basic schtasks (no crash recovery) ────────────────────
|
|
153
|
-
const cmdLine = buildWindowsCommandLine(args);
|
|
154
157
|
// Wrap in powershell -WindowStyle Hidden so no console window pops up at login.
|
|
155
158
|
// schtasks stores /tr as-is; CreateProcess parses it with CommandLineToArgvW.
|
|
156
159
|
// The inner command is passed as a single argument to -Command via double quotes
|
|
157
160
|
// escaped as \" per CommandLineToArgvW convention.
|
|
158
161
|
// Stdout/stderr are redirected to log files via PowerShell >> / 2>> operators.
|
|
159
|
-
const
|
|
160
|
-
const escErrPath = ERROR_LOG_PATH.replace(/'/g, "''");
|
|
161
|
-
const fallbackInner = buildWindowsPowerShellBootstrap(`${cmdLine} >> '${escLogPath}' 2>> '${escErrPath}'`);
|
|
162
|
+
const fallbackInner = buildWindowsServiceProcessCommand(args, logPath, errorLogPath);
|
|
162
163
|
const fallbackTr = `powershell.exe -WindowStyle Hidden -Command "${fallbackInner.replace(/"/g, '\\"')}"`;
|
|
163
|
-
execFileSync("schtasks", ["/create", "/tn",
|
|
164
|
-
execFileSync("schtasks", ["/run", "/tn",
|
|
164
|
+
execFileSync("schtasks", ["/create", "/tn", taskName, "/tr", fallbackTr, "/sc", "onlogon", "/f"], { stdio: "pipe" });
|
|
165
|
+
execFileSync("schtasks", ["/run", "/tn", taskName], { stdio: "pipe" });
|
|
165
166
|
return true;
|
|
166
167
|
}
|
|
167
168
|
catch (err) {
|
|
@@ -169,17 +170,19 @@ export function installWindowsService() {
|
|
|
169
170
|
return false;
|
|
170
171
|
}
|
|
171
172
|
}
|
|
172
|
-
export function uninstallWindowsService() {
|
|
173
|
+
export function uninstallWindowsService(profile) {
|
|
174
|
+
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
175
|
+
const taskName = windowsTaskName(resolvedProfile);
|
|
173
176
|
try {
|
|
174
177
|
let changed = false;
|
|
175
178
|
try {
|
|
176
|
-
execFileSync("schtasks", ["/delete", "/tn",
|
|
179
|
+
execFileSync("schtasks", ["/delete", "/tn", taskName, "/f"], { stdio: "pipe" });
|
|
177
180
|
changed = true;
|
|
178
181
|
}
|
|
179
182
|
catch {
|
|
180
183
|
// task might not exist
|
|
181
184
|
}
|
|
182
|
-
if (killWindowsProcess()) {
|
|
185
|
+
if (killWindowsProcess(resolvedProfile)) {
|
|
183
186
|
changed = true;
|
|
184
187
|
}
|
|
185
188
|
return changed;
|
|
@@ -189,37 +192,44 @@ export function uninstallWindowsService() {
|
|
|
189
192
|
return false;
|
|
190
193
|
}
|
|
191
194
|
}
|
|
192
|
-
export function restartWindowsService() {
|
|
195
|
+
export function restartWindowsService(profile) {
|
|
196
|
+
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
197
|
+
const taskName = windowsTaskName(resolvedProfile);
|
|
193
198
|
// Try to stop the task first
|
|
194
199
|
try {
|
|
195
|
-
execFileSync("schtasks", ["/end", "/tn",
|
|
200
|
+
execFileSync("schtasks", ["/end", "/tn", taskName], { stdio: "pipe" });
|
|
196
201
|
}
|
|
197
202
|
catch {
|
|
198
203
|
// ignore if not running
|
|
199
204
|
}
|
|
200
|
-
killWindowsProcess();
|
|
205
|
+
killWindowsProcess(resolvedProfile);
|
|
201
206
|
try {
|
|
202
|
-
execFileSync("schtasks", ["/run", "/tn",
|
|
207
|
+
execFileSync("schtasks", ["/run", "/tn", taskName], { stdio: "pipe" });
|
|
203
208
|
return true;
|
|
204
209
|
}
|
|
205
210
|
catch {
|
|
206
211
|
// If the task doesn't exist, install it
|
|
207
|
-
return installWindowsService();
|
|
212
|
+
return installWindowsService(resolvedProfile);
|
|
208
213
|
}
|
|
209
214
|
}
|
|
210
|
-
export function stopWindowsService() {
|
|
215
|
+
export function stopWindowsService(profile) {
|
|
216
|
+
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
217
|
+
const taskName = windowsTaskName(resolvedProfile);
|
|
211
218
|
try {
|
|
212
|
-
execFileSync("schtasks", ["/end", "/tn",
|
|
219
|
+
execFileSync("schtasks", ["/end", "/tn", taskName], { stdio: "pipe" });
|
|
213
220
|
}
|
|
214
221
|
catch {
|
|
215
222
|
// ignore if not running
|
|
216
223
|
}
|
|
217
|
-
return killWindowsProcess();
|
|
224
|
+
return killWindowsProcess(resolvedProfile);
|
|
218
225
|
}
|
|
219
|
-
export function getWindowsServiceStatus() {
|
|
226
|
+
export function getWindowsServiceStatus(profile) {
|
|
227
|
+
const resolvedProfile = normalizeProfileName(profile ?? getActiveProfile());
|
|
228
|
+
const taskName = windowsTaskName(resolvedProfile);
|
|
229
|
+
const logPath = getProfileLogPath(resolvedProfile);
|
|
220
230
|
let installed = false;
|
|
221
231
|
try {
|
|
222
|
-
execFileSync("schtasks", ["/query", "/tn",
|
|
232
|
+
execFileSync("schtasks", ["/query", "/tn", taskName], { stdio: "pipe" });
|
|
223
233
|
installed = true;
|
|
224
234
|
}
|
|
225
235
|
catch {
|
|
@@ -230,8 +240,8 @@ export function getWindowsServiceStatus() {
|
|
|
230
240
|
try {
|
|
231
241
|
const scriptPath = process.argv[1];
|
|
232
242
|
if (scriptPath) {
|
|
233
|
-
const psScript =
|
|
234
|
-
const output = execFileSync("powershell", ["-NoProfile", "-Command", psScript], { stdio: "pipe", env:
|
|
243
|
+
const psScript = buildWindowsProcessQueryScript(resolvedProfile);
|
|
244
|
+
const output = execFileSync("powershell", ["-NoProfile", "-Command", psScript], { stdio: "pipe", env: windowsProcessQueryEnv(resolvedProfile) })
|
|
235
245
|
.toString()
|
|
236
246
|
.trim();
|
|
237
247
|
running = /\d+/.test(output);
|
|
@@ -245,10 +255,10 @@ export function getWindowsServiceStatus() {
|
|
|
245
255
|
platform: "windows",
|
|
246
256
|
installed,
|
|
247
257
|
running,
|
|
248
|
-
serviceName:
|
|
258
|
+
serviceName: taskName,
|
|
249
259
|
manager: "Windows Task Scheduler",
|
|
250
|
-
logPath
|
|
251
|
-
startHint: `schtasks /run /tn "${
|
|
260
|
+
logPath,
|
|
261
|
+
startHint: `schtasks /run /tn "${taskName}"`,
|
|
252
262
|
};
|
|
253
263
|
}
|
|
254
264
|
//# sourceMappingURL=service-manager-windows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-manager-windows.js","sourceRoot":"","sources":["../../src/platform/service-manager-windows.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-manager-windows.js","sourceRoot":"","sources":["../../src/platform/service-manager-windows.ts"],"names":[],"mappings":"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"}
|
|
@@ -116,7 +116,7 @@ export function installService(profile) {
|
|
|
116
116
|
case "linux":
|
|
117
117
|
return installLinuxService();
|
|
118
118
|
case "windows":
|
|
119
|
-
return installWindowsService();
|
|
119
|
+
return installWindowsService(profile);
|
|
120
120
|
default:
|
|
121
121
|
return false;
|
|
122
122
|
}
|
|
@@ -128,7 +128,7 @@ export function restartService(profile) {
|
|
|
128
128
|
case "linux":
|
|
129
129
|
return restartLinuxService();
|
|
130
130
|
case "windows":
|
|
131
|
-
return restartWindowsService();
|
|
131
|
+
return restartWindowsService(profile);
|
|
132
132
|
default:
|
|
133
133
|
return false;
|
|
134
134
|
}
|
|
@@ -140,7 +140,7 @@ export function stopService(profile) {
|
|
|
140
140
|
case "linux":
|
|
141
141
|
return stopLinuxService();
|
|
142
142
|
case "windows":
|
|
143
|
-
return stopWindowsService();
|
|
143
|
+
return stopWindowsService(profile);
|
|
144
144
|
default:
|
|
145
145
|
return false;
|
|
146
146
|
}
|
|
@@ -152,7 +152,7 @@ export function uninstallService(profile) {
|
|
|
152
152
|
case "linux":
|
|
153
153
|
return uninstallLinuxService();
|
|
154
154
|
case "windows":
|
|
155
|
-
return uninstallWindowsService();
|
|
155
|
+
return uninstallWindowsService(profile);
|
|
156
156
|
default:
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
@@ -186,7 +186,7 @@ export function getServiceStatus(profile) {
|
|
|
186
186
|
return getLinuxServiceStatus();
|
|
187
187
|
}
|
|
188
188
|
if (platform === "windows") {
|
|
189
|
-
return getWindowsServiceStatus();
|
|
189
|
+
return getWindowsServiceStatus(resolvedProfile);
|
|
190
190
|
}
|
|
191
191
|
return {
|
|
192
192
|
platform,
|