localclawd 1.7.4 → 1.7.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.
Files changed (2) hide show
  1. package/dist/cli.mjs +277 -254
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -87608,7 +87608,7 @@ var init_isEqual = __esm(() => {
87608
87608
 
87609
87609
  // src/utils/userAgent.ts
87610
87610
  function getClaudeCodeUserAgent() {
87611
- return `claude-code/${"1.7.4"}`;
87611
+ return `claude-code/${"1.7.5"}`;
87612
87612
  }
87613
87613
 
87614
87614
  // src/utils/workloadContext.ts
@@ -87630,7 +87630,7 @@ function getUserAgent() {
87630
87630
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
87631
87631
  const workload = getWorkload();
87632
87632
  const workloadSuffix = workload ? `, workload/${workload}` : "";
87633
- return `claude-cli/${"1.7.4"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.7.5"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87634
87634
  }
87635
87635
  function getMCPUserAgent() {
87636
87636
  const parts = [];
@@ -87644,7 +87644,7 @@ function getMCPUserAgent() {
87644
87644
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
87645
87645
  }
87646
87646
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
87647
- return `claude-code/${"1.7.4"}${suffix}`;
87647
+ return `claude-code/${"1.7.5"}${suffix}`;
87648
87648
  }
87649
87649
  function getWebFetchUserAgent() {
87650
87650
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -130840,7 +130840,7 @@ function getAttributionHeader(fingerprint) {
130840
130840
  if (!isAttributionHeaderEnabled()) {
130841
130841
  return "";
130842
130842
  }
130843
- const version = `${"1.7.4"}.${fingerprint}`;
130843
+ const version = `${"1.7.5"}.${fingerprint}`;
130844
130844
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
130845
130845
  const cch = "";
130846
130846
  const workload = getWorkload();
@@ -147029,7 +147029,7 @@ var init_metadata = __esm(() => {
147029
147029
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
147030
147030
  WHITESPACE_REGEX = /\s+/;
147031
147031
  getVersionBase = memoize_default(() => {
147032
- const match = "1.7.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.7.5".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147033
147033
  return match ? match[0] : undefined;
147034
147034
  });
147035
147035
  buildEnvContext = memoize_default(async () => {
@@ -147069,9 +147069,9 @@ var init_metadata = __esm(() => {
147069
147069
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
147070
147070
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
147071
147071
  isClaudeAiAuth: isClaudeAISubscriber(),
147072
- version: "1.7.4",
147072
+ version: "1.7.5",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T14:37:47.430Z",
147074
+ buildTime: "2026-05-07T14:41:21.784Z",
147075
147075
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
147076
147076
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
147077
147077
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -179647,7 +179647,7 @@ function getTelemetryAttributes() {
179647
179647
  attributes["session.id"] = sessionId;
179648
179648
  }
179649
179649
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
179650
- attributes["app.version"] = "1.7.4";
179650
+ attributes["app.version"] = "1.7.5";
179651
179651
  }
179652
179652
  const oauthAccount = getOauthAccountInfo();
179653
179653
  if (oauthAccount) {
@@ -242448,7 +242448,7 @@ function getInstallationEnv() {
242448
242448
  return;
242449
242449
  }
242450
242450
  function getClaudeCodeVersion() {
242451
- return "1.7.4";
242451
+ return "1.7.5";
242452
242452
  }
242453
242453
  async function getInstalledVSCodeExtensionVersion(command) {
242454
242454
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247722,7 +247722,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247722
247722
  const client4 = new Client({
247723
247723
  name: "localclawd",
247724
247724
  title: "localclawd",
247725
- version: "1.7.4",
247725
+ version: "1.7.5",
247726
247726
  description: "local-first AI coding tool",
247727
247727
  websiteUrl: PRODUCT_URL
247728
247728
  }, {
@@ -248064,7 +248064,7 @@ var init_client9 = __esm(() => {
248064
248064
  const client4 = new Client({
248065
248065
  name: "localclawd",
248066
248066
  title: "localclawd",
248067
- version: "1.7.4",
248067
+ version: "1.7.5",
248068
248068
  description: "local-first AI coding tool",
248069
248069
  websiteUrl: PRODUCT_URL
248070
248070
  }, {
@@ -262466,7 +262466,7 @@ function computeFingerprint(messageText, version) {
262466
262466
  }
262467
262467
  function computeFingerprintFromMessages(messages) {
262468
262468
  const firstMessageText = extractFirstMessageText(messages);
262469
- return computeFingerprint(firstMessageText, "1.7.4");
262469
+ return computeFingerprint(firstMessageText, "1.7.5");
262470
262470
  }
262471
262471
  var FINGERPRINT_SALT = "59cf53e54c78";
262472
262472
  var init_fingerprint = () => {};
@@ -262508,7 +262508,7 @@ async function sideQuery(opts) {
262508
262508
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262509
262509
  }
262510
262510
  const messageText = extractFirstUserMessageText(messages);
262511
- const fingerprint = computeFingerprint(messageText, "1.7.4");
262511
+ const fingerprint = computeFingerprint(messageText, "1.7.5");
262512
262512
  const attributionHeader = getAttributionHeader(fingerprint);
262513
262513
  const systemBlocks = [
262514
262514
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283256,7 +283256,7 @@ var init_user = __esm(() => {
283256
283256
  deviceId,
283257
283257
  sessionId: getSessionId(),
283258
283258
  email: getEmail(),
283259
- appVersion: "1.7.4",
283259
+ appVersion: "1.7.5",
283260
283260
  platform: getHostPlatformForAnalytics(),
283261
283261
  organizationUuid,
283262
283262
  accountUuid,
@@ -284321,7 +284321,7 @@ async function initializeBetaTracing(resource) {
284321
284321
  });
284322
284322
  logs.setGlobalLoggerProvider(loggerProvider);
284323
284323
  setLoggerProvider(loggerProvider);
284324
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.7.4");
284324
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.7.5");
284325
284325
  setEventLogger(eventLogger);
284326
284326
  process.on("beforeExit", async () => {
284327
284327
  await loggerProvider?.forceFlush();
@@ -284361,7 +284361,7 @@ async function initializeTelemetry() {
284361
284361
  const platform2 = getPlatform();
284362
284362
  const baseAttributes = {
284363
284363
  [ATTR_SERVICE_NAME4]: "claude-code",
284364
- [ATTR_SERVICE_VERSION4]: "1.7.4"
284364
+ [ATTR_SERVICE_VERSION4]: "1.7.5"
284365
284365
  };
284366
284366
  if (platform2 === "wsl") {
284367
284367
  const wslVersion = getWslVersion();
@@ -284406,7 +284406,7 @@ async function initializeTelemetry() {
284406
284406
  } catch {}
284407
284407
  };
284408
284408
  registerCleanup(shutdownTelemetry2);
284409
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.7.4");
284409
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.7.5");
284410
284410
  }
284411
284411
  const meterProvider = new MeterProvider4({
284412
284412
  resource,
@@ -284426,7 +284426,7 @@ async function initializeTelemetry() {
284426
284426
  });
284427
284427
  logs.setGlobalLoggerProvider(loggerProvider);
284428
284428
  setLoggerProvider(loggerProvider);
284429
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.7.4");
284429
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.7.5");
284430
284430
  setEventLogger(eventLogger);
284431
284431
  logForDebugging("[3P telemetry] Event logger set successfully");
284432
284432
  process.on("beforeExit", async () => {
@@ -284488,7 +284488,7 @@ Current timeout: ${timeoutMs}ms
284488
284488
  }
284489
284489
  };
284490
284490
  registerCleanup(shutdownTelemetry);
284491
- return meterProvider.getMeter("com.anthropic.claude_code", "1.7.4");
284491
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.7.5");
284492
284492
  }
284493
284493
  async function flushTelemetry() {
284494
284494
  const meterProvider = getMeterProvider();
@@ -285678,7 +285678,7 @@ function detectLinuxGlobPatternWarnings() {
285678
285678
  }
285679
285679
  async function getDoctorDiagnostic() {
285680
285680
  const installationType = await getCurrentInstallationType();
285681
- const version = typeof MACRO !== "undefined" ? "1.7.4" : "unknown";
285681
+ const version = typeof MACRO !== "undefined" ? "1.7.5" : "unknown";
285682
285682
  const installationPath = await getInstallationPath();
285683
285683
  const invokedBinary = getInvokedBinary();
285684
285684
  const multipleInstallations = await detectMultipleInstallations();
@@ -286619,8 +286619,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286619
286619
  const maxVersion = await getMaxVersion();
286620
286620
  if (maxVersion && gt(version, maxVersion)) {
286621
286621
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286622
- if (gte("1.7.4", maxVersion)) {
286623
- logForDebugging(`Native installer: current version ${"1.7.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
286622
+ if (gte("1.7.5", maxVersion)) {
286623
+ logForDebugging(`Native installer: current version ${"1.7.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
286624
286624
  logEvent("tengu_native_update_skipped_max_version", {
286625
286625
  latency_ms: Date.now() - startTime,
286626
286626
  max_version: maxVersion,
@@ -286631,7 +286631,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286631
286631
  version = maxVersion;
286632
286632
  }
286633
286633
  }
286634
- if (!forceReinstall && version === "1.7.4" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286634
+ if (!forceReinstall && version === "1.7.5" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286635
286635
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286636
286636
  logEvent("tengu_native_update_complete", {
286637
286637
  latency_ms: Date.now() - startTime,
@@ -323046,7 +323046,15 @@ var GENERATE_IMAGE_TOOL_NAME = "GenerateImage", DESCRIPTION13 = `Generate an ima
323046
323046
 
323047
323047
  Auto-detects ComfyUI at http://127.0.0.1:8188. Falls back to the backendUrl set in the project's .localclawd/image-pipeline/config.json when present.
323048
323048
 
323049
- Returns the path of the saved image file and the ComfyUI prompt ID.
323049
+ After generating, the image is returned visually in the tool result so you can review it.
323050
+
323051
+ REVIEW AND REPROMPT PROTOCOL:
323052
+ 1. After calling GenerateImage, examine the returned image carefully.
323053
+ 2. If the image does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails the user's intent — call GenerateImage again with an improved prompt.
323054
+ 3. Refine: add missing details, fix style keywords, adjust composition language. Do not simply repeat the same prompt.
323055
+ 4. You may iterate up to 3 times total. Stop as soon as a result is satisfactory.
323056
+ 5. Show the user the final saved path and a brief assessment of what changed between iterations.
323057
+
323050
323058
  Use this tool when the user asks you to generate, create, or render an image.`;
323051
323059
 
323052
323060
  // src/tools/GenerateImageTool/UI.tsx
@@ -323080,7 +323088,7 @@ var init_UI20 = __esm(() => {
323080
323088
  // src/tools/GenerateImageTool/GenerateImageTool.ts
323081
323089
  import { z as z62 } from "zod/v4";
323082
323090
  import { homedir as homedir23 } from "os";
323083
- import { mkdir as mkdir20, writeFile as writeFile20 } from "fs/promises";
323091
+ import { mkdir as mkdir20, readFile as readFile27, writeFile as writeFile20 } from "fs/promises";
323084
323092
  import { join as join80 } from "path";
323085
323093
  function slugify(text, maxLen = 40) {
323086
323094
  return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
@@ -323090,30 +323098,31 @@ function timestamp() {
323090
323098
  const pad = (n) => String(n).padStart(2, "0");
323091
323099
  return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}_${pad(d.getHours())}-${pad(d.getMinutes())}-${pad(d.getSeconds())}`;
323092
323100
  }
323093
- var inputSchema27, outputSchema23, GenerateImageTool;
323101
+ var inputSchema27, outputSchema23, imageDataCache, GenerateImageTool;
323094
323102
  var init_GenerateImageTool = __esm(() => {
323095
323103
  init_Tool();
323096
323104
  init_imagePipeline();
323097
323105
  init_cwd();
323098
323106
  init_UI20();
323099
323107
  inputSchema27 = lazySchema(() => z62.strictObject({
323100
- prompt: z62.string().describe("The positive text prompt describing the image to generate"),
323108
+ prompt: z62.string().describe("Positive text prompt describing the image to generate"),
323101
323109
  negative_prompt: z62.string().optional().describe("What to exclude from the image (optional)"),
323102
- width: z62.number().int().min(64).max(2048).optional().describe("Image width in pixels (default: 512)"),
323103
- height: z62.number().int().min(64).max(2048).optional().describe("Image height in pixels (default: 512)"),
323110
+ width: z62.number().int().min(64).max(2048).optional().describe("Width in pixels (default: 512)"),
323111
+ height: z62.number().int().min(64).max(2048).optional().describe("Height in pixels (default: 512)"),
323104
323112
  steps: z62.number().int().min(1).max(150).optional().describe("Sampling steps (default: 20)"),
323105
- cfg: z62.number().min(1).max(30).optional().describe("CFG scale / guidance strength (default: 7)"),
323106
- model: z62.string().optional().describe("Checkpoint model filename (default: from config or v1-5-pruned-emaonly.safetensors)"),
323107
- seed: z62.number().int().optional().describe("Random seed for reproducibility (default: random)")
323113
+ cfg: z62.number().min(1).max(30).optional().describe("CFG / guidance scale (default: 7)"),
323114
+ model: z62.string().optional().describe("Checkpoint filename (default: from config or v1-5-pruned-emaonly.safetensors)"),
323115
+ seed: z62.number().int().optional().describe("Seed for reproducibility (default: random)")
323108
323116
  }));
323109
323117
  outputSchema23 = lazySchema(() => z62.object({
323110
323118
  path: z62.string().describe("Absolute path of the saved image file"),
323111
323119
  filename: z62.string().describe("Filename of the saved image"),
323112
323120
  promptId: z62.string().describe("ComfyUI prompt ID"),
323113
- seed: z62.number().describe("Seed used for this generation"),
323121
+ seed: z62.number().describe("Seed used"),
323114
323122
  backend: z62.string().describe("Backend URL used"),
323115
323123
  error: z62.string().optional().describe("Error message if generation failed")
323116
323124
  }));
323125
+ imageDataCache = new WeakMap;
323117
323126
  GenerateImageTool = buildTool({
323118
323127
  name: GENERATE_IMAGE_TOOL_NAME,
323119
323128
  searchHint: "generate an image using ComfyUI",
@@ -323170,7 +323179,7 @@ var init_GenerateImageTool = __esm(() => {
323170
323179
  promptId: "",
323171
323180
  seed: 0,
323172
323181
  backend: configuredUrl,
323173
- error: `ComfyUI not reachable at ${DEFAULT_COMFYUI_URL}${configuredUrl !== DEFAULT_COMFYUI_URL ? ` or ${configuredUrl}` : ""}. Start ComfyUI or configure a backend with /image-pipeline config <url>.`
323182
+ error: `ComfyUI not reachable at ${DEFAULT_COMFYUI_URL}${configuredUrl !== DEFAULT_COMFYUI_URL ? ` or ${configuredUrl}` : ""}. Start ComfyUI or run /image-pipeline config <url>.`
323174
323183
  }
323175
323184
  };
323176
323185
  }
@@ -323214,14 +323223,7 @@ var init_GenerateImageTool = __esm(() => {
323214
323223
  queued = await queuePrompt(backendUrl, workflow);
323215
323224
  } catch (e) {
323216
323225
  return {
323217
- data: {
323218
- path: "",
323219
- filename: "",
323220
- promptId: "",
323221
- seed,
323222
- backend: backendUrl,
323223
- error: `Queue failed: ${String(e)}`
323224
- }
323226
+ data: { path: "", filename: "", promptId: "", seed, backend: backendUrl, error: `Queue failed: ${String(e)}` }
323225
323227
  };
323226
323228
  }
323227
323229
  if (abortController.signal.aborted) {
@@ -323244,45 +323246,42 @@ var init_GenerateImageTool = __esm(() => {
323244
323246
  const firstImage = comfyImages[0];
323245
323247
  if (!firstImage) {
323246
323248
  return {
323247
- data: {
323248
- path: "",
323249
- filename: "",
323250
- promptId: queued.prompt_id,
323251
- seed,
323252
- backend: backendUrl,
323253
- error: "Job completed but no output images found"
323254
- }
323249
+ data: { path: "", filename: "", promptId: queued.prompt_id, seed, backend: backendUrl, error: "Job completed but no output images found" }
323255
323250
  };
323256
323251
  }
323257
- const allImages = Object.values(result.outputs).flatMap((o) => o.images ?? []);
323258
- const imgMeta = allImages.find((img) => img.filename === firstImage);
323252
+ const allImageMeta = Object.values(result.outputs).flatMap((o) => o.images ?? []);
323253
+ const imgMeta = allImageMeta.find((img) => img.filename === firstImage);
323259
323254
  const subfolder = imgMeta?.subfolder ?? "";
323260
- let savedPath = "";
323261
- let savedFilename = "";
323255
+ let rawBytes = null;
323262
323256
  try {
323263
323257
  const params = new URLSearchParams({ filename: firstImage, subfolder, type: "output" });
323264
323258
  const res = await fetch(`${backendUrl}/view?${params}`);
323265
323259
  if (res.ok) {
323266
- const bytes = await res.arrayBuffer();
323267
- const outputDir = join80(homedir23(), "generatedimages");
323268
- await mkdir20(outputDir, { recursive: true });
323269
- const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
323270
- savedPath = join80(outputDir, outName);
323271
- await writeFile20(savedPath, Buffer.from(bytes));
323272
- savedFilename = outName;
323260
+ rawBytes = Buffer.from(await res.arrayBuffer());
323273
323261
  }
323274
- } catch {
323275
- savedFilename = firstImage;
323262
+ } catch {}
323263
+ const outputDir = join80(homedir23(), "generatedimages");
323264
+ await mkdir20(outputDir, { recursive: true });
323265
+ const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
323266
+ const savedPath = join80(outputDir, outName);
323267
+ if (rawBytes) {
323268
+ await writeFile20(savedPath, rawBytes);
323276
323269
  }
323277
- return {
323278
- data: {
323279
- path: savedPath || join80(homedir23(), "generatedimages", savedFilename),
323280
- filename: savedFilename || firstImage,
323281
- promptId: queued.prompt_id,
323282
- seed,
323283
- backend: backendUrl
323284
- }
323270
+ const data = {
323271
+ path: savedPath,
323272
+ filename: outName,
323273
+ promptId: queued.prompt_id,
323274
+ seed,
323275
+ backend: backendUrl
323285
323276
  };
323277
+ const imageBytes = rawBytes ?? await readFile27(savedPath).catch(() => null);
323278
+ if (imageBytes && imageBytes.length > 0) {
323279
+ imageDataCache.set(data, {
323280
+ base64: imageBytes.toString("base64"),
323281
+ mediaType: "image/png"
323282
+ });
323283
+ }
323284
+ return { data };
323286
323285
  },
323287
323286
  mapToolResultToToolResultBlockParam(output, toolUseID) {
323288
323287
  if (output.error) {
@@ -323293,13 +323292,37 @@ var init_GenerateImageTool = __esm(() => {
323293
323292
  content: output.error
323294
323293
  };
323295
323294
  }
323295
+ const imgData = imageDataCache.get(output);
323296
+ const textSummary = [
323297
+ `Image saved: ${output.path}`,
323298
+ `Seed: ${output.seed} · Prompt ID: ${output.promptId}`,
323299
+ imgData ? "Review the image above. If it does not match the description or has quality issues, call GenerateImage again with an improved prompt (up to 3 iterations total)." : `Image saved to ${output.path} — vision not available for inline review.`
323300
+ ].join(`
323301
+ `);
323302
+ if (imgData) {
323303
+ return {
323304
+ tool_use_id: toolUseID,
323305
+ type: "tool_result",
323306
+ content: [
323307
+ {
323308
+ type: "image",
323309
+ source: {
323310
+ type: "base64",
323311
+ data: imgData.base64,
323312
+ media_type: imgData.mediaType
323313
+ }
323314
+ },
323315
+ {
323316
+ type: "text",
323317
+ text: textSummary
323318
+ }
323319
+ ]
323320
+ };
323321
+ }
323296
323322
  return {
323297
323323
  tool_use_id: toolUseID,
323298
323324
  type: "tool_result",
323299
- content: `Image saved to: ${output.path}
323300
- Filename: ${output.filename}
323301
- Seed: ${output.seed}
323302
- Prompt ID: ${output.promptId}`
323325
+ content: textSummary
323303
323326
  };
323304
323327
  }
323305
323328
  });
@@ -326014,7 +326037,7 @@ var init_TeamDeleteTool = __esm(() => {
326014
326037
  });
326015
326038
 
326016
326039
  // src/utils/concurrentSessions.ts
326017
- import { chmod as chmod7, mkdir as mkdir21, readdir as readdir12, readFile as readFile27, unlink as unlink12, writeFile as writeFile21 } from "fs/promises";
326040
+ import { chmod as chmod7, mkdir as mkdir21, readdir as readdir12, readFile as readFile28, unlink as unlink12, writeFile as writeFile21 } from "fs/promises";
326018
326041
  import { join as join81 } from "path";
326019
326042
  function getSessionsDir() {
326020
326043
  return join81(getClaudeConfigHomeDir(), "sessions");
@@ -326059,7 +326082,7 @@ async function registerSession() {
326059
326082
  async function updatePidFile(patch) {
326060
326083
  const pidFile = join81(getSessionsDir(), `${process.pid}.json`);
326061
326084
  try {
326062
- const data = jsonParse(await readFile27(pidFile, "utf8"));
326085
+ const data = jsonParse(await readFile28(pidFile, "utf8"));
326063
326086
  await writeFile21(pidFile, jsonStringify({ ...data, ...patch }));
326064
326087
  } catch (e) {
326065
326088
  logForDebugging(`[concurrentSessions] updatePidFile failed: ${errorMessage(e)}`);
@@ -329406,7 +329429,7 @@ var init_config4 = __esm(() => {
329406
329429
 
329407
329430
  // src/utils/readFileInRange.ts
329408
329431
  import { createReadStream, fstat } from "fs";
329409
- import { stat as fsStat2, readFile as readFile28 } from "fs/promises";
329432
+ import { stat as fsStat2, readFile as readFile29 } from "fs/promises";
329410
329433
  async function readFileInRange(filePath, offset = 0, maxLines, maxBytes, signal, options) {
329411
329434
  signal?.throwIfAborted();
329412
329435
  const truncateOnByteLimit = options?.truncateOnByteLimit ?? false;
@@ -329418,7 +329441,7 @@ async function readFileInRange(filePath, offset = 0, maxLines, maxBytes, signal,
329418
329441
  if (!truncateOnByteLimit && maxBytes !== undefined && stats.size > maxBytes) {
329419
329442
  throw new FileTooLargeError(stats.size, maxBytes);
329420
329443
  }
329421
- const text = await readFile28(filePath, { encoding: "utf8", signal });
329444
+ const text = await readFile29(filePath, { encoding: "utf8", signal });
329422
329445
  return readFileInRangeFast(text, stats.mtimeMs, offset, maxLines, truncateOnByteLimit ? maxBytes : undefined);
329423
329446
  }
329424
329447
  return readFileInRangeStreaming(filePath, offset, maxLines, maxBytes, truncateOnByteLimit, signal);
@@ -331737,7 +331760,7 @@ function getAnthropicEnvMetadata() {
331737
331760
  function getBuildAgeMinutes() {
331738
331761
  if (false)
331739
331762
  ;
331740
- const buildTime = new Date("2026-05-07T14:37:47.430Z").getTime();
331763
+ const buildTime = new Date("2026-05-07T14:41:21.784Z").getTime();
331741
331764
  if (isNaN(buildTime))
331742
331765
  return;
331743
331766
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -340982,7 +341005,7 @@ var init_messages3 = __esm(() => {
340982
341005
 
340983
341006
  // src/services/vcr.ts
340984
341007
  import { createHash as createHash18, randomUUID as randomUUID21 } from "crypto";
340985
- import { mkdir as mkdir23, readFile as readFile29, writeFile as writeFile22 } from "fs/promises";
341008
+ import { mkdir as mkdir23, readFile as readFile30, writeFile as writeFile22 } from "fs/promises";
340986
341009
  import { dirname as dirname34, join as join85 } from "path";
340987
341010
  function shouldUseVCR() {
340988
341011
  if (false) {}
@@ -340998,7 +341021,7 @@ async function withFixture(input, fixtureName, f) {
340998
341021
  const hash = createHash18("sha1").update(jsonStringify(input)).digest("hex").slice(0, 12);
340999
341022
  const filename = join85(process.env.CLAUDE_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${fixtureName}-${hash}.json`);
341000
341023
  try {
341001
- const cached2 = jsonParse(await readFile29(filename, { encoding: "utf8" }));
341024
+ const cached2 = jsonParse(await readFile30(filename, { encoding: "utf8" }));
341002
341025
  return cached2;
341003
341026
  } catch (e) {
341004
341027
  const code = getErrnoCode(e);
@@ -341032,7 +341055,7 @@ async function withVCR(messages, f) {
341032
341055
  const dehydratedInput = mapMessages(messagesForAPI.map((_2) => _2.message.content), dehydrateValue);
341033
341056
  const filename = join85(process.env.CLAUDE_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${dehydratedInput.map((_2) => createHash18("sha1").update(jsonStringify(_2)).digest("hex").slice(0, 6)).join("-")}.json`);
341034
341057
  try {
341035
- const cached2 = jsonParse(await readFile29(filename, { encoding: "utf8" }));
341058
+ const cached2 = jsonParse(await readFile30(filename, { encoding: "utf8" }));
341036
341059
  cached2.output.forEach(addCachedCostToTotalSessionCost);
341037
341060
  return cached2.output.map((message, index) => mapMessage(message, hydrateValue, index, randomUUID21()));
341038
341061
  } catch (e) {
@@ -341496,7 +341519,7 @@ var init_tokenEstimation = __esm(() => {
341496
341519
 
341497
341520
  // src/utils/pdf.ts
341498
341521
  import { randomUUID as randomUUID22 } from "crypto";
341499
- import { mkdir as mkdir24, readdir as readdir14, readFile as readFile30 } from "fs/promises";
341522
+ import { mkdir as mkdir24, readdir as readdir14, readFile as readFile31 } from "fs/promises";
341500
341523
  import { join as join86 } from "path";
341501
341524
  async function readPDF(filePath) {
341502
341525
  try {
@@ -341518,7 +341541,7 @@ async function readPDF(filePath) {
341518
341541
  }
341519
341542
  };
341520
341543
  }
341521
- const fileBuffer = await readFile30(filePath);
341544
+ const fileBuffer = await readFile31(filePath);
341522
341545
  const header = fileBuffer.subarray(0, 5).toString("ascii");
341523
341546
  if (!header.startsWith("%PDF-")) {
341524
341547
  return {
@@ -343235,14 +343258,14 @@ __export(exports_embedding, {
343235
343258
  embedSimilarity: () => embedSimilarity,
343236
343259
  cosine: () => cosine
343237
343260
  });
343238
- import { mkdir as mkdir25, readFile as readFile31, writeFile as writeFile23 } from "fs/promises";
343261
+ import { mkdir as mkdir25, readFile as readFile32, writeFile as writeFile23 } from "fs/promises";
343239
343262
  import { createHash as createHash19 } from "crypto";
343240
343263
  import { join as join88 } from "path";
343241
343264
  async function loadCache2() {
343242
343265
  if (_cache)
343243
343266
  return _cache;
343244
343267
  try {
343245
- const raw = await readFile31(CACHE_PATH, "utf-8");
343268
+ const raw = await readFile32(CACHE_PATH, "utf-8");
343246
343269
  const parsed = JSON.parse(raw);
343247
343270
  if (parsed.version === 1) {
343248
343271
  _cache = parsed;
@@ -343411,13 +343434,13 @@ var init_e8Lattice = __esm(() => {
343411
343434
  });
343412
343435
 
343413
343436
  // src/services/memory/e8RegionIndex.ts
343414
- import { mkdir as mkdir26, readFile as readFile32, writeFile as writeFile24 } from "fs/promises";
343437
+ import { mkdir as mkdir26, readFile as readFile33, writeFile as writeFile24 } from "fs/promises";
343415
343438
  import { join as join89 } from "path";
343416
343439
  async function load2() {
343417
343440
  if (_cache2)
343418
343441
  return _cache2;
343419
343442
  try {
343420
- const raw = await readFile32(INDEX_PATH, "utf-8");
343443
+ const raw = await readFile33(INDEX_PATH, "utf-8");
343421
343444
  const parsed = JSON.parse(raw);
343422
343445
  if (parsed.version === 1) {
343423
343446
  _cache2 = parsed;
@@ -343469,11 +343492,11 @@ __export(exports_memoryPruner, {
343469
343492
  notifyMemoryAdded: () => notifyMemoryAdded,
343470
343493
  getPrunerState: () => getPrunerState
343471
343494
  });
343472
- import { mkdir as mkdir27, readFile as readFile33, unlink as unlink13, writeFile as writeFile25 } from "fs/promises";
343495
+ import { mkdir as mkdir27, readFile as readFile34, unlink as unlink13, writeFile as writeFile25 } from "fs/promises";
343473
343496
  import { join as join90 } from "path";
343474
343497
  async function loadState() {
343475
343498
  try {
343476
- const raw = await readFile33(STATE_PATH, "utf-8");
343499
+ const raw = await readFile34(STATE_PATH, "utf-8");
343477
343500
  const parsed = JSON.parse(raw);
343478
343501
  if (parsed.version === 1)
343479
343502
  return parsed;
@@ -343569,7 +343592,7 @@ async function removeFromEffectivenessStore(ids) {
343569
343592
  const path11 = join90(getClaudeConfigHomeDir(), "memory-effectiveness.json");
343570
343593
  let raw;
343571
343594
  try {
343572
- raw = await readFile33(path11, "utf-8");
343595
+ raw = await readFile34(path11, "utf-8");
343573
343596
  } catch {
343574
343597
  return;
343575
343598
  }
@@ -343620,13 +343643,13 @@ __export(exports_effectiveness, {
343620
343643
  getEffectiveness: () => getEffectiveness,
343621
343644
  discardPending: () => discardPending
343622
343645
  });
343623
- import { mkdir as mkdir28, readFile as readFile34, writeFile as writeFile26 } from "fs/promises";
343646
+ import { mkdir as mkdir28, readFile as readFile35, writeFile as writeFile26 } from "fs/promises";
343624
343647
  import { join as join91 } from "path";
343625
343648
  async function load3() {
343626
343649
  if (_cache3)
343627
343650
  return _cache3;
343628
343651
  try {
343629
- const raw = await readFile34(EFFECTIVENESS_PATH, "utf-8");
343652
+ const raw = await readFile35(EFFECTIVENESS_PATH, "utf-8");
343630
343653
  const parsed = JSON.parse(raw);
343631
343654
  if (parsed.version === 1) {
343632
343655
  _cache3 = parsed;
@@ -345945,7 +345968,7 @@ import {
345945
345968
  chmod as chmod8,
345946
345969
  lstat as lstat5,
345947
345970
  readdir as readdir18,
345948
- readFile as readFile35,
345971
+ readFile as readFile36,
345949
345972
  rename as rename3,
345950
345973
  rm as rm5,
345951
345974
  stat as stat32,
@@ -346090,7 +346113,7 @@ async function collectFilesForZip(baseDir, relativePath, files, visited) {
346090
346113
  await collectFilesForZip(baseDir, relPath, files, visited);
346091
346114
  } else if (fileStat.isFile()) {
346092
346115
  try {
346093
- const content = await readFile35(fullPath);
346116
+ const content = await readFile36(fullPath);
346094
346117
  files[relPath] = [
346095
346118
  new Uint8Array(content),
346096
346119
  { os: 3, attrs: (fileStat.mode & 65535) << 16 }
@@ -346601,7 +346624,7 @@ var init_marketplaceHelpers = __esm(() => {
346601
346624
  });
346602
346625
 
346603
346626
  // src/utils/plugins/officialMarketplaceGcs.ts
346604
- import { chmod as chmod9, mkdir as mkdir29, readFile as readFile36, rename as rename4, rm as rm7, writeFile as writeFile29 } from "fs/promises";
346627
+ import { chmod as chmod9, mkdir as mkdir29, readFile as readFile37, rename as rename4, rm as rm7, writeFile as writeFile29 } from "fs/promises";
346605
346628
  import { dirname as dirname38, join as join95, resolve as resolve30, sep as sep21 } from "path";
346606
346629
  async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCacheDir) {
346607
346630
  const cacheDir = resolve30(marketplacesCacheDir);
@@ -346626,7 +346649,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
346626
346649
  throw new Error("latest pointer returned empty body");
346627
346650
  }
346628
346651
  const sentinelPath = join95(installLocation, ".gcs-sha");
346629
- const currentSha = await readFile36(sentinelPath, "utf8").then((s) => s.trim(), () => null);
346652
+ const currentSha = await readFile37(sentinelPath, "utf8").then((s) => s.trim(), () => null);
346630
346653
  if (currentSha === sha) {
346631
346654
  outcome = "noop";
346632
346655
  return sha;
@@ -348727,7 +348750,7 @@ var init_pluginInstallationHelpers = __esm(() => {
348727
348750
  import {
348728
348751
  copyFile as copyFile7,
348729
348752
  readdir as readdir20,
348730
- readFile as readFile37,
348753
+ readFile as readFile38,
348731
348754
  readlink as readlink2,
348732
348755
  realpath as realpath11,
348733
348756
  rename as rename6,
@@ -349127,7 +349150,7 @@ async function cachePlugin(source, options) {
349127
349150
  let manifest;
349128
349151
  if (await pathExists(manifestPath)) {
349129
349152
  try {
349130
- const content = await readFile37(manifestPath, { encoding: "utf-8" });
349153
+ const content = await readFile38(manifestPath, { encoding: "utf-8" });
349131
349154
  const parsed = jsonParse(content);
349132
349155
  const result = PluginManifestSchema().safeParse(parsed);
349133
349156
  if (result.success) {
@@ -349151,7 +349174,7 @@ async function cachePlugin(source, options) {
349151
349174
  }
349152
349175
  } else if (await pathExists(legacyManifestPath)) {
349153
349176
  try {
349154
- const content = await readFile37(legacyManifestPath, {
349177
+ const content = await readFile38(legacyManifestPath, {
349155
349178
  encoding: "utf-8"
349156
349179
  });
349157
349180
  const parsed = jsonParse(content);
@@ -349201,7 +349224,7 @@ async function loadPluginManifest(manifestPath, pluginName, source) {
349201
349224
  };
349202
349225
  }
349203
349226
  try {
349204
- const content = await readFile37(manifestPath, { encoding: "utf-8" });
349227
+ const content = await readFile38(manifestPath, { encoding: "utf-8" });
349205
349228
  const parsedJson = jsonParse(content);
349206
349229
  const result = PluginManifestSchema().safeParse(parsedJson);
349207
349230
  if (result.success) {
@@ -349227,7 +349250,7 @@ async function loadPluginHooks2(hooksConfigPath, pluginName) {
349227
349250
  if (!await pathExists(hooksConfigPath)) {
349228
349251
  throw new Error(`Hooks file not found at ${hooksConfigPath} for plugin ${pluginName}. If the manifest declares hooks, the file must exist.`);
349229
349252
  }
349230
- const content = await readFile37(hooksConfigPath, { encoding: "utf-8" });
349253
+ const content = await readFile38(hooksConfigPath, { encoding: "utf-8" });
349231
349254
  const rawHooksConfig = jsonParse(content);
349232
349255
  const validatedPluginHooks = PluginHooksSchema().parse(rawHooksConfig);
349233
349256
  return validatedPluginHooks.hooks;
@@ -349530,7 +349553,7 @@ function parsePluginSettings(raw) {
349530
349553
  async function loadPluginSettings(pluginPath, manifest) {
349531
349554
  const settingsJsonPath = join99(pluginPath, "settings.json");
349532
349555
  try {
349533
- const content = await readFile37(settingsJsonPath, { encoding: "utf-8" });
349556
+ const content = await readFile38(settingsJsonPath, { encoding: "utf-8" });
349534
349557
  const parsed = jsonParse(content);
349535
349558
  if (isRecord(parsed)) {
349536
349559
  const filtered = parsePluginSettings(parsed);
@@ -355996,7 +356019,7 @@ __export(exports_terminalSetup, {
355996
356019
  call: () => call4
355997
356020
  });
355998
356021
  import { randomBytes as randomBytes15 } from "crypto";
355999
- import { copyFile as copyFile8, mkdir as mkdir30, readFile as readFile38, writeFile as writeFile31 } from "fs/promises";
356022
+ import { copyFile as copyFile8, mkdir as mkdir30, readFile as readFile39, writeFile as writeFile31 } from "fs/promises";
356000
356023
  import { homedir as homedir26, platform as platform2 } from "os";
356001
356024
  import { dirname as dirname44, join as join103 } from "path";
356002
356025
  import { pathToFileURL as pathToFileURL7 } from "url";
@@ -356143,7 +356166,7 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme) {
356143
356166
  let keybindings = [];
356144
356167
  let fileExists = false;
356145
356168
  try {
356146
- content = await readFile38(keybindingsPath, {
356169
+ content = await readFile39(keybindingsPath, {
356147
356170
  encoding: "utf-8"
356148
356171
  });
356149
356172
  fileExists = true;
@@ -356290,7 +356313,7 @@ chars = "\\u001B\\r"`;
356290
356313
  let configExists = false;
356291
356314
  for (const path11 of configPaths) {
356292
356315
  try {
356293
- configContent = await readFile38(path11, {
356316
+ configContent = await readFile39(path11, {
356294
356317
  encoding: "utf-8"
356295
356318
  });
356296
356319
  configPath = path11;
@@ -356352,7 +356375,7 @@ async function installBindingsForZed(theme) {
356352
356375
  let keymapContent = "[]";
356353
356376
  let fileExists = false;
356354
356377
  try {
356355
- keymapContent = await readFile38(keymapPath, {
356378
+ keymapContent = await readFile39(keymapPath, {
356356
356379
  encoding: "utf-8"
356357
356380
  });
356358
356381
  fileExists = true;
@@ -356425,7 +356448,7 @@ var init_terminalSetup = __esm(() => {
356425
356448
 
356426
356449
  // src/utils/pasteStore.ts
356427
356450
  import { createHash as createHash22 } from "crypto";
356428
- import { mkdir as mkdir31, readdir as readdir21, readFile as readFile39, stat as stat36, unlink as unlink15, writeFile as writeFile32 } from "fs/promises";
356451
+ import { mkdir as mkdir31, readdir as readdir21, readFile as readFile40, stat as stat36, unlink as unlink15, writeFile as writeFile32 } from "fs/promises";
356429
356452
  import { join as join104 } from "path";
356430
356453
  function getPasteStoreDir() {
356431
356454
  return join104(getClaudeConfigHomeDir(), PASTE_STORE_DIR);
@@ -356450,7 +356473,7 @@ async function storePastedText(hash, content) {
356450
356473
  async function retrievePastedText(hash) {
356451
356474
  try {
356452
356475
  const pastePath = getPastePath(hash);
356453
- return await readFile39(pastePath, { encoding: "utf8" });
356476
+ return await readFile40(pastePath, { encoding: "utf8" });
356454
356477
  } catch (error5) {
356455
356478
  if (!isENOENT(error5)) {
356456
356479
  logForDebugging(`Failed to retrieve paste ${hash}: ${error5}`);
@@ -360470,7 +360493,7 @@ var init_issue = __esm(() => {
360470
360493
  });
360471
360494
 
360472
360495
  // src/components/Feedback.tsx
360473
- import { readFile as readFile40, stat as stat37 } from "fs/promises";
360496
+ import { readFile as readFile41, stat as stat37 } from "fs/promises";
360474
360497
  function redactSensitiveInfo(text) {
360475
360498
  let redacted = text;
360476
360499
  redacted = redacted.replace(/"(sk-ant[^\s"']{24,})"/g, '"[REDACTED_API_KEY]"');
@@ -360509,7 +360532,7 @@ async function loadRawTranscriptJsonl() {
360509
360532
  });
360510
360533
  return null;
360511
360534
  }
360512
- return await readFile40(transcriptPath, "utf-8");
360535
+ return await readFile41(transcriptPath, "utf-8");
360513
360536
  } catch {
360514
360537
  return null;
360515
360538
  }
@@ -360567,7 +360590,7 @@ function Feedback({
360567
360590
  platform: env3.platform,
360568
360591
  gitRepo: envInfo.isGit,
360569
360592
  terminal: env3.terminal,
360570
- version: "1.7.4",
360593
+ version: "1.7.5",
360571
360594
  transcript: normalizeMessagesForAPI(messages),
360572
360595
  errors: sanitizedErrors,
360573
360596
  lastApiRequest: getLastAPIRequest(),
@@ -360759,7 +360782,7 @@ function Feedback({
360759
360782
  ", ",
360760
360783
  env3.terminal,
360761
360784
  ", v",
360762
- "1.7.4"
360785
+ "1.7.5"
360763
360786
  ]
360764
360787
  }, undefined, true, undefined, this)
360765
360788
  ]
@@ -360865,7 +360888,7 @@ ${sanitizedDescription}
360865
360888
  ` + `**Environment Info**
360866
360889
  ` + `- Platform: ${env3.platform}
360867
360890
  ` + `- Terminal: ${env3.terminal}
360868
- ` + `- Version: ${"1.7.4"}
360891
+ ` + `- Version: ${"1.7.5"}
360869
360892
  ` + `- Feedback ID: ${feedbackId}
360870
360893
  ` + `
360871
360894
  **Errors**
@@ -363493,7 +363516,7 @@ function buildPrimarySection() {
363493
363516
  }, undefined, false, undefined, this);
363494
363517
  return [{
363495
363518
  label: "Version",
363496
- value: "1.7.4"
363519
+ value: "1.7.5"
363497
363520
  }, {
363498
363521
  label: "Session name",
363499
363522
  value: nameValue
@@ -364962,11 +364985,11 @@ async function fetchAvailableModels(baseUrl, provider, apiKey, signal) {
364962
364985
  var MODEL_SCAN_TIMEOUT_MS = 5000;
364963
364986
 
364964
364987
  // src/utils/model/endpointHistory.ts
364965
- import { mkdir as mkdir33, readFile as readFile41, writeFile as writeFile35 } from "fs/promises";
364988
+ import { mkdir as mkdir33, readFile as readFile42, writeFile as writeFile35 } from "fs/promises";
364966
364989
  import { join as join110 } from "path";
364967
364990
  async function loadEndpointHistory() {
364968
364991
  try {
364969
- const raw = await readFile41(HISTORY_PATH, "utf-8");
364992
+ const raw = await readFile42(HISTORY_PATH, "utf-8");
364970
364993
  const parsed = JSON.parse(raw);
364971
364994
  if (parsed.version !== 1)
364972
364995
  return [];
@@ -368174,7 +368197,7 @@ function Config({
368174
368197
  }
368175
368198
  }, undefined, false, undefined, this)
368176
368199
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368177
- currentVersion: "1.7.4",
368200
+ currentVersion: "1.7.5",
368178
368201
  onChoice: (choice) => {
368179
368202
  setShowSubmenu(null);
368180
368203
  setTabsHidden(false);
@@ -368186,7 +368209,7 @@ function Config({
368186
368209
  autoUpdatesChannel: "stable"
368187
368210
  };
368188
368211
  if (choice === "stay") {
368189
- newSettings.minimumVersion = "1.7.4";
368212
+ newSettings.minimumVersion = "1.7.5";
368190
368213
  }
368191
368214
  updateSettingsForSource("userSettings", newSettings);
368192
368215
  setSettingsData((prev_27) => ({
@@ -375088,7 +375111,7 @@ function createEmptyState() {
375088
375111
  }
375089
375112
 
375090
375113
  // src/services/director/directorMemoryOps.ts
375091
- import { mkdir as mkdir35, readdir as readdir23, readFile as readFile43, stat as stat38, writeFile as writeFile37 } from "fs/promises";
375114
+ import { mkdir as mkdir35, readdir as readdir23, readFile as readFile44, stat as stat38, writeFile as writeFile37 } from "fs/promises";
375092
375115
  import { basename as basename34, join as join114, resolve as resolve36 } from "path";
375093
375116
  function setDirectorProjectRoot(projectPath) {
375094
375117
  _projectStateDir = join114(projectPath, ".localclawd");
@@ -375100,7 +375123,7 @@ function getStatePath() {
375100
375123
  }
375101
375124
  async function loadDirectorState() {
375102
375125
  try {
375103
- const raw = await readFile43(getStatePath(), "utf-8");
375126
+ const raw = await readFile44(getStatePath(), "utf-8");
375104
375127
  const parsed = JSON.parse(raw);
375105
375128
  if (parsed.version !== 1)
375106
375129
  return createEmptyState();
@@ -375120,7 +375143,7 @@ function slugify3(path12) {
375120
375143
  async function detectGitRemote(projectPath) {
375121
375144
  try {
375122
375145
  const configPath = join114(projectPath, ".git", "config");
375123
- const config2 = await readFile43(configPath, "utf-8");
375146
+ const config2 = await readFile44(configPath, "utf-8");
375124
375147
  const match = config2.match(/\[remote "origin"\][^[]*url\s*=\s*(.+)/m);
375125
375148
  return match?.[1]?.trim();
375126
375149
  } catch {
@@ -375129,12 +375152,12 @@ async function detectGitRemote(projectPath) {
375129
375152
  }
375130
375153
  async function detectDescription(projectPath) {
375131
375154
  try {
375132
- const pkg = JSON.parse(await readFile43(join114(projectPath, "package.json"), "utf-8"));
375155
+ const pkg = JSON.parse(await readFile44(join114(projectPath, "package.json"), "utf-8"));
375133
375156
  if (pkg.description)
375134
375157
  return pkg.description;
375135
375158
  } catch {}
375136
375159
  try {
375137
- const readme = await readFile43(join114(projectPath, "README.md"), "utf-8");
375160
+ const readme = await readFile44(join114(projectPath, "README.md"), "utf-8");
375138
375161
  const firstLine = readme.split(`
375139
375162
  `).find((l) => l.trim() && !l.startsWith("#"));
375140
375163
  if (firstLine)
@@ -375190,7 +375213,7 @@ async function indexProjectFiles(state, projectId, projectPath) {
375190
375213
  try {
375191
375214
  const filePath = join114(absPath, name);
375192
375215
  await stat38(filePath);
375193
- const content = await readFile43(filePath, "utf-8");
375216
+ const content = await readFile44(filePath, "utf-8");
375194
375217
  const firstLine = content.split(`
375195
375218
  `).find((l) => l.trim())?.trim() ?? name;
375196
375219
  entries.push({
@@ -375629,7 +375652,7 @@ async function initSlack() {
375629
375652
  let userId = process.env.SLACK_USER_ID;
375630
375653
  if (!token || !channelId) {
375631
375654
  try {
375632
- const { readFile: readFile44 } = await import("fs/promises");
375655
+ const { readFile: readFile45 } = await import("fs/promises");
375633
375656
  const { join: join115 } = await import("path");
375634
375657
  const { homedir: homedir28 } = await import("os");
375635
375658
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
@@ -375641,7 +375664,7 @@ async function initSlack() {
375641
375664
  } catch {
375642
375665
  configPath = legacyPath;
375643
375666
  }
375644
- const raw = await readFile44(configPath, "utf-8");
375667
+ const raw = await readFile45(configPath, "utf-8");
375645
375668
  const config2 = JSON.parse(raw);
375646
375669
  if (config2.token && config2.channelId) {
375647
375670
  token = config2.token;
@@ -375949,7 +375972,7 @@ async function initDiscord() {
375949
375972
  let userId = process.env.DISCORD_USER_ID;
375950
375973
  if (!token || !channelId) {
375951
375974
  try {
375952
- const { readFile: readFile44 } = await import("fs/promises");
375975
+ const { readFile: readFile45 } = await import("fs/promises");
375953
375976
  const { join: join115 } = await import("path");
375954
375977
  const { homedir: homedir28 } = await import("os");
375955
375978
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
@@ -375961,7 +375984,7 @@ async function initDiscord() {
375961
375984
  } catch {
375962
375985
  configPath = legacyPath;
375963
375986
  }
375964
- const raw = await readFile44(configPath, "utf-8");
375987
+ const raw = await readFile45(configPath, "utf-8");
375965
375988
  const config2 = JSON.parse(raw);
375966
375989
  if (config2.token && config2.channelId) {
375967
375990
  token = config2.token;
@@ -376347,11 +376370,11 @@ __export(exports_scheduler, {
376347
376370
  getSchedules: () => getSchedules,
376348
376371
  addSchedule: () => addSchedule
376349
376372
  });
376350
- import { mkdir as mkdir36, readFile as readFile44, writeFile as writeFile38 } from "fs/promises";
376373
+ import { mkdir as mkdir36, readFile as readFile45, writeFile as writeFile38 } from "fs/promises";
376351
376374
  import { join as join115 } from "path";
376352
376375
  async function loadSchedules() {
376353
376376
  try {
376354
- const raw = await readFile44(SCHEDULES_PATH, "utf-8");
376377
+ const raw = await readFile45(SCHEDULES_PATH, "utf-8");
376355
376378
  const parsed = JSON.parse(raw);
376356
376379
  if (parsed.version !== 1)
376357
376380
  return { version: 1, schedules: [] };
@@ -376697,7 +376720,7 @@ async function initTelegram() {
376697
376720
  let chatIdStr = process.env.TELEGRAM_CHAT_ID;
376698
376721
  if (!token || !chatIdStr) {
376699
376722
  try {
376700
- const { readFile: readFile45, stat: stat39 } = await import("fs/promises");
376723
+ const { readFile: readFile46, stat: stat39 } = await import("fs/promises");
376701
376724
  const { join: join116 } = await import("path");
376702
376725
  const { homedir: homedir28 } = await import("os");
376703
376726
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
@@ -376720,7 +376743,7 @@ async function initTelegram() {
376720
376743
  }
376721
376744
  if (!configPath)
376722
376745
  throw new Error("no telegram config found");
376723
- const raw = await readFile45(configPath, "utf-8");
376746
+ const raw = await readFile46(configPath, "utf-8");
376724
376747
  const config2 = JSON.parse(raw);
376725
376748
  logForDebugging(`[telegram] using config from ${configPath}`);
376726
376749
  if (config2.token && config2.chatId) {
@@ -379172,7 +379195,7 @@ var init_schedule2 = __esm(() => {
379172
379195
  });
379173
379196
 
379174
379197
  // src/services/sessionSearch/sessionSummarize.ts
379175
- import { readdir as readdir24, readFile as readFile45, writeFile as writeFile42, mkdir as mkdir40, stat as stat39 } from "fs/promises";
379198
+ import { readdir as readdir24, readFile as readFile46, writeFile as writeFile42, mkdir as mkdir40, stat as stat39 } from "fs/promises";
379176
379199
  import { join as join119 } from "path";
379177
379200
  import { homedir as homedir28 } from "os";
379178
379201
  function extractText(obj) {
@@ -379306,7 +379329,7 @@ function parseSummaryResponse(text) {
379306
379329
  return { summary, tags };
379307
379330
  }
379308
379331
  async function summarizeSession(sessionId, slug, filePath, mtime) {
379309
- const content = await readFile45(filePath, "utf-8").catch(() => "");
379332
+ const content = await readFile46(filePath, "utf-8").catch(() => "");
379310
379333
  if (!content)
379311
379334
  return null;
379312
379335
  const { transcript, messageCount, firstUser } = buildTranscript(content);
@@ -379369,7 +379392,7 @@ async function loadAllSummaries() {
379369
379392
  if (!f.endsWith(".json"))
379370
379393
  continue;
379371
379394
  try {
379372
- const raw = await readFile45(join119(SUMMARIES_DIR2, f), "utf-8");
379395
+ const raw = await readFile46(join119(SUMMARIES_DIR2, f), "utf-8");
379373
379396
  summaries.push(JSON.parse(raw));
379374
379397
  } catch {}
379375
379398
  }
@@ -379391,7 +379414,7 @@ var init_sessionSummarize = __esm(() => {
379391
379414
  });
379392
379415
 
379393
379416
  // src/services/sessionSearch/fts5Index.ts
379394
- import { readdir as readdir25, readFile as readFile46, stat as stat40 } from "fs/promises";
379417
+ import { readdir as readdir25, readFile as readFile47, stat as stat40 } from "fs/promises";
379395
379418
  import { join as join120 } from "path";
379396
379419
  async function tryOpenDatabase() {
379397
379420
  if (_db)
@@ -379469,7 +379492,7 @@ async function rebuildIndex() {
379469
379492
  continue;
379470
379493
  let raw;
379471
379494
  try {
379472
- raw = await readFile46(filePath, "utf-8");
379495
+ raw = await readFile47(filePath, "utf-8");
379473
379496
  } catch {
379474
379497
  continue;
379475
379498
  }
@@ -379533,7 +379556,7 @@ var init_fts5Index = __esm(() => {
379533
379556
  });
379534
379557
 
379535
379558
  // src/services/sessionSearch/sessionSearch.ts
379536
- import { readdir as readdir26, readFile as readFile47, stat as stat41 } from "fs/promises";
379559
+ import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
379537
379560
  import { join as join121 } from "path";
379538
379561
  import { homedir as homedir29 } from "os";
379539
379562
  function tokenize6(text) {
@@ -379595,7 +379618,7 @@ async function listSessionFiles() {
379595
379618
  async function scoreSession(terms, filePath) {
379596
379619
  let content;
379597
379620
  try {
379598
- content = await readFile47(filePath, "utf-8");
379621
+ content = await readFile48(filePath, "utf-8");
379599
379622
  } catch {
379600
379623
  return { score: 0, messageCount: 0, snippet: "", preview: "" };
379601
379624
  }
@@ -379960,7 +379983,7 @@ var init_summarize_sessions2 = __esm(() => {
379960
379983
  });
379961
379984
 
379962
379985
  // src/services/sessionSearch/trajectoryCompress.ts
379963
- import { readFile as readFile48, writeFile as writeFile43, readdir as readdir27, mkdir as mkdir41, stat as stat42 } from "fs/promises";
379986
+ import { readFile as readFile49, writeFile as writeFile43, readdir as readdir27, mkdir as mkdir41, stat as stat42 } from "fs/promises";
379964
379987
  import { join as join122 } from "path";
379965
379988
  import { homedir as homedir30 } from "os";
379966
379989
  function flattenText(obj) {
@@ -380047,7 +380070,7 @@ async function compressSession(sessionId, projectSlug) {
380047
380070
  for (const projectsDir of PROJECTS_DIRS3) {
380048
380071
  const candidate = join122(projectsDir, projectSlug, `${sessionId}.jsonl`);
380049
380072
  try {
380050
- const text = await readFile48(candidate, "utf-8");
380073
+ const text = await readFile49(candidate, "utf-8");
380051
380074
  const s = await stat42(candidate);
380052
380075
  sourcePath = candidate;
380053
380076
  source = text;
@@ -380237,7 +380260,7 @@ var init_compress_sessions2 = __esm(() => {
380237
380260
  });
380238
380261
 
380239
380262
  // src/services/skills/skillDistill.ts
380240
- import { readFile as readFile49, readdir as readdir28, stat as stat43 } from "fs/promises";
380263
+ import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
380241
380264
  import { join as join123 } from "path";
380242
380265
  import { homedir as homedir31 } from "os";
380243
380266
  function extractText3(obj) {
@@ -380289,7 +380312,7 @@ async function findMostRecentSession() {
380289
380312
  return best?.path ?? null;
380290
380313
  }
380291
380314
  async function buildTranscript2(sessionPath) {
380292
- const content = await readFile49(sessionPath, "utf-8");
380315
+ const content = await readFile50(sessionPath, "utf-8");
380293
380316
  const lines = content.split(`
380294
380317
  `).filter(Boolean);
380295
380318
  const parts = [];
@@ -381636,7 +381659,7 @@ var init_daytona_run2 = __esm(() => {
381636
381659
  });
381637
381660
 
381638
381661
  // src/services/skills/skillPortable.ts
381639
- import { readdir as readdir29, readFile as readFile50, writeFile as writeFile44, mkdir as mkdir42, stat as stat44 } from "fs/promises";
381662
+ import { readdir as readdir29, readFile as readFile51, writeFile as writeFile44, mkdir as mkdir42, stat as stat44 } from "fs/promises";
381640
381663
  import { join as join124, basename as basename35, extname as extname13, resolve as resolve37 } from "path";
381641
381664
  function parseFrontmatter2(raw) {
381642
381665
  const m2 = raw.match(/^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/);
@@ -381703,12 +381726,12 @@ async function listSkills() {
381703
381726
  async function readSkillFile(name) {
381704
381727
  const flatPath = join124(USER_SKILLS_DIR, `${name}.md`);
381705
381728
  try {
381706
- const raw = await readFile50(flatPath, "utf-8");
381729
+ const raw = await readFile51(flatPath, "utf-8");
381707
381730
  return { raw, path: flatPath };
381708
381731
  } catch {}
381709
381732
  const dirPath = join124(USER_SKILLS_DIR, name, "SKILL.md");
381710
381733
  try {
381711
- const raw = await readFile50(dirPath, "utf-8");
381734
+ const raw = await readFile51(dirPath, "utf-8");
381712
381735
  return { raw, path: dirPath };
381713
381736
  } catch {
381714
381737
  return null;
@@ -381735,7 +381758,7 @@ async function exportSkill(name, destDir) {
381735
381758
  async function importSkill(filePath) {
381736
381759
  let raw;
381737
381760
  try {
381738
- raw = await readFile50(filePath, "utf-8");
381761
+ raw = await readFile51(filePath, "utf-8");
381739
381762
  } catch (e) {
381740
381763
  return { ok: false, error: `Could not read ${filePath}: ${e}` };
381741
381764
  }
@@ -381958,11 +381981,11 @@ var init_skills_import2 = __esm(() => {
381958
381981
  });
381959
381982
 
381960
381983
  // src/services/skills/skillUsage.ts
381961
- import { mkdir as mkdir43, readFile as readFile51, writeFile as writeFile45 } from "fs/promises";
381984
+ import { mkdir as mkdir43, readFile as readFile52, writeFile as writeFile45 } from "fs/promises";
381962
381985
  import { join as join125 } from "path";
381963
381986
  async function loadFile() {
381964
381987
  try {
381965
- const raw = await readFile51(USAGE_PATH, "utf-8");
381988
+ const raw = await readFile52(USAGE_PATH, "utf-8");
381966
381989
  const parsed = JSON.parse(raw);
381967
381990
  if (parsed.version !== 1)
381968
381991
  return { version: 1, records: [] };
@@ -382095,7 +382118,7 @@ var init_skill_stats2 = __esm(() => {
382095
382118
  });
382096
382119
 
382097
382120
  // src/services/skills/skillNotes.ts
382098
- import { mkdir as mkdir44, readFile as readFile52, writeFile as writeFile46, appendFile as appendFile5, stat as stat45 } from "fs/promises";
382121
+ import { mkdir as mkdir44, readFile as readFile53, writeFile as writeFile46, appendFile as appendFile5, stat as stat45 } from "fs/promises";
382099
382122
  import { join as join126 } from "path";
382100
382123
  async function findNotesPath(skillName) {
382101
382124
  const dirPath = join126(USER_SKILLS_DIR2, skillName, "NOTES.md");
@@ -382109,7 +382132,7 @@ async function findNotesPath(skillName) {
382109
382132
  async function loadSkillNotes(skillName) {
382110
382133
  const path12 = await findNotesPath(skillName);
382111
382134
  try {
382112
- return await readFile52(path12, "utf-8");
382135
+ return await readFile53(path12, "utf-8");
382113
382136
  } catch {
382114
382137
  return "";
382115
382138
  }
@@ -382122,7 +382145,7 @@ async function appendSkillNote(skillName, note) {
382122
382145
  await mkdir44(USER_SKILLS_DIR2, { recursive: true });
382123
382146
  let existing = "";
382124
382147
  try {
382125
- existing = await readFile52(path12, "utf-8");
382148
+ existing = await readFile53(path12, "utf-8");
382126
382149
  } catch {}
382127
382150
  if (existing.length === 0) {
382128
382151
  existing = `# Notes for skill: ${skillName}
@@ -382923,7 +382946,7 @@ __export(exports_webuiServer, {
382923
382946
  broadcastNewWindow: () => broadcastNewWindow
382924
382947
  });
382925
382948
  import { createServer as createServer5 } from "http";
382926
- import { mkdir as mkdir45, readdir as readdir30, readFile as readFile53, writeFile as writeFile47 } from "fs/promises";
382949
+ import { mkdir as mkdir45, readdir as readdir30, readFile as readFile54, writeFile as writeFile47 } from "fs/promises";
382927
382950
  import { createHash as createHash23 } from "crypto";
382928
382951
  import { join as join127 } from "path";
382929
382952
  function getWebuiPort() {
@@ -382967,7 +382990,7 @@ async function listInstances() {
382967
382990
  let cwd2;
382968
382991
  let port;
382969
382992
  try {
382970
- const raw = await readFile53(join127(sessionsDir, f), "utf-8");
382993
+ const raw = await readFile54(join127(sessionsDir, f), "utf-8");
382971
382994
  const parsed = JSON.parse(raw);
382972
382995
  cwd2 = parsed.cwd;
382973
382996
  port = parsed.webuiPort;
@@ -383719,12 +383742,12 @@ var init_windows_setup2 = __esm(() => {
383719
383742
 
383720
383743
  // src/services/rpc/toolRpcServer.ts
383721
383744
  import { createServer as createServer6 } from "http";
383722
- import { readFile as readFile54, writeFile as writeFile48, mkdir as mkdir46, readdir as readdir31, stat as stat46 } from "fs/promises";
383745
+ import { readFile as readFile55, writeFile as writeFile48, mkdir as mkdir46, readdir as readdir31, stat as stat46 } from "fs/promises";
383723
383746
  import { spawn as spawn12 } from "child_process";
383724
383747
  import { join as join128, resolve as resolvePath, relative as relative23 } from "path";
383725
383748
  async function handleRead(p) {
383726
383749
  try {
383727
- const raw = await readFile54(p.path, "utf-8");
383750
+ const raw = await readFile55(p.path, "utf-8");
383728
383751
  const content = p.maxBytes && raw.length > p.maxBytes ? raw.slice(0, p.maxBytes) : raw;
383729
383752
  return { ok: true, data: content };
383730
383753
  } catch (e) {
@@ -383741,7 +383764,7 @@ async function handleWrite(p) {
383741
383764
  }
383742
383765
  async function handleEdit(p) {
383743
383766
  try {
383744
- const content = await readFile54(p.path, "utf-8");
383767
+ const content = await readFile55(p.path, "utf-8");
383745
383768
  let updated;
383746
383769
  let replacements2 = 0;
383747
383770
  if (p.replaceAll) {
@@ -383873,7 +383896,7 @@ async function handleGrep(p) {
383873
383896
  const s = await stat46(f);
383874
383897
  if (s.size > 5 * 1024 * 1024)
383875
383898
  continue;
383876
- content = await readFile54(f, "utf-8");
383899
+ content = await readFile55(f, "utf-8");
383877
383900
  } catch {
383878
383901
  continue;
383879
383902
  }
@@ -386520,7 +386543,7 @@ function Help(t0) {
386520
386543
  let t6;
386521
386544
  if ($2[31] !== tabs) {
386522
386545
  t6 = /* @__PURE__ */ jsx_dev_runtime238.jsxDEV(Tabs, {
386523
- title: `localclawd v${"1.7.4"}`,
386546
+ title: `localclawd v${"1.7.5"}`,
386524
386547
  color: "professionalBlue",
386525
386548
  defaultTab: "general",
386526
386549
  children: tabs
@@ -392674,7 +392697,7 @@ var init_AddMarketplace = __esm(() => {
392674
392697
 
392675
392698
  // src/utils/plugins/installCounts.ts
392676
392699
  import { randomBytes as randomBytes17 } from "crypto";
392677
- import { readFile as readFile55, rename as rename7, unlink as unlink17, writeFile as writeFile51 } from "fs/promises";
392700
+ import { readFile as readFile56, rename as rename7, unlink as unlink17, writeFile as writeFile51 } from "fs/promises";
392678
392701
  import { join as join131 } from "path";
392679
392702
  function getInstallCountsCachePath() {
392680
392703
  return join131(getPluginsDirectory(), INSTALL_COUNTS_CACHE_FILENAME);
@@ -392682,7 +392705,7 @@ function getInstallCountsCachePath() {
392682
392705
  async function loadInstallCountsCache() {
392683
392706
  const cachePath = getInstallCountsCachePath();
392684
392707
  try {
392685
- const content = await readFile55(cachePath, { encoding: "utf-8" });
392708
+ const content = await readFile56(cachePath, { encoding: "utf-8" });
392686
392709
  const parsed = jsonParse(content);
392687
392710
  if (typeof parsed !== "object" || parsed === null || !("version" in parsed) || !("fetchedAt" in parsed) || !("counts" in parsed)) {
392688
392711
  logForDebugging("Install counts cache has invalid structure");
@@ -397129,7 +397152,7 @@ var init_ManageMarketplaces = __esm(() => {
397129
397152
 
397130
397153
  // src/utils/plugins/pluginFlagging.ts
397131
397154
  import { randomBytes as randomBytes18 } from "crypto";
397132
- import { readFile as readFile56, rename as rename8, unlink as unlink18, writeFile as writeFile52 } from "fs/promises";
397155
+ import { readFile as readFile57, rename as rename8, unlink as unlink18, writeFile as writeFile52 } from "fs/promises";
397133
397156
  import { join as join133 } from "path";
397134
397157
  function getFlaggedPluginsPath() {
397135
397158
  return join133(getPluginsDirectory(), FLAGGED_PLUGINS_FILENAME);
@@ -397156,7 +397179,7 @@ function parsePluginsData(content) {
397156
397179
  }
397157
397180
  async function readFromDisk() {
397158
397181
  try {
397159
- const content = await readFile56(getFlaggedPluginsPath(), {
397182
+ const content = await readFile57(getFlaggedPluginsPath(), {
397160
397183
  encoding: "utf-8"
397161
397184
  });
397162
397185
  return parsePluginsData(content);
@@ -400424,7 +400447,7 @@ function parsePluginArgs(args) {
400424
400447
  }
400425
400448
 
400426
400449
  // src/utils/plugins/validatePlugin.ts
400427
- import { readdir as readdir33, readFile as readFile58, stat as stat48 } from "fs/promises";
400450
+ import { readdir as readdir33, readFile as readFile59, stat as stat48 } from "fs/promises";
400428
400451
  import * as path14 from "path";
400429
400452
  import { z as z77 } from "zod/v4";
400430
400453
  function detectManifestType(filePath) {
@@ -400465,7 +400488,7 @@ async function validatePluginManifest(filePath) {
400465
400488
  const absolutePath = path14.resolve(filePath);
400466
400489
  let content;
400467
400490
  try {
400468
- content = await readFile58(absolutePath, { encoding: "utf-8" });
400491
+ content = await readFile59(absolutePath, { encoding: "utf-8" });
400469
400492
  } catch (error5) {
400470
400493
  const code = getErrnoCode(error5);
400471
400494
  let message;
@@ -400589,7 +400612,7 @@ async function validateMarketplaceManifest(filePath) {
400589
400612
  const absolutePath = path14.resolve(filePath);
400590
400613
  let content;
400591
400614
  try {
400592
- content = await readFile58(absolutePath, { encoding: "utf-8" });
400615
+ content = await readFile59(absolutePath, { encoding: "utf-8" });
400593
400616
  } catch (error5) {
400594
400617
  const code = getErrnoCode(error5);
400595
400618
  let message;
@@ -400675,7 +400698,7 @@ async function validateMarketplaceManifest(filePath) {
400675
400698
  const pluginJsonPath = path14.join(marketplaceRoot, entry.source, ".claude-plugin", "plugin.json");
400676
400699
  let manifestVersion;
400677
400700
  try {
400678
- const raw = await readFile58(pluginJsonPath, { encoding: "utf-8" });
400701
+ const raw = await readFile59(pluginJsonPath, { encoding: "utf-8" });
400679
400702
  const parsed2 = jsonParse(raw);
400680
400703
  if (typeof parsed2.version === "string") {
400681
400704
  manifestVersion = parsed2.version;
@@ -400792,7 +400815,7 @@ function validateComponentFile(filePath, content, fileType) {
400792
400815
  async function validateHooksJson(filePath) {
400793
400816
  let content;
400794
400817
  try {
400795
- content = await readFile58(filePath, { encoding: "utf-8" });
400818
+ content = await readFile59(filePath, { encoding: "utf-8" });
400796
400819
  } catch (e) {
400797
400820
  const code = getErrnoCode(e);
400798
400821
  if (code === "ENOENT") {
@@ -400885,7 +400908,7 @@ async function validatePluginContents(pluginDir) {
400885
400908
  for (const filePath of files) {
400886
400909
  let content;
400887
400910
  try {
400888
- content = await readFile58(filePath, { encoding: "utf-8" });
400911
+ content = await readFile59(filePath, { encoding: "utf-8" });
400889
400912
  } catch (e) {
400890
400913
  if (isENOENT(e))
400891
400914
  continue;
@@ -400954,7 +400977,7 @@ async function validateManifest2(filePath) {
400954
400977
  return validateMarketplaceManifest(filePath);
400955
400978
  case "unknown": {
400956
400979
  try {
400957
- const content = await readFile58(absolutePath, { encoding: "utf-8" });
400980
+ const content = await readFile59(absolutePath, { encoding: "utf-8" });
400958
400981
  const parsed = jsonParse(content);
400959
400982
  if (Array.isArray(parsed.plugins)) {
400960
400983
  return validateMarketplaceManifest(filePath);
@@ -403679,7 +403702,7 @@ var init_transcriptSearch = __esm(() => {
403679
403702
  });
403680
403703
 
403681
403704
  // src/utils/releaseNotes.ts
403682
- import { mkdir as mkdir50, readFile as readFile59, writeFile as writeFile53 } from "fs/promises";
403705
+ import { mkdir as mkdir50, readFile as readFile60, writeFile as writeFile53 } from "fs/promises";
403683
403706
  import { dirname as dirname50, join as join136 } from "path";
403684
403707
  function getChangelogCachePath() {
403685
403708
  return join136(getClaudeConfigHomeDir(), "cache", "changelog.md");
@@ -403729,7 +403752,7 @@ async function getStoredChangelog() {
403729
403752
  }
403730
403753
  const cachePath = getChangelogCachePath();
403731
403754
  try {
403732
- const content = await readFile59(cachePath, "utf-8");
403755
+ const content = await readFile60(cachePath, "utf-8");
403733
403756
  changelogMemoryCache = content;
403734
403757
  return content;
403735
403758
  } catch {
@@ -403782,7 +403805,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403782
403805
  }
403783
403806
  return [];
403784
403807
  }
403785
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.7.4") {
403808
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.7.5") {
403786
403809
  if (process.env.USER_TYPE === "ant") {
403787
403810
  const changelog = MACRO.VERSION_CHANGELOG;
403788
403811
  if (changelog) {
@@ -403809,7 +403832,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.7.4") {
403809
403832
  releaseNotes
403810
403833
  };
403811
403834
  }
403812
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.7.4") {
403835
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.7.5") {
403813
403836
  if (process.env.USER_TYPE === "ant") {
403814
403837
  const changelog = MACRO.VERSION_CHANGELOG;
403815
403838
  if (changelog) {
@@ -403966,7 +403989,7 @@ function getRecentActivitySync() {
403966
403989
  return cachedActivity;
403967
403990
  }
403968
403991
  function getLogoDisplayData() {
403969
- const version = process.env.DEMO_VERSION ?? "1.7.4";
403992
+ const version = process.env.DEMO_VERSION ?? "1.7.5";
403970
403993
  const serverUrl = getDirectConnectServerUrl();
403971
403994
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403972
403995
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -405066,7 +405089,7 @@ function Logo() {
405066
405089
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
405067
405090
  t2 = () => {
405068
405091
  const currentConfig = getGlobalConfig();
405069
- if (currentConfig.lastReleaseNotesSeen === "1.7.4") {
405092
+ if (currentConfig.lastReleaseNotesSeen === "1.7.5") {
405070
405093
  return;
405071
405094
  }
405072
405095
  saveGlobalConfig(_temp326);
@@ -405725,12 +405748,12 @@ function Logo() {
405725
405748
  return t41;
405726
405749
  }
405727
405750
  function _temp326(current) {
405728
- if (current.lastReleaseNotesSeen === "1.7.4") {
405751
+ if (current.lastReleaseNotesSeen === "1.7.5") {
405729
405752
  return current;
405730
405753
  }
405731
405754
  return {
405732
405755
  ...current,
405733
- lastReleaseNotesSeen: "1.7.4"
405756
+ lastReleaseNotesSeen: "1.7.5"
405734
405757
  };
405735
405758
  }
405736
405759
  function _temp241(s_0) {
@@ -423087,7 +423110,7 @@ __export(exports_thinkback, {
423087
423110
  call: () => call71
423088
423111
  });
423089
423112
  import { execa as execa11 } from "execa";
423090
- import { readFile as readFile60 } from "fs/promises";
423113
+ import { readFile as readFile61 } from "fs/promises";
423091
423114
  import { join as join137 } from "path";
423092
423115
  function getMarketplaceName() {
423093
423116
  return OFFICIAL_MARKETPLACE_NAME;
@@ -423116,7 +423139,7 @@ async function playAnimation(skillDir) {
423116
423139
  const dataPath = join137(skillDir, "year_in_review.js");
423117
423140
  const playerPath = join137(skillDir, "player.js");
423118
423141
  try {
423119
- await readFile60(dataPath);
423142
+ await readFile61(dataPath);
423120
423143
  } catch (e) {
423121
423144
  if (isENOENT(e)) {
423122
423145
  return {
@@ -423131,7 +423154,7 @@ async function playAnimation(skillDir) {
423131
423154
  };
423132
423155
  }
423133
423156
  try {
423134
- await readFile60(playerPath);
423157
+ await readFile61(playerPath);
423135
423158
  } catch (e) {
423136
423159
  if (isENOENT(e)) {
423137
423160
  return {
@@ -429726,7 +429749,7 @@ __export(exports_branch, {
429726
429749
  call: () => call80
429727
429750
  });
429728
429751
  import { randomUUID as randomUUID27 } from "crypto";
429729
- import { mkdir as mkdir51, readFile as readFile61, writeFile as writeFile54 } from "fs/promises";
429752
+ import { mkdir as mkdir51, readFile as readFile62, writeFile as writeFile54 } from "fs/promises";
429730
429753
  function deriveFirstPrompt(firstUserMessage) {
429731
429754
  const content = firstUserMessage?.message?.content;
429732
429755
  if (!content)
@@ -429745,7 +429768,7 @@ async function createFork(customTitle) {
429745
429768
  await mkdir51(projectDir, { recursive: true, mode: 448 });
429746
429769
  let transcriptContent;
429747
429770
  try {
429748
- transcriptContent = await readFile61(currentTranscriptPath);
429771
+ transcriptContent = await readFile62(currentTranscriptPath);
429749
429772
  } catch {
429750
429773
  throw new Error("No conversation to branch");
429751
429774
  }
@@ -436118,7 +436141,7 @@ var init_rewind = __esm(() => {
436118
436141
 
436119
436142
  // src/utils/heapDumpService.ts
436120
436143
  import { createWriteStream as createWriteStream2, writeFileSync as writeFileSync4 } from "fs";
436121
- import { readdir as readdir34, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
436144
+ import { readdir as readdir34, readFile as readFile63, writeFile as writeFile55 } from "fs/promises";
436122
436145
  import { join as join140 } from "path";
436123
436146
  import { pipeline as pipeline2 } from "stream/promises";
436124
436147
  import {
@@ -436143,7 +436166,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
436143
436166
  } catch {}
436144
436167
  let smapsRollup;
436145
436168
  try {
436146
- smapsRollup = await readFile62("/proc/self/smaps_rollup", "utf8");
436169
+ smapsRollup = await readFile63("/proc/self/smaps_rollup", "utf8");
436147
436170
  } catch {}
436148
436171
  const nativeMemory = usage.rss - usage.heapUsed;
436149
436172
  const bytesPerSecond = uptimeSeconds > 0 ? usage.rss / uptimeSeconds : 0;
@@ -436209,7 +436232,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
436209
436232
  smapsRollup,
436210
436233
  platform: process.platform,
436211
436234
  nodeVersion: process.version,
436212
- ccVersion: "1.7.4"
436235
+ ccVersion: "1.7.5"
436213
436236
  };
436214
436237
  }
436215
436238
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -436794,7 +436817,7 @@ var init_bridge_kick = __esm(() => {
436794
436817
  var call87 = async () => {
436795
436818
  return {
436796
436819
  type: "text",
436797
- value: `${"1.7.4"} (built ${"2026-05-07T14:37:47.430Z"})`
436820
+ value: `${"1.7.5"} (built ${"2026-05-07T14:41:21.784Z"})`
436798
436821
  };
436799
436822
  }, version, version_default;
436800
436823
  var init_version = __esm(() => {
@@ -443278,7 +443301,7 @@ import {
443278
443301
  mkdir as mkdir55,
443279
443302
  mkdtemp,
443280
443303
  readdir as readdir35,
443281
- readFile as readFile63,
443304
+ readFile as readFile64,
443282
443305
  rm as rm10,
443283
443306
  unlink as unlink21,
443284
443307
  writeFile as writeFile57
@@ -443645,7 +443668,7 @@ async function formatTranscriptWithSummarization(log2) {
443645
443668
  async function loadCachedFacets(sessionId) {
443646
443669
  const facetPath = join147(getFacetsDir(), `${sessionId}.json`);
443647
443670
  try {
443648
- const content = await readFile63(facetPath, { encoding: "utf-8" });
443671
+ const content = await readFile64(facetPath, { encoding: "utf-8" });
443649
443672
  const parsed = jsonParse(content);
443650
443673
  if (!isValidSessionFacets(parsed)) {
443651
443674
  try {
@@ -443671,7 +443694,7 @@ async function saveFacets(facets) {
443671
443694
  async function loadCachedSessionMeta(sessionId) {
443672
443695
  const metaPath = join147(getSessionMetaDir(), `${sessionId}.json`);
443673
443696
  try {
443674
- const content = await readFile63(metaPath, { encoding: "utf-8" });
443697
+ const content = await readFile64(metaPath, { encoding: "utf-8" });
443675
443698
  return jsonParse(content);
443676
443699
  } catch {
443677
443700
  return null;
@@ -444738,7 +444761,7 @@ function generateHtmlReport(data, insights) {
444738
444761
  </html>`;
444739
444762
  }
444740
444763
  function buildExportData(data, insights, facets, remoteStats) {
444741
- const version2 = typeof MACRO !== "undefined" ? "1.7.4" : "unknown";
444764
+ const version2 = typeof MACRO !== "undefined" ? "1.7.5" : "unknown";
444742
444765
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444743
444766
  const facets_summary = {
444744
444767
  total: facets.size,
@@ -446113,7 +446136,7 @@ import {
446113
446136
  open as fsOpen2,
446114
446137
  mkdir as mkdir56,
446115
446138
  readdir as readdir36,
446116
- readFile as readFile64,
446139
+ readFile as readFile65,
446117
446140
  stat as stat49,
446118
446141
  unlink as unlink22,
446119
446142
  writeFile as writeFile58
@@ -446169,7 +446192,7 @@ async function writeAgentMetadata(agentId, metadata) {
446169
446192
  async function readAgentMetadata(agentId) {
446170
446193
  const path15 = getAgentMetadataPath(agentId);
446171
446194
  try {
446172
- const raw = await readFile64(path15, "utf-8");
446195
+ const raw = await readFile65(path15, "utf-8");
446173
446196
  return JSON.parse(raw);
446174
446197
  } catch (e) {
446175
446198
  if (isFsInaccessible(e))
@@ -446192,7 +446215,7 @@ async function writeRemoteAgentMetadata(taskId, metadata) {
446192
446215
  async function readRemoteAgentMetadata(taskId) {
446193
446216
  const path15 = getRemoteAgentMetadataPath(taskId);
446194
446217
  try {
446195
- const raw = await readFile64(path15, "utf-8");
446218
+ const raw = await readFile65(path15, "utf-8");
446196
446219
  return JSON.parse(raw);
446197
446220
  } catch (e) {
446198
446221
  if (isFsInaccessible(e))
@@ -446225,7 +446248,7 @@ async function listRemoteAgentMetadata() {
446225
446248
  if (!entry.isFile() || !entry.name.endsWith(".meta.json"))
446226
446249
  continue;
446227
446250
  try {
446228
- const raw = await readFile64(join148(dir, entry.name), "utf-8");
446251
+ const raw = await readFile65(join148(dir, entry.name), "utf-8");
446229
446252
  results.push(JSON.parse(raw));
446230
446253
  } catch (e) {
446231
446254
  logForDebugging(`listRemoteAgentMetadata: skipping ${entry.name}: ${String(e)}`);
@@ -446567,7 +446590,7 @@ class Project {
446567
446590
  logForDebugging(`Skipping tombstone removal: session file too large (${formatFileSize(fileSize)})`, { level: "warn" });
446568
446591
  return;
446569
446592
  }
446570
- const content = await readFile64(this.sessionFile, { encoding: "utf-8" });
446593
+ const content = await readFile65(this.sessionFile, { encoding: "utf-8" });
446571
446594
  const lines = content.split(`
446572
446595
  `).filter((line) => {
446573
446596
  if (!line.trim())
@@ -447377,7 +447400,7 @@ async function loadTranscriptFromFile(filePath) {
447377
447400
  worktreeSession: worktreeStates.has(sessionId) ? worktreeStates.get(sessionId) : undefined
447378
447401
  };
447379
447402
  }
447380
- const content = await readFile64(filePath, { encoding: "utf-8" });
447403
+ const content = await readFile65(filePath, { encoding: "utf-8" });
447381
447404
  let parsed;
447382
447405
  try {
447383
447406
  parsed = jsonParse(content);
@@ -448039,7 +448062,7 @@ async function loadTranscriptFile(filePath, opts) {
448039
448062
  }
448040
448063
  }
448041
448064
  }
448042
- buf ??= await readFile64(filePath);
448065
+ buf ??= await readFile65(filePath);
448043
448066
  if (!opts?.keepAllLeaves && !hasPreservedSegment && !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_PRECOMPACT_SKIP) && buf.length > SKIP_PRECOMPACT_THRESHOLD) {
448044
448067
  buf = walkChainBeforeParse(buf);
448045
448068
  }
@@ -448939,7 +448962,7 @@ var init_sessionStorage = __esm(() => {
448939
448962
  init_settings2();
448940
448963
  init_slowOperations();
448941
448964
  init_uuid();
448942
- VERSION6 = typeof MACRO !== "undefined" ? "1.7.4" : "unknown";
448965
+ VERSION6 = typeof MACRO !== "undefined" ? "1.7.5" : "unknown";
448943
448966
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448944
448967
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448945
448968
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -450140,7 +450163,7 @@ var init_filesystem = __esm(() => {
450140
450163
  });
450141
450164
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
450142
450165
  const nonce = randomBytes20(16).toString("hex");
450143
- return join150(getClaudeTempDir(), "bundled-skills", "1.7.4", nonce);
450166
+ return join150(getClaudeTempDir(), "bundled-skills", "1.7.5", nonce);
450144
450167
  });
450145
450168
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
450146
450169
  });
@@ -454426,7 +454449,7 @@ import {
454426
454449
  copyFile as copyFile10,
454427
454450
  mkdir as mkdir58,
454428
454451
  readdir as readdir37,
454429
- readFile as readFile65,
454452
+ readFile as readFile66,
454430
454453
  stat as stat52,
454431
454454
  symlink as symlink5,
454432
454455
  utimes as utimes2
@@ -454569,7 +454592,7 @@ async function getOrCreateWorktree(repoRoot, slug, options) {
454569
454592
  async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
454570
454593
  let includeContent;
454571
454594
  try {
454572
- includeContent = await readFile65(join152(repoRoot, ".worktreeinclude"), "utf-8");
454595
+ includeContent = await readFile66(join152(repoRoot, ".worktreeinclude"), "utf-8");
454573
454596
  } catch {
454574
454597
  return [];
454575
454598
  }
@@ -457806,7 +457829,7 @@ __export(exports_upstreamproxy, {
457806
457829
  getUpstreamProxyEnv: () => getUpstreamProxyEnv,
457807
457830
  SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
457808
457831
  });
457809
- import { mkdir as mkdir59, readFile as readFile66, unlink as unlink24, writeFile as writeFile59 } from "fs/promises";
457832
+ import { mkdir as mkdir59, readFile as readFile67, unlink as unlink24, writeFile as writeFile59 } from "fs/promises";
457810
457833
  import { homedir as homedir36 } from "os";
457811
457834
  import { join as join153 } from "path";
457812
457835
  async function initUpstreamProxy(opts) {
@@ -457887,7 +457910,7 @@ function resetUpstreamProxyForTests() {
457887
457910
  }
457888
457911
  async function readToken(path15) {
457889
457912
  try {
457890
- const raw = await readFile66(path15, "utf8");
457913
+ const raw = await readFile67(path15, "utf8");
457891
457914
  return raw.trim() || null;
457892
457915
  } catch (err2) {
457893
457916
  if (isENOENT(err2))
@@ -457928,7 +457951,7 @@ async function downloadCaBundle(baseUrl, systemCaPath, outPath) {
457928
457951
  return false;
457929
457952
  }
457930
457953
  const ccrCa = await resp.text();
457931
- const systemCa = await readFile66(systemCaPath, "utf8").catch(() => "");
457954
+ const systemCa = await readFile67(systemCaPath, "utf8").catch(() => "");
457932
457955
  await mkdir59(join153(outPath, ".."), { recursive: true });
457933
457956
  await writeFile59(outPath, systemCa + `
457934
457957
  ` + ccrCa, "utf8");
@@ -459377,7 +459400,7 @@ function buildSystemInitMessage(inputs) {
459377
459400
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
459378
459401
  apiKeySource: getAnthropicApiKeyWithSource().source,
459379
459402
  betas: getSdkBetas(),
459380
- claude_code_version: "1.7.4",
459403
+ claude_code_version: "1.7.5",
459381
459404
  output_style: outputStyle2,
459382
459405
  agents: inputs.agents.map((agent) => agent.agentType),
459383
459406
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -473534,7 +473557,7 @@ var init_useVoiceEnabled = __esm(() => {
473534
473557
  function getSemverPart(version2) {
473535
473558
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
473536
473559
  }
473537
- function useUpdateNotification(updatedVersion, initialVersion = "1.7.4") {
473560
+ function useUpdateNotification(updatedVersion, initialVersion = "1.7.5") {
473538
473561
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
473539
473562
  if (!updatedVersion) {
473540
473563
  return null;
@@ -473574,7 +473597,7 @@ function AutoUpdater({
473574
473597
  return;
473575
473598
  }
473576
473599
  if (false) {}
473577
- const currentVersion = "1.7.4";
473600
+ const currentVersion = "1.7.5";
473578
473601
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
473579
473602
  let latestVersion = await getLatestVersion(channel);
473580
473603
  const isDisabled = isAutoUpdaterDisabled();
@@ -473785,12 +473808,12 @@ function NativeAutoUpdater({
473785
473808
  logEvent("tengu_native_auto_updater_start", {});
473786
473809
  try {
473787
473810
  const maxVersion = await getMaxVersion();
473788
- if (maxVersion && gt("1.7.4", maxVersion)) {
473811
+ if (maxVersion && gt("1.7.5", maxVersion)) {
473789
473812
  const msg = await getMaxVersionMessage();
473790
473813
  setMaxVersionIssue(msg ?? "affects your version");
473791
473814
  }
473792
473815
  const result = await installLatest(channel);
473793
- const currentVersion = "1.7.4";
473816
+ const currentVersion = "1.7.5";
473794
473817
  const latencyMs = Date.now() - startTime;
473795
473818
  if (result.lockFailed) {
473796
473819
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473925,17 +473948,17 @@ function PackageManagerAutoUpdater(t0) {
473925
473948
  const maxVersion = await getMaxVersion();
473926
473949
  if (maxVersion && latest && gt(latest, maxVersion)) {
473927
473950
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473928
- if (gte("1.7.4", maxVersion)) {
473929
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.7.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
473951
+ if (gte("1.7.5", maxVersion)) {
473952
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.7.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
473930
473953
  setUpdateAvailable(false);
473931
473954
  return;
473932
473955
  }
473933
473956
  latest = maxVersion;
473934
473957
  }
473935
- const hasUpdate = latest && !gte("1.7.4", latest) && !shouldSkipVersion(latest);
473958
+ const hasUpdate = latest && !gte("1.7.5", latest) && !shouldSkipVersion(latest);
473936
473959
  setUpdateAvailable(!!hasUpdate);
473937
473960
  if (hasUpdate) {
473938
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.7.4"} -> ${latest}`);
473961
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.7.5"} -> ${latest}`);
473939
473962
  }
473940
473963
  };
473941
473964
  $2[0] = t1;
@@ -473969,7 +473992,7 @@ function PackageManagerAutoUpdater(t0) {
473969
473992
  wrap: "truncate",
473970
473993
  children: [
473971
473994
  "currentVersion: ",
473972
- "1.7.4"
473995
+ "1.7.5"
473973
473996
  ]
473974
473997
  }, undefined, true, undefined, this);
473975
473998
  $2[3] = verbose;
@@ -481529,7 +481552,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
481529
481552
  project_dir: getOriginalCwd(),
481530
481553
  added_dirs: addedDirs
481531
481554
  },
481532
- version: "1.7.4",
481555
+ version: "1.7.5",
481533
481556
  output_style: {
481534
481557
  name: outputStyleName
481535
481558
  },
@@ -493082,7 +493105,7 @@ var init_useDynamicConfig = __esm(() => {
493082
493105
  });
493083
493106
 
493084
493107
  // src/components/FeedbackSurvey/submitTranscriptShare.ts
493085
- import { readFile as readFile67, stat as stat54 } from "fs/promises";
493108
+ import { readFile as readFile68, stat as stat54 } from "fs/promises";
493086
493109
  async function submitTranscriptShare(messages, trigger, appearanceId) {
493087
493110
  try {
493088
493111
  logForDebugging("Collecting transcript for sharing", { level: "info" });
@@ -493094,14 +493117,14 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
493094
493117
  const transcriptPath = getTranscriptPath();
493095
493118
  const { size } = await stat54(transcriptPath);
493096
493119
  if (size <= MAX_TRANSCRIPT_READ_BYTES) {
493097
- rawTranscriptJsonl = await readFile67(transcriptPath, "utf-8");
493120
+ rawTranscriptJsonl = await readFile68(transcriptPath, "utf-8");
493098
493121
  } else {
493099
493122
  logForDebugging(`Skipping raw transcript read: file too large (${size} bytes)`, { level: "warn" });
493100
493123
  }
493101
493124
  } catch {}
493102
493125
  const data = {
493103
493126
  trigger,
493104
- version: "1.7.4",
493127
+ version: "1.7.5",
493105
493128
  platform: process.platform,
493106
493129
  transcript,
493107
493130
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -510010,7 +510033,7 @@ function appendToLog(path17, message) {
510010
510033
  cwd: getFsImplementation().cwd(),
510011
510034
  userType: process.env.USER_TYPE,
510012
510035
  sessionId: getSessionId(),
510013
- version: "1.7.4"
510036
+ version: "1.7.5"
510014
510037
  };
510015
510038
  getLogWriter(path17).write(messageWithTimestamp);
510016
510039
  }
@@ -513872,11 +513895,11 @@ var init_sessionUrl = __esm(() => {
513872
513895
  });
513873
513896
 
513874
513897
  // src/utils/plugins/zipCacheAdapters.ts
513875
- import { readFile as readFile68 } from "fs/promises";
513898
+ import { readFile as readFile69 } from "fs/promises";
513876
513899
  import { join as join165 } from "path";
513877
513900
  async function readZipCacheKnownMarketplaces() {
513878
513901
  try {
513879
- const content = await readFile68(getZipCacheKnownMarketplacesPath(), "utf-8");
513902
+ const content = await readFile69(getZipCacheKnownMarketplacesPath(), "utf-8");
513880
513903
  const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
513881
513904
  if (!parsed.success) {
513882
513905
  logForDebugging(`Invalid known_marketplaces.json in zip cache: ${parsed.error.message}`, { level: "error" });
@@ -513909,7 +513932,7 @@ async function readMarketplaceJsonContent(dir) {
513909
513932
  ];
513910
513933
  for (const candidate of candidates) {
513911
513934
  try {
513912
- return await readFile68(candidate, "utf-8");
513935
+ return await readFile69(candidate, "utf-8");
513913
513936
  } catch {}
513914
513937
  }
513915
513938
  return null;
@@ -514034,8 +514057,8 @@ async function getEnvLessBridgeConfig() {
514034
514057
  }
514035
514058
  async function checkEnvLessBridgeMinVersion() {
514036
514059
  const cfg = await getEnvLessBridgeConfig();
514037
- if (cfg.min_version && lt("1.7.4", cfg.min_version)) {
514038
- return `Your version of localclawd (${"1.7.4"}) is too old for Remote Control.
514060
+ if (cfg.min_version && lt("1.7.5", cfg.min_version)) {
514061
+ return `Your version of localclawd (${"1.7.5"}) is too old for Remote Control.
514039
514062
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
514040
514063
  }
514041
514064
  return null;
@@ -514360,7 +514383,7 @@ __export(exports_bridgePointer, {
514360
514383
  clearBridgePointer: () => clearBridgePointer,
514361
514384
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
514362
514385
  });
514363
- import { mkdir as mkdir61, readFile as readFile69, stat as stat57, unlink as unlink25, writeFile as writeFile64 } from "fs/promises";
514386
+ import { mkdir as mkdir61, readFile as readFile70, stat as stat57, unlink as unlink25, writeFile as writeFile64 } from "fs/promises";
514364
514387
  import { dirname as dirname60, join as join166 } from "path";
514365
514388
  import { z as z97 } from "zod/v4";
514366
514389
  function getBridgePointerPath(dir) {
@@ -514382,7 +514405,7 @@ async function readBridgePointer(dir) {
514382
514405
  let mtimeMs;
514383
514406
  try {
514384
514407
  mtimeMs = (await stat57(path17)).mtimeMs;
514385
- raw = await readFile69(path17, "utf8");
514408
+ raw = await readFile70(path17, "utf8");
514386
514409
  } catch {
514387
514410
  return null;
514388
514411
  }
@@ -514507,7 +514530,7 @@ async function initBridgeCore(params) {
514507
514530
  const rawApi = createBridgeApiClient({
514508
514531
  baseUrl,
514509
514532
  getAccessToken,
514510
- runnerVersion: "1.7.4",
514533
+ runnerVersion: "1.7.5",
514511
514534
  onDebug: logForDebugging,
514512
514535
  onAuth401,
514513
514536
  getTrustedDeviceToken
@@ -516368,7 +516391,7 @@ __export(exports_print, {
516368
516391
  createCanUseToolWithPermissionPrompt: () => createCanUseToolWithPermissionPrompt,
516369
516392
  canBatchWith: () => canBatchWith
516370
516393
  });
516371
- import { readFile as readFile70, stat as stat58 } from "fs/promises";
516394
+ import { readFile as readFile71, stat as stat58 } from "fs/promises";
516372
516395
  import { dirname as dirname61 } from "path";
516373
516396
  import { cwd as cwd2 } from "process";
516374
516397
  import { randomUUID as randomUUID52 } from "crypto";
@@ -517718,7 +517741,7 @@ ${m2.text}
517718
517741
  const normalizedPath = expandPath(message.request.path);
517719
517742
  const diskMtime = Math.floor((await stat58(normalizedPath)).mtimeMs);
517720
517743
  if (diskMtime <= message.request.mtime) {
517721
- const raw = await readFile70(normalizedPath, "utf-8");
517744
+ const raw = await readFile71(normalizedPath, "utf-8");
517722
517745
  const content = (raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw).replaceAll(`\r
517723
517746
  `, `
517724
517747
  `);
@@ -520226,7 +520249,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
520226
520249
  setCwd(cwd3);
520227
520250
  const server = new Server({
520228
520251
  name: "claude/tengu",
520229
- version: "1.7.4"
520252
+ version: "1.7.5"
520230
520253
  }, {
520231
520254
  capabilities: {
520232
520255
  tools: {}
@@ -520356,7 +520379,7 @@ __export(exports_appDesktop, {
520356
520379
  readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers,
520357
520380
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
520358
520381
  });
520359
- import { readdir as readdir39, readFile as readFile71, stat as stat59 } from "fs/promises";
520382
+ import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
520360
520383
  import { homedir as homedir41 } from "os";
520361
520384
  import { join as join167 } from "path";
520362
520385
  async function getClaudeDesktopConfigPath() {
@@ -520404,7 +520427,7 @@ async function readClaudeDesktopMcpServers() {
520404
520427
  const configPath = await getClaudeDesktopConfigPath();
520405
520428
  let configContent;
520406
520429
  try {
520407
- configContent = await readFile71(configPath, { encoding: "utf8" });
520430
+ configContent = await readFile72(configPath, { encoding: "utf8" });
520408
520431
  } catch (e) {
520409
520432
  const code = getErrnoCode(e);
520410
520433
  if (code === "ENOENT") {
@@ -521307,7 +521330,7 @@ function WelcomeLogo() {
521307
521330
  dimColor: true,
521308
521331
  children: [
521309
521332
  "v",
521310
- "1.7.4"
521333
+ "1.7.5"
521311
521334
  ]
521312
521335
  }, undefined, true, undefined, this)
521313
521336
  ]
@@ -521498,7 +521521,7 @@ __export(exports_update, {
521498
521521
  });
521499
521522
  async function update() {
521500
521523
  logEvent("tengu_update_check", {});
521501
- writeToStdout(`Current version: ${"1.7.4"}
521524
+ writeToStdout(`Current version: ${"1.7.5"}
521502
521525
  `);
521503
521526
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
521504
521527
  writeToStdout(`Checking for updates to ${channel} version...
@@ -521573,8 +521596,8 @@ async function update() {
521573
521596
  writeToStdout(`localclawd is managed by Homebrew.
521574
521597
  `);
521575
521598
  const latest = await getLatestVersion(channel);
521576
- if (latest && !gte("1.7.4", latest)) {
521577
- writeToStdout(`Update available: ${"1.7.4"} → ${latest}
521599
+ if (latest && !gte("1.7.5", latest)) {
521600
+ writeToStdout(`Update available: ${"1.7.5"} → ${latest}
521578
521601
  `);
521579
521602
  writeToStdout(`
521580
521603
  `);
@@ -521590,8 +521613,8 @@ async function update() {
521590
521613
  writeToStdout(`localclawd is managed by winget.
521591
521614
  `);
521592
521615
  const latest = await getLatestVersion(channel);
521593
- if (latest && !gte("1.7.4", latest)) {
521594
- writeToStdout(`Update available: ${"1.7.4"} → ${latest}
521616
+ if (latest && !gte("1.7.5", latest)) {
521617
+ writeToStdout(`Update available: ${"1.7.5"} → ${latest}
521595
521618
  `);
521596
521619
  writeToStdout(`
521597
521620
  `);
@@ -521605,8 +521628,8 @@ async function update() {
521605
521628
  writeToStdout(`localclawd is managed by apk.
521606
521629
  `);
521607
521630
  const latest = await getLatestVersion(channel);
521608
- if (latest && !gte("1.7.4", latest)) {
521609
- writeToStdout(`Update available: ${"1.7.4"} → ${latest}
521631
+ if (latest && !gte("1.7.5", latest)) {
521632
+ writeToStdout(`Update available: ${"1.7.5"} → ${latest}
521610
521633
  `);
521611
521634
  writeToStdout(`
521612
521635
  `);
@@ -521671,11 +521694,11 @@ async function update() {
521671
521694
  `);
521672
521695
  await gracefulShutdown(1);
521673
521696
  }
521674
- if (result.latestVersion === "1.7.4") {
521675
- writeToStdout(source_default.green(`localclawd is up to date (${"1.7.4"})`) + `
521697
+ if (result.latestVersion === "1.7.5") {
521698
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.7.5"})`) + `
521676
521699
  `);
521677
521700
  } else {
521678
- writeToStdout(source_default.green(`Successfully updated from ${"1.7.4"} to version ${result.latestVersion}`) + `
521701
+ writeToStdout(source_default.green(`Successfully updated from ${"1.7.5"} to version ${result.latestVersion}`) + `
521679
521702
  `);
521680
521703
  await regenerateCompletionCache();
521681
521704
  }
@@ -521735,12 +521758,12 @@ async function update() {
521735
521758
  `);
521736
521759
  await gracefulShutdown(1);
521737
521760
  }
521738
- if (latestVersion === "1.7.4") {
521739
- writeToStdout(source_default.green(`localclawd is up to date (${"1.7.4"})`) + `
521761
+ if (latestVersion === "1.7.5") {
521762
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.7.5"})`) + `
521740
521763
  `);
521741
521764
  await gracefulShutdown(0);
521742
521765
  }
521743
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.7.4"})
521766
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.7.5"})
521744
521767
  `);
521745
521768
  writeToStdout(`Installing update...
521746
521769
  `);
@@ -521785,7 +521808,7 @@ async function update() {
521785
521808
  logForDebugging(`update: Installation status: ${status2}`);
521786
521809
  switch (status2) {
521787
521810
  case "success":
521788
- writeToStdout(source_default.green(`Successfully updated from ${"1.7.4"} to version ${latestVersion}`) + `
521811
+ writeToStdout(source_default.green(`Successfully updated from ${"1.7.5"} to version ${latestVersion}`) + `
521789
521812
  `);
521790
521813
  await regenerateCompletionCache();
521791
521814
  break;
@@ -523027,7 +523050,7 @@ Run with --debug for more details.
523027
523050
  }
523028
523051
  }
523029
523052
  logForDiagnosticsNoPII("info", "started", {
523030
- version: "1.7.4",
523053
+ version: "1.7.5",
523031
523054
  is_native_binary: isInBundledMode()
523032
523055
  });
523033
523056
  registerCleanup(async () => {
@@ -523811,7 +523834,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523811
523834
  pendingHookMessages
523812
523835
  }, renderAndRun);
523813
523836
  }
523814
- }).version("1.7.4 (localclawd)", "-v, --version", "Output the version number");
523837
+ }).version("1.7.5 (localclawd)", "-v, --version", "Output the version number");
523815
523838
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523816
523839
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523817
523840
  if (canUserConfigureAdvisor()) {
@@ -524325,7 +524348,7 @@ if (false) {}
524325
524348
  async function main2() {
524326
524349
  const args = process.argv.slice(2);
524327
524350
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
524328
- console.log(`${"1.7.4"} (localclawd)`);
524351
+ console.log(`${"1.7.5"} (localclawd)`);
524329
524352
  return;
524330
524353
  }
524331
524354
  const {
@@ -524408,4 +524431,4 @@ localclawd crashed: ${msg}
524408
524431
  process.exit(1);
524409
524432
  });
524410
524433
 
524411
- //# debugId=C151B86F9E2FE86A64756E2164756E21
524434
+ //# debugId=721C36FBC52E5DC964756E2164756E21