@verboo/code 0.9.3 → 0.9.5
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.mjs +383 -281
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -16549,7 +16549,7 @@ function getPathsForPermissionCheck(inputPath) {
|
|
|
16549
16549
|
path7 = nodePath.join(homedir2().normalize("NFC"), path7.slice(2));
|
|
16550
16550
|
}
|
|
16551
16551
|
const pathSet = new Set;
|
|
16552
|
-
const fsImpl =
|
|
16552
|
+
const fsImpl = getFsImplementation2();
|
|
16553
16553
|
pathSet.add(path7);
|
|
16554
16554
|
if (path7.startsWith("//") || path7.startsWith("\\\\")) {
|
|
16555
16555
|
return Array.from(pathSet);
|
|
@@ -16591,7 +16591,7 @@ function getPathsForPermissionCheck(inputPath) {
|
|
|
16591
16591
|
}
|
|
16592
16592
|
return Array.from(pathSet);
|
|
16593
16593
|
}
|
|
16594
|
-
function
|
|
16594
|
+
function getFsImplementation2() {
|
|
16595
16595
|
return activeFs;
|
|
16596
16596
|
}
|
|
16597
16597
|
async function readFileRange(path7, offset, maxBytes) {
|
|
@@ -17108,10 +17108,10 @@ function getDebugWriter() {
|
|
|
17108
17108
|
if (isDebugMode()) {
|
|
17109
17109
|
if (needMkdir) {
|
|
17110
17110
|
try {
|
|
17111
|
-
|
|
17111
|
+
getFsImplementation2().mkdirSync(dir);
|
|
17112
17112
|
} catch {}
|
|
17113
17113
|
}
|
|
17114
|
-
|
|
17114
|
+
getFsImplementation2().appendFileSync(path7, content);
|
|
17115
17115
|
updateLatestDebugLogSymlink();
|
|
17116
17116
|
return;
|
|
17117
17117
|
}
|
|
@@ -17371,10 +17371,10 @@ var init_cachePaths = __esm(() => {
|
|
|
17371
17371
|
init_fsOperations();
|
|
17372
17372
|
paths = envPaths("claude-cli");
|
|
17373
17373
|
CACHE_PATHS = {
|
|
17374
|
-
baseLogs: () => join4(paths.cache, getProjectDir(
|
|
17375
|
-
errors: () => join4(paths.cache, getProjectDir(
|
|
17376
|
-
messages: () => join4(paths.cache, getProjectDir(
|
|
17377
|
-
mcpLogs: (serverName) => join4(paths.cache, getProjectDir(
|
|
17374
|
+
baseLogs: () => join4(paths.cache, getProjectDir(getFsImplementation2().cwd())),
|
|
17375
|
+
errors: () => join4(paths.cache, getProjectDir(getFsImplementation2().cwd()), "errors"),
|
|
17376
|
+
messages: () => join4(paths.cache, getProjectDir(getFsImplementation2().cwd()), "messages"),
|
|
17377
|
+
mcpLogs: (serverName) => join4(paths.cache, getProjectDir(getFsImplementation2().cwd()), `mcp-logs-${sanitizePath(serverName)}`)
|
|
17378
17378
|
};
|
|
17379
17379
|
});
|
|
17380
17380
|
|
|
@@ -18438,7 +18438,7 @@ var init_plainTextStorage = __esm(() => {
|
|
|
18438
18438
|
read() {
|
|
18439
18439
|
const { storagePath } = getStoragePath();
|
|
18440
18440
|
try {
|
|
18441
|
-
const data =
|
|
18441
|
+
const data = getFsImplementation2().readFileSync(storagePath, {
|
|
18442
18442
|
encoding: "utf8"
|
|
18443
18443
|
});
|
|
18444
18444
|
return jsonParse(data);
|
|
@@ -18449,7 +18449,7 @@ var init_plainTextStorage = __esm(() => {
|
|
|
18449
18449
|
async readAsync() {
|
|
18450
18450
|
const { storagePath } = getStoragePath();
|
|
18451
18451
|
try {
|
|
18452
|
-
const data = await
|
|
18452
|
+
const data = await getFsImplementation2().readFile(storagePath, {
|
|
18453
18453
|
encoding: "utf8"
|
|
18454
18454
|
});
|
|
18455
18455
|
return jsonParse(data);
|
|
@@ -18461,7 +18461,7 @@ var init_plainTextStorage = __esm(() => {
|
|
|
18461
18461
|
try {
|
|
18462
18462
|
const { storageDir, storagePath } = getStoragePath();
|
|
18463
18463
|
try {
|
|
18464
|
-
|
|
18464
|
+
getFsImplementation2().mkdirSync(storageDir);
|
|
18465
18465
|
} catch (e) {
|
|
18466
18466
|
const code = getErrnoCode(e);
|
|
18467
18467
|
if (code !== "EEXIST") {
|
|
@@ -18484,7 +18484,7 @@ var init_plainTextStorage = __esm(() => {
|
|
|
18484
18484
|
delete() {
|
|
18485
18485
|
const { storagePath } = getStoragePath();
|
|
18486
18486
|
try {
|
|
18487
|
-
|
|
18487
|
+
getFsImplementation2().unlinkSync(storagePath);
|
|
18488
18488
|
return true;
|
|
18489
18489
|
} catch (e) {
|
|
18490
18490
|
const code = getErrnoCode(e);
|
|
@@ -40502,7 +40502,6 @@ var init_env = __esm(() => {
|
|
|
40502
40502
|
init_combinedAbortSignal();
|
|
40503
40503
|
init_envUtils();
|
|
40504
40504
|
init_findExecutable();
|
|
40505
|
-
init_fsOperations();
|
|
40506
40505
|
init_which();
|
|
40507
40506
|
getGlobalClaudeFile = memoize_default(() => {
|
|
40508
40507
|
const oauthSuffix = fileSuffixForOauthConfig();
|
|
@@ -42146,7 +42145,7 @@ function logForDiagnosticsNoPII(level, event, data) {
|
|
|
42146
42145
|
event,
|
|
42147
42146
|
data: data ?? {}
|
|
42148
42147
|
};
|
|
42149
|
-
const fs2 =
|
|
42148
|
+
const fs2 = getFsImplementation2();
|
|
42150
42149
|
const line = jsonStringify(entry) + `
|
|
42151
42150
|
`;
|
|
42152
42151
|
try {
|
|
@@ -43210,7 +43209,7 @@ function isLocalHost(host) {
|
|
|
43210
43209
|
return hostWithoutPort === "localhost" || /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostWithoutPort);
|
|
43211
43210
|
}
|
|
43212
43211
|
function isCurrentDirectoryBareGitRepo() {
|
|
43213
|
-
const fs2 =
|
|
43212
|
+
const fs2 = getFsImplementation2();
|
|
43214
43213
|
const cwd2 = getCwd();
|
|
43215
43214
|
const gitPath = join13(cwd2, ".git");
|
|
43216
43215
|
try {
|
|
@@ -43427,7 +43426,7 @@ var init_platform2 = __esm(() => {
|
|
|
43427
43426
|
}
|
|
43428
43427
|
if (process.platform === "linux") {
|
|
43429
43428
|
try {
|
|
43430
|
-
const procVersion =
|
|
43429
|
+
const procVersion = getFsImplementation2().readFileSync("/proc/version", { encoding: "utf8" });
|
|
43431
43430
|
if (procVersion.toLowerCase().includes("microsoft") || procVersion.toLowerCase().includes("wsl")) {
|
|
43432
43431
|
return "wsl";
|
|
43433
43432
|
}
|
|
@@ -43447,7 +43446,7 @@ var init_platform2 = __esm(() => {
|
|
|
43447
43446
|
return;
|
|
43448
43447
|
}
|
|
43449
43448
|
try {
|
|
43450
|
-
const procVersion =
|
|
43449
|
+
const procVersion = getFsImplementation2().readFileSync("/proc/version", {
|
|
43451
43450
|
encoding: "utf8"
|
|
43452
43451
|
});
|
|
43453
43452
|
const wslVersionMatch = procVersion.match(/WSL(\d+)/i);
|
|
@@ -44103,7 +44102,7 @@ var init_sessionStoragePortable = __esm(() => {
|
|
|
44103
44102
|
import { homedir as homedir6 } from "os";
|
|
44104
44103
|
import { dirname as dirname7, isAbsolute as isAbsolute2, join as join16, normalize, relative, resolve as resolve7 } from "path";
|
|
44105
44104
|
function expandPath(path10, baseDir) {
|
|
44106
|
-
const actualBaseDir = baseDir ?? getCwd() ??
|
|
44105
|
+
const actualBaseDir = baseDir ?? getCwd() ?? getFsImplementation2().cwd();
|
|
44107
44106
|
if (typeof path10 !== "string") {
|
|
44108
44107
|
throw new TypeError(`Path must be a string, received ${typeof path10}`);
|
|
44109
44108
|
}
|
|
@@ -44146,7 +44145,7 @@ function getDirectoryForPath(path10) {
|
|
|
44146
44145
|
return dirname7(absolutePath);
|
|
44147
44146
|
}
|
|
44148
44147
|
try {
|
|
44149
|
-
const stats =
|
|
44148
|
+
const stats = getFsImplementation2().statSync(absolutePath);
|
|
44150
44149
|
if (stats.isDirectory()) {
|
|
44151
44150
|
return absolutePath;
|
|
44152
44151
|
}
|
|
@@ -55908,7 +55907,7 @@ var init_v4 = __esm(() => {
|
|
|
55908
55907
|
|
|
55909
55908
|
// src/utils/fileRead.ts
|
|
55910
55909
|
function detectEncodingForResolvedPath(resolvedPath) {
|
|
55911
|
-
const { buffer, bytesRead } =
|
|
55910
|
+
const { buffer, bytesRead } = getFsImplementation2().readSync(resolvedPath, {
|
|
55912
55911
|
length: 4096
|
|
55913
55912
|
});
|
|
55914
55913
|
if (bytesRead === 0) {
|
|
@@ -55939,7 +55938,7 @@ function detectLineEndingsForString(content) {
|
|
|
55939
55938
|
return crlfCount > lfCount ? "CRLF" : "LF";
|
|
55940
55939
|
}
|
|
55941
55940
|
function readFileSyncWithMetadata(filePath) {
|
|
55942
|
-
const fs2 =
|
|
55941
|
+
const fs2 = getFsImplementation2();
|
|
55943
55942
|
const { resolvedPath, isSymlink } = safeResolvePath(fs2, filePath);
|
|
55944
55943
|
if (isSymlink) {
|
|
55945
55944
|
logForDebugging(`Reading through symlink: ${filePath} -> ${resolvedPath}`);
|
|
@@ -56043,7 +56042,7 @@ class FileReadCache {
|
|
|
56043
56042
|
sizeCalculation: (value) => Math.max(1, Buffer.byteLength(value.content))
|
|
56044
56043
|
});
|
|
56045
56044
|
readFile(filePath) {
|
|
56046
|
-
const fs2 =
|
|
56045
|
+
const fs2 = getFsImplementation2();
|
|
56047
56046
|
let stats;
|
|
56048
56047
|
try {
|
|
56049
56048
|
stats = fs2.statSync(filePath);
|
|
@@ -56117,7 +56116,7 @@ async function pathExists(path10) {
|
|
|
56117
56116
|
}
|
|
56118
56117
|
function readFileSafe(filepath) {
|
|
56119
56118
|
try {
|
|
56120
|
-
const fs2 =
|
|
56119
|
+
const fs2 = getFsImplementation2();
|
|
56121
56120
|
return fs2.readFileSync(filepath, { encoding: "utf8" });
|
|
56122
56121
|
} catch (error41) {
|
|
56123
56122
|
logError2(error41);
|
|
@@ -56125,11 +56124,11 @@ function readFileSafe(filepath) {
|
|
|
56125
56124
|
}
|
|
56126
56125
|
}
|
|
56127
56126
|
function getFileModificationTime(filePath) {
|
|
56128
|
-
const fs2 =
|
|
56127
|
+
const fs2 = getFsImplementation2();
|
|
56129
56128
|
return Math.floor(fs2.statSync(filePath).mtimeMs);
|
|
56130
56129
|
}
|
|
56131
56130
|
async function getFileModificationTimeAsync(filePath) {
|
|
56132
|
-
const s = await
|
|
56131
|
+
const s = await getFsImplementation2().stat(filePath);
|
|
56133
56132
|
return Math.floor(s.mtimeMs);
|
|
56134
56133
|
}
|
|
56135
56134
|
function writeTextContent(filePath, content, encoding, endings) {
|
|
@@ -56145,7 +56144,7 @@ function writeTextContent(filePath, content, encoding, endings) {
|
|
|
56145
56144
|
}
|
|
56146
56145
|
function detectFileEncoding(filePath) {
|
|
56147
56146
|
try {
|
|
56148
|
-
const fs2 =
|
|
56147
|
+
const fs2 = getFsImplementation2();
|
|
56149
56148
|
const { resolvedPath } = safeResolvePath(fs2, filePath);
|
|
56150
56149
|
return detectEncodingForResolvedPath(resolvedPath);
|
|
56151
56150
|
} catch (error41) {
|
|
@@ -56161,7 +56160,7 @@ function detectFileEncoding(filePath) {
|
|
|
56161
56160
|
}
|
|
56162
56161
|
function detectLineEndings(filePath, encoding = "utf8") {
|
|
56163
56162
|
try {
|
|
56164
|
-
const fs2 =
|
|
56163
|
+
const fs2 = getFsImplementation2();
|
|
56165
56164
|
const { resolvedPath } = safeResolvePath(fs2, filePath);
|
|
56166
56165
|
const { buffer, bytesRead } = fs2.readSync(resolvedPath, { length: 4096 });
|
|
56167
56166
|
const content = buffer.toString(encoding, 0, bytesRead);
|
|
@@ -56193,7 +56192,7 @@ function getDisplayPath(filePath) {
|
|
|
56193
56192
|
return filePath;
|
|
56194
56193
|
}
|
|
56195
56194
|
function findSimilarFile(filePath) {
|
|
56196
|
-
const fs2 =
|
|
56195
|
+
const fs2 = getFsImplementation2();
|
|
56197
56196
|
try {
|
|
56198
56197
|
const dir = dirname8(filePath);
|
|
56199
56198
|
const fileBaseName = basename3(filePath, extname(filePath));
|
|
@@ -56262,7 +56261,7 @@ function stripLineNumberPrefix(line) {
|
|
|
56262
56261
|
}
|
|
56263
56262
|
function isDirEmpty(dirPath) {
|
|
56264
56263
|
try {
|
|
56265
|
-
return
|
|
56264
|
+
return getFsImplementation2().isDirEmptySync(dirPath);
|
|
56266
56265
|
} catch (e) {
|
|
56267
56266
|
return isENOENT(e);
|
|
56268
56267
|
}
|
|
@@ -56272,7 +56271,7 @@ function readFileSyncCached(filePath) {
|
|
|
56272
56271
|
return content;
|
|
56273
56272
|
}
|
|
56274
56273
|
function writeFileSyncAndFlush_DEPRECATED(filePath, content, options = { encoding: "utf-8" }) {
|
|
56275
|
-
const fs2 =
|
|
56274
|
+
const fs2 = getFsImplementation2();
|
|
56276
56275
|
let targetPath = filePath;
|
|
56277
56276
|
try {
|
|
56278
56277
|
const linkTarget = fs2.readlinkSync(filePath);
|
|
@@ -56351,19 +56350,19 @@ function getDesktopPath() {
|
|
|
56351
56350
|
if (windowsHome) {
|
|
56352
56351
|
const wslPath = windowsHome.replace(/^[A-Z]:/, "");
|
|
56353
56352
|
const desktopPath2 = `/mnt/c${wslPath}/Desktop`;
|
|
56354
|
-
if (
|
|
56353
|
+
if (getFsImplementation2().existsSync(desktopPath2)) {
|
|
56355
56354
|
return desktopPath2;
|
|
56356
56355
|
}
|
|
56357
56356
|
}
|
|
56358
56357
|
try {
|
|
56359
56358
|
const usersDir = "/mnt/c/Users";
|
|
56360
|
-
const userDirs =
|
|
56359
|
+
const userDirs = getFsImplementation2().readdirSync(usersDir);
|
|
56361
56360
|
for (const user of userDirs) {
|
|
56362
56361
|
if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
|
|
56363
56362
|
continue;
|
|
56364
56363
|
}
|
|
56365
56364
|
const potentialDesktopPath = join18(usersDir, user.name, "Desktop");
|
|
56366
|
-
if (
|
|
56365
|
+
if (getFsImplementation2().existsSync(potentialDesktopPath)) {
|
|
56367
56366
|
return potentialDesktopPath;
|
|
56368
56367
|
}
|
|
56369
56368
|
}
|
|
@@ -56372,14 +56371,14 @@ function getDesktopPath() {
|
|
|
56372
56371
|
}
|
|
56373
56372
|
}
|
|
56374
56373
|
const desktopPath = join18(homeDir, "Desktop");
|
|
56375
|
-
if (
|
|
56374
|
+
if (getFsImplementation2().existsSync(desktopPath)) {
|
|
56376
56375
|
return desktopPath;
|
|
56377
56376
|
}
|
|
56378
56377
|
return homeDir;
|
|
56379
56378
|
}
|
|
56380
56379
|
function isFileWithinReadSizeLimit(filePath, maxSizeBytes = MAX_OUTPUT_SIZE) {
|
|
56381
56380
|
try {
|
|
56382
|
-
const stats =
|
|
56381
|
+
const stats = getFsImplementation2().statSync(filePath);
|
|
56383
56382
|
return stats.size <= maxSizeBytes;
|
|
56384
56383
|
} catch {
|
|
56385
56384
|
return false;
|
|
@@ -58674,7 +58673,7 @@ function profileReport() {
|
|
|
58674
58673
|
if (DETAILED_PROFILING) {
|
|
58675
58674
|
const path10 = getStartupPerfLogPath();
|
|
58676
58675
|
const dir = dirname10(path10);
|
|
58677
|
-
const fs2 =
|
|
58676
|
+
const fs2 = getFsImplementation2();
|
|
58678
58677
|
fs2.mkdirSync(dir);
|
|
58679
58678
|
writeFileSync_DEPRECATED(path10, getReport(), {
|
|
58680
58679
|
encoding: "utf8",
|
|
@@ -88460,7 +88459,7 @@ var init_caCerts = __esm(() => {
|
|
|
88460
88459
|
}
|
|
88461
88460
|
if (extraCertsPath) {
|
|
88462
88461
|
try {
|
|
88463
|
-
const extraCert =
|
|
88462
|
+
const extraCert = getFsImplementation2().readFileSync(extraCertsPath, {
|
|
88464
88463
|
encoding: "utf8"
|
|
88465
88464
|
});
|
|
88466
88465
|
certs.push(extraCert);
|
|
@@ -110873,7 +110872,7 @@ var init_mtls = __esm(() => {
|
|
|
110873
110872
|
const config2 = {};
|
|
110874
110873
|
if (process.env.CLAUDE_CODE_CLIENT_CERT) {
|
|
110875
110874
|
try {
|
|
110876
|
-
config2.cert =
|
|
110875
|
+
config2.cert = getFsImplementation2().readFileSync(process.env.CLAUDE_CODE_CLIENT_CERT, { encoding: "utf8" });
|
|
110877
110876
|
logForDebugging("mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT");
|
|
110878
110877
|
} catch (error41) {
|
|
110879
110878
|
logForDebugging(`mTLS: Failed to load client certificate: ${error41}`, {
|
|
@@ -110883,7 +110882,7 @@ var init_mtls = __esm(() => {
|
|
|
110883
110882
|
}
|
|
110884
110883
|
if (process.env.CLAUDE_CODE_CLIENT_KEY) {
|
|
110885
110884
|
try {
|
|
110886
|
-
config2.key =
|
|
110885
|
+
config2.key = getFsImplementation2().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY, { encoding: "utf8" });
|
|
110887
110886
|
logForDebugging("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY");
|
|
110888
110887
|
} catch (error41) {
|
|
110889
110888
|
logForDebugging(`mTLS: Failed to load client key: ${error41}`, {
|
|
@@ -138075,7 +138074,7 @@ function maybePersistTokenForSubprocesses(path10, token, tokenName) {
|
|
|
138075
138074
|
}
|
|
138076
138075
|
function readTokenFromWellKnownFile(path10, tokenName) {
|
|
138077
138076
|
try {
|
|
138078
|
-
const fsOps =
|
|
138077
|
+
const fsOps = getFsImplementation2();
|
|
138079
138078
|
const token = fsOps.readFileSync(path10, { encoding: "utf8" }).trim();
|
|
138080
138079
|
if (!token) {
|
|
138081
138080
|
return null;
|
|
@@ -138113,7 +138112,7 @@ function getCredentialFromFd({
|
|
|
138113
138112
|
return null;
|
|
138114
138113
|
}
|
|
138115
138114
|
try {
|
|
138116
|
-
const fsOps =
|
|
138115
|
+
const fsOps = getFsImplementation2();
|
|
138117
138116
|
const fdPath = process.platform === "darwin" || process.platform === "freebsd" ? `/dev/fd/${fd}` : `/proc/self/fd/${fd}`;
|
|
138118
138117
|
const token = fsOps.readFileSync(fdPath, { encoding: "utf8" }).trim();
|
|
138119
138118
|
if (!token) {
|
|
@@ -153632,7 +153631,7 @@ function isPathAllowed(resolvedPath, context, operationType, precomputedPathsToC
|
|
|
153632
153631
|
function validateGlobPattern(cleanPath, cwd2, toolPermissionContext, operationType) {
|
|
153633
153632
|
if (containsPathTraversal(cleanPath)) {
|
|
153634
153633
|
const absolutePath = isAbsolute5(cleanPath) ? cleanPath : resolve15(cwd2, cleanPath);
|
|
153635
|
-
const { resolvedPath: resolvedPath2, isCanonical: isCanonical2 } = safeResolvePath(
|
|
153634
|
+
const { resolvedPath: resolvedPath2, isCanonical: isCanonical2 } = safeResolvePath(getFsImplementation2(), absolutePath);
|
|
153636
153635
|
const result2 = isPathAllowed(resolvedPath2, toolPermissionContext, operationType, isCanonical2 ? [resolvedPath2] : undefined);
|
|
153637
153636
|
return {
|
|
153638
153637
|
allowed: result2.allowed,
|
|
@@ -153642,7 +153641,7 @@ function validateGlobPattern(cleanPath, cwd2, toolPermissionContext, operationTy
|
|
|
153642
153641
|
}
|
|
153643
153642
|
const basePath = getGlobBaseDirectory(cleanPath);
|
|
153644
153643
|
const absoluteBasePath = isAbsolute5(basePath) ? basePath : resolve15(cwd2, basePath);
|
|
153645
|
-
const { resolvedPath, isCanonical } = safeResolvePath(
|
|
153644
|
+
const { resolvedPath, isCanonical } = safeResolvePath(getFsImplementation2(), absoluteBasePath);
|
|
153646
153645
|
const result = isPathAllowed(resolvedPath, toolPermissionContext, operationType, isCanonical ? [resolvedPath] : undefined);
|
|
153647
153646
|
return {
|
|
153648
153647
|
allowed: result.allowed,
|
|
@@ -153721,7 +153720,7 @@ function validatePath(path11, cwd2, toolPermissionContext, operationType) {
|
|
|
153721
153720
|
return validateGlobPattern(cleanPath, cwd2, toolPermissionContext, operationType);
|
|
153722
153721
|
}
|
|
153723
153722
|
const absolutePath = isAbsolute5(cleanPath) ? cleanPath : resolve15(cwd2, cleanPath);
|
|
153724
|
-
const { resolvedPath, isCanonical } = safeResolvePath(
|
|
153723
|
+
const { resolvedPath, isCanonical } = safeResolvePath(getFsImplementation2(), absolutePath);
|
|
153725
153724
|
const result = isPathAllowed(resolvedPath, toolPermissionContext, operationType, isCanonical ? [resolvedPath] : undefined);
|
|
153726
153725
|
return {
|
|
153727
153726
|
allowed: result.allowed,
|
|
@@ -156934,7 +156933,7 @@ async function generateMcpConfig(manifest, extractedPath, userConfig = {}) {
|
|
|
156934
156933
|
return mcpConfig;
|
|
156935
156934
|
}
|
|
156936
156935
|
async function loadCacheMetadata(cacheDir, source) {
|
|
156937
|
-
const fs2 =
|
|
156936
|
+
const fs2 = getFsImplementation2();
|
|
156938
156937
|
const metadataPath = getMetadataPath(cacheDir, source);
|
|
156939
156938
|
try {
|
|
156940
156939
|
const content = await fs2.readFile(metadataPath, { encoding: "utf-8" });
|
|
@@ -156953,7 +156952,7 @@ async function loadCacheMetadata(cacheDir, source) {
|
|
|
156953
156952
|
}
|
|
156954
156953
|
async function saveCacheMetadata(cacheDir, source, metadata) {
|
|
156955
156954
|
const metadataPath = getMetadataPath(cacheDir, source);
|
|
156956
|
-
await
|
|
156955
|
+
await getFsImplementation2().mkdir(cacheDir);
|
|
156957
156956
|
await writeFile3(metadataPath, jsonStringify(metadata, null, 2), "utf-8");
|
|
156958
156957
|
}
|
|
156959
156958
|
async function downloadMcpb(url3, destPath, onProgress) {
|
|
@@ -156998,7 +156997,7 @@ async function extractMcpbContents(unzipped, extractPath, modes, onProgress) {
|
|
|
156998
156997
|
if (onProgress) {
|
|
156999
156998
|
onProgress("Extracting files...");
|
|
157000
156999
|
}
|
|
157001
|
-
await
|
|
157000
|
+
await getFsImplementation2().mkdir(extractPath);
|
|
157002
157001
|
let filesWritten = 0;
|
|
157003
157002
|
const entries = Object.entries(unzipped).filter(([k]) => !k.endsWith("/"));
|
|
157004
157003
|
const totalFiles = entries.length;
|
|
@@ -157006,7 +157005,7 @@ async function extractMcpbContents(unzipped, extractPath, modes, onProgress) {
|
|
|
157006
157005
|
const fullPath = join31(extractPath, filePath);
|
|
157007
157006
|
const dir = dirname17(fullPath);
|
|
157008
157007
|
if (dir !== extractPath) {
|
|
157009
|
-
await
|
|
157008
|
+
await getFsImplementation2().mkdir(dir);
|
|
157010
157009
|
}
|
|
157011
157010
|
const isTextFile = filePath.endsWith(".json") || filePath.endsWith(".js") || filePath.endsWith(".ts") || filePath.endsWith(".txt") || filePath.endsWith(".md") || filePath.endsWith(".yml") || filePath.endsWith(".yaml");
|
|
157012
157011
|
if (isTextFile) {
|
|
@@ -157030,7 +157029,7 @@ async function extractMcpbContents(unzipped, extractPath, modes, onProgress) {
|
|
|
157030
157029
|
}
|
|
157031
157030
|
}
|
|
157032
157031
|
async function checkMcpbChanged(source, pluginPath) {
|
|
157033
|
-
const fs2 =
|
|
157032
|
+
const fs2 = getFsImplementation2();
|
|
157034
157033
|
const cacheDir = getMcpbCacheDir(pluginPath);
|
|
157035
157034
|
const metadata = await loadCacheMetadata(cacheDir, source);
|
|
157036
157035
|
if (!metadata) {
|
|
@@ -157071,7 +157070,7 @@ async function checkMcpbChanged(source, pluginPath) {
|
|
|
157071
157070
|
return false;
|
|
157072
157071
|
}
|
|
157073
157072
|
async function loadMcpbFile(source, pluginPath, pluginId, onProgress, providedUserConfig, forceConfigDialog) {
|
|
157074
|
-
const fs2 =
|
|
157073
|
+
const fs2 = getFsImplementation2();
|
|
157075
157074
|
const cacheDir = getMcpbCacheDir(pluginPath);
|
|
157076
157075
|
await fs2.mkdir(cacheDir);
|
|
157077
157076
|
logForDebugging(`Loading MCPB from source: ${source}`);
|
|
@@ -157417,7 +157416,7 @@ var init_pluginOptionsStorage = __esm(() => {
|
|
|
157417
157416
|
// src/utils/plugins/walkPluginMarkdown.ts
|
|
157418
157417
|
import { join as join32 } from "path";
|
|
157419
157418
|
async function walkPluginMarkdown(rootDir, onFile, opts = {}) {
|
|
157420
|
-
const fs2 =
|
|
157419
|
+
const fs2 = getFsImplementation2();
|
|
157421
157420
|
const label = opts.logLabel ?? "plugin";
|
|
157422
157421
|
async function scan(dirPath, namespace) {
|
|
157423
157422
|
try {
|
|
@@ -157461,7 +157460,7 @@ async function loadAgentsFromDirectory(agentsPath, pluginName, sourceName, plugi
|
|
|
157461
157460
|
return agents;
|
|
157462
157461
|
}
|
|
157463
157462
|
async function loadAgentFromFile(filePath, pluginName, namespace, sourceName, pluginPath, pluginManifest, loadedPaths) {
|
|
157464
|
-
const fs2 =
|
|
157463
|
+
const fs2 = getFsImplementation2();
|
|
157465
157464
|
if (isDuplicatePath(fs2, filePath, loadedPaths)) {
|
|
157466
157465
|
return null;
|
|
157467
157466
|
}
|
|
@@ -157603,7 +157602,7 @@ var init_loadPluginAgents = __esm(() => {
|
|
|
157603
157602
|
if (plugin.agentsPaths) {
|
|
157604
157603
|
const pathResults = await Promise.all(plugin.agentsPaths.map(async (agentPath) => {
|
|
157605
157604
|
try {
|
|
157606
|
-
const fs2 =
|
|
157605
|
+
const fs2 = getFsImplementation2();
|
|
157607
157606
|
const stats = await fs2.stat(agentPath);
|
|
157608
157607
|
if (stats.isDirectory()) {
|
|
157609
157608
|
const agents = await loadAgentsFromDirectory(agentPath, plugin.name, plugin.source, plugin.path, plugin.manifest, loadedPaths);
|
|
@@ -164726,7 +164725,7 @@ function handleMemoryFileReadError(error41, filePath) {
|
|
|
164726
164725
|
}
|
|
164727
164726
|
async function safelyReadMemoryFileAsync(filePath, type, includeBasePath) {
|
|
164728
164727
|
try {
|
|
164729
|
-
const fs2 =
|
|
164728
|
+
const fs2 = getFsImplementation2();
|
|
164730
164729
|
const rawContent = await fs2.readFile(filePath, { encoding: "utf-8" });
|
|
164731
164730
|
return parseMemoryFileContent(rawContent, filePath, type, includeBasePath);
|
|
164732
164731
|
} catch (error41) {
|
|
@@ -164806,7 +164805,7 @@ function isClaudeMdExcluded(filePath, type) {
|
|
|
164806
164805
|
return import_picomatch.default.isMatch(normalizedPath, expandedPatterns, matchOpts);
|
|
164807
164806
|
}
|
|
164808
164807
|
function resolveExcludePatterns(patterns) {
|
|
164809
|
-
const fs2 =
|
|
164808
|
+
const fs2 = getFsImplementation2();
|
|
164810
164809
|
const expanded = patterns.map((p) => p.replaceAll("\\", "/"));
|
|
164811
164810
|
for (const normalized of expanded) {
|
|
164812
164811
|
if (!normalized.startsWith("/")) {
|
|
@@ -164833,7 +164832,7 @@ async function processMemoryFile(filePath, type, processedPaths, includeExternal
|
|
|
164833
164832
|
if (isClaudeMdExcluded(filePath, type)) {
|
|
164834
164833
|
return [];
|
|
164835
164834
|
}
|
|
164836
|
-
const { resolvedPath, isSymlink } = safeResolvePath(
|
|
164835
|
+
const { resolvedPath, isSymlink } = safeResolvePath(getFsImplementation2(), filePath);
|
|
164837
164836
|
processedPaths.add(normalizedPath);
|
|
164838
164837
|
if (isSymlink) {
|
|
164839
164838
|
processedPaths.add(normalizePathForComparison(resolvedPath));
|
|
@@ -164869,7 +164868,7 @@ async function processMdRules({
|
|
|
164869
164868
|
return [];
|
|
164870
164869
|
}
|
|
164871
164870
|
try {
|
|
164872
|
-
const fs2 =
|
|
164871
|
+
const fs2 = getFsImplementation2();
|
|
164873
164872
|
const { resolvedPath: resolvedRulesDir, isSymlink } = safeResolvePath(fs2, rulesDir);
|
|
164874
164873
|
visitedDirs.add(rulesDir);
|
|
164875
164874
|
if (isSymlink) {
|
|
@@ -164958,7 +164957,7 @@ async function getManagedAndUserConditionalRules(targetPath, processedPaths) {
|
|
|
164958
164957
|
async function getMemoryFilesForNestedDirectory(dir, targetPath, processedPaths) {
|
|
164959
164958
|
const result = [];
|
|
164960
164959
|
if (isSettingSourceEnabled("projectSettings")) {
|
|
164961
|
-
const projectPath = getProjectInstructionFilePath(dir,
|
|
164960
|
+
const projectPath = getProjectInstructionFilePath(dir, getFsImplementation2().existsSync);
|
|
164962
164961
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, false));
|
|
164963
164962
|
const dotClaudePath = join36(dir, ".claude", "CLAUDE.md");
|
|
164964
164963
|
result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, false));
|
|
@@ -165259,7 +165258,7 @@ var init_claudemd = __esm(() => {
|
|
|
165259
165258
|
for (const dir of dirs.reverse()) {
|
|
165260
165259
|
const skipProject = isNestedWorktree && pathInWorkingPath(dir, canonicalRoot) && !pathInWorkingPath(dir, gitRoot);
|
|
165261
165260
|
if (isSettingSourceEnabled("projectSettings") && !skipProject) {
|
|
165262
|
-
const projectPath = getProjectInstructionFilePath(dir,
|
|
165261
|
+
const projectPath = getProjectInstructionFilePath(dir, getFsImplementation2().existsSync);
|
|
165263
165262
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
|
|
165264
165263
|
const dotClaudePath = join36(dir, ".claude", "CLAUDE.md");
|
|
165265
165264
|
result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, includeExternal));
|
|
@@ -165280,7 +165279,7 @@ var init_claudemd = __esm(() => {
|
|
|
165280
165279
|
if (isEnvTruthy(process.env.CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD)) {
|
|
165281
165280
|
const additionalDirs = getAdditionalDirectoriesForClaudeMd();
|
|
165282
165281
|
for (const dir of additionalDirs) {
|
|
165283
|
-
const projectPath = getProjectInstructionFilePath(dir,
|
|
165282
|
+
const projectPath = getProjectInstructionFilePath(dir, getFsImplementation2().existsSync);
|
|
165284
165283
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
|
|
165285
165284
|
const dotClaudePath = join36(dir, ".claude", "CLAUDE.md");
|
|
165286
165285
|
result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, includeExternal));
|
|
@@ -165976,7 +165975,7 @@ async function waitForSessionMemoryExtraction() {
|
|
|
165976
165975
|
}
|
|
165977
165976
|
}
|
|
165978
165977
|
async function getSessionMemoryContent() {
|
|
165979
|
-
const fs2 =
|
|
165978
|
+
const fs2 = getFsImplementation2();
|
|
165980
165979
|
const memoryPath = getSessionMemoryPath();
|
|
165981
165980
|
try {
|
|
165982
165981
|
const content = await fs2.readFile(memoryPath, { encoding: "utf-8" });
|
|
@@ -170638,7 +170637,7 @@ function getSettingsForSourceLenient_FOR_EDITING_ONLY_NOT_FOR_READING(source) {
|
|
|
170638
170637
|
return null;
|
|
170639
170638
|
}
|
|
170640
170639
|
try {
|
|
170641
|
-
const { resolvedPath } = safeResolvePath(
|
|
170640
|
+
const { resolvedPath } = safeResolvePath(getFsImplementation2(), filePath);
|
|
170642
170641
|
const content = readFileSync7(resolvedPath);
|
|
170643
170642
|
if (content.trim() === "") {
|
|
170644
170643
|
return {};
|
|
@@ -174112,6 +174111,7 @@ function getStreamStats(state) {
|
|
|
174112
174111
|
// src/services/api/openaiShim.ts
|
|
174113
174112
|
var exports_openaiShim = {};
|
|
174114
174113
|
__export(exports_openaiShim, {
|
|
174114
|
+
setOpenAIShimRouterStatusHandler: () => setOpenAIShimRouterStatusHandler,
|
|
174115
174115
|
createOpenAIShimClient: () => createOpenAIShimClient
|
|
174116
174116
|
});
|
|
174117
174117
|
import { randomUUID as randomUUID4 } from "crypto";
|
|
@@ -174432,7 +174432,7 @@ function convertMessages(messages, system, options2) {
|
|
|
174432
174432
|
...toolCall.extra_content,
|
|
174433
174433
|
google: {
|
|
174434
174434
|
...existingGoogle,
|
|
174435
|
-
thought_signature: signature ?? "skip_thought_signature_validator"
|
|
174435
|
+
thought_signature: signature ?? existingGoogle.thought_signature ?? "skip_thought_signature_validator"
|
|
174436
174436
|
}
|
|
174437
174437
|
};
|
|
174438
174438
|
}
|
|
@@ -174581,6 +174581,9 @@ function repairPossiblyTruncatedObjectJson(raw) {
|
|
|
174581
174581
|
return null;
|
|
174582
174582
|
}
|
|
174583
174583
|
}
|
|
174584
|
+
function setOpenAIShimRouterStatusHandler(fn) {
|
|
174585
|
+
routerStatusHandler = fn;
|
|
174586
|
+
}
|
|
174584
174587
|
async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
174585
174588
|
const messageId = makeMessageId2();
|
|
174586
174589
|
let contentBlockIndex = 0;
|
|
@@ -174592,6 +174595,7 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174592
174595
|
let lastStopReason = null;
|
|
174593
174596
|
let hasEmittedFinalUsage = false;
|
|
174594
174597
|
let hasProcessedFinishReason = false;
|
|
174598
|
+
let routerWarmingActive = false;
|
|
174595
174599
|
const streamState = createStreamState();
|
|
174596
174600
|
yield {
|
|
174597
174601
|
type: "message_start",
|
|
@@ -174702,6 +174706,14 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174702
174706
|
} catch {
|
|
174703
174707
|
continue;
|
|
174704
174708
|
}
|
|
174709
|
+
const routerStatus = chunk.router_status;
|
|
174710
|
+
if (typeof routerStatus === "string") {
|
|
174711
|
+
if (routerStatus === "warming" && !routerWarmingActive) {
|
|
174712
|
+
routerWarmingActive = true;
|
|
174713
|
+
routerStatusHandler?.("warming-up");
|
|
174714
|
+
}
|
|
174715
|
+
continue;
|
|
174716
|
+
}
|
|
174705
174717
|
const inStreamError = chunk.error;
|
|
174706
174718
|
if (inStreamError && typeof inStreamError === "object") {
|
|
174707
174719
|
const message = typeof inStreamError.message === "string" ? inStreamError.message : "Provider returned an in-stream error";
|
|
@@ -174715,6 +174727,10 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174715
174727
|
throw APIError.generate(response.status ?? 200, errorPayload, message, response.headers);
|
|
174716
174728
|
}
|
|
174717
174729
|
const chunkUsage = convertChunkUsage(chunk.usage);
|
|
174730
|
+
if (routerWarmingActive && Array.isArray(chunk.choices) && chunk.choices.length > 0) {
|
|
174731
|
+
routerWarmingActive = false;
|
|
174732
|
+
routerStatusHandler?.(null);
|
|
174733
|
+
}
|
|
174718
174734
|
for (const choice of chunk.choices ?? []) {
|
|
174719
174735
|
const delta = choice.delta;
|
|
174720
174736
|
if (delta.reasoning_content != null && delta.reasoning_content !== "") {
|
|
@@ -174771,12 +174787,15 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174771
174787
|
const initialArguments = tc.function.arguments ?? "";
|
|
174772
174788
|
const normalizeAtStop = hasToolFieldMapping(tc.function.name);
|
|
174773
174789
|
processStreamChunk(streamState, tc.function.arguments ?? "");
|
|
174790
|
+
const topLevelSig = tc.thought_signature;
|
|
174791
|
+
const initEC = tc.extra_content ? { ...tc.extra_content } : topLevelSig ? { google: { thought_signature: topLevelSig } } : undefined;
|
|
174774
174792
|
activeToolCalls.set(tc.index, {
|
|
174775
174793
|
id: tc.id,
|
|
174776
174794
|
name: tc.function.name,
|
|
174777
174795
|
index: toolBlockIndex,
|
|
174778
174796
|
jsonBuffer: initialArguments,
|
|
174779
|
-
normalizeAtStop
|
|
174797
|
+
normalizeAtStop,
|
|
174798
|
+
extra_content: initEC
|
|
174780
174799
|
});
|
|
174781
174800
|
yield {
|
|
174782
174801
|
type: "content_block_start",
|
|
@@ -174786,10 +174805,8 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174786
174805
|
id: tc.id,
|
|
174787
174806
|
name: tc.function.name,
|
|
174788
174807
|
input: {},
|
|
174789
|
-
...
|
|
174790
|
-
...
|
|
174791
|
-
signature: tc.extra_content.google.thought_signature
|
|
174792
|
-
} : {}
|
|
174808
|
+
...initEC ? { extra_content: initEC } : {},
|
|
174809
|
+
...initEC?.google?.thought_signature ? { signature: initEC.google.thought_signature } : {}
|
|
174793
174810
|
}
|
|
174794
174811
|
};
|
|
174795
174812
|
contentBlockIndex++;
|
|
@@ -174809,6 +174826,11 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174809
174826
|
if (tc.function.arguments) {
|
|
174810
174827
|
active.jsonBuffer += tc.function.arguments;
|
|
174811
174828
|
}
|
|
174829
|
+
const contSig = tc.thought_signature;
|
|
174830
|
+
const contEC = tc.extra_content ? { ...tc.extra_content } : contSig ? { google: { thought_signature: contSig } } : undefined;
|
|
174831
|
+
if (contEC) {
|
|
174832
|
+
active.extra_content = { ...active.extra_content ?? {}, ...contEC };
|
|
174833
|
+
}
|
|
174812
174834
|
if (active.normalizeAtStop) {
|
|
174813
174835
|
continue;
|
|
174814
174836
|
}
|
|
@@ -174821,6 +174843,15 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174821
174843
|
}
|
|
174822
174844
|
};
|
|
174823
174845
|
}
|
|
174846
|
+
} else {
|
|
174847
|
+
const active = activeToolCalls.get(tc.index);
|
|
174848
|
+
if (active) {
|
|
174849
|
+
const lateSig = tc.thought_signature;
|
|
174850
|
+
const lateEC = tc.extra_content ? { ...tc.extra_content } : lateSig ? { google: { thought_signature: lateSig } } : undefined;
|
|
174851
|
+
if (lateEC) {
|
|
174852
|
+
active.extra_content = { ...active.extra_content ?? {}, ...lateEC };
|
|
174853
|
+
}
|
|
174854
|
+
}
|
|
174824
174855
|
}
|
|
174825
174856
|
}
|
|
174826
174857
|
}
|
|
@@ -174835,6 +174866,20 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
174835
174866
|
yield* closeActiveContentBlock();
|
|
174836
174867
|
}
|
|
174837
174868
|
for (const [, tc] of activeToolCalls) {
|
|
174869
|
+
if (tc.extra_content) {
|
|
174870
|
+
yield {
|
|
174871
|
+
type: "content_block_start",
|
|
174872
|
+
index: tc.index,
|
|
174873
|
+
content_block: {
|
|
174874
|
+
type: "tool_use",
|
|
174875
|
+
id: tc.id,
|
|
174876
|
+
name: tc.name,
|
|
174877
|
+
input: {},
|
|
174878
|
+
extra_content: tc.extra_content,
|
|
174879
|
+
...tc.extra_content.google?.thought_signature ? { signature: tc.extra_content.google.thought_signature } : {}
|
|
174880
|
+
}
|
|
174881
|
+
};
|
|
174882
|
+
}
|
|
174838
174883
|
if (tc.normalizeAtStop) {
|
|
174839
174884
|
let partialJson;
|
|
174840
174885
|
if (choice.finish_reason === "length") {
|
|
@@ -175505,7 +175550,7 @@ function createOpenAIShimClient(options2) {
|
|
|
175505
175550
|
messages: beta.messages
|
|
175506
175551
|
};
|
|
175507
175552
|
}
|
|
175508
|
-
var GITHUB_429_MAX_RETRIES = 3, GITHUB_429_BASE_DELAY_SEC = 1, GITHUB_429_MAX_DELAY_SEC = 32, GEMINI_API_HOST = "generativelanguage.googleapis.com", COPILOT_HEADERS2, JSON_REPAIR_SUFFIXES, OpenAIShimStream;
|
|
175553
|
+
var GITHUB_429_MAX_RETRIES = 3, GITHUB_429_BASE_DELAY_SEC = 1, GITHUB_429_MAX_DELAY_SEC = 32, GEMINI_API_HOST = "generativelanguage.googleapis.com", COPILOT_HEADERS2, JSON_REPAIR_SUFFIXES, routerStatusHandler = null, OpenAIShimStream;
|
|
175509
175554
|
var init_openaiShim = __esm(() => {
|
|
175510
175555
|
init_sdk();
|
|
175511
175556
|
init_codexCredentials();
|
|
@@ -196259,7 +196304,7 @@ function getCronFilePath(dir) {
|
|
|
196259
196304
|
return join40(dir ?? getProjectRoot(), CRON_FILE_REL);
|
|
196260
196305
|
}
|
|
196261
196306
|
async function readCronTasks(dir) {
|
|
196262
|
-
const fs2 =
|
|
196307
|
+
const fs2 = getFsImplementation2();
|
|
196263
196308
|
let raw;
|
|
196264
196309
|
try {
|
|
196265
196310
|
raw = await fs2.readFile(getCronFilePath(dir), { encoding: "utf-8" });
|
|
@@ -212141,7 +212186,7 @@ async function loadPluginMcpServers(plugin, errors4 = []) {
|
|
|
212141
212186
|
return Object.keys(servers).length > 0 ? servers : undefined;
|
|
212142
212187
|
}
|
|
212143
212188
|
async function loadMcpServersFromFile(pluginPath, relativePath) {
|
|
212144
|
-
const fs2 =
|
|
212189
|
+
const fs2 = getFsImplementation2();
|
|
212145
212190
|
const filePath = join43(pluginPath, relativePath);
|
|
212146
212191
|
let content;
|
|
212147
212192
|
try {
|
|
@@ -213213,7 +213258,7 @@ function parseMcpConfig(params) {
|
|
|
213213
213258
|
}
|
|
213214
213259
|
function parseMcpConfigFromFilePath(params) {
|
|
213215
213260
|
const { filePath, expandVars, scope } = params;
|
|
213216
|
-
const fs2 =
|
|
213261
|
+
const fs2 = getFsImplementation2();
|
|
213217
213262
|
let configContent;
|
|
213218
213263
|
try {
|
|
213219
213264
|
configContent = fs2.readFileSync(filePath, { encoding: "utf8" });
|
|
@@ -216340,7 +216385,7 @@ function buildCommonPluginDirectoryPaths(ideName) {
|
|
|
216340
216385
|
}
|
|
216341
216386
|
async function detectPluginDirectories(ideName) {
|
|
216342
216387
|
const foundDirectories = [];
|
|
216343
|
-
const fs2 =
|
|
216388
|
+
const fs2 = getFsImplementation2();
|
|
216344
216389
|
const pluginDirPaths = buildCommonPluginDirectoryPaths(ideName);
|
|
216345
216390
|
const idePatterns = ideNameToDirMap[ideName.toLowerCase()];
|
|
216346
216391
|
if (!idePatterns) {
|
|
@@ -216379,7 +216424,7 @@ async function isJetBrainsPluginInstalled(ideType) {
|
|
|
216379
216424
|
for (const dir of pluginDirs) {
|
|
216380
216425
|
const pluginPath = join48(dir, PLUGIN_PREFIX);
|
|
216381
216426
|
try {
|
|
216382
|
-
await
|
|
216427
|
+
await getFsImplementation2().stat(pluginPath);
|
|
216383
216428
|
return true;
|
|
216384
216429
|
} catch {}
|
|
216385
216430
|
}
|
|
@@ -217473,12 +217518,12 @@ async function getSortedIdeLockfiles() {
|
|
|
217473
217518
|
const ideLockFilePaths = await getIdeLockfilesPaths();
|
|
217474
217519
|
const allLockfiles = await Promise.all(ideLockFilePaths.map(async (ideLockFilePath) => {
|
|
217475
217520
|
try {
|
|
217476
|
-
const entries = await
|
|
217521
|
+
const entries = await getFsImplementation2().readdir(ideLockFilePath);
|
|
217477
217522
|
const lockEntries = entries.filter((file2) => file2.name.endsWith(".lock"));
|
|
217478
217523
|
const stats = await Promise.all(lockEntries.map(async (file2) => {
|
|
217479
217524
|
const fullPath = join49(ideLockFilePath, file2.name);
|
|
217480
217525
|
try {
|
|
217481
|
-
const fileStat = await
|
|
217526
|
+
const fileStat = await getFsImplementation2().stat(fullPath);
|
|
217482
217527
|
return { path: fullPath, mtime: fileStat.mtime };
|
|
217483
217528
|
} catch {
|
|
217484
217529
|
return null;
|
|
@@ -217500,7 +217545,7 @@ async function getSortedIdeLockfiles() {
|
|
|
217500
217545
|
}
|
|
217501
217546
|
async function readIdeLockfile(path12) {
|
|
217502
217547
|
try {
|
|
217503
|
-
const content = await
|
|
217548
|
+
const content = await getFsImplementation2().readFile(path12, {
|
|
217504
217549
|
encoding: "utf-8"
|
|
217505
217550
|
});
|
|
217506
217551
|
let workspaceFolders = [];
|
|
@@ -217578,7 +217623,7 @@ async function getIdeLockfilesPaths() {
|
|
|
217578
217623
|
}
|
|
217579
217624
|
try {
|
|
217580
217625
|
const usersDir = "/mnt/c/Users";
|
|
217581
|
-
const userDirs = await
|
|
217626
|
+
const userDirs = await getFsImplementation2().readdir(usersDir);
|
|
217582
217627
|
for (const user of userDirs) {
|
|
217583
217628
|
if (!user.isDirectory() && !user.isSymbolicLink()) {
|
|
217584
217629
|
continue;
|
|
@@ -217604,7 +217649,7 @@ async function cleanupStaleIdeLockfiles() {
|
|
|
217604
217649
|
const lockfileInfo = await readIdeLockfile(lockfilePath);
|
|
217605
217650
|
if (!lockfileInfo) {
|
|
217606
217651
|
try {
|
|
217607
|
-
await
|
|
217652
|
+
await getFsImplementation2().unlink(lockfilePath);
|
|
217608
217653
|
} catch (error42) {
|
|
217609
217654
|
logError2(error42);
|
|
217610
217655
|
}
|
|
@@ -217631,7 +217676,7 @@ async function cleanupStaleIdeLockfiles() {
|
|
|
217631
217676
|
}
|
|
217632
217677
|
if (shouldDelete) {
|
|
217633
217678
|
try {
|
|
217634
|
-
await
|
|
217679
|
+
await getFsImplementation2().unlink(lockfilePath);
|
|
217635
217680
|
} catch (error42) {
|
|
217636
217681
|
logError2(error42);
|
|
217637
217682
|
}
|
|
@@ -217901,7 +217946,7 @@ async function getVSCodeIDECommand(ideType) {
|
|
|
217901
217946
|
const parentExecutable = getVSCodeIDECommandByParentProcess();
|
|
217902
217947
|
if (parentExecutable) {
|
|
217903
217948
|
try {
|
|
217904
|
-
await
|
|
217949
|
+
await getFsImplementation2().stat(parentExecutable);
|
|
217905
217950
|
return parentExecutable;
|
|
217906
217951
|
} catch {}
|
|
217907
217952
|
}
|
|
@@ -218077,7 +218122,7 @@ async function installFromArtifactory(command) {
|
|
|
218077
218122
|
const npmrcAuthPrefix = `//${artifactoryBaseUrl.replace(/^https?:\/\//, "")}/api/npm/npm-all/:_authToken=`;
|
|
218078
218123
|
const npmrcPath = join49(os3.homedir(), ".npmrc");
|
|
218079
218124
|
let authToken = null;
|
|
218080
|
-
const fs2 =
|
|
218125
|
+
const fs2 = getFsImplementation2();
|
|
218081
218126
|
try {
|
|
218082
218127
|
const npmrcContent = await fs2.readFile(npmrcPath, {
|
|
218083
218128
|
encoding: "utf8"
|
|
@@ -218117,7 +218162,7 @@ async function installFromArtifactory(command) {
|
|
|
218117
218162
|
},
|
|
218118
218163
|
responseType: "stream"
|
|
218119
218164
|
});
|
|
218120
|
-
const writeStream =
|
|
218165
|
+
const writeStream = getFsImplementation2().createWriteStream(tempVsixPath);
|
|
218121
218166
|
await new Promise((resolve19, reject2) => {
|
|
218122
218167
|
vsixResponse.data.pipe(writeStream);
|
|
218123
218168
|
writeStream.on("finish", resolve19);
|
|
@@ -218565,7 +218610,7 @@ function getTokenFromFileDescriptor() {
|
|
|
218565
218610
|
return null;
|
|
218566
218611
|
}
|
|
218567
218612
|
try {
|
|
218568
|
-
const fsOps =
|
|
218613
|
+
const fsOps = getFsImplementation2();
|
|
218569
218614
|
const fdPath = process.platform === "darwin" || process.platform === "freebsd" ? `/dev/fd/${fd2}` : `/proc/self/fd/${fd2}`;
|
|
218570
218615
|
const token = fsOps.readFileSync(fdPath, { encoding: "utf8" }).trim();
|
|
218571
218616
|
if (!token) {
|
|
@@ -270838,7 +270883,7 @@ async function getImageFromClipboard() {
|
|
|
270838
270883
|
if (saveResult.exitCode !== 0) {
|
|
270839
270884
|
return null;
|
|
270840
270885
|
}
|
|
270841
|
-
let imageBuffer =
|
|
270886
|
+
let imageBuffer = getFsImplementation2().readFileBytesSync(screenshotPath);
|
|
270842
270887
|
if (imageBuffer.length >= 2 && imageBuffer[0] === 66 && imageBuffer[1] === 77) {
|
|
270843
270888
|
const sharp = await getImageProcessor();
|
|
270844
270889
|
imageBuffer = await sharp(imageBuffer).png().toBuffer();
|
|
@@ -270911,11 +270956,11 @@ async function tryReadImageFromPath(text) {
|
|
|
270911
270956
|
let imageBuffer;
|
|
270912
270957
|
try {
|
|
270913
270958
|
if (isAbsolute11(imagePath)) {
|
|
270914
|
-
imageBuffer =
|
|
270959
|
+
imageBuffer = getFsImplementation2().readFileBytesSync(imagePath);
|
|
270915
270960
|
} else {
|
|
270916
270961
|
const clipboardPath = await getImagePathFromClipboard();
|
|
270917
270962
|
if (clipboardPath && imagePath === basename11(clipboardPath)) {
|
|
270918
|
-
imageBuffer =
|
|
270963
|
+
imageBuffer = getFsImplementation2().readFileBytesSync(clipboardPath);
|
|
270919
270964
|
}
|
|
270920
270965
|
}
|
|
270921
270966
|
} catch (e) {
|
|
@@ -271041,7 +271086,7 @@ function evictOldestIfAtCap() {
|
|
|
271041
271086
|
}
|
|
271042
271087
|
}
|
|
271043
271088
|
async function cleanupOldImageCaches() {
|
|
271044
|
-
const fsImpl =
|
|
271089
|
+
const fsImpl = getFsImplementation2();
|
|
271045
271090
|
const baseDir = join54(getClaudeConfigHomeDir(), IMAGE_STORE_DIR);
|
|
271046
271091
|
const currentSessionId = getSessionId();
|
|
271047
271092
|
try {
|
|
@@ -275837,7 +275882,7 @@ async function writeIfMissing(path12, content, mode) {
|
|
|
275837
275882
|
async function ensureLocalPackageEnvironment() {
|
|
275838
275883
|
try {
|
|
275839
275884
|
const localInstallDir = getLocalInstallDir();
|
|
275840
|
-
await
|
|
275885
|
+
await getFsImplementation2().mkdir(localInstallDir);
|
|
275841
275886
|
await writeIfMissing(join55(localInstallDir, "package.json"), jsonStringify({ name: "verboo-local", version: "0.0.1", private: true }, null, 2));
|
|
275842
275887
|
const wrapperPath = getLocalClaudePath();
|
|
275843
275888
|
const created = await writeIfMissing(wrapperPath, `#!/bin/sh
|
|
@@ -276260,7 +276305,7 @@ async function getInstallationPath() {
|
|
|
276260
276305
|
} catch {}
|
|
276261
276306
|
try {
|
|
276262
276307
|
const nativeBinaryPath = join57(homedir18(), ".local", "bin", getCliBinaryName());
|
|
276263
|
-
await
|
|
276308
|
+
await getFsImplementation2().stat(nativeBinaryPath);
|
|
276264
276309
|
return nativeBinaryPath;
|
|
276265
276310
|
} catch {}
|
|
276266
276311
|
return "native";
|
|
@@ -276282,7 +276327,7 @@ function getInvokedBinary() {
|
|
|
276282
276327
|
}
|
|
276283
276328
|
}
|
|
276284
276329
|
async function detectMultipleInstallations() {
|
|
276285
|
-
const fs2 =
|
|
276330
|
+
const fs2 = getFsImplementation2();
|
|
276286
276331
|
const installations = [];
|
|
276287
276332
|
const localPath = await getDetectedLocalInstallDir();
|
|
276288
276333
|
if (localPath) {
|
|
@@ -276659,7 +276704,7 @@ async function downloadVersionFromArtifactory(version2, stagingPath) {
|
|
|
276659
276704
|
if (!ARTIFACTORY_REGISTRY_URL) {
|
|
276660
276705
|
throw new Error("Internal artifactory registry URL is not configured");
|
|
276661
276706
|
}
|
|
276662
|
-
const fs2 =
|
|
276707
|
+
const fs2 = getFsImplementation2();
|
|
276663
276708
|
await fs2.rm(stagingPath, { recursive: true, force: true });
|
|
276664
276709
|
const platform4 = getPlatform2();
|
|
276665
276710
|
const platformPackageName = `${undefined}-${platform4}`;
|
|
@@ -276789,7 +276834,7 @@ async function downloadAndVerifyBinary(binaryUrl, expectedChecksum, binaryPath,
|
|
|
276789
276834
|
throw lastError ?? new Error("Download failed after all retries");
|
|
276790
276835
|
}
|
|
276791
276836
|
async function downloadVersionFromBinaryRepo(version2, stagingPath, baseUrl, authConfig) {
|
|
276792
|
-
const fs2 =
|
|
276837
|
+
const fs2 = getFsImplementation2();
|
|
276793
276838
|
await fs2.rm(stagingPath, { recursive: true, force: true });
|
|
276794
276839
|
const platform4 = getPlatform2();
|
|
276795
276840
|
const startTime2 = Date.now();
|
|
@@ -276921,7 +276966,7 @@ function isClaudeProcess(pid, expectedExecPath) {
|
|
|
276921
276966
|
}
|
|
276922
276967
|
}
|
|
276923
276968
|
function readLockContent(lockFilePath) {
|
|
276924
|
-
const fs2 =
|
|
276969
|
+
const fs2 = getFsImplementation2();
|
|
276925
276970
|
try {
|
|
276926
276971
|
const content = fs2.readFileSync(lockFilePath, { encoding: "utf8" });
|
|
276927
276972
|
if (!content || content.trim() === "") {
|
|
@@ -276949,7 +276994,7 @@ function isLockActive(lockFilePath) {
|
|
|
276949
276994
|
logForDebugging(`Lock PID ${pid} is running but does not appear to be Claude - treating as stale`);
|
|
276950
276995
|
return false;
|
|
276951
276996
|
}
|
|
276952
|
-
const fs2 =
|
|
276997
|
+
const fs2 = getFsImplementation2();
|
|
276953
276998
|
try {
|
|
276954
276999
|
const stats = fs2.statSync(lockFilePath);
|
|
276955
277000
|
const age = Date.now() - stats.mtimeMs;
|
|
@@ -276962,7 +277007,7 @@ function isLockActive(lockFilePath) {
|
|
|
276962
277007
|
return true;
|
|
276963
277008
|
}
|
|
276964
277009
|
function writeLockFile(lockFilePath, content) {
|
|
276965
|
-
const fs2 =
|
|
277010
|
+
const fs2 = getFsImplementation2();
|
|
276966
277011
|
const tempPath = `${lockFilePath}.tmp.${process.pid}.${Date.now()}`;
|
|
276967
277012
|
try {
|
|
276968
277013
|
writeFileSync_DEPRECATED(tempPath, jsonStringify(content, null, 2), {
|
|
@@ -276978,7 +277023,7 @@ function writeLockFile(lockFilePath, content) {
|
|
|
276978
277023
|
}
|
|
276979
277024
|
}
|
|
276980
277025
|
async function tryAcquireLock(versionPath, lockFilePath) {
|
|
276981
|
-
const fs2 =
|
|
277026
|
+
const fs2 = getFsImplementation2();
|
|
276982
277027
|
const versionName = basename12(versionPath);
|
|
276983
277028
|
if (isLockActive(lockFilePath)) {
|
|
276984
277029
|
const existingContent = readLockContent(lockFilePath);
|
|
@@ -277042,7 +277087,7 @@ async function withLock(versionPath, lockFilePath, callback) {
|
|
|
277042
277087
|
}
|
|
277043
277088
|
}
|
|
277044
277089
|
function getAllLockInfo(locksDir) {
|
|
277045
|
-
const fs2 =
|
|
277090
|
+
const fs2 = getFsImplementation2();
|
|
277046
277091
|
const lockInfos = [];
|
|
277047
277092
|
try {
|
|
277048
277093
|
const lockFiles = fs2.readdirStringSync(locksDir).filter((f) => f.endsWith(".lock"));
|
|
@@ -277069,7 +277114,7 @@ function getAllLockInfo(locksDir) {
|
|
|
277069
277114
|
return lockInfos;
|
|
277070
277115
|
}
|
|
277071
277116
|
function cleanupStaleLocks(locksDir) {
|
|
277072
|
-
const fs2 =
|
|
277117
|
+
const fs2 = getFsImplementation2();
|
|
277073
277118
|
let cleanedCount = 0;
|
|
277074
277119
|
try {
|
|
277075
277120
|
const lockEntries = fs2.readdirStringSync(locksDir).filter((f) => f.endsWith(".lock"));
|
|
@@ -279523,7 +279568,7 @@ function migrateDiscoveryCache(parsed) {
|
|
|
279523
279568
|
};
|
|
279524
279569
|
}
|
|
279525
279570
|
async function loadDiscoveryCache() {
|
|
279526
|
-
const fs2 =
|
|
279571
|
+
const fs2 = getFsImplementation2();
|
|
279527
279572
|
const cachePath = getDiscoveryCachePath();
|
|
279528
279573
|
try {
|
|
279529
279574
|
const content = await fs2.readFile(cachePath, { encoding: "utf-8" });
|
|
@@ -279549,7 +279594,7 @@ async function loadDiscoveryCache() {
|
|
|
279549
279594
|
}
|
|
279550
279595
|
}
|
|
279551
279596
|
async function saveDiscoveryCache(cache3) {
|
|
279552
|
-
const fs2 =
|
|
279597
|
+
const fs2 = getFsImplementation2();
|
|
279553
279598
|
const cachePath = getDiscoveryCachePath();
|
|
279554
279599
|
const tempPath = `${cachePath}.${randomBytes7(8).toString("hex")}.tmp`;
|
|
279555
279600
|
try {
|
|
@@ -286040,7 +286085,7 @@ var init_coreSchemas = __esm(() => {
|
|
|
286040
286085
|
"unknown",
|
|
286041
286086
|
"max_output_tokens"
|
|
286042
286087
|
]));
|
|
286043
|
-
SDKStatusSchema = lazySchema(() => exports_external.union([exports_external.literal("compacting"), exports_external.null()]));
|
|
286088
|
+
SDKStatusSchema = lazySchema(() => exports_external.union([exports_external.literal("compacting"), exports_external.literal("warming-up"), exports_external.null()]));
|
|
286044
286089
|
SDKUserMessageContentSchema = lazySchema(() => exports_external.object({
|
|
286045
286090
|
type: exports_external.literal("user"),
|
|
286046
286091
|
message: APIUserMessagePlaceholder(),
|
|
@@ -302935,7 +302980,7 @@ async function processSlashCommand(inputString, precedingInputBlocks, imageConte
|
|
|
302935
302980
|
if (!hasCommand(commandName, context.options.commands)) {
|
|
302936
302981
|
let isFilePath = false;
|
|
302937
302982
|
try {
|
|
302938
|
-
await
|
|
302983
|
+
await getFsImplementation2().stat(`/${commandName}`);
|
|
302939
302984
|
isFilePath = true;
|
|
302940
302985
|
} catch {}
|
|
302941
302986
|
if (looksLikeCommand(commandName) && !isFilePath) {
|
|
@@ -306614,7 +306659,7 @@ function getPlanSlug(sessionId) {
|
|
|
306614
306659
|
for (let i3 = 0;i3 < MAX_SLUG_RETRIES; i3++) {
|
|
306615
306660
|
slug = generateWordSlug();
|
|
306616
306661
|
const filePath = join67(plansDir, `${slug}.md`);
|
|
306617
|
-
if (!
|
|
306662
|
+
if (!getFsImplementation2().existsSync(filePath)) {
|
|
306618
306663
|
break;
|
|
306619
306664
|
}
|
|
306620
306665
|
}
|
|
@@ -306638,7 +306683,7 @@ function getPlanFilePath(agentId) {
|
|
|
306638
306683
|
function getPlan(agentId) {
|
|
306639
306684
|
const filePath = getPlanFilePath(agentId);
|
|
306640
306685
|
try {
|
|
306641
|
-
return
|
|
306686
|
+
return getFsImplementation2().readFileSync(filePath, { encoding: "utf-8" });
|
|
306642
306687
|
} catch (error42) {
|
|
306643
306688
|
if (isENOENT(error42))
|
|
306644
306689
|
return null;
|
|
@@ -306658,7 +306703,7 @@ async function copyPlanForResume(log, targetSessionId) {
|
|
|
306658
306703
|
setPlanSlug(sessionId, slug);
|
|
306659
306704
|
const planPath = join67(getPlansDirectory(), `${slug}.md`);
|
|
306660
306705
|
try {
|
|
306661
|
-
await
|
|
306706
|
+
await getFsImplementation2().readFile(planPath, { encoding: "utf-8" });
|
|
306662
306707
|
return true;
|
|
306663
306708
|
} catch (e) {
|
|
306664
306709
|
if (!isENOENT(e)) {
|
|
@@ -306823,7 +306868,7 @@ var init_plans = __esm(() => {
|
|
|
306823
306868
|
plansPath = getDefaultPlansDirectory();
|
|
306824
306869
|
}
|
|
306825
306870
|
try {
|
|
306826
|
-
|
|
306871
|
+
getFsImplementation2().mkdirSync(plansPath);
|
|
306827
306872
|
} catch (error42) {
|
|
306828
306873
|
logError2(error42);
|
|
306829
306874
|
}
|
|
@@ -316176,7 +316221,7 @@ ${stdout}`);
|
|
|
316176
316221
|
logForDebugging(`Shell snapshot created successfully (${snapshotSize} bytes)`);
|
|
316177
316222
|
registerCleanup(async () => {
|
|
316178
316223
|
try {
|
|
316179
|
-
await
|
|
316224
|
+
await getFsImplementation2().unlink(shellSnapshotPath);
|
|
316180
316225
|
logForDebugging(`Cleaned up session snapshot: ${shellSnapshotPath}`);
|
|
316181
316226
|
} catch (error43) {
|
|
316182
316227
|
logForDebugging(`Error cleaning up session snapshot: ${error43}`);
|
|
@@ -316187,7 +316232,7 @@ ${stdout}`);
|
|
|
316187
316232
|
logForDebugging(`Shell snapshot file not found after creation: ${shellSnapshotPath}`);
|
|
316188
316233
|
logForDebugging(`Checking if parent directory still exists: ${snapshotsDir}`);
|
|
316189
316234
|
try {
|
|
316190
|
-
const dirContents = await
|
|
316235
|
+
const dirContents = await getFsImplementation2().readdir(snapshotsDir);
|
|
316191
316236
|
logForDebugging(`Directory contains ${dirContents.length} files`);
|
|
316192
316237
|
} catch {
|
|
316193
316238
|
logForDebugging(`Parent directory does not exist or is not accessible: ${snapshotsDir}`);
|
|
@@ -316842,7 +316887,7 @@ async function exec3(command, abortSignal, shellType, options2) {
|
|
|
316842
316887
|
if (shouldUseSandbox) {
|
|
316843
316888
|
commandString = await SandboxManager2.wrapWithSandbox(commandString, sandboxBinShell, undefined, abortSignal);
|
|
316844
316889
|
try {
|
|
316845
|
-
const fs3 =
|
|
316890
|
+
const fs3 = getFsImplementation2();
|
|
316846
316891
|
await fs3.mkdir(sandboxTmpDir, { mode: 448 });
|
|
316847
316892
|
} catch (error42) {
|
|
316848
316893
|
logForDebugging(`Failed to create ${sandboxTmpDir} directory: ${error42}`);
|
|
@@ -316930,10 +316975,10 @@ async function exec3(command, abortSignal, shellType, options2) {
|
|
|
316930
316975
|
}
|
|
316931
316976
|
}
|
|
316932
316977
|
function setCwd(path15, relativeTo) {
|
|
316933
|
-
const resolved = isAbsolute14(path15) ? path15 : resolve24(relativeTo ||
|
|
316978
|
+
const resolved = isAbsolute14(path15) ? path15 : resolve24(relativeTo || getFsImplementation2().cwd(), path15);
|
|
316934
316979
|
let physicalPath;
|
|
316935
316980
|
try {
|
|
316936
|
-
physicalPath =
|
|
316981
|
+
physicalPath = getFsImplementation2().realpathSync(resolved);
|
|
316937
316982
|
} catch (e) {
|
|
316938
316983
|
if (isENOENT(e)) {
|
|
316939
316984
|
throw new Error(`Path "${resolved}" does not exist`);
|
|
@@ -320249,7 +320294,7 @@ function checkDenyRuleForGuessedPath(strippedPath, cwd2, toolPermissionContext,
|
|
|
320249
320294
|
return null;
|
|
320250
320295
|
const tildeExpanded = expandTilde2(strippedPath);
|
|
320251
320296
|
const abs = isAbsolute15(tildeExpanded) ? tildeExpanded : resolve26(cwd2, tildeExpanded);
|
|
320252
|
-
const { resolvedPath } = safeResolvePath(
|
|
320297
|
+
const { resolvedPath } = safeResolvePath(getFsImplementation2(), abs);
|
|
320253
320298
|
const permissionType = operationType === "read" ? "read" : "edit";
|
|
320254
320299
|
const denyRule = matchingRuleForInput(resolvedPath, toolPermissionContext, permissionType, "deny");
|
|
320255
320300
|
return denyRule ? { resolvedPath, rule: denyRule } : null;
|
|
@@ -320339,7 +320384,7 @@ function validatePath2(filePath, cwd2, toolPermissionContext, operationType) {
|
|
|
320339
320384
|
}
|
|
320340
320385
|
if (containsPathTraversal(normalizedPath)) {
|
|
320341
320386
|
const absolutePath2 = isAbsolute15(normalizedPath) ? normalizedPath : resolve26(cwd2, normalizedPath);
|
|
320342
|
-
const { resolvedPath: resolvedPath3, isCanonical: isCanonical2 } = safeResolvePath(
|
|
320387
|
+
const { resolvedPath: resolvedPath3, isCanonical: isCanonical2 } = safeResolvePath(getFsImplementation2(), absolutePath2);
|
|
320343
320388
|
const result2 = isPathAllowed2(resolvedPath3, toolPermissionContext, operationType, isCanonical2 ? [resolvedPath3] : undefined);
|
|
320344
320389
|
return {
|
|
320345
320390
|
allowed: result2.allowed,
|
|
@@ -320349,7 +320394,7 @@ function validatePath2(filePath, cwd2, toolPermissionContext, operationType) {
|
|
|
320349
320394
|
}
|
|
320350
320395
|
const basePath = getGlobBaseDirectory2(normalizedPath);
|
|
320351
320396
|
const absoluteBasePath = isAbsolute15(basePath) ? basePath : resolve26(cwd2, basePath);
|
|
320352
|
-
const { resolvedPath: resolvedPath2 } = safeResolvePath(
|
|
320397
|
+
const { resolvedPath: resolvedPath2 } = safeResolvePath(getFsImplementation2(), absoluteBasePath);
|
|
320353
320398
|
const permissionType = operationType === "read" ? "read" : "edit";
|
|
320354
320399
|
const denyRule = matchingRuleForInput(resolvedPath2, toolPermissionContext, permissionType, "deny");
|
|
320355
320400
|
if (denyRule !== null) {
|
|
@@ -320369,7 +320414,7 @@ function validatePath2(filePath, cwd2, toolPermissionContext, operationType) {
|
|
|
320369
320414
|
};
|
|
320370
320415
|
}
|
|
320371
320416
|
const absolutePath = isAbsolute15(normalizedPath) ? normalizedPath : resolve26(cwd2, normalizedPath);
|
|
320372
|
-
const { resolvedPath, isCanonical } = safeResolvePath(
|
|
320417
|
+
const { resolvedPath, isCanonical } = safeResolvePath(getFsImplementation2(), absolutePath);
|
|
320373
320418
|
const result = isPathAllowed2(resolvedPath, toolPermissionContext, operationType, isCanonical ? [resolvedPath] : undefined);
|
|
320374
320419
|
return {
|
|
320375
320420
|
allowed: result.allowed,
|
|
@@ -324354,7 +324399,7 @@ ${markdownContent}` : markdownContent;
|
|
|
324354
324399
|
};
|
|
324355
324400
|
}
|
|
324356
324401
|
async function findSkillMarkdownFiles(basePath) {
|
|
324357
|
-
const fs3 =
|
|
324402
|
+
const fs3 = getFsImplementation2();
|
|
324358
324403
|
const visitedDirs = new Set;
|
|
324359
324404
|
const skillFiles = [];
|
|
324360
324405
|
async function walk(skillDirPath) {
|
|
@@ -324437,7 +324482,7 @@ async function findSkillMarkdownFiles(basePath) {
|
|
|
324437
324482
|
return skillFiles;
|
|
324438
324483
|
}
|
|
324439
324484
|
async function loadSkillsFromSkillsDir(basePath, source) {
|
|
324440
|
-
const fs3 =
|
|
324485
|
+
const fs3 = getFsImplementation2();
|
|
324441
324486
|
const skillFiles = await findSkillMarkdownFiles(basePath);
|
|
324442
324487
|
const results = await Promise.all(skillFiles.map(async (skillFilePath) => {
|
|
324443
324488
|
try {
|
|
@@ -324590,7 +324635,7 @@ function onDynamicSkillsLoaded(callback) {
|
|
|
324590
324635
|
});
|
|
324591
324636
|
}
|
|
324592
324637
|
async function discoverSkillDirsForPaths(filePaths, cwd2) {
|
|
324593
|
-
const fs3 =
|
|
324638
|
+
const fs3 = getFsImplementation2();
|
|
324594
324639
|
const resolvedCwd = cwd2.endsWith(pathSep) ? cwd2.slice(0, -1) : cwd2;
|
|
324595
324640
|
const newDirs = [];
|
|
324596
324641
|
for (const filePath of filePaths) {
|
|
@@ -329137,7 +329182,7 @@ var init_FileEditTool = __esm(() => {
|
|
|
329137
329182
|
if (fullFilePath.startsWith("\\\\") || fullFilePath.startsWith("//")) {
|
|
329138
329183
|
return { result: true };
|
|
329139
329184
|
}
|
|
329140
|
-
const fs3 =
|
|
329185
|
+
const fs3 = getFsImplementation2();
|
|
329141
329186
|
try {
|
|
329142
329187
|
const { size } = await fs3.stat(fullFilePath);
|
|
329143
329188
|
if (size > MAX_EDIT_FILE_SIZE) {
|
|
@@ -329297,7 +329342,7 @@ String: ${old_string}`,
|
|
|
329297
329342
|
dynamicSkillDirTriggers
|
|
329298
329343
|
}, _, parentMessage) {
|
|
329299
329344
|
const { file_path, old_string, new_string, replace_all = false } = input;
|
|
329300
|
-
const fs3 =
|
|
329345
|
+
const fs3 = getFsImplementation2();
|
|
329301
329346
|
const absoluteFilePath = expandPath(file_path);
|
|
329302
329347
|
const cwd2 = getCwd();
|
|
329303
329348
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
|
|
@@ -329992,7 +330037,7 @@ var init_FileWriteTool = __esm(() => {
|
|
|
329992
330037
|
if (fullFilePath.startsWith("\\\\") || fullFilePath.startsWith("//")) {
|
|
329993
330038
|
return { result: true };
|
|
329994
330039
|
}
|
|
329995
|
-
const fs3 =
|
|
330040
|
+
const fs3 = getFsImplementation2();
|
|
329996
330041
|
let fileMtimeMs;
|
|
329997
330042
|
try {
|
|
329998
330043
|
const fileStat = await fs3.stat(fullFilePath);
|
|
@@ -330034,7 +330079,7 @@ var init_FileWriteTool = __esm(() => {
|
|
|
330034
330079
|
}
|
|
330035
330080
|
activateConditionalSkillsForPaths([fullFilePath], cwd2);
|
|
330036
330081
|
await diagnosticTracker.beforeFileEditedCompat(fullFilePath);
|
|
330037
|
-
await
|
|
330082
|
+
await getFsImplementation2().mkdir(dir);
|
|
330038
330083
|
if (fileHistoryEnabled()) {
|
|
330039
330084
|
await fileHistoryTrackEdit(updateFileHistoryState, fullFilePath, parentMessage.uuid);
|
|
330040
330085
|
}
|
|
@@ -330654,7 +330699,7 @@ var init_GrepTool = __esm(() => {
|
|
|
330654
330699
|
},
|
|
330655
330700
|
async validateInput({ path: path15 }) {
|
|
330656
330701
|
if (path15) {
|
|
330657
|
-
const fs3 =
|
|
330702
|
+
const fs3 = getFsImplementation2();
|
|
330658
330703
|
const absolutePath = expandPath(path15);
|
|
330659
330704
|
if (absolutePath.startsWith("\\\\") || absolutePath.startsWith("//")) {
|
|
330660
330705
|
return { result: true };
|
|
@@ -330889,7 +330934,7 @@ ${filenames.join(`
|
|
|
330889
330934
|
};
|
|
330890
330935
|
return { data: output2 };
|
|
330891
330936
|
}
|
|
330892
|
-
const stats = await Promise.allSettled(results.map((_) =>
|
|
330937
|
+
const stats = await Promise.allSettled(results.map((_) => getFsImplementation2().stat(_)));
|
|
330893
330938
|
const sortedMatches = results.map((_, i3) => {
|
|
330894
330939
|
const r = stats[i3];
|
|
330895
330940
|
return [
|
|
@@ -331046,7 +331091,7 @@ var init_GlobTool = __esm(() => {
|
|
|
331046
331091
|
},
|
|
331047
331092
|
async validateInput({ path: path15 }) {
|
|
331048
331093
|
if (path15) {
|
|
331049
|
-
const fs3 =
|
|
331094
|
+
const fs3 = getFsImplementation2();
|
|
331050
331095
|
const absolutePath = expandPath(path15);
|
|
331051
331096
|
if (absolutePath.startsWith("\\\\") || absolutePath.startsWith("//")) {
|
|
331052
331097
|
return { result: true };
|
|
@@ -331257,7 +331302,7 @@ function getToolResultFromCell(cell) {
|
|
|
331257
331302
|
}
|
|
331258
331303
|
async function readNotebook(notebookPath, cellId) {
|
|
331259
331304
|
const fullPath = expandPath(notebookPath);
|
|
331260
|
-
const buffer = await
|
|
331305
|
+
const buffer = await getFsImplementation2().readFileBytes(fullPath);
|
|
331261
331306
|
const content = buffer.toString("utf-8");
|
|
331262
331307
|
const notebook = jsonParse(content);
|
|
331263
331308
|
const language = notebook.metadata.language_info?.name ?? "python";
|
|
@@ -364768,7 +364813,7 @@ var init_schemas4 = __esm(() => {
|
|
|
364768
364813
|
// src/tools/LSPTool/symbolContext.ts
|
|
364769
364814
|
function getSymbolAtPosition(filePath, line, character) {
|
|
364770
364815
|
try {
|
|
364771
|
-
const fs3 =
|
|
364816
|
+
const fs3 = getFsImplementation2();
|
|
364772
364817
|
const absolutePath = expandPath(filePath);
|
|
364773
364818
|
const { buffer, bytesRead } = fs3.readSync(absolutePath, {
|
|
364774
364819
|
length: MAX_READ_BYTES
|
|
@@ -365450,7 +365495,7 @@ var init_LSPTool = __esm(() => {
|
|
|
365450
365495
|
errorCode: 3
|
|
365451
365496
|
};
|
|
365452
365497
|
}
|
|
365453
|
-
const fs3 =
|
|
365498
|
+
const fs3 = getFsImplementation2();
|
|
365454
365499
|
const absolutePath = expandPath(input.filePath);
|
|
365455
365500
|
if (absolutePath.startsWith("\\\\") || absolutePath.startsWith("//")) {
|
|
365456
365501
|
return { result: true };
|
|
@@ -375318,7 +375363,7 @@ async function applySedEdit(simulatedEdit, toolUseContext, parentMessage) {
|
|
|
375318
375363
|
newContent
|
|
375319
375364
|
} = simulatedEdit;
|
|
375320
375365
|
const absoluteFilePath = expandPath(filePath);
|
|
375321
|
-
const fs3 =
|
|
375366
|
+
const fs3 = getFsImplementation2();
|
|
375322
375367
|
const encoding = detectFileEncoding(absoluteFilePath);
|
|
375323
375368
|
let originalContent;
|
|
375324
375369
|
try {
|
|
@@ -382200,7 +382245,7 @@ function getAnthropicEnvMetadata() {
|
|
|
382200
382245
|
function getBuildAgeMinutes() {
|
|
382201
382246
|
if (false)
|
|
382202
382247
|
;
|
|
382203
|
-
const buildTime = new Date("2026-05-
|
|
382248
|
+
const buildTime = new Date("2026-05-19T21:36:51.071Z").getTime();
|
|
382204
382249
|
if (isNaN(buildTime))
|
|
382205
382250
|
return;
|
|
382206
382251
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -386343,7 +386388,7 @@ import { mkdir as mkdir26, readdir as readdir15, readFile as readFile29 } from "
|
|
|
386343
386388
|
import { join as join86 } from "path";
|
|
386344
386389
|
async function readPDF(filePath) {
|
|
386345
386390
|
try {
|
|
386346
|
-
const fs3 =
|
|
386391
|
+
const fs3 = getFsImplementation2();
|
|
386347
386392
|
const stats = await fs3.stat(filePath);
|
|
386348
386393
|
const originalSize = stats.size;
|
|
386349
386394
|
if (originalSize === 0) {
|
|
@@ -386421,7 +386466,7 @@ async function isPdftoppmAvailable() {
|
|
|
386421
386466
|
}
|
|
386422
386467
|
async function extractPDFPages(filePath, options2) {
|
|
386423
386468
|
try {
|
|
386424
|
-
const fs3 =
|
|
386469
|
+
const fs3 = getFsImplementation2();
|
|
386425
386470
|
const stats = await fs3.stat(filePath);
|
|
386426
386471
|
const originalSize = stats.size;
|
|
386427
386472
|
if (originalSize === 0) {
|
|
@@ -386900,7 +386945,7 @@ async function callInner(file_path, fullFilePath, resolvedFilePath, ext, offset,
|
|
|
386900
386945
|
` + ` cat "${file_path}" | jq '.cells[] | select(.cell_type=="code") | .source' # All code sources`);
|
|
386901
386946
|
}
|
|
386902
386947
|
await validateContentTokens(cellsJson, ext, maxTokens);
|
|
386903
|
-
const stats = await
|
|
386948
|
+
const stats = await getFsImplementation2().stat(resolvedFilePath);
|
|
386904
386949
|
readFileState.set(fullFilePath, {
|
|
386905
386950
|
content: cellsJson,
|
|
386906
386951
|
timestamp: Math.floor(stats.mtimeMs),
|
|
@@ -386986,7 +387031,7 @@ async function callInner(file_path, fullFilePath, resolvedFilePath, ext, offset,
|
|
|
386986
387031
|
if (pageCount !== null && pageCount > PDF_AT_MENTION_INLINE_THRESHOLD) {
|
|
386987
387032
|
throw new Error(`This PDF has ${pageCount} pages, which is too many to read at once. ` + `Use the pages parameter to read specific page ranges (e.g., pages: "1-5"). ` + `Maximum ${PDF_MAX_PAGES_PER_READ} pages per request.`);
|
|
386988
387033
|
}
|
|
386989
|
-
const fs3 =
|
|
387034
|
+
const fs3 = getFsImplementation2();
|
|
386990
387035
|
const stats = await fs3.stat(resolvedFilePath);
|
|
386991
387036
|
const shouldExtractPages = !isPDFSupported() || stats.size > PDF_EXTRACT_SIZE_THRESHOLD;
|
|
386992
387037
|
if (shouldExtractPages) {
|
|
@@ -387089,7 +387134,7 @@ async function callInner(file_path, fullFilePath, resolvedFilePath, ext, offset,
|
|
|
387089
387134
|
return { data };
|
|
387090
387135
|
}
|
|
387091
387136
|
async function readImageWithTokenBudget(filePath, maxTokens = getDefaultFileReadingLimits().maxTokens, maxBytes) {
|
|
387092
|
-
const imageBuffer = await
|
|
387137
|
+
const imageBuffer = await getFsImplementation2().readFileBytes(filePath, maxBytes);
|
|
387093
387138
|
const originalSize = imageBuffer.length;
|
|
387094
387139
|
if (originalSize === 0) {
|
|
387095
387140
|
throw new Error(`Image file is empty: ${filePath}`);
|
|
@@ -389106,7 +389151,7 @@ async function tryGetPDFReference(filename) {
|
|
|
389106
389151
|
}
|
|
389107
389152
|
try {
|
|
389108
389153
|
const [stats, pageCount] = await Promise.all([
|
|
389109
|
-
|
|
389154
|
+
getFsImplementation2().stat(filename),
|
|
389110
389155
|
getPDFPageCount(filename)
|
|
389111
389156
|
]);
|
|
389112
389157
|
const effectivePageCount = pageCount ?? Math.ceil(stats.size / (100 * 1024));
|
|
@@ -389137,7 +389182,7 @@ async function generateFileAttachment(filename, toolUseContext, successEventName
|
|
|
389137
389182
|
const ext = parse13(filename).ext.toLowerCase();
|
|
389138
389183
|
if (!isPDFExtension(ext)) {
|
|
389139
389184
|
try {
|
|
389140
|
-
const stats = await
|
|
389185
|
+
const stats = await getFsImplementation2().stat(filename);
|
|
389141
389186
|
logEvent("tengu_attachment_file_too_large", {
|
|
389142
389187
|
size_bytes: stats.size,
|
|
389143
389188
|
mode
|
|
@@ -389758,7 +389803,7 @@ function getCommandNameFromFile(filePath, baseDir, pluginName) {
|
|
|
389758
389803
|
}
|
|
389759
389804
|
async function collectMarkdownFiles(dirPath, baseDir, loadedPaths) {
|
|
389760
389805
|
const files = [];
|
|
389761
|
-
const fs3 =
|
|
389806
|
+
const fs3 = getFsImplementation2();
|
|
389762
389807
|
await walkPluginMarkdown(dirPath, async (fullPath) => {
|
|
389763
389808
|
if (isDuplicatePath(fs3, fullPath, loadedPaths))
|
|
389764
389809
|
return;
|
|
@@ -389923,7 +389968,7 @@ async function validatePluginSkillFilePath(pluginPath, skillFilePath) {
|
|
|
389923
389968
|
return true;
|
|
389924
389969
|
}
|
|
389925
389970
|
async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, pluginManifest, pluginPath, loadedPaths) {
|
|
389926
|
-
const fs3 =
|
|
389971
|
+
const fs3 = getFsImplementation2();
|
|
389927
389972
|
const skills = [];
|
|
389928
389973
|
const directSkillPath = join88(skillsPath, "SKILL.md");
|
|
389929
389974
|
let directSkillContent = null;
|
|
@@ -390062,7 +390107,7 @@ var init_loadPluginCommands = __esm(() => {
|
|
|
390062
390107
|
logForDebugging(`Plugin ${plugin.name} has commandsPaths: ${plugin.commandsPaths.join(", ")}`);
|
|
390063
390108
|
const pathResults = await Promise.all(plugin.commandsPaths.map(async (commandPath) => {
|
|
390064
390109
|
try {
|
|
390065
|
-
const fs3 =
|
|
390110
|
+
const fs3 = getFsImplementation2();
|
|
390066
390111
|
const stats = await fs3.stat(commandPath);
|
|
390067
390112
|
logForDebugging(`Checking commandPath ${commandPath} - isDirectory: ${stats.isDirectory()}, isFile: ${stats.isFile()}`);
|
|
390068
390113
|
if (stats.isDirectory()) {
|
|
@@ -390280,7 +390325,7 @@ async function getSessionPluginCachePath() {
|
|
|
390280
390325
|
sessionPluginCachePromise = (async () => {
|
|
390281
390326
|
const suffix = randomBytes10(8).toString("hex");
|
|
390282
390327
|
const dir = join89(tmpdir6(), `claude-plugin-session-${suffix}`);
|
|
390283
|
-
await
|
|
390328
|
+
await getFsImplementation2().mkdir(dir);
|
|
390284
390329
|
sessionPluginCachePath = dir;
|
|
390285
390330
|
logForDebugging(`Created session plugin cache at ${dir}`);
|
|
390286
390331
|
return dir;
|
|
@@ -390304,7 +390349,7 @@ async function cleanupSessionPluginCache() {
|
|
|
390304
390349
|
}
|
|
390305
390350
|
async function atomicWriteToZipCache(targetPath, data) {
|
|
390306
390351
|
const dir = dirname38(targetPath);
|
|
390307
|
-
await
|
|
390352
|
+
await getFsImplementation2().mkdir(dir);
|
|
390308
390353
|
const tmpName = `.${basename28(targetPath)}.tmp.${randomBytes10(4).toString("hex")}`;
|
|
390309
390354
|
const tmpPath = join89(dir, tmpName);
|
|
390310
390355
|
try {
|
|
@@ -390390,17 +390435,17 @@ async function collectFilesForZip(baseDir, relativePath, files, visited) {
|
|
|
390390
390435
|
}
|
|
390391
390436
|
}
|
|
390392
390437
|
async function extractZipToDirectory(zipPath, targetDir) {
|
|
390393
|
-
const zipBuf = await
|
|
390438
|
+
const zipBuf = await getFsImplementation2().readFileBytes(zipPath);
|
|
390394
390439
|
const files = await unzipFile(zipBuf);
|
|
390395
390440
|
const modes = parseZipModes(zipBuf);
|
|
390396
|
-
await
|
|
390441
|
+
await getFsImplementation2().mkdir(targetDir);
|
|
390397
390442
|
for (const [relPath, data] of Object.entries(files)) {
|
|
390398
390443
|
if (relPath.endsWith("/")) {
|
|
390399
|
-
await
|
|
390444
|
+
await getFsImplementation2().mkdir(join89(targetDir, relPath));
|
|
390400
390445
|
continue;
|
|
390401
390446
|
}
|
|
390402
390447
|
const fullPath = join89(targetDir, relPath);
|
|
390403
|
-
await
|
|
390448
|
+
await getFsImplementation2().mkdir(dirname38(fullPath));
|
|
390404
390449
|
await writeFile25(fullPath, data);
|
|
390405
390450
|
const mode = modes[relPath];
|
|
390406
390451
|
if (mode && mode & 73) {
|
|
@@ -391067,7 +391112,7 @@ function saveMarketplaceToSettings(name, entry, settingSource = "userSettings")
|
|
|
391067
391112
|
updateSettingsForSource(settingSource, { extraKnownMarketplaces: current });
|
|
391068
391113
|
}
|
|
391069
391114
|
async function loadKnownMarketplacesConfig() {
|
|
391070
|
-
const fs3 =
|
|
391115
|
+
const fs3 = getFsImplementation2();
|
|
391071
391116
|
const configFile = getKnownMarketplacesFile();
|
|
391072
391117
|
try {
|
|
391073
391118
|
const content = await fs3.readFile(configFile, {
|
|
@@ -391110,7 +391155,7 @@ async function saveKnownMarketplacesConfig(config2) {
|
|
|
391110
391155
|
if (!parsed.success) {
|
|
391111
391156
|
throw new ConfigParseError(`Invalid marketplace config: ${parsed.error.message}`, configFile, config2);
|
|
391112
391157
|
}
|
|
391113
|
-
const fs3 =
|
|
391158
|
+
const fs3 = getFsImplementation2();
|
|
391114
391159
|
const dir = join92(configFile, "..");
|
|
391115
391160
|
await fs3.mkdir(dir);
|
|
391116
391161
|
writeFileSync_DEPRECATED(configFile, jsonStringify(parsed.data, null, 2), {
|
|
@@ -391160,7 +391205,7 @@ async function registerSeedMarketplaces() {
|
|
|
391160
391205
|
async function readSeedKnownMarketplaces(seedDir) {
|
|
391161
391206
|
const seedJsonPath = join92(seedDir, "known_marketplaces.json");
|
|
391162
391207
|
try {
|
|
391163
|
-
const content = await
|
|
391208
|
+
const content = await getFsImplementation2().readFile(seedJsonPath, {
|
|
391164
391209
|
encoding: "utf-8"
|
|
391165
391210
|
});
|
|
391166
391211
|
const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
|
|
@@ -391231,7 +391276,7 @@ async function gitPull(cwd2, ref, options2) {
|
|
|
391231
391276
|
async function gitSubmoduleUpdate(cwd2, credentialArgs, env4, sparsePaths) {
|
|
391232
391277
|
if (sparsePaths && sparsePaths.length > 0)
|
|
391233
391278
|
return;
|
|
391234
|
-
const hasGitmodules = await
|
|
391279
|
+
const hasGitmodules = await getFsImplementation2().stat(join92(cwd2, ".gitmodules")).then(() => true, () => false);
|
|
391235
391280
|
if (!hasGitmodules)
|
|
391236
391281
|
return;
|
|
391237
391282
|
const result = await execFileNoThrowWithCwd(gitExe(), [
|
|
@@ -391488,7 +391533,7 @@ async function reconcileSparseCheckout(cwd2, sparsePaths) {
|
|
|
391488
391533
|
return { code: 0, stderr: "" };
|
|
391489
391534
|
}
|
|
391490
391535
|
async function cacheMarketplaceFromGit(gitUrl, cachePath, ref, sparsePaths, onProgress, options2) {
|
|
391491
|
-
const fs3 =
|
|
391536
|
+
const fs3 = getFsImplementation2();
|
|
391492
391537
|
const timeoutSec = Math.round(getPluginGitTimeoutMs() / 1000);
|
|
391493
391538
|
safeCallProgress(onProgress, `Refreshing marketplace cache (timeout: ${timeoutSec}s)…`);
|
|
391494
391539
|
const reconcileResult = await reconcileSparseCheckout(cachePath, sparsePaths);
|
|
@@ -391550,7 +391595,7 @@ function redactUrlCredentials(urlString) {
|
|
|
391550
391595
|
return urlString;
|
|
391551
391596
|
}
|
|
391552
391597
|
async function cacheMarketplaceFromUrl(url3, cachePath, customHeaders, onProgress) {
|
|
391553
|
-
const fs3 =
|
|
391598
|
+
const fs3 = getFsImplementation2();
|
|
391554
391599
|
const redactedUrl = redactUrlCredentials(url3);
|
|
391555
391600
|
safeCallProgress(onProgress, `Downloading marketplace from ${redactedUrl}`);
|
|
391556
391601
|
logForDebugging(`Downloading marketplace from URL: ${redactedUrl}`);
|
|
@@ -391609,7 +391654,7 @@ function getCachePathForSource(source) {
|
|
|
391609
391654
|
return tempName;
|
|
391610
391655
|
}
|
|
391611
391656
|
async function parseFileWithSchema(filePath, schema) {
|
|
391612
|
-
const fs3 =
|
|
391657
|
+
const fs3 = getFsImplementation2();
|
|
391613
391658
|
const content = await fs3.readFile(filePath, { encoding: "utf-8" });
|
|
391614
391659
|
let data;
|
|
391615
391660
|
try {
|
|
@@ -391624,7 +391669,7 @@ async function parseFileWithSchema(filePath, schema) {
|
|
|
391624
391669
|
return result.data;
|
|
391625
391670
|
}
|
|
391626
391671
|
async function loadAndCacheMarketplace(source, onProgress) {
|
|
391627
|
-
const fs3 =
|
|
391672
|
+
const fs3 = getFsImplementation2();
|
|
391628
391673
|
const cacheDir = getMarketplacesCacheDir();
|
|
391629
391674
|
await fs3.mkdir(cacheDir);
|
|
391630
391675
|
let temporaryCachePath;
|
|
@@ -391831,7 +391876,7 @@ Tip: The shorthand "${resolvedSource.repo}" assumes github.com. ` + `For interna
|
|
|
391831
391876
|
const resolvedOld = resolve32(oldEntry.installLocation);
|
|
391832
391877
|
const resolvedNew = resolve32(cachePath);
|
|
391833
391878
|
if (resolvedOld === resolvedNew) {} else if (resolvedOld === cacheDir || resolvedOld.startsWith(cacheDir + sep23)) {
|
|
391834
|
-
const fs3 =
|
|
391879
|
+
const fs3 = getFsImplementation2();
|
|
391835
391880
|
await fs3.rm(oldEntry.installLocation, { recursive: true, force: true });
|
|
391836
391881
|
} else {
|
|
391837
391882
|
logForDebugging(`Skipping cleanup of old installLocation (${oldEntry.installLocation}) — ` + `outside ${cacheDir}. The path is corrupted; leaving it alone and ` + `overwriting the config entry.`, { level: "warn" });
|
|
@@ -391859,7 +391904,7 @@ async function removeMarketplaceSource(name) {
|
|
|
391859
391904
|
}
|
|
391860
391905
|
delete config2[name];
|
|
391861
391906
|
await saveKnownMarketplacesConfig(config2);
|
|
391862
|
-
const fs3 =
|
|
391907
|
+
const fs3 = getFsImplementation2();
|
|
391863
391908
|
const cacheDir = getMarketplacesCacheDir();
|
|
391864
391909
|
const cachePath = join92(cacheDir, name);
|
|
391865
391910
|
await fs3.rm(cachePath, { recursive: true, force: true });
|
|
@@ -391927,7 +391972,7 @@ async function readCachedMarketplace(installLocation) {
|
|
|
391927
391972
|
return await parseFileWithSchema(installLocation, PluginMarketplaceSchema());
|
|
391928
391973
|
}
|
|
391929
391974
|
async function getMarketplaceCacheOnly(name) {
|
|
391930
|
-
const fs3 =
|
|
391975
|
+
const fs3 = getFsImplementation2();
|
|
391931
391976
|
const configFile = getKnownMarketplacesFile();
|
|
391932
391977
|
try {
|
|
391933
391978
|
const content = await fs3.readFile(configFile, { encoding: "utf-8" });
|
|
@@ -391950,7 +391995,7 @@ async function getPluginByIdCacheOnly(pluginId) {
|
|
|
391950
391995
|
if (!pluginName || !marketplaceName) {
|
|
391951
391996
|
return null;
|
|
391952
391997
|
}
|
|
391953
|
-
const fs3 =
|
|
391998
|
+
const fs3 = getFsImplementation2();
|
|
391954
391999
|
const configFile = getKnownMarketplacesFile();
|
|
391955
392000
|
try {
|
|
391956
392001
|
const content = await fs3.readFile(configFile, { encoding: "utf-8" });
|
|
@@ -392221,7 +392266,7 @@ function migrateToSinglePluginFile() {
|
|
|
392221
392266
|
if (migrationCompleted) {
|
|
392222
392267
|
return;
|
|
392223
392268
|
}
|
|
392224
|
-
const fs3 =
|
|
392269
|
+
const fs3 = getFsImplementation2();
|
|
392225
392270
|
const mainFilePath = getInstalledPluginsFilePath();
|
|
392226
392271
|
const v2FilePath = getInstalledPluginsV2FilePath();
|
|
392227
392272
|
try {
|
|
@@ -392268,7 +392313,7 @@ function migrateToSinglePluginFile() {
|
|
|
392268
392313
|
}
|
|
392269
392314
|
}
|
|
392270
392315
|
function cleanupLegacyCache(v2Data) {
|
|
392271
|
-
const fs3 =
|
|
392316
|
+
const fs3 = getFsImplementation2();
|
|
392272
392317
|
const cachePath = getPluginCachePath();
|
|
392273
392318
|
try {
|
|
392274
392319
|
const referencedPaths = new Set;
|
|
@@ -392308,7 +392353,7 @@ function cleanupLegacyCache(v2Data) {
|
|
|
392308
392353
|
}
|
|
392309
392354
|
}
|
|
392310
392355
|
function readInstalledPluginsFileRaw() {
|
|
392311
|
-
const fs3 =
|
|
392356
|
+
const fs3 = getFsImplementation2();
|
|
392312
392357
|
const filePath = getInstalledPluginsFilePath();
|
|
392313
392358
|
let fileContent;
|
|
392314
392359
|
try {
|
|
@@ -392372,7 +392417,7 @@ function loadInstalledPluginsV2() {
|
|
|
392372
392417
|
}
|
|
392373
392418
|
}
|
|
392374
392419
|
function saveInstalledPluginsV2(data) {
|
|
392375
|
-
const fs3 =
|
|
392420
|
+
const fs3 = getFsImplementation2();
|
|
392376
392421
|
const filePath = getInstalledPluginsFilePath();
|
|
392377
392422
|
try {
|
|
392378
392423
|
fs3.mkdirSync(getPluginsDirectory());
|
|
@@ -392542,7 +392587,7 @@ async function getGitCommitSha(dirPath) {
|
|
|
392542
392587
|
return sha ?? undefined;
|
|
392543
392588
|
}
|
|
392544
392589
|
function getPluginVersionFromManifest(pluginCachePath, pluginId) {
|
|
392545
|
-
const fs3 =
|
|
392590
|
+
const fs3 = getFsImplementation2();
|
|
392546
392591
|
const manifestPath = join93(pluginCachePath, ".claude-plugin", "plugin.json");
|
|
392547
392592
|
try {
|
|
392548
392593
|
const manifestContent = fs3.readFileSync(manifestPath, { encoding: "utf-8" });
|
|
@@ -392646,7 +392691,7 @@ async function migrateFromEnabledPlugins() {
|
|
|
392646
392691
|
const pluginCachePath = join93(cachePath, sanitizedName);
|
|
392647
392692
|
let dirEntries;
|
|
392648
392693
|
try {
|
|
392649
|
-
dirEntries = (await
|
|
392694
|
+
dirEntries = (await getFsImplementation2().readdir(pluginCachePath)).map((e2) => typeof e2 === "string" ? e2 : e2.name);
|
|
392650
392695
|
} catch (e2) {
|
|
392651
392696
|
if (!isENOENT(e2))
|
|
392652
392697
|
throw e2;
|
|
@@ -392800,14 +392845,14 @@ async function cacheAndRegisterPlugin(pluginId, entry, scope = "user", projectPa
|
|
|
392800
392845
|
const versionedPath = getVersionedCachePath(pluginId, version2);
|
|
392801
392846
|
let finalPath = cacheResult.path;
|
|
392802
392847
|
if (cacheResult.path !== versionedPath) {
|
|
392803
|
-
await
|
|
392848
|
+
await getFsImplementation2().mkdir(dirname42(versionedPath));
|
|
392804
392849
|
await rm8(versionedPath, { recursive: true, force: true });
|
|
392805
392850
|
const normalizedCachePath = cacheResult.path.endsWith(sep24) ? cacheResult.path : cacheResult.path + sep24;
|
|
392806
392851
|
const isSubdirectory = versionedPath.startsWith(normalizedCachePath);
|
|
392807
392852
|
if (isSubdirectory) {
|
|
392808
392853
|
const tempPath = join94(dirname42(cacheResult.path), `.claude-plugin-temp-${Date.now()}-${randomBytes11(4).toString("hex")}`);
|
|
392809
392854
|
await rename5(cacheResult.path, tempPath);
|
|
392810
|
-
await
|
|
392855
|
+
await getFsImplementation2().mkdir(dirname42(versionedPath));
|
|
392811
392856
|
await rename5(tempPath, versionedPath);
|
|
392812
392857
|
} else {
|
|
392813
392858
|
await rename5(cacheResult.path, versionedPath);
|
|
@@ -393124,7 +393169,7 @@ async function resolvePluginPath(pluginId, version2) {
|
|
|
393124
393169
|
return version2 ? getVersionedCachePath(pluginId, version2) : legacyPath;
|
|
393125
393170
|
}
|
|
393126
393171
|
async function copyDir(src, dest) {
|
|
393127
|
-
await
|
|
393172
|
+
await getFsImplementation2().mkdir(dest);
|
|
393128
393173
|
const entries = await readdir20(src, { withFileTypes: true });
|
|
393129
393174
|
for (const entry of entries) {
|
|
393130
393175
|
const srcPath = join95(src, entry.name);
|
|
@@ -393183,7 +393228,7 @@ async function copyPluginToVersionedCache(sourcePath, pluginId, version2, entry,
|
|
|
393183
393228
|
logForDebugging(`Using seed cache for ${pluginId}@${version2} at ${seedPath}`);
|
|
393184
393229
|
return seedPath;
|
|
393185
393230
|
}
|
|
393186
|
-
await
|
|
393231
|
+
await getFsImplementation2().mkdir(dirname43(cachePath));
|
|
393187
393232
|
if (entry && typeof entry.source === "string" && marketplaceDir) {
|
|
393188
393233
|
const sourceDir = validatePathWithinBase(marketplaceDir, entry.source);
|
|
393189
393234
|
logForDebugging(`Copying source directory ${entry.source} for plugin ${pluginId}`);
|
|
@@ -393231,7 +393276,7 @@ function validateGitUrl(url3) {
|
|
|
393231
393276
|
}
|
|
393232
393277
|
async function installFromNpm(packageName, targetPath, options2 = {}) {
|
|
393233
393278
|
const npmCachePath = join95(getPluginsDirectory(), "npm-cache");
|
|
393234
|
-
await
|
|
393279
|
+
await getFsImplementation2().mkdir(npmCachePath);
|
|
393235
393280
|
const packageSpec = options2.version ? `${packageName}@${options2.version}` : packageName;
|
|
393236
393281
|
const packagePath = join95(npmCachePath, "node_modules", packageName);
|
|
393237
393282
|
const needsInstall = !await pathExists(packagePath);
|
|
@@ -393426,7 +393471,7 @@ function generateTemporaryCacheNameForPlugin(source) {
|
|
|
393426
393471
|
}
|
|
393427
393472
|
async function cachePlugin(source, options2) {
|
|
393428
393473
|
const cachePath = getPluginCachePath();
|
|
393429
|
-
await
|
|
393474
|
+
await getFsImplementation2().mkdir(cachePath);
|
|
393430
393475
|
const tempName = generateTemporaryCacheNameForPlugin(source);
|
|
393431
393476
|
const tempPath = join95(cachePath, tempName);
|
|
393432
393477
|
let shouldCleanup = false;
|
|
@@ -394815,7 +394860,7 @@ async function loadOutputStylesFromDirectory(outputStylesPath, pluginName, loade
|
|
|
394815
394860
|
return styles5;
|
|
394816
394861
|
}
|
|
394817
394862
|
async function loadOutputStyleFromFile(filePath, pluginName, loadedPaths) {
|
|
394818
|
-
const fs3 =
|
|
394863
|
+
const fs3 = getFsImplementation2();
|
|
394819
394864
|
if (isDuplicatePath(fs3, filePath, loadedPaths)) {
|
|
394820
394865
|
return null;
|
|
394821
394866
|
}
|
|
@@ -394876,7 +394921,7 @@ var init_loadPluginOutputStyles = __esm(() => {
|
|
|
394876
394921
|
if (plugin.outputStylesPaths) {
|
|
394877
394922
|
for (const stylePath of plugin.outputStylesPaths) {
|
|
394878
394923
|
try {
|
|
394879
|
-
const fs3 =
|
|
394924
|
+
const fs3 = getFsImplementation2();
|
|
394880
394925
|
const stats = await fs3.stat(stylePath);
|
|
394881
394926
|
if (stats.isDirectory()) {
|
|
394882
394927
|
const styles5 = await loadOutputStylesFromDirectory(stylePath, plugin.name, loadedPaths);
|
|
@@ -395898,7 +395943,7 @@ function stripCallerFieldFromAssistantMessage(message) {
|
|
|
395898
395943
|
id: block2.id,
|
|
395899
395944
|
name: block2.name,
|
|
395900
395945
|
input: block2.input,
|
|
395901
|
-
...
|
|
395946
|
+
...block2.extra_content ? { extra_content: block2.extra_content } : {}
|
|
395902
395947
|
};
|
|
395903
395948
|
})
|
|
395904
395949
|
}
|
|
@@ -396175,7 +396220,7 @@ function normalizeMessagesForAPI(messages, tools = []) {
|
|
|
396175
396220
|
...restBlock,
|
|
396176
396221
|
name: canonicalName,
|
|
396177
396222
|
input: normalizedInput,
|
|
396178
|
-
...
|
|
396223
|
+
...extra_content ? { extra_content } : {}
|
|
396179
396224
|
};
|
|
396180
396225
|
}
|
|
396181
396226
|
return {
|
|
@@ -396183,7 +396228,7 @@ function normalizeMessagesForAPI(messages, tools = []) {
|
|
|
396183
396228
|
id: block2.id,
|
|
396184
396229
|
name: canonicalName,
|
|
396185
396230
|
input: normalizedInput,
|
|
396186
|
-
...
|
|
396231
|
+
...block2.extra_content ? { extra_content: block2.extra_content } : {}
|
|
396187
396232
|
};
|
|
396188
396233
|
}
|
|
396189
396234
|
return block2;
|
|
@@ -398322,7 +398367,6 @@ Goal: Write your final plan to the plan file (the only file you can edit).
|
|
|
398322
398367
|
- End with the single verification command
|
|
398323
398368
|
- **Hard limit: 40 lines.** If the plan is longer, delete prose — not file paths.`;
|
|
398324
398369
|
var init_messages3 = __esm(() => {
|
|
398325
|
-
init_providers();
|
|
398326
398370
|
init_isObject();
|
|
398327
398371
|
init_last();
|
|
398328
398372
|
init_prompt2();
|
|
@@ -401229,7 +401273,7 @@ function isSymlinkTo({
|
|
|
401229
401273
|
processPwd,
|
|
401230
401274
|
originalCwd
|
|
401231
401275
|
}) {
|
|
401232
|
-
const { resolvedPath: resolvedProcessPwd, isSymlink: isProcessPwdSymlink } = safeResolvePath(
|
|
401276
|
+
const { resolvedPath: resolvedProcessPwd, isSymlink: isProcessPwdSymlink } = safeResolvePath(getFsImplementation2(), processPwd);
|
|
401233
401277
|
return isProcessPwdSymlink ? resolvedProcessPwd === resolve35(originalCwd) : false;
|
|
401234
401278
|
}
|
|
401235
401279
|
function initialPermissionModeFromCLI({
|
|
@@ -402153,7 +402197,7 @@ function detectModeEntry(args) {
|
|
|
402153
402197
|
|
|
402154
402198
|
// src/projectOnboardingSteps.ts
|
|
402155
402199
|
function getSteps() {
|
|
402156
|
-
const hasRepoInstructions = findProjectInstructionFilePathInAncestors(getCwd(),
|
|
402200
|
+
const hasRepoInstructions = findProjectInstructionFilePathInAncestors(getCwd(), getFsImplementation2().existsSync) !== null;
|
|
402157
402201
|
const isWorkspaceDirEmpty = isDirEmpty(getCwd());
|
|
402158
402202
|
return [
|
|
402159
402203
|
{
|
|
@@ -405304,7 +405348,7 @@ async function scanDirectory(dirPath) {
|
|
|
405304
405348
|
return cached3;
|
|
405305
405349
|
}
|
|
405306
405350
|
try {
|
|
405307
|
-
const fs3 =
|
|
405351
|
+
const fs3 = getFsImplementation2();
|
|
405308
405352
|
const entries = await fs3.readdir(dirPath);
|
|
405309
405353
|
const directories = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => ({
|
|
405310
405354
|
name: entry.name,
|
|
@@ -405341,7 +405385,7 @@ async function scanDirectoryForPaths(dirPath, includeHidden = false) {
|
|
|
405341
405385
|
return cached3;
|
|
405342
405386
|
}
|
|
405343
405387
|
try {
|
|
405344
|
-
const fs3 =
|
|
405388
|
+
const fs3 = getFsImplementation2();
|
|
405345
405389
|
const entries = await fs3.readdir(dirPath);
|
|
405346
405390
|
const paths2 = entries.filter((entry) => includeHidden || !entry.name.startsWith(".")).map((entry) => ({
|
|
405347
405391
|
name: entry.name,
|
|
@@ -407661,7 +407705,7 @@ async function loadRipgrepIgnorePatterns(repoRoot, cwd2) {
|
|
|
407661
407705
|
if (ignorePatternsCacheKey === cacheKey) {
|
|
407662
407706
|
return ignorePatternsCache;
|
|
407663
407707
|
}
|
|
407664
|
-
const fs3 =
|
|
407708
|
+
const fs3 = getFsImplementation2();
|
|
407665
407709
|
const ignoreFiles = [".ignore", ".rgignore"];
|
|
407666
407710
|
const directories = [...new Set([repoRoot, cwd2])];
|
|
407667
407711
|
const ig = import_ignore3.default();
|
|
@@ -407932,7 +407976,7 @@ function startBackgroundCacheRefresh() {
|
|
|
407932
407976
|
});
|
|
407933
407977
|
}
|
|
407934
407978
|
async function getTopLevelPaths() {
|
|
407935
|
-
const fs3 =
|
|
407979
|
+
const fs3 = getFsImplementation2();
|
|
407936
407980
|
const cwd2 = getCwd();
|
|
407937
407981
|
try {
|
|
407938
407982
|
const entries = await fs3.readdir(cwd2);
|
|
@@ -408077,7 +408121,7 @@ Use the Edit tool with file_path: {{docPath}}
|
|
|
408077
408121
|
REMEMBER: Only update if there is substantial new information. The Magic Doc header (# MAGIC DOC: {{docTitle}}) must remain unchanged.`;
|
|
408078
408122
|
}
|
|
408079
408123
|
async function loadMagicDocsPrompt() {
|
|
408080
|
-
const fs3 =
|
|
408124
|
+
const fs3 = getFsImplementation2();
|
|
408081
408125
|
const promptPath = join103(getClaudeConfigHomeDir(), "magic-docs", "prompt.md");
|
|
408082
408126
|
try {
|
|
408083
408127
|
return await fs3.readFile(promptPath, { encoding: "utf-8" });
|
|
@@ -410431,7 +410475,7 @@ function buildPrimarySection() {
|
|
|
410431
410475
|
});
|
|
410432
410476
|
return [{
|
|
410433
410477
|
label: "Version",
|
|
410434
|
-
value: "0.9.
|
|
410478
|
+
value: "0.9.5"
|
|
410435
410479
|
}, {
|
|
410436
410480
|
label: "Session name",
|
|
410437
410481
|
value: nameValue
|
|
@@ -421937,7 +421981,7 @@ function removePathWithRetry(path18, options2) {
|
|
|
421937
421981
|
}
|
|
421938
421982
|
}
|
|
421939
421983
|
function getProviders() {
|
|
421940
|
-
const cwd2 =
|
|
421984
|
+
const cwd2 = getFsImplementation2().cwd();
|
|
421941
421985
|
const projectDir = join109(getProjectsDir(), sanitizePath2(cwd2));
|
|
421942
421986
|
let providers = providerCache.get(projectDir);
|
|
421943
421987
|
if (!providers) {
|
|
@@ -422099,7 +422143,7 @@ function loadProjectGraph(cwd2) {
|
|
|
422099
422143
|
return projectGraph;
|
|
422100
422144
|
}
|
|
422101
422145
|
function getGlobalGraph() {
|
|
422102
|
-
const cwd2 =
|
|
422146
|
+
const cwd2 = getFsImplementation2().cwd();
|
|
422103
422147
|
if (!projectGraph || Object.keys(projectGraph.entities).length === 0 && projectGraph.summaries.length === 0) {
|
|
422104
422148
|
return loadProjectGraph(cwd2);
|
|
422105
422149
|
}
|
|
@@ -422136,7 +422180,7 @@ async function getOrchestratedMemory(query2) {
|
|
|
422136
422180
|
if (queryWords.length === 0) {
|
|
422137
422181
|
return getGlobalGraphSummary();
|
|
422138
422182
|
}
|
|
422139
|
-
await initOrama(
|
|
422183
|
+
await initOrama(getFsImplementation2().cwd());
|
|
422140
422184
|
if (oramaDb) {
|
|
422141
422185
|
try {
|
|
422142
422186
|
const results = await search2(oramaDb, { term: query2, limit: 20 });
|
|
@@ -422276,7 +422320,7 @@ Project Rules:
|
|
|
422276
422320
|
return summary;
|
|
422277
422321
|
}
|
|
422278
422322
|
function resetGlobalGraph() {
|
|
422279
|
-
const cwd2 =
|
|
422323
|
+
const cwd2 = getFsImplementation2().cwd();
|
|
422280
422324
|
const { sqlite, json: json2 } = getProviders();
|
|
422281
422325
|
const emptyGraph = {
|
|
422282
422326
|
entities: {},
|
|
@@ -423098,7 +423142,7 @@ function isGuiEditor(editor) {
|
|
|
423098
423142
|
return classifyGuiEditor(editor) !== undefined;
|
|
423099
423143
|
}
|
|
423100
423144
|
function editFileInEditor(filePath) {
|
|
423101
|
-
const fs3 =
|
|
423145
|
+
const fs3 = getFsImplementation2();
|
|
423102
423146
|
const inkInstance = instances_default.get(process.stdout);
|
|
423103
423147
|
if (!inkInstance) {
|
|
423104
423148
|
throw new Error("Ink instance not found - cannot pause rendering");
|
|
@@ -423164,7 +423208,7 @@ function recollapsePastedContent(editedPrompt, originalPrompt, pastedContents) {
|
|
|
423164
423208
|
return collapsed;
|
|
423165
423209
|
}
|
|
423166
423210
|
function editPromptInEditor(currentPrompt, pastedContents) {
|
|
423167
|
-
const fs3 =
|
|
423211
|
+
const fs3 = getFsImplementation2();
|
|
423168
423212
|
const tempFile = generateTempFilePath();
|
|
423169
423213
|
try {
|
|
423170
423214
|
const expandedPrompt = pastedContents ? expandPastedTextRefs(currentPrompt, pastedContents) : currentPrompt;
|
|
@@ -423358,7 +423402,7 @@ function getReleaseTagUrl(version2 = publicBuildVersion) {
|
|
|
423358
423402
|
return `${VERBOO_RELEASES_URL}/tag/v${normalizePublicVersion(version2)}`;
|
|
423359
423403
|
}
|
|
423360
423404
|
function getPublicBuildVersion() {
|
|
423361
|
-
return "0.9.
|
|
423405
|
+
return "0.9.5";
|
|
423362
423406
|
}
|
|
423363
423407
|
var import_semver9, VERBOO_RELEASES_URL = "https://github.com/verbeux-ai/code/releases", fallbackBuildVersion, publicBuildVersion;
|
|
423364
423408
|
var init_version = __esm(() => {
|
|
@@ -426470,7 +426514,7 @@ async function performPluginUpdate({
|
|
|
426470
426514
|
scope,
|
|
426471
426515
|
projectPath
|
|
426472
426516
|
}) {
|
|
426473
|
-
const fs3 =
|
|
426517
|
+
const fs3 = getFsImplementation2();
|
|
426474
426518
|
const oldVersion = installation.version;
|
|
426475
426519
|
let sourcePath;
|
|
426476
426520
|
let newVersion;
|
|
@@ -435868,7 +435912,7 @@ import { homedir as homedir28 } from "os";
|
|
|
435868
435912
|
import { resolve as resolve38 } from "path";
|
|
435869
435913
|
async function parseMarketplaceInput(input) {
|
|
435870
435914
|
const trimmed = input.trim();
|
|
435871
|
-
const fs3 =
|
|
435915
|
+
const fs3 = getFsImplementation2();
|
|
435872
435916
|
const sshMatch = trimmed.match(/^([a-zA-Z0-9._-]+@[^:]+:.+?(?:\.git)?)(#(.+))?$/);
|
|
435873
435917
|
if (sshMatch?.[1]) {
|
|
435874
435918
|
const url3 = sshMatch[1];
|
|
@@ -436206,7 +436250,7 @@ async function saveInstallCountsCache(cache4) {
|
|
|
436206
436250
|
const tempPath = `${cachePath}.${randomBytes14(8).toString("hex")}.tmp`;
|
|
436207
436251
|
try {
|
|
436208
436252
|
const pluginsDir = getPluginsDirectory();
|
|
436209
|
-
await
|
|
436253
|
+
await getFsImplementation2().mkdir(pluginsDir);
|
|
436210
436254
|
const content = jsonStringify(cache4, null, 2);
|
|
436211
436255
|
await writeFile35(tempPath, content, {
|
|
436212
436256
|
encoding: "utf-8",
|
|
@@ -440077,7 +440121,7 @@ async function writeToDisk(plugins) {
|
|
|
440077
440121
|
const filePath = getFlaggedPluginsPath();
|
|
440078
440122
|
const tempPath = `${filePath}.${randomBytes15(8).toString("hex")}.tmp`;
|
|
440079
440123
|
try {
|
|
440080
|
-
await
|
|
440124
|
+
await getFsImplementation2().mkdir(getPluginsDirectory());
|
|
440081
440125
|
const content = jsonStringify({ plugins }, null, 2);
|
|
440082
440126
|
await writeFile36(tempPath, content, {
|
|
440083
440127
|
encoding: "utf-8",
|
|
@@ -478135,7 +478179,7 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
|
478135
478179
|
rss: ${toGB(diagnostics.memoryUsage.rss)} GB (total process)
|
|
478136
478180
|
${diagnostics.analysis.recommendation}`);
|
|
478137
478181
|
const dumpDir = getDesktopPath();
|
|
478138
|
-
await
|
|
478182
|
+
await getFsImplementation2().mkdir(dumpDir);
|
|
478139
478183
|
const suffix = dumpNumber > 0 ? `-dump${dumpNumber}` : "";
|
|
478140
478184
|
const heapFilename = `${sessionId}${suffix}.heapsnapshot`;
|
|
478141
478185
|
const diagFilename = `${sessionId}${suffix}-diagnostics.json`;
|
|
@@ -478706,7 +478750,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
478706
478750
|
var call63 = async () => {
|
|
478707
478751
|
return {
|
|
478708
478752
|
type: "text",
|
|
478709
|
-
value: `${"99.0.0"} (built ${"2026-05-
|
|
478753
|
+
value: `${"99.0.0"} (built ${"2026-05-19T21:36:51.071Z"})`
|
|
478710
478754
|
};
|
|
478711
478755
|
}, version2, version_default;
|
|
478712
478756
|
var init_version2 = __esm(() => {
|
|
@@ -484633,7 +484677,7 @@ function migrateStatsCache(parsed) {
|
|
|
484633
484677
|
};
|
|
484634
484678
|
}
|
|
484635
484679
|
async function loadStatsCache() {
|
|
484636
|
-
const fs4 =
|
|
484680
|
+
const fs4 = getFsImplementation2();
|
|
484637
484681
|
const cachePath = getStatsCachePath();
|
|
484638
484682
|
try {
|
|
484639
484683
|
const content = await fs4.readFile(cachePath, { encoding: "utf-8" });
|
|
@@ -484667,7 +484711,7 @@ async function loadStatsCache() {
|
|
|
484667
484711
|
}
|
|
484668
484712
|
}
|
|
484669
484713
|
async function saveStatsCache(cache5) {
|
|
484670
|
-
const fs4 =
|
|
484714
|
+
const fs4 = getFsImplementation2();
|
|
484671
484715
|
const cachePath = getStatsCachePath();
|
|
484672
484716
|
const tempPath = `${cachePath}.${randomBytes16(8).toString("hex")}.tmp`;
|
|
484673
484717
|
try {
|
|
@@ -485354,7 +485398,7 @@ import { open as open16 } from "fs/promises";
|
|
|
485354
485398
|
import { basename as basename44, dirname as dirname55, join as join135, sep as sep31 } from "path";
|
|
485355
485399
|
async function processSessionFiles(sessionFiles, options2 = {}) {
|
|
485356
485400
|
const { fromDate, toDate } = options2;
|
|
485357
|
-
const fs4 =
|
|
485401
|
+
const fs4 = getFsImplementation2();
|
|
485358
485402
|
const dailyActivityMap = new Map;
|
|
485359
485403
|
const dailyModelTokensMap = new Map;
|
|
485360
485404
|
const sessions = [];
|
|
@@ -485529,7 +485573,7 @@ async function processSessionFiles(sessionFiles, options2 = {}) {
|
|
|
485529
485573
|
}
|
|
485530
485574
|
async function getAllSessionFiles() {
|
|
485531
485575
|
const projectsDir = getProjectsDir();
|
|
485532
|
-
const fs4 =
|
|
485576
|
+
const fs4 = getFsImplementation2();
|
|
485533
485577
|
let allEntries;
|
|
485534
485578
|
try {
|
|
485535
485579
|
allEntries = await fs4.readdir(projectsDir);
|
|
@@ -490422,7 +490466,7 @@ async function listRemoteAgentMetadata() {
|
|
|
490422
490466
|
function sessionIdExists(sessionId) {
|
|
490423
490467
|
const projectDir = getProjectDir3(getOriginalCwd());
|
|
490424
490468
|
const sessionFile = join137(projectDir, `${sessionId}.jsonl`);
|
|
490425
|
-
const fs4 =
|
|
490469
|
+
const fs4 = getFsImplementation2();
|
|
490426
490470
|
try {
|
|
490427
490471
|
fs4.statSync(sessionFile);
|
|
490428
490472
|
return true;
|
|
@@ -491902,7 +491946,7 @@ async function fetchLogs(limit) {
|
|
|
491902
491946
|
return logs;
|
|
491903
491947
|
}
|
|
491904
491948
|
function appendEntryToFile(fullPath, entry) {
|
|
491905
|
-
const fs4 =
|
|
491949
|
+
const fs4 = getFsImplementation2();
|
|
491906
491950
|
const line = jsonStringify(entry) + `
|
|
491907
491951
|
`;
|
|
491908
491952
|
try {
|
|
@@ -493493,7 +493537,7 @@ function truncateEntrypointContent(raw) {
|
|
|
493493
493537
|
};
|
|
493494
493538
|
}
|
|
493495
493539
|
async function ensureMemoryDirExists(memoryDir) {
|
|
493496
|
-
const fs4 =
|
|
493540
|
+
const fs4 = getFsImplementation2();
|
|
493497
493541
|
try {
|
|
493498
493542
|
await fs4.mkdir(memoryDir);
|
|
493499
493543
|
} catch (e2) {
|
|
@@ -493502,7 +493546,7 @@ async function ensureMemoryDirExists(memoryDir) {
|
|
|
493502
493546
|
}
|
|
493503
493547
|
}
|
|
493504
493548
|
function logMemoryDirCounts(memoryDir, baseMetadata) {
|
|
493505
|
-
const fs4 =
|
|
493549
|
+
const fs4 = getFsImplementation2();
|
|
493506
493550
|
fs4.readdir(memoryDir).then((dirents) => {
|
|
493507
493551
|
let fileCount = 0;
|
|
493508
493552
|
let subdirCount = 0;
|
|
@@ -493582,7 +493626,7 @@ function buildMemoryLines(displayName, memoryDir, extraGuidelines, skipIndex = f
|
|
|
493582
493626
|
}
|
|
493583
493627
|
function buildMemoryPrompt(params) {
|
|
493584
493628
|
const { displayName, memoryDir, extraGuidelines } = params;
|
|
493585
|
-
const fs4 =
|
|
493629
|
+
const fs4 = getFsImplementation2();
|
|
493586
493630
|
const entrypoint = memoryDir + ENTRYPOINT_NAME;
|
|
493587
493631
|
let entrypointContent = "";
|
|
493588
493632
|
try {
|
|
@@ -493890,7 +493934,7 @@ async function ensureScratchpadDir() {
|
|
|
493890
493934
|
if (!isScratchpadEnabled()) {
|
|
493891
493935
|
throw new Error("Scratchpad directory feature is not enabled");
|
|
493892
493936
|
}
|
|
493893
|
-
const fs4 =
|
|
493937
|
+
const fs4 = getFsImplementation2();
|
|
493894
493938
|
const scratchpadDir = getScratchpadDir();
|
|
493895
493939
|
await fs4.mkdir(scratchpadDir, { mode: 448 });
|
|
493896
493940
|
return scratchpadDir;
|
|
@@ -494639,7 +494683,7 @@ var init_filesystem = __esm(() => {
|
|
|
494639
494683
|
DIR_SEP = posix8.sep;
|
|
494640
494684
|
getClaudeTempDir = memoize_default(function getClaudeTempDir2() {
|
|
494641
494685
|
const baseTmpDir = process.env.CLAUDE_CODE_TMPDIR || (getPlatform() === "windows" ? tmpdir9() : "/tmp");
|
|
494642
|
-
const fs4 =
|
|
494686
|
+
const fs4 = getFsImplementation2();
|
|
494643
494687
|
let resolvedBaseTmpDir = baseTmpDir;
|
|
494644
494688
|
try {
|
|
494645
494689
|
resolvedBaseTmpDir = fs4.realpathSync(baseTmpDir);
|
|
@@ -502759,12 +502803,14 @@ ${deferredToolList}
|
|
|
502759
502803
|
}
|
|
502760
502804
|
case "content_block_start":
|
|
502761
502805
|
switch (part.content_block.type) {
|
|
502762
|
-
case "tool_use":
|
|
502806
|
+
case "tool_use": {
|
|
502807
|
+
const existing = contentBlocks[part.index];
|
|
502763
502808
|
contentBlocks[part.index] = {
|
|
502764
502809
|
...part.content_block,
|
|
502765
|
-
input: ""
|
|
502810
|
+
input: existing ? existing.input : ""
|
|
502766
502811
|
};
|
|
502767
502812
|
break;
|
|
502813
|
+
}
|
|
502768
502814
|
case "server_tool_use":
|
|
502769
502815
|
contentBlocks[part.index] = {
|
|
502770
502816
|
...part.content_block,
|
|
@@ -505252,12 +505298,15 @@ async function* ask({
|
|
|
505252
505298
|
orphanedPermission,
|
|
505253
505299
|
...{}
|
|
505254
505300
|
});
|
|
505301
|
+
const { setOpenAIShimRouterStatusHandler: setOpenAIShimRouterStatusHandler2 } = await Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim));
|
|
505302
|
+
setOpenAIShimRouterStatusHandler2(setSDKStatus ? (s) => setSDKStatus(s) : null);
|
|
505255
505303
|
try {
|
|
505256
505304
|
yield* engine.submitMessage(prompt, {
|
|
505257
505305
|
uuid: promptUuid,
|
|
505258
505306
|
isMeta
|
|
505259
505307
|
});
|
|
505260
505308
|
} finally {
|
|
505309
|
+
setOpenAIShimRouterStatusHandler2(null);
|
|
505261
505310
|
setReadFileCache(engine.getReadFileState());
|
|
505262
505311
|
}
|
|
505263
505312
|
}
|
|
@@ -508489,7 +508538,7 @@ function hasManagedSettingsFile() {
|
|
|
508489
508538
|
} catch {}
|
|
508490
508539
|
try {
|
|
508491
508540
|
const dropInDir = getManagedSettingsDropInDir();
|
|
508492
|
-
const entries =
|
|
508541
|
+
const entries = getFsImplementation2().readdirSync(dropInDir);
|
|
508493
508542
|
for (const d of entries) {
|
|
508494
508543
|
if (!(d.isFile() || d.isSymbolicLink()) || !d.name.endsWith(".json") || d.name.startsWith(".")) {
|
|
508495
508544
|
continue;
|
|
@@ -508538,7 +508587,7 @@ function loadManagedFileSettings() {
|
|
|
508538
508587
|
}
|
|
508539
508588
|
const dropInDir = getManagedSettingsDropInDir();
|
|
508540
508589
|
try {
|
|
508541
|
-
const entries =
|
|
508590
|
+
const entries = getFsImplementation2().readdirSync(dropInDir).filter((d) => (d.isFile() || d.isSymbolicLink()) && d.name.endsWith(".json") && !d.name.startsWith(".")).map((d) => d.name).sort();
|
|
508542
508591
|
for (const name of entries) {
|
|
508543
508592
|
const { settings: settings2, errors: fileErrors } = parseSettingsFile(join147(dropInDir, name));
|
|
508544
508593
|
errors4.push(...fileErrors);
|
|
@@ -508561,7 +508610,7 @@ function getManagedFileSettingsPresence() {
|
|
|
508561
508610
|
let hasDropIns = false;
|
|
508562
508611
|
const dropInDir = getManagedSettingsDropInDir();
|
|
508563
508612
|
try {
|
|
508564
|
-
hasDropIns =
|
|
508613
|
+
hasDropIns = getFsImplementation2().readdirSync(dropInDir).some((d) => (d.isFile() || d.isSymbolicLink()) && d.name.endsWith(".json") && !d.name.startsWith("."));
|
|
508565
508614
|
} catch {}
|
|
508566
508615
|
return { hasBase, hasDropIns };
|
|
508567
508616
|
}
|
|
@@ -508589,7 +508638,7 @@ function parseSettingsFile(path21) {
|
|
|
508589
508638
|
}
|
|
508590
508639
|
function parseSettingsFileUncached(path21) {
|
|
508591
508640
|
try {
|
|
508592
|
-
const { resolvedPath } = safeResolvePath(
|
|
508641
|
+
const { resolvedPath } = safeResolvePath(getFsImplementation2(), path21);
|
|
508593
508642
|
const content = readFileSync7(resolvedPath);
|
|
508594
508643
|
if (content.trim() === "") {
|
|
508595
508644
|
return { settings: {}, errors: [] };
|
|
@@ -508720,7 +508769,7 @@ function updateSettingsForSource(source, settings) {
|
|
|
508720
508769
|
return { error: null };
|
|
508721
508770
|
}
|
|
508722
508771
|
try {
|
|
508723
|
-
|
|
508772
|
+
getFsImplementation2().mkdirSync(dirname60(filePath));
|
|
508724
508773
|
let existingSettings = getSettingsForSourceUncached(source);
|
|
508725
508774
|
if (!existingSettings) {
|
|
508726
508775
|
let content = null;
|
|
@@ -509051,7 +509100,7 @@ function rawSettingsContainsKey(key) {
|
|
|
509051
509100
|
continue;
|
|
509052
509101
|
}
|
|
509053
509102
|
try {
|
|
509054
|
-
const { resolvedPath } = safeResolvePath(
|
|
509103
|
+
const { resolvedPath } = safeResolvePath(getFsImplementation2(), filePath);
|
|
509055
509104
|
const content = readFileSync7(resolvedPath);
|
|
509056
509105
|
if (!content.trim()) {
|
|
509057
509106
|
continue;
|
|
@@ -509459,7 +509508,7 @@ function startGlobalConfigFreshnessWatcher() {
|
|
|
509459
509508
|
watchFile3(file2, { interval: CONFIG_FRESHNESS_POLL_MS, persistent: false }, (curr) => {
|
|
509460
509509
|
if (curr.mtimeMs <= globalConfigCache.mtime)
|
|
509461
509510
|
return;
|
|
509462
|
-
|
|
509511
|
+
getFsImplementation2().readFile(file2, { encoding: "utf-8" }).then((content) => {
|
|
509463
509512
|
if (curr.mtimeMs <= globalConfigCache.mtime)
|
|
509464
509513
|
return;
|
|
509465
509514
|
const parsed = safeParseJSON(stripBOM2(content));
|
|
@@ -509494,7 +509543,7 @@ function getGlobalConfig() {
|
|
|
509494
509543
|
try {
|
|
509495
509544
|
let stats2 = null;
|
|
509496
509545
|
try {
|
|
509497
|
-
stats2 =
|
|
509546
|
+
stats2 = getFsImplementation2().statSync(getGlobalClaudeFile());
|
|
509498
509547
|
} catch {}
|
|
509499
509548
|
const config3 = migrateConfigFields(getConfig2(getGlobalClaudeFile(), createDefaultGlobalConfig));
|
|
509500
509549
|
globalConfigCache = {
|
|
@@ -509527,7 +509576,7 @@ function getCustomApiKeyStatus(truncatedApiKey) {
|
|
|
509527
509576
|
}
|
|
509528
509577
|
function saveConfig(file2, config3, defaultConfig) {
|
|
509529
509578
|
const dir = dirname61(file2);
|
|
509530
|
-
const fs4 =
|
|
509579
|
+
const fs4 = getFsImplementation2();
|
|
509531
509580
|
fs4.mkdirSync(dir);
|
|
509532
509581
|
const filteredConfig = pickBy_default(config3, (value, key) => jsonStringify(value) !== jsonStringify(defaultConfig[key]));
|
|
509533
509582
|
writeFileSyncAndFlush_DEPRECATED(file2, jsonStringify(filteredConfig, null, 2), {
|
|
@@ -509541,7 +509590,7 @@ function saveConfig(file2, config3, defaultConfig) {
|
|
|
509541
509590
|
function saveConfigWithLock(file2, createDefault, mergeFn) {
|
|
509542
509591
|
const defaultConfig = createDefault();
|
|
509543
509592
|
const dir = dirname61(file2);
|
|
509544
|
-
const fs4 =
|
|
509593
|
+
const fs4 = getFsImplementation2();
|
|
509545
509594
|
fs4.mkdirSync(dir);
|
|
509546
509595
|
let release2;
|
|
509547
509596
|
try {
|
|
@@ -509654,7 +509703,7 @@ function getConfigBackupDir() {
|
|
|
509654
509703
|
return join149(getClaudeConfigHomeDir(), "backups");
|
|
509655
509704
|
}
|
|
509656
509705
|
function findMostRecentBackup(file2) {
|
|
509657
|
-
const fs4 =
|
|
509706
|
+
const fs4 = getFsImplementation2();
|
|
509658
509707
|
const fileBase = basename48(file2);
|
|
509659
509708
|
const backupDir = getConfigBackupDir();
|
|
509660
509709
|
try {
|
|
@@ -509683,7 +509732,7 @@ function getConfig2(file2, createDefault, throwOnInvalid) {
|
|
|
509683
509732
|
if (!configReadingAllowed && true) {
|
|
509684
509733
|
throw new Error("Config accessed before allowed.");
|
|
509685
509734
|
}
|
|
509686
|
-
const fs4 =
|
|
509735
|
+
const fs4 = getFsImplementation2();
|
|
509687
509736
|
try {
|
|
509688
509737
|
const fileContent = fs4.readFileSync(file2, {
|
|
509689
509738
|
encoding: "utf-8"
|
|
@@ -510866,7 +510915,7 @@ function printStartupScreen(modelOverride) {
|
|
|
510866
510915
|
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
510867
510916
|
const cwd2 = process.cwd();
|
|
510868
510917
|
const displayCwd = home && cwd2.startsWith(home) ? `~${cwd2.slice(home.length)}` : cwd2;
|
|
510869
|
-
const version3 = "0.9.
|
|
510918
|
+
const version3 = "0.9.5";
|
|
510870
510919
|
const bold2 = `${ESC4}1m`;
|
|
510871
510920
|
const PURPLE = rgb3(...ACCENT);
|
|
510872
510921
|
const SOFT = rgb3(...CREAM);
|
|
@@ -520568,7 +520617,7 @@ function FilePermissionDialog({
|
|
|
520568
520617
|
return null;
|
|
520569
520618
|
}
|
|
520570
520619
|
const expandedPath = expandPath(path22);
|
|
520571
|
-
const fs4 =
|
|
520620
|
+
const fs4 = getFsImplementation2();
|
|
520572
520621
|
const {
|
|
520573
520622
|
resolvedPath,
|
|
520574
520623
|
isSymlink
|
|
@@ -520757,7 +520806,7 @@ function SedEditPermissionRequest(t0) {
|
|
|
520757
520806
|
if ($2[3] !== filePath) {
|
|
520758
520807
|
t1 = (async () => {
|
|
520759
520808
|
const encoding = detectEncodingForResolvedPath(filePath);
|
|
520760
|
-
const raw = await
|
|
520809
|
+
const raw = await getFsImplementation2().readFile(filePath, {
|
|
520761
520810
|
encoding
|
|
520762
520811
|
});
|
|
520763
520812
|
return {
|
|
@@ -524247,7 +524296,7 @@ function NotebookEditToolDiff(props) {
|
|
|
524247
524296
|
const $2 = import_react_compiler_runtime292.c(5);
|
|
524248
524297
|
let t0;
|
|
524249
524298
|
if ($2[0] !== props.notebook_path) {
|
|
524250
|
-
t0 =
|
|
524299
|
+
t0 = getFsImplementation2().readFile(props.notebook_path, {
|
|
524251
524300
|
encoding: "utf-8"
|
|
524252
524301
|
}).then(_temp173).catch(_temp273);
|
|
524253
524302
|
$2[0] = props.notebook_path;
|
|
@@ -529133,7 +529182,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
529133
529182
|
function getSemverPart(version3) {
|
|
529134
529183
|
return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
|
|
529135
529184
|
}
|
|
529136
|
-
function useUpdateNotification(updatedVersion, initialVersion = "0.9.
|
|
529185
|
+
function useUpdateNotification(updatedVersion, initialVersion = "0.9.5") {
|
|
529137
529186
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react221.useState(() => getSemverPart(initialVersion));
|
|
529138
529187
|
const [pendingNotification2, setPendingNotification] = import_react221.useState(null);
|
|
529139
529188
|
if (updatedVersion) {
|
|
@@ -529173,7 +529222,7 @@ function AutoUpdater({
|
|
|
529173
529222
|
return;
|
|
529174
529223
|
}
|
|
529175
529224
|
if (false) {}
|
|
529176
|
-
const currentVersion = "0.9.
|
|
529225
|
+
const currentVersion = "0.9.5";
|
|
529177
529226
|
const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
529178
529227
|
let latestVersion = await getLatestVersion(channel2);
|
|
529179
529228
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -529524,17 +529573,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
529524
529573
|
const maxVersion = await getMaxVersion();
|
|
529525
529574
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
529526
529575
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
529527
|
-
if (gte("0.9.
|
|
529528
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.
|
|
529576
|
+
if (gte("0.9.5", maxVersion)) {
|
|
529577
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
529529
529578
|
setUpdateAvailable(false);
|
|
529530
529579
|
return;
|
|
529531
529580
|
}
|
|
529532
529581
|
latest = maxVersion;
|
|
529533
529582
|
}
|
|
529534
|
-
const hasUpdate = latest && !gte("0.9.
|
|
529583
|
+
const hasUpdate = latest && !gte("0.9.5", latest) && !shouldSkipVersion(latest);
|
|
529535
529584
|
setUpdateAvailable(!!hasUpdate);
|
|
529536
529585
|
if (hasUpdate) {
|
|
529537
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.
|
|
529586
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.5"} -> ${latest}`);
|
|
529538
529587
|
}
|
|
529539
529588
|
};
|
|
529540
529589
|
$2[0] = t1;
|
|
@@ -529568,7 +529617,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
529568
529617
|
wrap: "truncate",
|
|
529569
529618
|
children: [
|
|
529570
529619
|
"currentVersion: ",
|
|
529571
|
-
"0.9.
|
|
529620
|
+
"0.9.5"
|
|
529572
529621
|
]
|
|
529573
529622
|
});
|
|
529574
529623
|
$2[3] = verbose;
|
|
@@ -543547,10 +543596,21 @@ function convertStatusMessage(msg) {
|
|
|
543547
543596
|
if (!msg.status) {
|
|
543548
543597
|
return null;
|
|
543549
543598
|
}
|
|
543599
|
+
let content;
|
|
543600
|
+
switch (msg.status) {
|
|
543601
|
+
case "compacting":
|
|
543602
|
+
content = "Compacting conversation…";
|
|
543603
|
+
break;
|
|
543604
|
+
case "warming-up":
|
|
543605
|
+
content = "Warming up vast.ai worker (cold start, ~1–3 min)…";
|
|
543606
|
+
break;
|
|
543607
|
+
default:
|
|
543608
|
+
content = `Status: ${msg.status}`;
|
|
543609
|
+
}
|
|
543550
543610
|
return {
|
|
543551
543611
|
type: "system",
|
|
543552
543612
|
subtype: "informational",
|
|
543553
|
-
content
|
|
543613
|
+
content,
|
|
543554
543614
|
level: "info",
|
|
543555
543615
|
uuid: msg.uuid,
|
|
543556
543616
|
timestamp: new Date().toISOString()
|
|
@@ -543682,6 +543742,7 @@ function useRemoteSession({
|
|
|
543682
543742
|
}, [setAppState]);
|
|
543683
543743
|
const responseTimeoutRef = import_react256.useRef(null);
|
|
543684
543744
|
const isCompactingRef = import_react256.useRef(false);
|
|
543745
|
+
const isWarmingUpRef = import_react256.useRef(false);
|
|
543685
543746
|
const managerRef = import_react256.useRef(null);
|
|
543686
543747
|
const hasUpdatedTitleRef = import_react256.useRef(false);
|
|
543687
543748
|
const sentUUIDsRef = import_react256.useRef(new BoundedUUIDSet(50));
|
|
@@ -543732,10 +543793,13 @@ function useRemoteSession({
|
|
|
543732
543793
|
}
|
|
543733
543794
|
if (sdkMessage.subtype === "status") {
|
|
543734
543795
|
const wasCompacting = isCompactingRef.current;
|
|
543796
|
+
const wasWarming = isWarmingUpRef.current;
|
|
543735
543797
|
isCompactingRef.current = sdkMessage.status === "compacting";
|
|
543736
|
-
|
|
543798
|
+
isWarmingUpRef.current = sdkMessage.status === "warming-up";
|
|
543799
|
+
if (wasCompacting && isCompactingRef.current)
|
|
543800
|
+
return;
|
|
543801
|
+
if (wasWarming && isWarmingUpRef.current)
|
|
543737
543802
|
return;
|
|
543738
|
-
}
|
|
543739
543803
|
}
|
|
543740
543804
|
if (sdkMessage.subtype === "compact_boundary") {
|
|
543741
543805
|
isCompactingRef.current = false;
|
|
@@ -543918,7 +543982,7 @@ function useRemoteSession({
|
|
|
543918
543982
|
}
|
|
543919
543983
|
}
|
|
543920
543984
|
if (!config3?.viewerOnly) {
|
|
543921
|
-
const timeoutMs = isCompactingRef.current ? COMPACTION_TIMEOUT_MS : RESPONSE_TIMEOUT_MS;
|
|
543985
|
+
const timeoutMs = isCompactingRef.current || isWarmingUpRef.current ? COMPACTION_TIMEOUT_MS : RESPONSE_TIMEOUT_MS;
|
|
543922
543986
|
responseTimeoutRef.current = setTimeout((setMessages2, manager2) => {
|
|
543923
543987
|
logForDebugging("[useRemoteSession] Response timeout - attempting reconnect");
|
|
543924
543988
|
const warningMessage = createSystemMessage("Remote session may be unresponsive. Attempting to reconnect…", "warning");
|
|
@@ -544888,12 +544952,12 @@ function convertFileNameToDate(filename) {
|
|
|
544888
544952
|
async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
|
|
544889
544953
|
const result = { messages: 0, errors: 0 };
|
|
544890
544954
|
try {
|
|
544891
|
-
const files2 = await
|
|
544955
|
+
const files2 = await getFsImplementation2().readdir(dirPath);
|
|
544892
544956
|
for (const file2 of files2) {
|
|
544893
544957
|
try {
|
|
544894
544958
|
const timestamp = convertFileNameToDate(file2.name);
|
|
544895
544959
|
if (timestamp < cutoffDate) {
|
|
544896
|
-
await
|
|
544960
|
+
await getFsImplementation2().unlink(join152(dirPath, file2.name));
|
|
544897
544961
|
if (isMessagePath) {
|
|
544898
544962
|
result.messages++;
|
|
544899
544963
|
} else {
|
|
@@ -544912,7 +544976,7 @@ async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
|
|
|
544912
544976
|
return result;
|
|
544913
544977
|
}
|
|
544914
544978
|
async function cleanupOldMessageFiles() {
|
|
544915
|
-
const fsImpl =
|
|
544979
|
+
const fsImpl = getFsImplementation2();
|
|
544916
544980
|
const cutoffDate = getCutoffDate();
|
|
544917
544981
|
const errorPath = CACHE_PATHS.errors();
|
|
544918
544982
|
const baseCachePath = CACHE_PATHS.baseLogs();
|
|
@@ -544953,7 +545017,7 @@ async function cleanupOldSessionFiles() {
|
|
|
544953
545017
|
const cutoffDate = getCutoffDate();
|
|
544954
545018
|
const result = { messages: 0, errors: 0 };
|
|
544955
545019
|
const projectsDir = getProjectsDir();
|
|
544956
|
-
const fsImpl =
|
|
545020
|
+
const fsImpl = getFsImplementation2();
|
|
544957
545021
|
let projectDirents;
|
|
544958
545022
|
try {
|
|
544959
545023
|
projectDirents = await fsImpl.readdir(projectsDir);
|
|
@@ -545035,7 +545099,7 @@ async function cleanupOldSessionFiles() {
|
|
|
545035
545099
|
async function cleanupSingleDirectory(dirPath, extension2, removeEmptyDir = true) {
|
|
545036
545100
|
const cutoffDate = getCutoffDate();
|
|
545037
545101
|
const result = { messages: 0, errors: 0 };
|
|
545038
|
-
const fsImpl =
|
|
545102
|
+
const fsImpl = getFsImplementation2();
|
|
545039
545103
|
let dirents;
|
|
545040
545104
|
try {
|
|
545041
545105
|
dirents = await fsImpl.readdir(dirPath);
|
|
@@ -545064,7 +545128,7 @@ function cleanupOldPlanFiles() {
|
|
|
545064
545128
|
async function cleanupOldFileHistoryBackups() {
|
|
545065
545129
|
const cutoffDate = getCutoffDate();
|
|
545066
545130
|
const result = { messages: 0, errors: 0 };
|
|
545067
|
-
const fsImpl =
|
|
545131
|
+
const fsImpl = getFsImplementation2();
|
|
545068
545132
|
try {
|
|
545069
545133
|
const configDir = getClaudeConfigHomeDir();
|
|
545070
545134
|
const fileHistoryStorageDir = join152(configDir, "file-history");
|
|
@@ -545098,7 +545162,7 @@ async function cleanupOldFileHistoryBackups() {
|
|
|
545098
545162
|
async function cleanupOldSessionEnvDirs() {
|
|
545099
545163
|
const cutoffDate = getCutoffDate();
|
|
545100
545164
|
const result = { messages: 0, errors: 0 };
|
|
545101
|
-
const fsImpl =
|
|
545165
|
+
const fsImpl = getFsImplementation2();
|
|
545102
545166
|
try {
|
|
545103
545167
|
const configDir = getClaudeConfigHomeDir();
|
|
545104
545168
|
const sessionEnvBaseDir = join152(configDir, "session-env");
|
|
@@ -545129,7 +545193,7 @@ async function cleanupOldSessionEnvDirs() {
|
|
|
545129
545193
|
async function cleanupOldDebugLogs() {
|
|
545130
545194
|
const cutoffDate = getCutoffDate();
|
|
545131
545195
|
const result = { messages: 0, errors: 0 };
|
|
545132
|
-
const fsImpl =
|
|
545196
|
+
const fsImpl = getFsImplementation2();
|
|
545133
545197
|
const debugDir = join152(getClaudeConfigHomeDir(), "debug");
|
|
545134
545198
|
let dirents;
|
|
545135
545199
|
try {
|
|
@@ -547440,7 +547504,7 @@ function dispose3() {
|
|
|
547440
547504
|
return closePromise;
|
|
547441
547505
|
}
|
|
547442
547506
|
async function getWatchablePaths() {
|
|
547443
|
-
const fs5 =
|
|
547507
|
+
const fs5 = getFsImplementation2();
|
|
547444
547508
|
const paths2 = [];
|
|
547445
547509
|
const userSkillsPath = getSkillsPath("userSettings", "skills");
|
|
547446
547510
|
if (userSkillsPath) {
|
|
@@ -557793,6 +557857,44 @@ function REPL({
|
|
|
557793
557857
|
const [spinnerMessage, setSpinnerMessage] = import_react314.useState(null);
|
|
557794
557858
|
const [spinnerColor, setSpinnerColor] = import_react314.useState(null);
|
|
557795
557859
|
const [spinnerShimmerColor, setSpinnerShimmerColor] = import_react314.useState(null);
|
|
557860
|
+
import_react314.useEffect(() => {
|
|
557861
|
+
const warmingMessages = [
|
|
557862
|
+
"\uD83D\uDD25 Verboo Intelligence is firing up the engines",
|
|
557863
|
+
"☕ Verboo Intelligence is brewing a fresh cup",
|
|
557864
|
+
"\uD83E\uDDE0 Verboo Intelligence is waking up the neurons",
|
|
557865
|
+
"\uD83D\uDE80 Verboo Intelligence is fueling the rockets",
|
|
557866
|
+
"⚡ Verboo Intelligence is charging its capacitors",
|
|
557867
|
+
"\uD83E\uDDBE Verboo Intelligence is stretching its muscles",
|
|
557868
|
+
"✨ Verboo Intelligence is summoning brilliance",
|
|
557869
|
+
"\uD83C\uDFA9 Verboo Intelligence is putting on the thinking cap",
|
|
557870
|
+
"\uD83E\uDE84 Verboo Intelligence is polishing the wand",
|
|
557871
|
+
"\uD83D\uDD2E Verboo Intelligence is polishing the crystal ball",
|
|
557872
|
+
"\uD83D\uDEE0️ Verboo Intelligence is calibrating sensors",
|
|
557873
|
+
"\uD83D\uDCDA Verboo Intelligence is loading wisdom modules",
|
|
557874
|
+
"\uD83C\uDFAF Verboo Intelligence is locking onto the target",
|
|
557875
|
+
"\uD83C\uDFAC Verboo Intelligence is setting the scene",
|
|
557876
|
+
"\uD83C\uDFAA Verboo Intelligence is rolling out the red carpet"
|
|
557877
|
+
];
|
|
557878
|
+
let cancelled = false;
|
|
557879
|
+
Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim)).then((mod) => {
|
|
557880
|
+
if (cancelled)
|
|
557881
|
+
return;
|
|
557882
|
+
mod.setOpenAIShimRouterStatusHandler((status2) => {
|
|
557883
|
+
if (status2 === "warming-up") {
|
|
557884
|
+
const msg = warmingMessages[Math.floor(Math.random() * warmingMessages.length)];
|
|
557885
|
+
setSpinnerMessage(msg);
|
|
557886
|
+
} else {
|
|
557887
|
+
setSpinnerMessage(null);
|
|
557888
|
+
}
|
|
557889
|
+
});
|
|
557890
|
+
});
|
|
557891
|
+
return () => {
|
|
557892
|
+
cancelled = true;
|
|
557893
|
+
Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim)).then((mod) => {
|
|
557894
|
+
mod.setOpenAIShimRouterStatusHandler(null);
|
|
557895
|
+
});
|
|
557896
|
+
};
|
|
557897
|
+
}, []);
|
|
557796
557898
|
const [isMessageSelectorVisible, setIsMessageSelectorVisible] = import_react314.useState(false);
|
|
557797
557899
|
const [messageSelectorPreselect, setMessageSelectorPreselect] = import_react314.useState(undefined);
|
|
557798
557900
|
const [showCostDialog, setShowCostDialog] = import_react314.useState(false);
|
|
@@ -561960,7 +562062,7 @@ function WelcomeV2() {
|
|
|
561960
562062
|
dimColor: true,
|
|
561961
562063
|
children: [
|
|
561962
562064
|
"v",
|
|
561963
|
-
"0.9.
|
|
562065
|
+
"0.9.5",
|
|
561964
562066
|
" "
|
|
561965
562067
|
]
|
|
561966
562068
|
})
|
|
@@ -562147,7 +562249,7 @@ function WelcomeV2() {
|
|
|
562147
562249
|
dimColor: true,
|
|
562148
562250
|
children: [
|
|
562149
562251
|
"v",
|
|
562150
|
-
"0.9.
|
|
562252
|
+
"0.9.5",
|
|
562151
562253
|
" "
|
|
562152
562254
|
]
|
|
562153
562255
|
})
|
|
@@ -562363,7 +562465,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
562363
562465
|
dimColor: true,
|
|
562364
562466
|
children: [
|
|
562365
562467
|
"v",
|
|
562366
|
-
"0.9.
|
|
562468
|
+
"0.9.5",
|
|
562367
562469
|
" "
|
|
562368
562470
|
]
|
|
562369
562471
|
});
|
|
@@ -562572,7 +562674,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
562572
562674
|
dimColor: true,
|
|
562573
562675
|
children: [
|
|
562574
562676
|
"v",
|
|
562575
|
-
"0.9.
|
|
562677
|
+
"0.9.5",
|
|
562576
562678
|
" "
|
|
562577
562679
|
]
|
|
562578
562680
|
});
|
|
@@ -563572,7 +563674,7 @@ function TrustDialog(t0) {
|
|
|
563572
563674
|
if ($2[20] === Symbol.for("react.memo_cache_sentinel")) {
|
|
563573
563675
|
t16 = /* @__PURE__ */ jsx_runtime476.jsx(ThemedText, {
|
|
563574
563676
|
bold: true,
|
|
563575
|
-
children:
|
|
563677
|
+
children: getFsImplementation2().cwd()
|
|
563576
563678
|
});
|
|
563577
563679
|
t17 = /* @__PURE__ */ jsx_runtime476.jsxs(ThemedText, {
|
|
563578
563680
|
children: [
|
|
@@ -568449,10 +568551,10 @@ function getLogWriter(path24) {
|
|
|
568449
568551
|
writer = createJsonlWriter({
|
|
568450
568552
|
writeFn: (content) => {
|
|
568451
568553
|
try {
|
|
568452
|
-
|
|
568554
|
+
getFsImplementation2().appendFileSync(path24, content);
|
|
568453
568555
|
} catch {
|
|
568454
|
-
|
|
568455
|
-
|
|
568556
|
+
getFsImplementation2().mkdirSync(dir);
|
|
568557
|
+
getFsImplementation2().appendFileSync(path24, content);
|
|
568456
568558
|
}
|
|
568457
568559
|
},
|
|
568458
568560
|
flushIntervalMs: 1000,
|
|
@@ -568470,7 +568572,7 @@ function appendToLog(path24, message) {
|
|
|
568470
568572
|
const messageWithTimestamp = {
|
|
568471
568573
|
timestamp: new Date().toISOString(),
|
|
568472
568574
|
...message,
|
|
568473
|
-
cwd:
|
|
568575
|
+
cwd: getFsImplementation2().cwd(),
|
|
568474
568576
|
userType: process.env.USER_TYPE,
|
|
568475
568577
|
sessionId: getSessionId(),
|
|
568476
568578
|
version: "99.0.0"
|
|
@@ -568519,7 +568621,7 @@ function logMCPErrorImpl(serverName, error42) {
|
|
|
568519
568621
|
error: errorStr,
|
|
568520
568622
|
timestamp: new Date().toISOString(),
|
|
568521
568623
|
sessionId: getSessionId(),
|
|
568522
|
-
cwd:
|
|
568624
|
+
cwd: getFsImplementation2().cwd()
|
|
568523
568625
|
};
|
|
568524
568626
|
getLogWriter(logFile).write(errorInfo);
|
|
568525
568627
|
}
|
|
@@ -568530,7 +568632,7 @@ function logMCPDebugImpl(serverName, message) {
|
|
|
568530
568632
|
debug: message,
|
|
568531
568633
|
timestamp: new Date().toISOString(),
|
|
568532
568634
|
sessionId: getSessionId(),
|
|
568533
|
-
cwd:
|
|
568635
|
+
cwd: getFsImplementation2().cwd()
|
|
568534
568636
|
};
|
|
568535
568637
|
getLogWriter(logFile).write(debugInfo);
|
|
568536
568638
|
}
|
|
@@ -568621,7 +568723,7 @@ function shouldExtractMemory(messages) {
|
|
|
568621
568723
|
return false;
|
|
568622
568724
|
}
|
|
568623
568725
|
async function setupSessionMemoryFile(toolUseContext) {
|
|
568624
|
-
const fs5 =
|
|
568726
|
+
const fs5 = getFsImplementation2();
|
|
568625
568727
|
const sessionMemoryDir = getSessionMemoryDir();
|
|
568626
568728
|
await fs5.mkdir(sessionMemoryDir, { mode: 448 });
|
|
568627
568729
|
const memoryPath = getSessionMemoryPath();
|
|
@@ -573143,8 +573245,8 @@ async function installPluginsForHeadless() {
|
|
|
573143
573245
|
clearPluginCache("headlessPluginInstall: seed marketplaces registered");
|
|
573144
573246
|
}
|
|
573145
573247
|
if (zipCacheMode) {
|
|
573146
|
-
await
|
|
573147
|
-
await
|
|
573248
|
+
await getFsImplementation2().mkdir(getZipCacheMarketplacesDir());
|
|
573249
|
+
await getFsImplementation2().mkdir(getZipCachePluginsDir());
|
|
573148
573250
|
}
|
|
573149
573251
|
const declaredCount = Object.keys(getDeclaredMarketplaces()).length;
|
|
573150
573252
|
const metrics = {
|
|
@@ -579984,7 +580086,7 @@ __export(exports_update, {
|
|
|
579984
580086
|
async function update() {
|
|
579985
580087
|
if (getAPIProvider() !== "firstParty") {
|
|
579986
580088
|
writeToStdout(source_default.yellow(`Auto-update is not available for third-party provider builds.
|
|
579987
|
-
`) + `Current version: ${"0.9.
|
|
580089
|
+
`) + `Current version: ${"0.9.5"}
|
|
579988
580090
|
|
|
579989
580091
|
` + `To update, reinstall from npm:
|
|
579990
580092
|
` + source_default.bold(` npm install -g ${"@verboo/code"}@latest`) + `
|
|
@@ -579995,7 +580097,7 @@ async function update() {
|
|
|
579995
580097
|
await gracefulShutdown(0);
|
|
579996
580098
|
}
|
|
579997
580099
|
logEvent("tengu_update_check", {});
|
|
579998
|
-
writeToStdout(`Current version: ${"0.9.
|
|
580100
|
+
writeToStdout(`Current version: ${"0.9.5"}
|
|
579999
580101
|
`);
|
|
580000
580102
|
const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
580001
580103
|
writeToStdout(`Checking for updates to ${channel2} version...
|
|
@@ -580080,8 +580182,8 @@ async function update() {
|
|
|
580080
580182
|
writeToStdout(`Verboo Code is managed by Homebrew.
|
|
580081
580183
|
`);
|
|
580082
580184
|
const latest = await getLatestVersion(channel2);
|
|
580083
|
-
if (latest && !gte("0.9.
|
|
580084
|
-
writeToStdout(`Update available: ${"0.9.
|
|
580185
|
+
if (latest && !gte("0.9.5", latest)) {
|
|
580186
|
+
writeToStdout(`Update available: ${"0.9.5"} → ${latest}
|
|
580085
580187
|
`);
|
|
580086
580188
|
writeToStdout(`
|
|
580087
580189
|
`);
|
|
@@ -580097,8 +580199,8 @@ async function update() {
|
|
|
580097
580199
|
writeToStdout(`Verboo Code is managed by winget.
|
|
580098
580200
|
`);
|
|
580099
580201
|
const latest = await getLatestVersion(channel2);
|
|
580100
|
-
if (latest && !gte("0.9.
|
|
580101
|
-
writeToStdout(`Update available: ${"0.9.
|
|
580202
|
+
if (latest && !gte("0.9.5", latest)) {
|
|
580203
|
+
writeToStdout(`Update available: ${"0.9.5"} → ${latest}
|
|
580102
580204
|
`);
|
|
580103
580205
|
writeToStdout(`
|
|
580104
580206
|
`);
|
|
@@ -580114,8 +580216,8 @@ async function update() {
|
|
|
580114
580216
|
writeToStdout(`Verboo Code is managed by apk.
|
|
580115
580217
|
`);
|
|
580116
580218
|
const latest = await getLatestVersion(channel2);
|
|
580117
|
-
if (latest && !gte("0.9.
|
|
580118
|
-
writeToStdout(`Update available: ${"0.9.
|
|
580219
|
+
if (latest && !gte("0.9.5", latest)) {
|
|
580220
|
+
writeToStdout(`Update available: ${"0.9.5"} → ${latest}
|
|
580119
580221
|
`);
|
|
580120
580222
|
writeToStdout(`
|
|
580121
580223
|
`);
|
|
@@ -580168,11 +580270,11 @@ async function update() {
|
|
|
580168
580270
|
`);
|
|
580169
580271
|
await gracefulShutdown(1);
|
|
580170
580272
|
}
|
|
580171
|
-
if (result.latestVersion === "0.9.
|
|
580172
|
-
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.9.
|
|
580273
|
+
if (result.latestVersion === "0.9.5") {
|
|
580274
|
+
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.9.5"})`) + `
|
|
580173
580275
|
`);
|
|
580174
580276
|
} else {
|
|
580175
|
-
writeToStdout(source_default.green(`Successfully updated from ${"0.9.
|
|
580277
|
+
writeToStdout(source_default.green(`Successfully updated from ${"0.9.5"} to version ${result.latestVersion}`) + `
|
|
580176
580278
|
`);
|
|
580177
580279
|
await regenerateCompletionCache();
|
|
580178
580280
|
}
|
|
@@ -580232,12 +580334,12 @@ async function update() {
|
|
|
580232
580334
|
`);
|
|
580233
580335
|
await gracefulShutdown(1);
|
|
580234
580336
|
}
|
|
580235
|
-
if (latestVersion === "0.9.
|
|
580236
|
-
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.9.
|
|
580337
|
+
if (latestVersion === "0.9.5") {
|
|
580338
|
+
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.9.5"})`) + `
|
|
580237
580339
|
`);
|
|
580238
580340
|
await gracefulShutdown(0);
|
|
580239
580341
|
}
|
|
580240
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.
|
|
580342
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.5"})
|
|
580241
580343
|
`);
|
|
580242
580344
|
writeToStdout(`Installing update...
|
|
580243
580345
|
`);
|
|
@@ -580282,7 +580384,7 @@ async function update() {
|
|
|
580282
580384
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
580283
580385
|
switch (status2) {
|
|
580284
580386
|
case "success":
|
|
580285
|
-
writeToStdout(source_default.green(`Successfully updated from ${"0.9.
|
|
580387
|
+
writeToStdout(source_default.green(`Successfully updated from ${"0.9.5"} to version ${latestVersion}`) + `
|
|
580286
580388
|
`);
|
|
580287
580389
|
await regenerateCompletionCache();
|
|
580288
580390
|
break;
|
|
@@ -580498,7 +580600,7 @@ function loadSettingsFromFlag(settingsFile) {
|
|
|
580498
580600
|
} else {
|
|
580499
580601
|
const {
|
|
580500
580602
|
resolvedPath: resolvedSettingsPath
|
|
580501
|
-
} = safeResolvePath(
|
|
580603
|
+
} = safeResolvePath(getFsImplementation2(), settingsFile);
|
|
580502
580604
|
try {
|
|
580503
580605
|
readFileSync16(resolvedSettingsPath, "utf8");
|
|
580504
580606
|
} catch (e2) {
|
|
@@ -581537,7 +581639,7 @@ ${customInstructions}` : customInstructions;
|
|
|
581537
581639
|
is_native_binary: isInBundledMode()
|
|
581538
581640
|
});
|
|
581539
581641
|
logMemoryDiagnostics("start", {
|
|
581540
|
-
version: "0.9.
|
|
581642
|
+
version: "0.9.5",
|
|
581541
581643
|
debug: debug2,
|
|
581542
581644
|
debugToStderr,
|
|
581543
581645
|
print: print ?? false,
|
|
@@ -582343,7 +582445,7 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
582343
582445
|
pendingHookMessages
|
|
582344
582446
|
}, renderAndRun);
|
|
582345
582447
|
}
|
|
582346
|
-
}).version(`0.9.
|
|
582448
|
+
}).version(`0.9.5 (${cliDesc})`, "-v, --version", "Output the version number");
|
|
582347
582449
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
582348
582450
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
582349
582451
|
if (canUserConfigureAdvisor()) {
|
|
@@ -582917,7 +583019,7 @@ if (false) {}
|
|
|
582917
583019
|
async function main2() {
|
|
582918
583020
|
const args = process.argv.slice(2);
|
|
582919
583021
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
582920
|
-
console.log(`${"0.9.
|
|
583022
|
+
console.log(`${"0.9.5"} (Verboo Code)`);
|
|
582921
583023
|
return;
|
|
582922
583024
|
}
|
|
582923
583025
|
if (!IS_VERBOO_CLI && args.includes("--provider")) {
|
|
@@ -583091,4 +583193,4 @@ async function main2() {
|
|
|
583091
583193
|
}
|
|
583092
583194
|
main2();
|
|
583093
583195
|
|
|
583094
|
-
//# debugId=
|
|
583196
|
+
//# debugId=67CCC9AFAF99681B64756E2164756E21
|