@funnycode/myclaude 0.1.280 → 0.1.285
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/myclaude.js +70 -24
- package/dist/myclaude.mjs +70 -24
- package/package.json +131 -131
package/dist/myclaude.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// MACRO - build-time constants (injected by build.ts)
|
|
5
5
|
// MACRO injected by build script
|
|
6
6
|
globalThis.MACRO = {
|
|
7
|
-
VERSION: "0.1.
|
|
8
|
-
BUILD_TIME: "2026-08-
|
|
7
|
+
VERSION: "0.1.285",
|
|
8
|
+
BUILD_TIME: "2026-08-21T08:33:09.704Z",
|
|
9
9
|
PACKAGE_URL: "@funnycode/myclaude",
|
|
10
10
|
NATIVE_PACKAGE_URL: "@funnycode/myclaude",
|
|
11
11
|
VERSION_CHANGELOG: '',
|
|
@@ -120027,7 +120027,7 @@ var package_default;
|
|
|
120027
120027
|
var init_package = __esm(() => {
|
|
120028
120028
|
package_default = {
|
|
120029
120029
|
name: "@funnycode/myclaude",
|
|
120030
|
-
version: "0.1.
|
|
120030
|
+
version: "0.1.285",
|
|
120031
120031
|
private: false,
|
|
120032
120032
|
description: "An open-source AI coding assistant in your terminal - powered by Claude",
|
|
120033
120033
|
license: "MIT",
|
|
@@ -282574,14 +282574,20 @@ __export(exports_sessionIdCompat, {
|
|
|
282574
282574
|
resetCseShimGateForTesting: () => resetCseShimGateForTesting,
|
|
282575
282575
|
getCseShimGate: () => getCseShimGate
|
|
282576
282576
|
});
|
|
282577
|
-
function setCseShimGate(gate) {
|
|
282578
|
-
|
|
282577
|
+
async function setCseShimGate(gate) {
|
|
282578
|
+
await _gateMutex.runExclusive(() => {
|
|
282579
|
+
if (_isCseShimEnabled === undefined) {
|
|
282580
|
+
_isCseShimEnabled = gate;
|
|
282581
|
+
}
|
|
282582
|
+
});
|
|
282579
282583
|
}
|
|
282580
282584
|
function getCseShimGate() {
|
|
282581
282585
|
return _isCseShimEnabled;
|
|
282582
282586
|
}
|
|
282583
|
-
function resetCseShimGateForTesting() {
|
|
282584
|
-
|
|
282587
|
+
async function resetCseShimGateForTesting() {
|
|
282588
|
+
await _gateMutex.runExclusive(() => {
|
|
282589
|
+
_isCseShimEnabled = undefined;
|
|
282590
|
+
});
|
|
282585
282591
|
}
|
|
282586
282592
|
function toCompatSessionId(id) {
|
|
282587
282593
|
if (!id.startsWith("cse_"))
|
|
@@ -282597,7 +282603,11 @@ function toInfraSessionId(id) {
|
|
|
282597
282603
|
return id;
|
|
282598
282604
|
return "cse_" + id.slice("session_".length);
|
|
282599
282605
|
}
|
|
282600
|
-
var _isCseShimEnabled;
|
|
282606
|
+
var _isCseShimEnabled, _gateMutex;
|
|
282607
|
+
var init_sessionIdCompat = __esm(() => {
|
|
282608
|
+
init_async_mutex();
|
|
282609
|
+
_gateMutex = new Mutex;
|
|
282610
|
+
});
|
|
282601
282611
|
|
|
282602
282612
|
// src/constants/product.ts
|
|
282603
282613
|
function isRemoteSessionStaging(sessionId, ingressUrl) {
|
|
@@ -282616,7 +282626,7 @@ function getClaudeAiBaseUrl(sessionId, ingressUrl) {
|
|
|
282616
282626
|
return CLAUDE_AI_BASE_URL;
|
|
282617
282627
|
}
|
|
282618
282628
|
function getRemoteSessionUrl(sessionId, ingressUrl) {
|
|
282619
|
-
const { toCompatSessionId: toCompatSessionId2 } = __toCommonJS(exports_sessionIdCompat);
|
|
282629
|
+
const { toCompatSessionId: toCompatSessionId2 } = (init_sessionIdCompat(), __toCommonJS(exports_sessionIdCompat));
|
|
282620
282630
|
const compatId = toCompatSessionId2(sessionId);
|
|
282621
282631
|
const baseUrl = getClaudeAiBaseUrl(compatId, ingressUrl);
|
|
282622
282632
|
return `${baseUrl}/code/${compatId}`;
|
|
@@ -387579,6 +387589,7 @@ var init_concurrentSessions = __esm(() => {
|
|
|
387579
387589
|
// src/bridge/replBridgeHandle.ts
|
|
387580
387590
|
var init_replBridgeHandle = __esm(() => {
|
|
387581
387591
|
init_concurrentSessions();
|
|
387592
|
+
init_sessionIdCompat();
|
|
387582
387593
|
});
|
|
387583
387594
|
|
|
387584
387595
|
// src/tasks/LocalMainSessionTask.ts
|
|
@@ -464035,6 +464046,7 @@ var init_createSession = __esm(() => {
|
|
|
464035
464046
|
init_debug();
|
|
464036
464047
|
init_errors();
|
|
464037
464048
|
init_debugUtils();
|
|
464049
|
+
init_sessionIdCompat();
|
|
464038
464050
|
});
|
|
464039
464051
|
|
|
464040
464052
|
// src/commands/rename/rename.ts
|
|
@@ -480186,23 +480198,23 @@ function sanitizeCommand(command6) {
|
|
|
480186
480198
|
for (const node of parsed) {
|
|
480187
480199
|
if (typeof node === "string") {
|
|
480188
480200
|
if (/[`$<>|;&\\\n\r]/.test(node)) {
|
|
480189
|
-
throw new Error(
|
|
480201
|
+
throw new Error("Invalid command: shell metacharacter in token is not allowed (input omitted for security)");
|
|
480190
480202
|
}
|
|
480191
480203
|
argv.push(node);
|
|
480192
480204
|
continue;
|
|
480193
480205
|
}
|
|
480194
480206
|
if (node && typeof node === "object") {
|
|
480195
480207
|
const kind = node.op || node.pattern || "shell metacharacter";
|
|
480196
|
-
throw new Error(`Invalid command: shell metacharacter/operator (${kind}) is not allowed
|
|
480208
|
+
throw new Error(`Invalid command: shell metacharacter/operator (${kind}) is not allowed (input omitted for security)`);
|
|
480197
480209
|
}
|
|
480198
|
-
throw new Error(
|
|
480210
|
+
throw new Error("Invalid command: unexpected token in command (input omitted for security)");
|
|
480199
480211
|
}
|
|
480200
480212
|
if (argv.length === 0) {
|
|
480201
480213
|
throw new Error("Invalid command: no program specified");
|
|
480202
480214
|
}
|
|
480203
480215
|
const program = argv[0];
|
|
480204
480216
|
if (!ALLOWED_COMMANDS.has(program)) {
|
|
480205
|
-
throw new Error(
|
|
480217
|
+
throw new Error("Invalid command: program is not on the allowlist of permitted commands (input omitted for security)");
|
|
480206
480218
|
}
|
|
480207
480219
|
return argv;
|
|
480208
480220
|
}
|
|
@@ -480213,7 +480225,7 @@ function escapeCodeSpan(text2) {
|
|
|
480213
480225
|
return `${delim}${pad}${text2}${pad}${delim}`;
|
|
480214
480226
|
}
|
|
480215
480227
|
function escapeMarkdown(text2) {
|
|
480216
|
-
return text2.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\*/g, "\\*").replace(/_/g, "\\_").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/#/g, "\\#").replace(/</g, "<").replace(/>/g, ">").replace(/!/g, "\\!").replace(/\(/g, "\\(").replace(/\)/g, "\\)");
|
|
480228
|
+
return text2.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\*/g, "\\*").replace(/_/g, "\\_").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/#/g, "\\#").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/!/g, "\\!").replace(/\(/g, "\\(").replace(/\)/g, "\\)");
|
|
480217
480229
|
}
|
|
480218
480230
|
function generateDiffPreview(flow) {
|
|
480219
480231
|
const lines2 = [];
|
|
@@ -480255,6 +480267,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480255
480267
|
startTime: Date.now(),
|
|
480256
480268
|
aborted: false
|
|
480257
480269
|
};
|
|
480270
|
+
const callbackErrors = [];
|
|
480258
480271
|
if (options?.preview && options?.onPreview) {
|
|
480259
480272
|
const preview = generateDiffPreview(flow);
|
|
480260
480273
|
const approved = await options.onPreview(preview);
|
|
@@ -480284,6 +480297,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480284
480297
|
await onStepComplete(step, state);
|
|
480285
480298
|
} catch (callbackError) {
|
|
480286
480299
|
console.error(`onStepComplete callback failed for step "${step.id}":`, callbackError);
|
|
480300
|
+
callbackErrors.push(callbackError);
|
|
480287
480301
|
}
|
|
480288
480302
|
}
|
|
480289
480303
|
} catch (error52) {
|
|
@@ -480293,6 +480307,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480293
480307
|
await onStepFail(step, state, error52);
|
|
480294
480308
|
} catch (callbackError) {
|
|
480295
480309
|
console.error(`onStepFail callback failed for step "${step.id}":`, callbackError);
|
|
480310
|
+
callbackErrors.push(callbackError);
|
|
480296
480311
|
}
|
|
480297
480312
|
}
|
|
480298
480313
|
const shouldContinue = await shouldContinueOnError(error52, step);
|
|
@@ -480307,7 +480322,14 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480307
480322
|
await onComplete(state);
|
|
480308
480323
|
} catch (callbackError) {
|
|
480309
480324
|
console.error("onComplete callback failed:", callbackError);
|
|
480325
|
+
callbackErrors.push(callbackError);
|
|
480326
|
+
}
|
|
480327
|
+
}
|
|
480328
|
+
if (callbackErrors.length > 0) {
|
|
480329
|
+
if (callbackErrors.length === 1) {
|
|
480330
|
+
throw callbackErrors[0];
|
|
480310
480331
|
}
|
|
480332
|
+
throw new AggregateError(callbackErrors, "Multiple callback errors occurred during flow execution");
|
|
480311
480333
|
}
|
|
480312
480334
|
return state;
|
|
480313
480335
|
}
|
|
@@ -480317,24 +480339,47 @@ async function executeCommand(command6, context2) {
|
|
|
480317
480339
|
await context2.bridge.runCommand(argv);
|
|
480318
480340
|
return;
|
|
480319
480341
|
}
|
|
480320
|
-
throw new Error("No bridge.runCommand available to execute
|
|
480342
|
+
throw new Error("No bridge.runCommand available to execute command (input omitted for security)");
|
|
480321
480343
|
}
|
|
480322
480344
|
async function executeFileOperation(file2, context2) {
|
|
480345
|
+
if (typeof file2 !== "string") {
|
|
480346
|
+
throw new Error("Invalid file path: must be a string");
|
|
480347
|
+
}
|
|
480348
|
+
if (file2.includes("\x00")) {
|
|
480349
|
+
throw new Error("Invalid file path: NUL byte detected");
|
|
480350
|
+
}
|
|
480351
|
+
const normalized = file2.replace(/\\/g, "/");
|
|
480352
|
+
if (normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized)) {
|
|
480353
|
+
throw new Error("Invalid file path: absolute paths are not allowed");
|
|
480354
|
+
}
|
|
480355
|
+
const parts = normalized.split("/");
|
|
480356
|
+
for (const part of parts) {
|
|
480357
|
+
if (part === "..") {
|
|
480358
|
+
throw new Error("Invalid file path: path traversal (..) is not allowed");
|
|
480359
|
+
}
|
|
480360
|
+
}
|
|
480323
480361
|
if (context2?.bridge?.editFile) {
|
|
480324
480362
|
await context2.bridge.editFile(file2);
|
|
480325
480363
|
return;
|
|
480326
480364
|
}
|
|
480327
|
-
throw new Error("No bridge.editFile available to edit
|
|
480365
|
+
throw new Error("No bridge.editFile available to edit file (input omitted for security)");
|
|
480328
480366
|
}
|
|
480329
480367
|
async function shouldContinueOnError(error52, step) {
|
|
480330
|
-
const transientCodes = [
|
|
480368
|
+
const transientCodes = [
|
|
480369
|
+
"ETIMEDOUT",
|
|
480370
|
+
"ECONNRESET",
|
|
480371
|
+
"ENETUNREACH",
|
|
480372
|
+
"EPIPE",
|
|
480373
|
+
"EAI_AGAIN",
|
|
480374
|
+
"ENOTFOUND",
|
|
480375
|
+
"ECONNREFUSED"
|
|
480376
|
+
];
|
|
480331
480377
|
const err2 = error52;
|
|
480332
|
-
|
|
480378
|
+
const codeFromProps = typeof err2.code === "string" ? err2.code : typeof err2.errno === "string" ? err2.errno : null;
|
|
480379
|
+
if (codeFromProps && transientCodes.includes(codeFromProps)) {
|
|
480333
480380
|
return true;
|
|
480334
480381
|
}
|
|
480335
|
-
|
|
480336
|
-
const hostnamePort = String.raw`[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?){1,}:\d+`;
|
|
480337
|
-
if (transientCodes.some((code) => new RegExp(`(^|:\\s*)${code}\\b|\\b${code}\\s+(?:${ipv4Port}|${hostnamePort})`).test(error52.message))) {
|
|
480382
|
+
if (transientCodes.some((code) => new RegExp(`(^|:\\s*)${code}\\b`).test(error52.message))) {
|
|
480338
480383
|
return true;
|
|
480339
480384
|
}
|
|
480340
480385
|
if (/^No bridge\.(runCommand|editFile) available/.test(error52.message)) {
|
|
@@ -480346,13 +480391,11 @@ var import_shell_quote4, ALLOWED_COMMANDS;
|
|
|
480346
480391
|
var init_executor = __esm(() => {
|
|
480347
480392
|
import_shell_quote4 = __toESM(require_shell_quote(), 1);
|
|
480348
480393
|
ALLOWED_COMMANDS = new Set([
|
|
480349
|
-
"npm",
|
|
480350
480394
|
"mkdir",
|
|
480351
480395
|
"touch",
|
|
480352
480396
|
"cp",
|
|
480353
480397
|
"mv",
|
|
480354
480398
|
"echo",
|
|
480355
|
-
"git",
|
|
480356
480399
|
"tsc",
|
|
480357
480400
|
"vitest"
|
|
480358
480401
|
]);
|
|
@@ -582260,6 +582303,7 @@ var init_replBridge = __esm(() => {
|
|
|
582260
582303
|
init_cleanupRegistry();
|
|
582261
582304
|
init_bridgeMessaging();
|
|
582262
582305
|
init_workSecret();
|
|
582306
|
+
init_sessionIdCompat();
|
|
582263
582307
|
init_concurrentSessions();
|
|
582264
582308
|
init_trustedDevice();
|
|
582265
582309
|
init_HybridTransport();
|
|
@@ -582840,6 +582884,7 @@ var init_remoteBridgeCore = __esm(() => {
|
|
|
582840
582884
|
init_axios2();
|
|
582841
582885
|
init_replBridgeTransport();
|
|
582842
582886
|
init_workSecret();
|
|
582887
|
+
init_sessionIdCompat();
|
|
582843
582888
|
init_jwtUtils();
|
|
582844
582889
|
init_trustedDevice();
|
|
582845
582890
|
init_envLessBridgeConfig();
|
|
@@ -582879,7 +582924,7 @@ async function initReplBridge(options) {
|
|
|
582879
582924
|
outboundOnly,
|
|
582880
582925
|
tags
|
|
582881
582926
|
} = options ?? {};
|
|
582882
|
-
setCseShimGate(isCseShimEnabled);
|
|
582927
|
+
await setCseShimGate(isCseShimEnabled);
|
|
582883
582928
|
const [
|
|
582884
582929
|
{ getFeatureValue_CACHED_WITH_REFRESH: getFeatureValue_CACHED_WITH_REFRESH4 },
|
|
582885
582930
|
{ getOrganizationUUID: getOrganizationUUID2 },
|
|
@@ -583130,6 +583175,7 @@ var init_initReplBridge = __esm(() => {
|
|
|
583130
583175
|
init_envLessBridgeConfig();
|
|
583131
583176
|
init_pollConfig();
|
|
583132
583177
|
init_replBridge();
|
|
583178
|
+
init_sessionIdCompat();
|
|
583133
583179
|
});
|
|
583134
583180
|
|
|
583135
583181
|
// src/cli/print.ts
|
package/dist/myclaude.mjs
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// MACRO - build-time constants (injected by build.ts)
|
|
5
5
|
// MACRO injected by build script
|
|
6
6
|
globalThis.MACRO = {
|
|
7
|
-
VERSION: "0.1.
|
|
8
|
-
BUILD_TIME: "2026-08-
|
|
7
|
+
VERSION: "0.1.285",
|
|
8
|
+
BUILD_TIME: "2026-08-21T08:33:09.704Z",
|
|
9
9
|
PACKAGE_URL: "@funnycode/myclaude",
|
|
10
10
|
NATIVE_PACKAGE_URL: "@funnycode/myclaude",
|
|
11
11
|
VERSION_CHANGELOG: '',
|
|
@@ -120027,7 +120027,7 @@ var package_default;
|
|
|
120027
120027
|
var init_package = __esm(() => {
|
|
120028
120028
|
package_default = {
|
|
120029
120029
|
name: "@funnycode/myclaude",
|
|
120030
|
-
version: "0.1.
|
|
120030
|
+
version: "0.1.285",
|
|
120031
120031
|
private: false,
|
|
120032
120032
|
description: "An open-source AI coding assistant in your terminal - powered by Claude",
|
|
120033
120033
|
license: "MIT",
|
|
@@ -282574,14 +282574,20 @@ __export(exports_sessionIdCompat, {
|
|
|
282574
282574
|
resetCseShimGateForTesting: () => resetCseShimGateForTesting,
|
|
282575
282575
|
getCseShimGate: () => getCseShimGate
|
|
282576
282576
|
});
|
|
282577
|
-
function setCseShimGate(gate) {
|
|
282578
|
-
|
|
282577
|
+
async function setCseShimGate(gate) {
|
|
282578
|
+
await _gateMutex.runExclusive(() => {
|
|
282579
|
+
if (_isCseShimEnabled === undefined) {
|
|
282580
|
+
_isCseShimEnabled = gate;
|
|
282581
|
+
}
|
|
282582
|
+
});
|
|
282579
282583
|
}
|
|
282580
282584
|
function getCseShimGate() {
|
|
282581
282585
|
return _isCseShimEnabled;
|
|
282582
282586
|
}
|
|
282583
|
-
function resetCseShimGateForTesting() {
|
|
282584
|
-
|
|
282587
|
+
async function resetCseShimGateForTesting() {
|
|
282588
|
+
await _gateMutex.runExclusive(() => {
|
|
282589
|
+
_isCseShimEnabled = undefined;
|
|
282590
|
+
});
|
|
282585
282591
|
}
|
|
282586
282592
|
function toCompatSessionId(id) {
|
|
282587
282593
|
if (!id.startsWith("cse_"))
|
|
@@ -282597,7 +282603,11 @@ function toInfraSessionId(id) {
|
|
|
282597
282603
|
return id;
|
|
282598
282604
|
return "cse_" + id.slice("session_".length);
|
|
282599
282605
|
}
|
|
282600
|
-
var _isCseShimEnabled;
|
|
282606
|
+
var _isCseShimEnabled, _gateMutex;
|
|
282607
|
+
var init_sessionIdCompat = __esm(() => {
|
|
282608
|
+
init_async_mutex();
|
|
282609
|
+
_gateMutex = new Mutex;
|
|
282610
|
+
});
|
|
282601
282611
|
|
|
282602
282612
|
// src/constants/product.ts
|
|
282603
282613
|
function isRemoteSessionStaging(sessionId, ingressUrl) {
|
|
@@ -282616,7 +282626,7 @@ function getClaudeAiBaseUrl(sessionId, ingressUrl) {
|
|
|
282616
282626
|
return CLAUDE_AI_BASE_URL;
|
|
282617
282627
|
}
|
|
282618
282628
|
function getRemoteSessionUrl(sessionId, ingressUrl) {
|
|
282619
|
-
const { toCompatSessionId: toCompatSessionId2 } = __toCommonJS(exports_sessionIdCompat);
|
|
282629
|
+
const { toCompatSessionId: toCompatSessionId2 } = (init_sessionIdCompat(), __toCommonJS(exports_sessionIdCompat));
|
|
282620
282630
|
const compatId = toCompatSessionId2(sessionId);
|
|
282621
282631
|
const baseUrl = getClaudeAiBaseUrl(compatId, ingressUrl);
|
|
282622
282632
|
return `${baseUrl}/code/${compatId}`;
|
|
@@ -387579,6 +387589,7 @@ var init_concurrentSessions = __esm(() => {
|
|
|
387579
387589
|
// src/bridge/replBridgeHandle.ts
|
|
387580
387590
|
var init_replBridgeHandle = __esm(() => {
|
|
387581
387591
|
init_concurrentSessions();
|
|
387592
|
+
init_sessionIdCompat();
|
|
387582
387593
|
});
|
|
387583
387594
|
|
|
387584
387595
|
// src/tasks/LocalMainSessionTask.ts
|
|
@@ -464035,6 +464046,7 @@ var init_createSession = __esm(() => {
|
|
|
464035
464046
|
init_debug();
|
|
464036
464047
|
init_errors();
|
|
464037
464048
|
init_debugUtils();
|
|
464049
|
+
init_sessionIdCompat();
|
|
464038
464050
|
});
|
|
464039
464051
|
|
|
464040
464052
|
// src/commands/rename/rename.ts
|
|
@@ -480186,23 +480198,23 @@ function sanitizeCommand(command6) {
|
|
|
480186
480198
|
for (const node of parsed) {
|
|
480187
480199
|
if (typeof node === "string") {
|
|
480188
480200
|
if (/[`$<>|;&\\\n\r]/.test(node)) {
|
|
480189
|
-
throw new Error(
|
|
480201
|
+
throw new Error("Invalid command: shell metacharacter in token is not allowed (input omitted for security)");
|
|
480190
480202
|
}
|
|
480191
480203
|
argv.push(node);
|
|
480192
480204
|
continue;
|
|
480193
480205
|
}
|
|
480194
480206
|
if (node && typeof node === "object") {
|
|
480195
480207
|
const kind = node.op || node.pattern || "shell metacharacter";
|
|
480196
|
-
throw new Error(`Invalid command: shell metacharacter/operator (${kind}) is not allowed
|
|
480208
|
+
throw new Error(`Invalid command: shell metacharacter/operator (${kind}) is not allowed (input omitted for security)`);
|
|
480197
480209
|
}
|
|
480198
|
-
throw new Error(
|
|
480210
|
+
throw new Error("Invalid command: unexpected token in command (input omitted for security)");
|
|
480199
480211
|
}
|
|
480200
480212
|
if (argv.length === 0) {
|
|
480201
480213
|
throw new Error("Invalid command: no program specified");
|
|
480202
480214
|
}
|
|
480203
480215
|
const program = argv[0];
|
|
480204
480216
|
if (!ALLOWED_COMMANDS.has(program)) {
|
|
480205
|
-
throw new Error(
|
|
480217
|
+
throw new Error("Invalid command: program is not on the allowlist of permitted commands (input omitted for security)");
|
|
480206
480218
|
}
|
|
480207
480219
|
return argv;
|
|
480208
480220
|
}
|
|
@@ -480213,7 +480225,7 @@ function escapeCodeSpan(text2) {
|
|
|
480213
480225
|
return `${delim}${pad}${text2}${pad}${delim}`;
|
|
480214
480226
|
}
|
|
480215
480227
|
function escapeMarkdown(text2) {
|
|
480216
|
-
return text2.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\*/g, "\\*").replace(/_/g, "\\_").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/#/g, "\\#").replace(/</g, "<").replace(/>/g, ">").replace(/!/g, "\\!").replace(/\(/g, "\\(").replace(/\)/g, "\\)");
|
|
480228
|
+
return text2.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\*/g, "\\*").replace(/_/g, "\\_").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/#/g, "\\#").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/!/g, "\\!").replace(/\(/g, "\\(").replace(/\)/g, "\\)");
|
|
480217
480229
|
}
|
|
480218
480230
|
function generateDiffPreview(flow) {
|
|
480219
480231
|
const lines2 = [];
|
|
@@ -480255,6 +480267,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480255
480267
|
startTime: Date.now(),
|
|
480256
480268
|
aborted: false
|
|
480257
480269
|
};
|
|
480270
|
+
const callbackErrors = [];
|
|
480258
480271
|
if (options?.preview && options?.onPreview) {
|
|
480259
480272
|
const preview = generateDiffPreview(flow);
|
|
480260
480273
|
const approved = await options.onPreview(preview);
|
|
@@ -480284,6 +480297,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480284
480297
|
await onStepComplete(step, state);
|
|
480285
480298
|
} catch (callbackError) {
|
|
480286
480299
|
console.error(`onStepComplete callback failed for step "${step.id}":`, callbackError);
|
|
480300
|
+
callbackErrors.push(callbackError);
|
|
480287
480301
|
}
|
|
480288
480302
|
}
|
|
480289
480303
|
} catch (error52) {
|
|
@@ -480293,6 +480307,7 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480293
480307
|
await onStepFail(step, state, error52);
|
|
480294
480308
|
} catch (callbackError) {
|
|
480295
480309
|
console.error(`onStepFail callback failed for step "${step.id}":`, callbackError);
|
|
480310
|
+
callbackErrors.push(callbackError);
|
|
480296
480311
|
}
|
|
480297
480312
|
}
|
|
480298
480313
|
const shouldContinue = await shouldContinueOnError(error52, step);
|
|
@@ -480307,7 +480322,14 @@ async function executeFlow(flow, context2, onStepStart, onStepComplete, onStepFa
|
|
|
480307
480322
|
await onComplete(state);
|
|
480308
480323
|
} catch (callbackError) {
|
|
480309
480324
|
console.error("onComplete callback failed:", callbackError);
|
|
480325
|
+
callbackErrors.push(callbackError);
|
|
480326
|
+
}
|
|
480327
|
+
}
|
|
480328
|
+
if (callbackErrors.length > 0) {
|
|
480329
|
+
if (callbackErrors.length === 1) {
|
|
480330
|
+
throw callbackErrors[0];
|
|
480310
480331
|
}
|
|
480332
|
+
throw new AggregateError(callbackErrors, "Multiple callback errors occurred during flow execution");
|
|
480311
480333
|
}
|
|
480312
480334
|
return state;
|
|
480313
480335
|
}
|
|
@@ -480317,24 +480339,47 @@ async function executeCommand(command6, context2) {
|
|
|
480317
480339
|
await context2.bridge.runCommand(argv);
|
|
480318
480340
|
return;
|
|
480319
480341
|
}
|
|
480320
|
-
throw new Error("No bridge.runCommand available to execute
|
|
480342
|
+
throw new Error("No bridge.runCommand available to execute command (input omitted for security)");
|
|
480321
480343
|
}
|
|
480322
480344
|
async function executeFileOperation(file2, context2) {
|
|
480345
|
+
if (typeof file2 !== "string") {
|
|
480346
|
+
throw new Error("Invalid file path: must be a string");
|
|
480347
|
+
}
|
|
480348
|
+
if (file2.includes("\x00")) {
|
|
480349
|
+
throw new Error("Invalid file path: NUL byte detected");
|
|
480350
|
+
}
|
|
480351
|
+
const normalized = file2.replace(/\\/g, "/");
|
|
480352
|
+
if (normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized)) {
|
|
480353
|
+
throw new Error("Invalid file path: absolute paths are not allowed");
|
|
480354
|
+
}
|
|
480355
|
+
const parts = normalized.split("/");
|
|
480356
|
+
for (const part of parts) {
|
|
480357
|
+
if (part === "..") {
|
|
480358
|
+
throw new Error("Invalid file path: path traversal (..) is not allowed");
|
|
480359
|
+
}
|
|
480360
|
+
}
|
|
480323
480361
|
if (context2?.bridge?.editFile) {
|
|
480324
480362
|
await context2.bridge.editFile(file2);
|
|
480325
480363
|
return;
|
|
480326
480364
|
}
|
|
480327
|
-
throw new Error("No bridge.editFile available to edit
|
|
480365
|
+
throw new Error("No bridge.editFile available to edit file (input omitted for security)");
|
|
480328
480366
|
}
|
|
480329
480367
|
async function shouldContinueOnError(error52, step) {
|
|
480330
|
-
const transientCodes = [
|
|
480368
|
+
const transientCodes = [
|
|
480369
|
+
"ETIMEDOUT",
|
|
480370
|
+
"ECONNRESET",
|
|
480371
|
+
"ENETUNREACH",
|
|
480372
|
+
"EPIPE",
|
|
480373
|
+
"EAI_AGAIN",
|
|
480374
|
+
"ENOTFOUND",
|
|
480375
|
+
"ECONNREFUSED"
|
|
480376
|
+
];
|
|
480331
480377
|
const err2 = error52;
|
|
480332
|
-
|
|
480378
|
+
const codeFromProps = typeof err2.code === "string" ? err2.code : typeof err2.errno === "string" ? err2.errno : null;
|
|
480379
|
+
if (codeFromProps && transientCodes.includes(codeFromProps)) {
|
|
480333
480380
|
return true;
|
|
480334
480381
|
}
|
|
480335
|
-
|
|
480336
|
-
const hostnamePort = String.raw`[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?){1,}:\d+`;
|
|
480337
|
-
if (transientCodes.some((code) => new RegExp(`(^|:\\s*)${code}\\b|\\b${code}\\s+(?:${ipv4Port}|${hostnamePort})`).test(error52.message))) {
|
|
480382
|
+
if (transientCodes.some((code) => new RegExp(`(^|:\\s*)${code}\\b`).test(error52.message))) {
|
|
480338
480383
|
return true;
|
|
480339
480384
|
}
|
|
480340
480385
|
if (/^No bridge\.(runCommand|editFile) available/.test(error52.message)) {
|
|
@@ -480346,13 +480391,11 @@ var import_shell_quote4, ALLOWED_COMMANDS;
|
|
|
480346
480391
|
var init_executor = __esm(() => {
|
|
480347
480392
|
import_shell_quote4 = __toESM(require_shell_quote(), 1);
|
|
480348
480393
|
ALLOWED_COMMANDS = new Set([
|
|
480349
|
-
"npm",
|
|
480350
480394
|
"mkdir",
|
|
480351
480395
|
"touch",
|
|
480352
480396
|
"cp",
|
|
480353
480397
|
"mv",
|
|
480354
480398
|
"echo",
|
|
480355
|
-
"git",
|
|
480356
480399
|
"tsc",
|
|
480357
480400
|
"vitest"
|
|
480358
480401
|
]);
|
|
@@ -582260,6 +582303,7 @@ var init_replBridge = __esm(() => {
|
|
|
582260
582303
|
init_cleanupRegistry();
|
|
582261
582304
|
init_bridgeMessaging();
|
|
582262
582305
|
init_workSecret();
|
|
582306
|
+
init_sessionIdCompat();
|
|
582263
582307
|
init_concurrentSessions();
|
|
582264
582308
|
init_trustedDevice();
|
|
582265
582309
|
init_HybridTransport();
|
|
@@ -582840,6 +582884,7 @@ var init_remoteBridgeCore = __esm(() => {
|
|
|
582840
582884
|
init_axios2();
|
|
582841
582885
|
init_replBridgeTransport();
|
|
582842
582886
|
init_workSecret();
|
|
582887
|
+
init_sessionIdCompat();
|
|
582843
582888
|
init_jwtUtils();
|
|
582844
582889
|
init_trustedDevice();
|
|
582845
582890
|
init_envLessBridgeConfig();
|
|
@@ -582879,7 +582924,7 @@ async function initReplBridge(options) {
|
|
|
582879
582924
|
outboundOnly,
|
|
582880
582925
|
tags
|
|
582881
582926
|
} = options ?? {};
|
|
582882
|
-
setCseShimGate(isCseShimEnabled);
|
|
582927
|
+
await setCseShimGate(isCseShimEnabled);
|
|
582883
582928
|
const [
|
|
582884
582929
|
{ getFeatureValue_CACHED_WITH_REFRESH: getFeatureValue_CACHED_WITH_REFRESH4 },
|
|
582885
582930
|
{ getOrganizationUUID: getOrganizationUUID2 },
|
|
@@ -583130,6 +583175,7 @@ var init_initReplBridge = __esm(() => {
|
|
|
583130
583175
|
init_envLessBridgeConfig();
|
|
583131
583176
|
init_pollConfig();
|
|
583132
583177
|
init_replBridge();
|
|
583178
|
+
init_sessionIdCompat();
|
|
583133
583179
|
});
|
|
583134
583180
|
|
|
583135
583181
|
// src/cli/print.ts
|
package/package.json
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@funnycode/myclaude",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"private": false,
|
|
5
|
-
"description": "An open-source AI coding assistant in your terminal - powered by Claude",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"packageManager": "bun@1.3.5",
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "https://github.com/thomaslwq/myclaude.git"
|
|
12
|
-
},
|
|
13
|
-
"bugs": {
|
|
14
|
-
"url": "https://github.com/thomaslwq/myclaude/issues"
|
|
15
|
-
},
|
|
16
|
-
"homepage": "https://github.com/thomaslwq/myclaude",
|
|
17
|
-
"engines": {
|
|
18
|
-
"bun": ">=1.3.5",
|
|
19
|
-
"node": ">=18.17.0"
|
|
20
|
-
},
|
|
21
|
-
"scripts": {
|
|
22
|
-
"dev": "bun run ./src/dev-entry.ts",
|
|
23
|
-
"start": "bun run ./src/dev-entry.ts",
|
|
24
|
-
"test": "bun test",
|
|
25
|
-
"test:watch": "bun test --watch",
|
|
26
|
-
"test:perf": "bun test src/tests/performance-regression.test.ts",
|
|
27
|
-
"build": "bun run ./scripts/build.ts",
|
|
28
|
-
"prepublishOnly": "bun run build",
|
|
29
|
-
"version": "bun run ./src/dev-entry.ts --version"
|
|
30
|
-
},
|
|
31
|
-
"bin": {
|
|
32
|
-
"myclaude": "bin/myclaude.cjs"
|
|
33
|
-
},
|
|
34
|
-
"files": [
|
|
35
|
-
"dist/",
|
|
36
|
-
"seed/",
|
|
37
|
-
"bin/",
|
|
38
|
-
"LICENSE",
|
|
39
|
-
"README.md",
|
|
40
|
-
"README.zh-CN.md",
|
|
41
|
-
"CHANGELOG.md",
|
|
42
|
-
"docs/funnycode.png",
|
|
43
|
-
"shims/node-domexception/"
|
|
44
|
-
],
|
|
45
|
-
"publishConfig": {
|
|
46
|
-
"access": "public"
|
|
47
|
-
},
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"@alcalzone/ansi-tokenize": "0.3.0",
|
|
50
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.207",
|
|
51
|
-
"@anthropic-ai/mcpb": "2.1.2",
|
|
52
|
-
"@anthropic-ai/sandbox-runtime": "0.0.44",
|
|
53
|
-
"@anthropic-ai/sdk": "0.111.0",
|
|
54
|
-
"@aws-sdk/client-bedrock-runtime": "3.1020.0",
|
|
55
|
-
"@commander-js/extra-typings": "14.0.0",
|
|
56
|
-
"@growthbook/growthbook": "1.6.5",
|
|
57
|
-
"@modelcontextprotocol/sdk": "1.29.0",
|
|
58
|
-
"@opentelemetry/api": "1.9.1",
|
|
59
|
-
"@opentelemetry/api-logs": "0.221.0",
|
|
60
|
-
"@opentelemetry/core": "1.28.0",
|
|
61
|
-
"@opentelemetry/resources": "1.28.0",
|
|
62
|
-
"@opentelemetry/sdk-logs": "0.52.0",
|
|
63
|
-
"@opentelemetry/sdk-metrics": "1.28.0",
|
|
64
|
-
"@opentelemetry/sdk-trace-base": "1.28.0",
|
|
65
|
-
"@opentelemetry/semantic-conventions": "1.43.0",
|
|
66
|
-
"ajv": "8.18.0",
|
|
67
|
-
"asciichart": "1.5.25",
|
|
68
|
-
"async-mutex": "0.5.0",
|
|
69
|
-
"auto-bind": "5.0.1",
|
|
70
|
-
"axios": "1.19.0",
|
|
71
|
-
"bidi-js": "1.0.3",
|
|
72
|
-
"chalk": "5.6.2",
|
|
73
|
-
"chokidar": "5.0.0",
|
|
74
|
-
"cli-boxes": "4.0.1",
|
|
75
|
-
"code-excerpt": "4.0.0",
|
|
76
|
-
"diff": "8.0.4",
|
|
77
|
-
"emoji-regex": "10.6.0",
|
|
78
|
-
"env-paths": "4.0.0",
|
|
79
|
-
"execa": "9.6.1",
|
|
80
|
-
"figures": "6.1.0",
|
|
81
|
-
"fuse.js": "7.1.0",
|
|
82
|
-
"get-east-asian-width": "1.5.0",
|
|
83
|
-
"google-auth-library": "10.6.2",
|
|
84
|
-
"highlight.js": "11.11.1",
|
|
85
|
-
"https-proxy-agent": "8.0.0",
|
|
86
|
-
"ignore": "7.0.5",
|
|
87
|
-
"indent-string": "5.0.0",
|
|
88
|
-
"ink": "6.8.0",
|
|
89
|
-
"jsonc-parser": "3.3.1",
|
|
90
|
-
"lodash-es": "4.17.23",
|
|
91
|
-
"lru-cache": "11.5.2",
|
|
92
|
-
"marked": "18.0.9",
|
|
93
|
-
"p-map": "7.0.4",
|
|
94
|
-
"picomatch": "4.0.4",
|
|
95
|
-
"proper-lockfile": "4.1.2",
|
|
96
|
-
"qrcode": "1.5.4",
|
|
97
|
-
"react": "19.2.8",
|
|
98
|
-
"react-reconciler": "0.33.0",
|
|
99
|
-
"semver": "7.8.5",
|
|
100
|
-
"shell-quote": "1.8.3",
|
|
101
|
-
"signal-exit": "4.1.0",
|
|
102
|
-
"stack-utils": "2.0.6",
|
|
103
|
-
"strip-ansi": "7.2.0",
|
|
104
|
-
"supports-hyperlinks": "4.4.0",
|
|
105
|
-
"tree-kill": "1.2.2",
|
|
106
|
-
"type-fest": "5.5.0",
|
|
107
|
-
"undici": "7.24.6",
|
|
108
|
-
"usehooks-ts": "3.1.1",
|
|
109
|
-
"vscode-jsonrpc": "8.2.1",
|
|
110
|
-
"vscode-languageserver-protocol": "3.17.5",
|
|
111
|
-
"vscode-languageserver-types": "3.17.5",
|
|
112
|
-
"wrap-ansi": "10.0.0",
|
|
113
|
-
"ws": "8.20.0",
|
|
114
|
-
"xss": "1.0.15",
|
|
115
|
-
"yaml": "2.8.3",
|
|
116
|
-
"zod": "4.4.3"
|
|
117
|
-
},
|
|
118
|
-
"optionalDependencies": {
|
|
119
|
-
"@ant/claude-for-chrome-mcp": "file:./shims/ant-claude-for-chrome-mcp",
|
|
120
|
-
"@ant/computer-use-input": "file:./shims/ant-computer-use-input",
|
|
121
|
-
"@ant/computer-use-mcp": "file:./shims/ant-computer-use-mcp",
|
|
122
|
-
"@ant/computer-use-swift": "file:./shims/ant-computer-use-swift",
|
|
123
|
-
"color-diff-napi": "file:./shims/color-diff-napi",
|
|
124
|
-
"modifiers-napi": "file:./shims/modifiers-napi",
|
|
125
|
-
"node-domexception": "file:./shims/node-domexception",
|
|
126
|
-
"url-handler-napi": "file:./shims/url-handler-napi"
|
|
127
|
-
},
|
|
128
|
-
"overrides": {
|
|
129
|
-
"node-domexception": "file:./shims/node-domexception"
|
|
130
|
-
}
|
|
131
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@funnycode/myclaude",
|
|
3
|
+
"version": "0.1.285",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "An open-source AI coding assistant in your terminal - powered by Claude",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"packageManager": "bun@1.3.5",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/thomaslwq/myclaude.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/thomaslwq/myclaude/issues"
|
|
15
|
+
},
|
|
16
|
+
"homepage": "https://github.com/thomaslwq/myclaude",
|
|
17
|
+
"engines": {
|
|
18
|
+
"bun": ">=1.3.5",
|
|
19
|
+
"node": ">=18.17.0"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"dev": "bun run ./src/dev-entry.ts",
|
|
23
|
+
"start": "bun run ./src/dev-entry.ts",
|
|
24
|
+
"test": "bun test",
|
|
25
|
+
"test:watch": "bun test --watch",
|
|
26
|
+
"test:perf": "bun test src/tests/performance-regression.test.ts",
|
|
27
|
+
"build": "bun run ./scripts/build.ts",
|
|
28
|
+
"prepublishOnly": "bun run build",
|
|
29
|
+
"version": "bun run ./src/dev-entry.ts --version"
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"myclaude": "bin/myclaude.cjs"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist/",
|
|
36
|
+
"seed/",
|
|
37
|
+
"bin/",
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"README.md",
|
|
40
|
+
"README.zh-CN.md",
|
|
41
|
+
"CHANGELOG.md",
|
|
42
|
+
"docs/funnycode.png",
|
|
43
|
+
"shims/node-domexception/"
|
|
44
|
+
],
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@alcalzone/ansi-tokenize": "0.3.0",
|
|
50
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.207",
|
|
51
|
+
"@anthropic-ai/mcpb": "2.1.2",
|
|
52
|
+
"@anthropic-ai/sandbox-runtime": "0.0.44",
|
|
53
|
+
"@anthropic-ai/sdk": "0.111.0",
|
|
54
|
+
"@aws-sdk/client-bedrock-runtime": "3.1020.0",
|
|
55
|
+
"@commander-js/extra-typings": "14.0.0",
|
|
56
|
+
"@growthbook/growthbook": "1.6.5",
|
|
57
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
58
|
+
"@opentelemetry/api": "1.9.1",
|
|
59
|
+
"@opentelemetry/api-logs": "0.221.0",
|
|
60
|
+
"@opentelemetry/core": "1.28.0",
|
|
61
|
+
"@opentelemetry/resources": "1.28.0",
|
|
62
|
+
"@opentelemetry/sdk-logs": "0.52.0",
|
|
63
|
+
"@opentelemetry/sdk-metrics": "1.28.0",
|
|
64
|
+
"@opentelemetry/sdk-trace-base": "1.28.0",
|
|
65
|
+
"@opentelemetry/semantic-conventions": "1.43.0",
|
|
66
|
+
"ajv": "8.18.0",
|
|
67
|
+
"asciichart": "1.5.25",
|
|
68
|
+
"async-mutex": "0.5.0",
|
|
69
|
+
"auto-bind": "5.0.1",
|
|
70
|
+
"axios": "1.19.0",
|
|
71
|
+
"bidi-js": "1.0.3",
|
|
72
|
+
"chalk": "5.6.2",
|
|
73
|
+
"chokidar": "5.0.0",
|
|
74
|
+
"cli-boxes": "4.0.1",
|
|
75
|
+
"code-excerpt": "4.0.0",
|
|
76
|
+
"diff": "8.0.4",
|
|
77
|
+
"emoji-regex": "10.6.0",
|
|
78
|
+
"env-paths": "4.0.0",
|
|
79
|
+
"execa": "9.6.1",
|
|
80
|
+
"figures": "6.1.0",
|
|
81
|
+
"fuse.js": "7.1.0",
|
|
82
|
+
"get-east-asian-width": "1.5.0",
|
|
83
|
+
"google-auth-library": "10.6.2",
|
|
84
|
+
"highlight.js": "11.11.1",
|
|
85
|
+
"https-proxy-agent": "8.0.0",
|
|
86
|
+
"ignore": "7.0.5",
|
|
87
|
+
"indent-string": "5.0.0",
|
|
88
|
+
"ink": "6.8.0",
|
|
89
|
+
"jsonc-parser": "3.3.1",
|
|
90
|
+
"lodash-es": "4.17.23",
|
|
91
|
+
"lru-cache": "11.5.2",
|
|
92
|
+
"marked": "18.0.9",
|
|
93
|
+
"p-map": "7.0.4",
|
|
94
|
+
"picomatch": "4.0.4",
|
|
95
|
+
"proper-lockfile": "4.1.2",
|
|
96
|
+
"qrcode": "1.5.4",
|
|
97
|
+
"react": "19.2.8",
|
|
98
|
+
"react-reconciler": "0.33.0",
|
|
99
|
+
"semver": "7.8.5",
|
|
100
|
+
"shell-quote": "1.8.3",
|
|
101
|
+
"signal-exit": "4.1.0",
|
|
102
|
+
"stack-utils": "2.0.6",
|
|
103
|
+
"strip-ansi": "7.2.0",
|
|
104
|
+
"supports-hyperlinks": "4.4.0",
|
|
105
|
+
"tree-kill": "1.2.2",
|
|
106
|
+
"type-fest": "5.5.0",
|
|
107
|
+
"undici": "7.24.6",
|
|
108
|
+
"usehooks-ts": "3.1.1",
|
|
109
|
+
"vscode-jsonrpc": "8.2.1",
|
|
110
|
+
"vscode-languageserver-protocol": "3.17.5",
|
|
111
|
+
"vscode-languageserver-types": "3.17.5",
|
|
112
|
+
"wrap-ansi": "10.0.0",
|
|
113
|
+
"ws": "8.20.0",
|
|
114
|
+
"xss": "1.0.15",
|
|
115
|
+
"yaml": "2.8.3",
|
|
116
|
+
"zod": "4.4.3"
|
|
117
|
+
},
|
|
118
|
+
"optionalDependencies": {
|
|
119
|
+
"@ant/claude-for-chrome-mcp": "file:./shims/ant-claude-for-chrome-mcp",
|
|
120
|
+
"@ant/computer-use-input": "file:./shims/ant-computer-use-input",
|
|
121
|
+
"@ant/computer-use-mcp": "file:./shims/ant-computer-use-mcp",
|
|
122
|
+
"@ant/computer-use-swift": "file:./shims/ant-computer-use-swift",
|
|
123
|
+
"color-diff-napi": "file:./shims/color-diff-napi",
|
|
124
|
+
"modifiers-napi": "file:./shims/modifiers-napi",
|
|
125
|
+
"node-domexception": "file:./shims/node-domexception",
|
|
126
|
+
"url-handler-napi": "file:./shims/url-handler-napi"
|
|
127
|
+
},
|
|
128
|
+
"overrides": {
|
|
129
|
+
"node-domexception": "file:./shims/node-domexception"
|
|
130
|
+
}
|
|
131
|
+
}
|