@rethinkingstudio/clawpilot 1.1.15 → 1.1.16-beta.2
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.
|
@@ -46,6 +46,28 @@ export const SUBPROCESS_ENV = {
|
|
|
46
46
|
};
|
|
47
47
|
let cachedOpenclawBin = null;
|
|
48
48
|
let cachedOpenclawConfigPath = null;
|
|
49
|
+
function resolveWindowsExecutable(pathValue) {
|
|
50
|
+
if (!IS_WINDOWS) {
|
|
51
|
+
return existsSync(pathValue) ? pathValue : null;
|
|
52
|
+
}
|
|
53
|
+
const trimmed = pathValue.trim().replace(/^['"]|['"]$/g, "");
|
|
54
|
+
if (!trimmed)
|
|
55
|
+
return null;
|
|
56
|
+
if (existsSync(trimmed))
|
|
57
|
+
return trimmed;
|
|
58
|
+
for (const ext of [".cmd", ".exe", ".bat"]) {
|
|
59
|
+
const candidate = `${trimmed}${ext}`;
|
|
60
|
+
if (existsSync(candidate)) {
|
|
61
|
+
return candidate;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function normalizeResolvedOpenclawBin(pathValue) {
|
|
67
|
+
if (!pathValue)
|
|
68
|
+
return null;
|
|
69
|
+
return resolveWindowsExecutable(pathValue) ?? (existsSync(pathValue) ? pathValue : null);
|
|
70
|
+
}
|
|
49
71
|
function findOpenclawInKnownPaths() {
|
|
50
72
|
for (const dir of KNOWN_BIN_DIRS) {
|
|
51
73
|
for (const name of OPENCLAW_CANDIDATE_NAMES) {
|
|
@@ -74,8 +96,9 @@ function resolveViaShell() {
|
|
|
74
96
|
.split(/\r?\n/)
|
|
75
97
|
.map((line) => line.trim())
|
|
76
98
|
.find(Boolean);
|
|
77
|
-
|
|
78
|
-
|
|
99
|
+
const normalized = normalizeResolvedOpenclawBin(resolved ?? null);
|
|
100
|
+
if (normalized) {
|
|
101
|
+
return normalized;
|
|
79
102
|
}
|
|
80
103
|
}
|
|
81
104
|
catch {
|
|
@@ -110,8 +133,11 @@ function findOpenclawViaPackageManagers() {
|
|
|
110
133
|
candidateDirs.push(pnpmGlobalBin);
|
|
111
134
|
}
|
|
112
135
|
const npmExec = readCommandOutput("npm exec --yes -- which openclaw");
|
|
113
|
-
|
|
114
|
-
|
|
136
|
+
{
|
|
137
|
+
const normalized = normalizeResolvedOpenclawBin(npmExec);
|
|
138
|
+
if (normalized) {
|
|
139
|
+
return normalized;
|
|
140
|
+
}
|
|
115
141
|
}
|
|
116
142
|
for (const dir of unique(candidateDirs)) {
|
|
117
143
|
for (const name of OPENCLAW_CANDIDATE_NAMES) {
|
|
@@ -129,9 +155,9 @@ export function resolveOpenclawBin(forceRefresh = false) {
|
|
|
129
155
|
}
|
|
130
156
|
const envOverride = process.env.OPENCLAW_BIN;
|
|
131
157
|
if (envOverride && existsSync(envOverride)) {
|
|
132
|
-
cachedOpenclawBin = envOverride;
|
|
158
|
+
cachedOpenclawBin = normalizeResolvedOpenclawBin(envOverride) ?? envOverride;
|
|
133
159
|
console.log(`[clawpilot] openclaw resolved from OPENCLAW_BIN: ${envOverride}`);
|
|
134
|
-
return
|
|
160
|
+
return cachedOpenclawBin;
|
|
135
161
|
}
|
|
136
162
|
const resolved = resolveViaShell() ?? findOpenclawViaPackageManagers() ?? findOpenclawInKnownPaths();
|
|
137
163
|
if (resolved) {
|
|
@@ -186,6 +212,13 @@ function splitShellArgs(input) {
|
|
|
186
212
|
args.push(current);
|
|
187
213
|
return args;
|
|
188
214
|
}
|
|
215
|
+
function quoteWindowsArg(value) {
|
|
216
|
+
if (value.length === 0)
|
|
217
|
+
return '""';
|
|
218
|
+
if (!/[\s"]/u.test(value))
|
|
219
|
+
return value;
|
|
220
|
+
return `"${value.replace(/"/g, '\\"')}"`;
|
|
221
|
+
}
|
|
189
222
|
function execErrorOutput(err) {
|
|
190
223
|
const e = err;
|
|
191
224
|
const out = e.stdout?.toString() ?? "";
|
|
@@ -196,6 +229,13 @@ export function execOpenclaw(args) {
|
|
|
196
229
|
let bin = resolveOpenclawBin();
|
|
197
230
|
const argv = splitShellArgs(args);
|
|
198
231
|
try {
|
|
232
|
+
if (IS_WINDOWS) {
|
|
233
|
+
bin = normalizeResolvedOpenclawBin(bin) ?? bin;
|
|
234
|
+
}
|
|
235
|
+
if (IS_WINDOWS && !/\.exe$/i.test(bin)) {
|
|
236
|
+
const command = [quoteWindowsArg(bin), ...argv.map(quoteWindowsArg)].join(" ");
|
|
237
|
+
return execFileSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", command], { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
238
|
+
}
|
|
199
239
|
return execFileSync(bin, argv, { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
200
240
|
}
|
|
201
241
|
catch (error) {
|
|
@@ -206,6 +246,13 @@ export function execOpenclaw(args) {
|
|
|
206
246
|
throw error;
|
|
207
247
|
}
|
|
208
248
|
bin = resolveOpenclawBin(true);
|
|
249
|
+
if (IS_WINDOWS) {
|
|
250
|
+
bin = normalizeResolvedOpenclawBin(bin) ?? bin;
|
|
251
|
+
}
|
|
252
|
+
if (IS_WINDOWS && !/\.exe$/i.test(bin)) {
|
|
253
|
+
const command = [quoteWindowsArg(bin), ...argv.map(quoteWindowsArg)].join(" ");
|
|
254
|
+
return execFileSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", command], { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
255
|
+
}
|
|
209
256
|
return execFileSync(bin, argv, { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
210
257
|
}
|
|
211
258
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-cli.js","sourceRoot":"","sources":["../../src/commands/openclaw-cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openclaw-cli.js","sourceRoot":"","sources":["../../src/commands/openclaw-cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -54,6 +54,30 @@ export const SUBPROCESS_ENV: NodeJS.ProcessEnv = {
|
|
|
54
54
|
let cachedOpenclawBin: string | null = null;
|
|
55
55
|
let cachedOpenclawConfigPath: string | null = null;
|
|
56
56
|
|
|
57
|
+
function resolveWindowsExecutable(pathValue: string): string | null {
|
|
58
|
+
if (!IS_WINDOWS) {
|
|
59
|
+
return existsSync(pathValue) ? pathValue : null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const trimmed = pathValue.trim().replace(/^['"]|['"]$/g, "");
|
|
63
|
+
if (!trimmed) return null;
|
|
64
|
+
if (existsSync(trimmed)) return trimmed;
|
|
65
|
+
|
|
66
|
+
for (const ext of [".cmd", ".exe", ".bat"]) {
|
|
67
|
+
const candidate = `${trimmed}${ext}`;
|
|
68
|
+
if (existsSync(candidate)) {
|
|
69
|
+
return candidate;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function normalizeResolvedOpenclawBin(pathValue: string | null): string | null {
|
|
77
|
+
if (!pathValue) return null;
|
|
78
|
+
return resolveWindowsExecutable(pathValue) ?? (existsSync(pathValue) ? pathValue : null);
|
|
79
|
+
}
|
|
80
|
+
|
|
57
81
|
function findOpenclawInKnownPaths(): string | null {
|
|
58
82
|
for (const dir of KNOWN_BIN_DIRS) {
|
|
59
83
|
for (const name of OPENCLAW_CANDIDATE_NAMES) {
|
|
@@ -85,8 +109,9 @@ function resolveViaShell(): string | null {
|
|
|
85
109
|
.split(/\r?\n/)
|
|
86
110
|
.map((line) => line.trim())
|
|
87
111
|
.find(Boolean);
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
const normalized = normalizeResolvedOpenclawBin(resolved ?? null);
|
|
113
|
+
if (normalized) {
|
|
114
|
+
return normalized;
|
|
90
115
|
}
|
|
91
116
|
} catch {
|
|
92
117
|
// try next strategy
|
|
@@ -125,8 +150,11 @@ function findOpenclawViaPackageManagers(): string | null {
|
|
|
125
150
|
}
|
|
126
151
|
|
|
127
152
|
const npmExec = readCommandOutput("npm exec --yes -- which openclaw");
|
|
128
|
-
|
|
129
|
-
|
|
153
|
+
{
|
|
154
|
+
const normalized = normalizeResolvedOpenclawBin(npmExec);
|
|
155
|
+
if (normalized) {
|
|
156
|
+
return normalized;
|
|
157
|
+
}
|
|
130
158
|
}
|
|
131
159
|
|
|
132
160
|
for (const dir of unique(candidateDirs)) {
|
|
@@ -148,9 +176,9 @@ export function resolveOpenclawBin(forceRefresh = false): string {
|
|
|
148
176
|
|
|
149
177
|
const envOverride = process.env.OPENCLAW_BIN;
|
|
150
178
|
if (envOverride && existsSync(envOverride)) {
|
|
151
|
-
cachedOpenclawBin = envOverride;
|
|
179
|
+
cachedOpenclawBin = normalizeResolvedOpenclawBin(envOverride) ?? envOverride;
|
|
152
180
|
console.log(`[clawpilot] openclaw resolved from OPENCLAW_BIN: ${envOverride}`);
|
|
153
|
-
return
|
|
181
|
+
return cachedOpenclawBin;
|
|
154
182
|
}
|
|
155
183
|
|
|
156
184
|
const resolved = resolveViaShell() ?? findOpenclawViaPackageManagers() ?? findOpenclawInKnownPaths();
|
|
@@ -213,6 +241,12 @@ function splitShellArgs(input: string): string[] {
|
|
|
213
241
|
return args;
|
|
214
242
|
}
|
|
215
243
|
|
|
244
|
+
function quoteWindowsArg(value: string): string {
|
|
245
|
+
if (value.length === 0) return '""';
|
|
246
|
+
if (!/[\s"]/u.test(value)) return value;
|
|
247
|
+
return `"${value.replace(/"/g, '\\"')}"`;
|
|
248
|
+
}
|
|
249
|
+
|
|
216
250
|
function execErrorOutput(err: unknown): string {
|
|
217
251
|
const e = err as { stdout?: Buffer | string; stderr?: Buffer | string };
|
|
218
252
|
const out = e.stdout?.toString() ?? "";
|
|
@@ -224,6 +258,13 @@ export function execOpenclaw(args: string): Buffer {
|
|
|
224
258
|
let bin = resolveOpenclawBin();
|
|
225
259
|
const argv = splitShellArgs(args);
|
|
226
260
|
try {
|
|
261
|
+
if (IS_WINDOWS) {
|
|
262
|
+
bin = normalizeResolvedOpenclawBin(bin) ?? bin;
|
|
263
|
+
}
|
|
264
|
+
if (IS_WINDOWS && !/\.exe$/i.test(bin)) {
|
|
265
|
+
const command = [quoteWindowsArg(bin), ...argv.map(quoteWindowsArg)].join(" ");
|
|
266
|
+
return execFileSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", command], { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
267
|
+
}
|
|
227
268
|
return execFileSync(bin, argv, { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
228
269
|
} catch (error) {
|
|
229
270
|
const output = execErrorOutput(error);
|
|
@@ -236,6 +277,13 @@ export function execOpenclaw(args: string): Buffer {
|
|
|
236
277
|
}
|
|
237
278
|
|
|
238
279
|
bin = resolveOpenclawBin(true);
|
|
280
|
+
if (IS_WINDOWS) {
|
|
281
|
+
bin = normalizeResolvedOpenclawBin(bin) ?? bin;
|
|
282
|
+
}
|
|
283
|
+
if (IS_WINDOWS && !/\.exe$/i.test(bin)) {
|
|
284
|
+
const command = [quoteWindowsArg(bin), ...argv.map(quoteWindowsArg)].join(" ");
|
|
285
|
+
return execFileSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", command], { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
286
|
+
}
|
|
239
287
|
return execFileSync(bin, argv, { stdio: "pipe", env: SUBPROCESS_ENV });
|
|
240
288
|
}
|
|
241
289
|
}
|