localclawd 1.7.8 → 1.8.0

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 +669 -658
  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.8"}`;
87611
+ return `claude-code/${"1.8.0"}`;
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.8"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.8.0"} (${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.8"}${suffix}`;
87647
+ return `claude-code/${"1.8.0"}${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.8"}.${fingerprint}`;
130843
+ const version = `${"1.8.0"}.${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.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.8.0".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.8",
147072
+ version: "1.8.0",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T15:04:15.342Z",
147074
+ buildTime: "2026-05-07T15:13:54.479Z",
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.8";
179650
+ attributes["app.version"] = "1.8.0";
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.8";
242451
+ return "1.8.0";
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.8",
247725
+ version: "1.8.0",
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.8",
248067
+ version: "1.8.0",
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.8");
262469
+ return computeFingerprint(firstMessageText, "1.8.0");
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.8");
262511
+ const fingerprint = computeFingerprint(messageText, "1.8.0");
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.8",
283259
+ appVersion: "1.8.0",
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.8");
284324
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.8.0");
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.8"
284364
+ [ATTR_SERVICE_VERSION4]: "1.8.0"
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.8");
284409
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.8.0");
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.8");
284429
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.8.0");
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.8");
284491
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.8.0");
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.8" : "unknown";
285681
+ const version = typeof MACRO !== "undefined" ? "1.8.0" : "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.8", maxVersion)) {
286623
- logForDebugging(`Native installer: current version ${"1.7.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
286622
+ if (gte("1.8.0", maxVersion)) {
286623
+ logForDebugging(`Native installer: current version ${"1.8.0"} 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.8" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286634
+ if (!forceReinstall && version === "1.8.0" && 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,
@@ -331760,7 +331760,7 @@ function getAnthropicEnvMetadata() {
331760
331760
  function getBuildAgeMinutes() {
331761
331761
  if (false)
331762
331762
  ;
331763
- const buildTime = new Date("2026-05-07T15:04:15.342Z").getTime();
331763
+ const buildTime = new Date("2026-05-07T15:13:54.479Z").getTime();
331764
331764
  if (isNaN(buildTime))
331765
331765
  return;
331766
331766
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -360590,7 +360590,7 @@ function Feedback({
360590
360590
  platform: env3.platform,
360591
360591
  gitRepo: envInfo.isGit,
360592
360592
  terminal: env3.terminal,
360593
- version: "1.7.8",
360593
+ version: "1.8.0",
360594
360594
  transcript: normalizeMessagesForAPI(messages),
360595
360595
  errors: sanitizedErrors,
360596
360596
  lastApiRequest: getLastAPIRequest(),
@@ -360782,7 +360782,7 @@ function Feedback({
360782
360782
  ", ",
360783
360783
  env3.terminal,
360784
360784
  ", v",
360785
- "1.7.8"
360785
+ "1.8.0"
360786
360786
  ]
360787
360787
  }, undefined, true, undefined, this)
360788
360788
  ]
@@ -360888,7 +360888,7 @@ ${sanitizedDescription}
360888
360888
  ` + `**Environment Info**
360889
360889
  ` + `- Platform: ${env3.platform}
360890
360890
  ` + `- Terminal: ${env3.terminal}
360891
- ` + `- Version: ${"1.7.8"}
360891
+ ` + `- Version: ${"1.8.0"}
360892
360892
  ` + `- Feedback ID: ${feedbackId}
360893
360893
  ` + `
360894
360894
  **Errors**
@@ -363516,7 +363516,7 @@ function buildPrimarySection() {
363516
363516
  }, undefined, false, undefined, this);
363517
363517
  return [{
363518
363518
  label: "Version",
363519
- value: "1.7.8"
363519
+ value: "1.8.0"
363520
363520
  }, {
363521
363521
  label: "Session name",
363522
363522
  value: nameValue
@@ -368197,7 +368197,7 @@ function Config({
368197
368197
  }
368198
368198
  }, undefined, false, undefined, this)
368199
368199
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368200
- currentVersion: "1.7.8",
368200
+ currentVersion: "1.8.0",
368201
368201
  onChoice: (choice) => {
368202
368202
  setShowSubmenu(null);
368203
368203
  setTabsHidden(false);
@@ -368209,7 +368209,7 @@ function Config({
368209
368209
  autoUpdatesChannel: "stable"
368210
368210
  };
368211
368211
  if (choice === "stay") {
368212
- newSettings.minimumVersion = "1.7.8";
368212
+ newSettings.minimumVersion = "1.8.0";
368213
368213
  }
368214
368214
  updateSettingsForSource("userSettings", newSettings);
368215
368215
  setSettingsData((prev_27) => ({
@@ -374730,7 +374730,9 @@ var exports_image_pipeline = {};
374730
374730
  __export(exports_image_pipeline, {
374731
374731
  call: () => call20
374732
374732
  });
374733
- function Banner({
374733
+ import { mkdir as mkdir35, writeFile as writeFile37 } from "fs/promises";
374734
+ import { join as join113 } from "path";
374735
+ function PipelineCard({
374734
374736
  title,
374735
374737
  lines,
374736
374738
  color: color3,
@@ -374750,88 +374752,175 @@ function Banner({
374750
374752
  children: title
374751
374753
  }, undefined, false, undefined, this),
374752
374754
  lines.map((line, i2) => /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374753
- dimColor: i2 > 0,
374755
+ dimColor: line === "",
374754
374756
  children: line
374755
374757
  }, i2, false, undefined, this))
374756
374758
  ]
374757
374759
  }, undefined, true, undefined, this);
374758
374760
  }
374759
- async function showStatus(onDone, projectRoot) {
374760
- const config2 = await loadConfig(projectRoot);
374761
- const backendUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374762
- const active = await detectComfyUI(backendUrl);
374763
- let urlToUse = backendUrl;
374764
- let autoDetected = false;
374765
- if (!active && backendUrl !== DEFAULT_COMFYUI_URL) {
374766
- const localActive = await detectComfyUI(DEFAULT_COMFYUI_URL);
374767
- if (localActive) {
374768
- urlToUse = DEFAULT_COMFYUI_URL;
374769
- autoDetected = true;
374770
- }
374771
- }
374772
- const prompts = await listPrompts(projectRoot);
374773
- const workflows = await listWorkflows(projectRoot);
374774
- const statusLine = active || autoDetected ? `● ComfyUI active at ${urlToUse}` : `○ ComfyUI not found at ${urlToUse}`;
374775
- const lines = [
374776
- statusLine,
374777
- ` Config: .localclawd/image-pipeline/config.json${config2 ? "" : " (not scaffolded)"}`,
374778
- ` Prompts: ${prompts.length} template${prompts.length !== 1 ? "s" : ""} | Workflows: ${workflows.length}`,
374779
- "",
374780
- " Commands:",
374781
- " /image-pipeline setup — scaffold project dirs",
374782
- " /image-pipeline generate <prompt> — submit to ComfyUI",
374783
- " /image-pipeline list — list templates",
374784
- " /image-pipeline config <url> — set backend URL"
374785
- ];
374786
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374787
- title: "◆ Image Pipeline",
374788
- lines,
374789
- color: active || autoDetected ? "green" : "yellow",
374790
- onReady: () => onDone(undefined)
374791
- }, undefined, false, undefined, this);
374761
+ function timestamp3() {
374762
+ const d = new Date;
374763
+ const pad = (n) => String(n).padStart(2, "0");
374764
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}_${pad(d.getHours())}-${pad(d.getMinutes())}-${pad(d.getSeconds())}`;
374792
374765
  }
374793
- async function runGenerate(onDone, projectRoot, prompt) {
374794
- if (!prompt.trim()) {
374795
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374766
+ function slugify3(text, maxLen = 40) {
374767
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
374768
+ }
374769
+ async function pickBackend(config2) {
374770
+ const configured = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374771
+ if (await detectComfyUI(DEFAULT_COMFYUI_URL))
374772
+ return DEFAULT_COMFYUI_URL;
374773
+ if (configured !== DEFAULT_COMFYUI_URL && await detectComfyUI(configured))
374774
+ return configured;
374775
+ return null;
374776
+ }
374777
+ var React59, jsx_dev_runtime197, call20 = async (onDone, _context, args) => {
374778
+ const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
374779
+ const projectRoot = getOriginalCwd2() ?? process.cwd();
374780
+ const rawArgs = args?.trim() ?? "";
374781
+ const [subcmd, ...rest] = rawArgs ? rawArgs.split(/\s+/) : [""];
374782
+ const restText = rest.join(" ").trim();
374783
+ if (!subcmd) {
374784
+ const config3 = await loadConfig(projectRoot);
374785
+ const backendUrl = config3?.backendUrl ?? DEFAULT_COMFYUI_URL;
374786
+ const active = await detectComfyUI(backendUrl);
374787
+ const prompts = await listPrompts(projectRoot);
374788
+ const workflows = await listWorkflows(projectRoot);
374789
+ const scaffolded = config3 !== null;
374790
+ const lines2 = [
374791
+ active ? `● ComfyUI active at ${backendUrl}` : `○ ComfyUI not found at ${backendUrl}`,
374792
+ scaffolded ? ` Scaffold: .localclawd/image-pipeline/ (${prompts.length} prompts, ${workflows.length} workflows)` : " Not scaffolded — run /image-pipeline setup",
374793
+ "",
374794
+ " /image-pipeline setup scaffold project dirs",
374795
+ " /image-pipeline generate <prompt> generate and save image",
374796
+ " /image-pipeline config <url> set ComfyUI URL",
374797
+ " /image-pipeline list list templates"
374798
+ ];
374799
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374800
+ title: "◆ Image Pipeline",
374801
+ lines: lines2,
374802
+ color: active ? "green" : "yellow",
374803
+ onReady: () => onDone(undefined)
374804
+ }, undefined, false, undefined, this);
374805
+ }
374806
+ if (subcmd === "setup") {
374807
+ const { created, alreadyExisted } = await scaffoldProject(projectRoot);
374808
+ const config3 = await loadConfig(projectRoot);
374809
+ const backendUrl = config3?.backendUrl ?? DEFAULT_COMFYUI_URL;
374810
+ const active = await detectComfyUI(backendUrl);
374811
+ const lines2 = [
374812
+ active ? `● ComfyUI active at ${backendUrl}` : `○ ComfyUI not detected at ${backendUrl}`,
374813
+ ""
374814
+ ];
374815
+ if (alreadyExisted) {
374816
+ lines2.push(" Pipeline already scaffolded.");
374817
+ } else {
374818
+ lines2.push(` Created ${created.length} files:`);
374819
+ for (const f of created)
374820
+ lines2.push(` + ${f}`);
374821
+ }
374822
+ if (!active) {
374823
+ lines2.push("", " To connect ComfyUI:", " /image-pipeline config http://<host>:8188");
374824
+ }
374825
+ lines2.push("", " Generated images will be saved to:", ` ${join113(projectRoot, ".localclawd", "image-pipeline", "generated")}`);
374826
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374827
+ title: "◆ Image Pipeline — Setup",
374828
+ lines: lines2,
374829
+ color: active ? "green" : "yellow",
374830
+ onReady: () => onDone(undefined)
374831
+ }, undefined, false, undefined, this);
374832
+ }
374833
+ if (subcmd === "config") {
374834
+ const newUrl = restText;
374835
+ if (!newUrl || !newUrl.startsWith("http")) {
374836
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374837
+ title: "◆ Image Pipeline — Config",
374838
+ lines: ["Usage: /image-pipeline config http://<host>:8188"],
374839
+ color: "yellow",
374840
+ onReady: () => onDone(undefined)
374841
+ }, undefined, false, undefined, this);
374842
+ }
374843
+ const existing = await loadConfig(projectRoot) ?? {
374844
+ backendUrl: DEFAULT_COMFYUI_URL,
374845
+ defaultWidth: 512,
374846
+ defaultHeight: 512,
374847
+ defaultSteps: 20,
374848
+ defaultCfg: 7,
374849
+ defaultSampler: "euler",
374850
+ defaultModel: "",
374851
+ outputDir: ".localclawd/image-pipeline/generated"
374852
+ };
374853
+ existing.backendUrl = newUrl;
374854
+ await saveConfig2(projectRoot, existing);
374855
+ const active = await detectComfyUI(newUrl);
374856
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374857
+ title: "◆ Image Pipeline — Config Saved",
374858
+ lines: [
374859
+ ` Backend URL: ${newUrl}`,
374860
+ active ? " ● ComfyUI reachable" : " ○ ComfyUI not reachable (saved anyway)"
374861
+ ],
374862
+ color: active ? "green" : "yellow",
374863
+ onReady: () => onDone(undefined)
374864
+ }, undefined, false, undefined, this);
374865
+ }
374866
+ if (subcmd === "list") {
374867
+ const [prompts, workflows] = await Promise.all([listPrompts(projectRoot), listWorkflows(projectRoot)]);
374868
+ const lines2 = [];
374869
+ if (prompts.length === 0 && workflows.length === 0) {
374870
+ lines2.push(" No templates yet — run /image-pipeline setup");
374871
+ } else {
374872
+ if (prompts.length > 0) {
374873
+ lines2.push(" Prompt templates:");
374874
+ for (const p of prompts)
374875
+ lines2.push(` • prompts/${p}`);
374876
+ }
374877
+ if (workflows.length > 0) {
374878
+ lines2.push(" Workflows:");
374879
+ for (const w2 of workflows)
374880
+ lines2.push(` • workflows/${w2}`);
374881
+ }
374882
+ }
374883
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374884
+ title: "◆ Image Pipeline — Templates",
374885
+ lines: lines2,
374886
+ onReady: () => onDone(undefined)
374887
+ }, undefined, false, undefined, this);
374888
+ }
374889
+ const promptText = subcmd === "generate" || subcmd === "gen" ? restText : rawArgs;
374890
+ if (!promptText) {
374891
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374796
374892
  title: "◆ Image Pipeline — Generate",
374797
- lines: ["Usage: /image-pipeline generate <positive prompt>"],
374893
+ lines: [" Usage: /image-pipeline generate <prompt>"],
374798
374894
  color: "yellow",
374799
374895
  onReady: () => onDone(undefined)
374800
374896
  }, undefined, false, undefined, this);
374801
374897
  }
374802
374898
  const config2 = await loadConfig(projectRoot);
374803
- const backendUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374804
- let urlToUse = backendUrl;
374805
- const active = await detectComfyUI(backendUrl);
374806
- if (!active && backendUrl !== DEFAULT_COMFYUI_URL) {
374807
- if (await detectComfyUI(DEFAULT_COMFYUI_URL)) {
374808
- urlToUse = DEFAULT_COMFYUI_URL;
374809
- }
374810
- }
374811
- if (!await detectComfyUI(urlToUse)) {
374812
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374813
- title: "◆ Image Pipeline — Generate Failed",
374899
+ const backend = await pickBackend(config2);
374900
+ if (!backend) {
374901
+ const tried = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374902
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374903
+ title: "◆ Image Pipeline — No Backend",
374814
374904
  lines: [
374815
- `ComfyUI not reachable at ${urlToUse}`,
374816
- "Start ComfyUI or run /image-pipeline config <url> to set a remote backend."
374905
+ ` ComfyUI not reachable at ${tried}`,
374906
+ " Start ComfyUI or run: /image-pipeline config <url>"
374817
374907
  ],
374818
374908
  color: "red",
374819
374909
  onReady: () => onDone(undefined)
374820
374910
  }, undefined, false, undefined, this);
374821
374911
  }
374822
- const negativePrompt = config2 ? "" : "blurry, low quality, watermark";
374912
+ const model = config2?.defaultModel || "v1-5-pruned-emaonly.safetensors";
374823
374913
  const width = config2?.defaultWidth ?? 512;
374824
374914
  const height = config2?.defaultHeight ?? 512;
374825
374915
  const steps = config2?.defaultSteps ?? 20;
374826
374916
  const cfg = config2?.defaultCfg ?? 7;
374827
374917
  const sampler = config2?.defaultSampler ?? "euler";
374828
- const model = config2?.defaultModel || "v1-5-pruned-emaonly.safetensors";
374829
- const seed = Math.floor(Math.random() * 2 ** 32);
374918
+ const seed = Math.floor(Math.random() * 4294967296);
374830
374919
  const workflow = {
374831
374920
  "4": { class_type: "CheckpointLoaderSimple", inputs: { ckpt_name: model } },
374832
374921
  "5": { class_type: "EmptyLatentImage", inputs: { width, height, batch_size: 1 } },
374833
- "6": { class_type: "CLIPTextEncode", inputs: { clip: ["4", 1], text: prompt } },
374834
- "7": { class_type: "CLIPTextEncode", inputs: { clip: ["4", 1], text: negativePrompt } },
374922
+ "6": { class_type: "CLIPTextEncode", inputs: { clip: ["4", 1], text: promptText } },
374923
+ "7": { class_type: "CLIPTextEncode", inputs: { clip: ["4", 1], text: "blurry, low quality, watermark, deformed" } },
374835
374924
  "3": {
374836
374925
  class_type: "KSampler",
374837
374926
  inputs: {
@@ -374852,137 +374941,59 @@ async function runGenerate(onDone, projectRoot, prompt) {
374852
374941
  };
374853
374942
  let queued;
374854
374943
  try {
374855
- queued = await queuePrompt(urlToUse, workflow);
374944
+ queued = await queuePrompt(backend, workflow);
374856
374945
  } catch (e) {
374857
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374946
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374858
374947
  title: "◆ Image Pipeline — Queue Error",
374859
- lines: [String(e)],
374948
+ lines: [` ${String(e)}`],
374860
374949
  color: "red",
374861
374950
  onReady: () => onDone(undefined)
374862
374951
  }, undefined, false, undefined, this);
374863
374952
  }
374864
- const result = await pollForCompletion(urlToUse, queued.prompt_id);
374865
- const images = result ? extractOutputImages(result) : [];
374866
- const lines = result ? [
374867
- `Job complete: ${queued.prompt_id}`,
374868
- `Output file${images.length !== 1 ? "s" : ""}: ${images.join(", ") || "(check ComfyUI output folder)"}`,
374869
- `Seed: ${seed} · ${steps} steps · ${width}×${height}`
374870
- ] : [
374871
- `Job queued: ${queued.prompt_id}`,
374872
- "Timed out waiting for completion — check ComfyUI directly.",
374873
- `URL: ${urlToUse}/history/${queued.prompt_id}`
374874
- ];
374875
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374876
- title: "◆ Image Pipeline — Generate",
374877
- lines,
374878
- color: result ? "green" : "yellow",
374879
- onReady: () => onDone(undefined)
374880
- }, undefined, false, undefined, this);
374881
- }
374882
- async function showList(onDone, projectRoot) {
374883
- const [prompts, workflows] = await Promise.all([listPrompts(projectRoot), listWorkflows(projectRoot)]);
374884
- const lines = [];
374885
- if (prompts.length === 0 && workflows.length === 0) {
374886
- lines.push("No templates yet. Run /image-pipeline setup to scaffold the project.");
374887
- } else {
374888
- if (prompts.length > 0) {
374889
- lines.push("Prompt templates:");
374890
- for (const p of prompts)
374891
- lines.push(` • prompts/${p}`);
374892
- }
374893
- if (workflows.length > 0) {
374894
- lines.push("Workflows:");
374895
- for (const w2 of workflows)
374896
- lines.push(` • workflows/${w2}`);
374897
- }
374898
- }
374899
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374900
- title: "◆ Image Pipeline — Templates",
374901
- lines,
374902
- onReady: () => onDone(undefined)
374903
- }, undefined, false, undefined, this);
374904
- }
374905
- async function updateConfig(onDone, projectRoot, newUrl) {
374906
- if (!newUrl.startsWith("http")) {
374907
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374908
- title: "◆ Image Pipeline — Config",
374909
- lines: ["Invalid URL. Example: /image-pipeline config http://192.168.1.50:8188"],
374953
+ const result = await pollForCompletion(backend, queued.prompt_id);
374954
+ if (!result) {
374955
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374956
+ title: "◆ Image Pipeline — Timed Out",
374957
+ lines: [
374958
+ ` Job queued: ${queued.prompt_id}`,
374959
+ ` Check: ${backend}/history/${queued.prompt_id}`
374960
+ ],
374910
374961
  color: "yellow",
374911
374962
  onReady: () => onDone(undefined)
374912
374963
  }, undefined, false, undefined, this);
374913
374964
  }
374914
- const existing = await loadConfig(projectRoot) ?? {
374915
- backendUrl: DEFAULT_COMFYUI_URL,
374916
- defaultWidth: 512,
374917
- defaultHeight: 512,
374918
- defaultSteps: 20,
374919
- defaultCfg: 7,
374920
- defaultSampler: "euler",
374921
- defaultModel: "",
374922
- outputDir: ".localclawd/image-pipeline/outputs"
374923
- };
374924
- existing.backendUrl = newUrl;
374925
- await saveConfig2(projectRoot, existing);
374926
- const active = await detectComfyUI(newUrl);
374927
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374928
- title: "◆ Image Pipeline — Config Updated",
374929
- lines: [
374930
- `Backend URL: ${newUrl}`,
374931
- active ? "● ComfyUI reachable" : "○ ComfyUI not reachable at that URL"
374932
- ],
374933
- color: active ? "green" : "yellow",
374934
- onReady: () => onDone(undefined)
374935
- }, undefined, false, undefined, this);
374936
- }
374937
- async function runSetup(onDone, projectRoot) {
374938
- const { created, alreadyExisted } = await scaffoldProject(projectRoot);
374939
- const config2 = await loadConfig(projectRoot);
374940
- const configuredUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374941
- const localActive = await detectComfyUI(DEFAULT_COMFYUI_URL);
374942
- let activeUrl = null;
374943
- if (localActive) {
374944
- activeUrl = DEFAULT_COMFYUI_URL;
374945
- } else if (configuredUrl !== DEFAULT_COMFYUI_URL && await detectComfyUI(configuredUrl)) {
374946
- activeUrl = configuredUrl;
374965
+ const outputDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated");
374966
+ await mkdir35(outputDir, { recursive: true });
374967
+ const comfyImages = extractOutputImages(result);
374968
+ const savedPaths = [];
374969
+ for (const imgFilename of comfyImages) {
374970
+ const subfolder = Object.values(result.outputs).flatMap((o) => o.images ?? []).find((img) => img.filename === imgFilename)?.subfolder ?? "";
374971
+ try {
374972
+ const params = new URLSearchParams({ filename: imgFilename, subfolder, type: "output" });
374973
+ const res = await fetch(`${backend}/view?${params}`);
374974
+ if (res.ok) {
374975
+ const outName = `${timestamp3()}_${slugify3(promptText)}.png`;
374976
+ const outPath = join113(outputDir, outName);
374977
+ await writeFile37(outPath, Buffer.from(await res.arrayBuffer()));
374978
+ savedPaths.push(outPath);
374979
+ }
374980
+ } catch {}
374947
374981
  }
374948
- const comfyLine = activeUrl ? `● ComfyUI active at ${activeUrl}` : `○ ComfyUI not detected — run: /image-pipeline config <url>`;
374949
- const lines = [
374950
- comfyLine,
374951
- "",
374952
- alreadyExisted ? " Pipeline already scaffolded." : ` Created ${created.length} files under .localclawd/image-pipeline/`
374982
+ const lines = savedPaths.length > 0 ? [
374983
+ ` Saved ${savedPaths.length} image${savedPaths.length !== 1 ? "s" : ""}:`,
374984
+ ...savedPaths.map((p) => ` ${p}`),
374985
+ ` Seed: ${seed} · ${steps} steps · ${width}×${height} · ${model}`
374986
+ ] : [
374987
+ ` Job complete — download failed, images in ComfyUI output folder.`,
374988
+ ` ComfyUI filenames: ${comfyImages.join(", ") || "(none)"}`,
374989
+ ` Seed: ${seed}`
374953
374990
  ];
374954
- if (!alreadyExisted) {
374955
- for (const f of created)
374956
- lines.push(` + ${f}`);
374957
- }
374958
- lines.push("", " Commands:", " /image-pipeline — status", " /image-pipeline generate <prompt> — submit to ComfyUI", " /image-pipeline config <url> — set backend URL", " /image-pipeline list — list templates", " /image <prompt> — quick generate + save to ~/generatedimages/");
374959
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Banner, {
374960
- title: "◆ Image Pipeline — Setup",
374991
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(PipelineCard, {
374992
+ title: "◆ Image Pipeline — Done",
374961
374993
  lines,
374962
- color: activeUrl ? "green" : "yellow",
374994
+ color: savedPaths.length > 0 ? "green" : "yellow",
374963
374995
  onReady: () => onDone(undefined)
374964
374996
  }, undefined, false, undefined, this);
374965
- }
374966
- var React59, jsx_dev_runtime197, call20 = async (onDone, _context, args) => {
374967
- const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
374968
- const projectRoot = getOriginalCwd2() ?? process.cwd();
374969
- const rawArgs = args?.trim() ?? "";
374970
- if (!rawArgs) {
374971
- return showStatus(onDone, projectRoot);
374972
- }
374973
- const [subcmd, ...rest] = rawArgs.split(/\s+/);
374974
- const restText = rest.join(" ").trim();
374975
- if (subcmd === "list") {
374976
- return showList(onDone, projectRoot);
374977
- }
374978
- if (subcmd === "config") {
374979
- return updateConfig(onDone, projectRoot, restText);
374980
- }
374981
- if (subcmd === "generate" || subcmd === "gen") {
374982
- const promptText = restText || rawArgs;
374983
- return runGenerate(onDone, projectRoot, promptText);
374984
- }
374985
- return runSetup(onDone, projectRoot);
374986
374997
  };
374987
374998
  var init_image_pipeline = __esm(() => {
374988
374999
  init_ink2();
@@ -375021,9 +375032,9 @@ var init_telegramSignals = __esm(() => {
375021
375032
 
375022
375033
  // src/services/telegram/telegramKill.ts
375023
375034
  import { readdir as readdir22, unlink as unlink16 } from "fs/promises";
375024
- import { join as join113 } from "path";
375035
+ import { join as join114 } from "path";
375025
375036
  async function killAllInstances() {
375026
- const sessionsDir = join113(getClaudeConfigHomeDir(), "sessions");
375037
+ const sessionsDir = join114(getClaudeConfigHomeDir(), "sessions");
375027
375038
  let files;
375028
375039
  try {
375029
375040
  files = await readdir22(sessionsDir);
@@ -375042,7 +375053,7 @@ async function killAllInstances() {
375042
375053
  killed++;
375043
375054
  logForDebugging(`[telegram-kill] Sent SIGTERM to PID ${pid}`);
375044
375055
  } catch {
375045
- await unlink16(join113(sessionsDir, file)).catch(() => {});
375056
+ await unlink16(join114(sessionsDir, file)).catch(() => {});
375046
375057
  }
375047
375058
  }
375048
375059
  return killed;
@@ -375069,15 +375080,15 @@ function createEmptyState() {
375069
375080
  }
375070
375081
 
375071
375082
  // src/services/director/directorMemoryOps.ts
375072
- import { mkdir as mkdir35, readdir as readdir23, readFile as readFile44, stat as stat38, writeFile as writeFile37 } from "fs/promises";
375073
- import { basename as basename34, join as join114, resolve as resolve36 } from "path";
375083
+ import { mkdir as mkdir36, readdir as readdir23, readFile as readFile44, stat as stat38, writeFile as writeFile38 } from "fs/promises";
375084
+ import { basename as basename34, join as join115, resolve as resolve36 } from "path";
375074
375085
  function setDirectorProjectRoot(projectPath) {
375075
- _projectStateDir = join114(projectPath, ".localclawd");
375086
+ _projectStateDir = join115(projectPath, ".localclawd");
375076
375087
  }
375077
375088
  function getStatePath() {
375078
375089
  if (_projectStateDir)
375079
- return join114(_projectStateDir, "director-memory.json");
375080
- return join114(GLOBAL_DIRECTOR_DIR, "state.json");
375090
+ return join115(_projectStateDir, "director-memory.json");
375091
+ return join115(GLOBAL_DIRECTOR_DIR, "state.json");
375081
375092
  }
375082
375093
  async function loadDirectorState() {
375083
375094
  try {
@@ -375092,15 +375103,15 @@ async function loadDirectorState() {
375092
375103
  }
375093
375104
  async function saveDirectorState(state) {
375094
375105
  const dir = _projectStateDir || GLOBAL_DIRECTOR_DIR;
375095
- await mkdir35(dir, { recursive: true });
375096
- await writeFile37(getStatePath(), JSON.stringify(state, null, 2), "utf-8");
375106
+ await mkdir36(dir, { recursive: true });
375107
+ await writeFile38(getStatePath(), JSON.stringify(state, null, 2), "utf-8");
375097
375108
  }
375098
- function slugify3(path12) {
375109
+ function slugify4(path12) {
375099
375110
  return basename34(resolve36(path12)).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
375100
375111
  }
375101
375112
  async function detectGitRemote(projectPath) {
375102
375113
  try {
375103
- const configPath = join114(projectPath, ".git", "config");
375114
+ const configPath = join115(projectPath, ".git", "config");
375104
375115
  const config2 = await readFile44(configPath, "utf-8");
375105
375116
  const match = config2.match(/\[remote "origin"\][^[]*url\s*=\s*(.+)/m);
375106
375117
  return match?.[1]?.trim();
@@ -375110,12 +375121,12 @@ async function detectGitRemote(projectPath) {
375110
375121
  }
375111
375122
  async function detectDescription(projectPath) {
375112
375123
  try {
375113
- const pkg = JSON.parse(await readFile44(join114(projectPath, "package.json"), "utf-8"));
375124
+ const pkg = JSON.parse(await readFile44(join115(projectPath, "package.json"), "utf-8"));
375114
375125
  if (pkg.description)
375115
375126
  return pkg.description;
375116
375127
  } catch {}
375117
375128
  try {
375118
- const readme = await readFile44(join114(projectPath, "README.md"), "utf-8");
375129
+ const readme = await readFile44(join115(projectPath, "README.md"), "utf-8");
375119
375130
  const firstLine = readme.split(`
375120
375131
  `).find((l) => l.trim() && !l.startsWith("#"));
375121
375132
  if (firstLine)
@@ -375133,7 +375144,7 @@ function generateTags(project) {
375133
375144
  }
375134
375145
  async function registerProject(state, projectPath, description) {
375135
375146
  const absPath = resolve36(projectPath);
375136
- const id = slugify3(absPath);
375147
+ const id = slugify4(absPath);
375137
375148
  const existing = state.projects.find((p) => p.id === id || p.path === absPath);
375138
375149
  if (existing) {
375139
375150
  existing.lastActive = Date.now();
@@ -375169,7 +375180,7 @@ async function indexProjectFiles(state, projectId, projectPath) {
375169
375180
  const absPath = resolve36(projectPath);
375170
375181
  for (const name of KEY_FILES) {
375171
375182
  try {
375172
- const filePath = join114(absPath, name);
375183
+ const filePath = join115(absPath, name);
375173
375184
  await stat38(filePath);
375174
375185
  const content = await readFile44(filePath, "utf-8");
375175
375186
  const firstLine = content.split(`
@@ -375184,7 +375195,7 @@ async function indexProjectFiles(state, projectId, projectPath) {
375184
375195
  } catch {}
375185
375196
  }
375186
375197
  try {
375187
- const srcDir = join114(absPath, "src");
375198
+ const srcDir = join115(absPath, "src");
375188
375199
  const srcFiles = await readdir23(srcDir);
375189
375200
  for (const file of srcFiles.slice(0, 30)) {
375190
375201
  if (!file.endsWith(".ts") && !file.endsWith(".tsx") && !file.endsWith(".js") && !file.endsWith(".py") && !file.endsWith(".rs") && !file.endsWith(".go"))
@@ -375257,8 +375268,8 @@ var GLOBAL_DIRECTOR_DIR, DIRECTOR_MEMORY_DIR, _projectStateDir = "", KEY_FILES,
375257
375268
  var init_directorMemoryOps = __esm(() => {
375258
375269
  init_debug();
375259
375270
  init_envUtils();
375260
- GLOBAL_DIRECTOR_DIR = join114(getClaudeConfigHomeDir(), "director");
375261
- DIRECTOR_MEMORY_DIR = join114(GLOBAL_DIRECTOR_DIR, "memory");
375271
+ GLOBAL_DIRECTOR_DIR = join115(getClaudeConfigHomeDir(), "director");
375272
+ DIRECTOR_MEMORY_DIR = join115(GLOBAL_DIRECTOR_DIR, "memory");
375262
375273
  KEY_FILES = [
375263
375274
  "package.json",
375264
375275
  "README.md",
@@ -375611,11 +375622,11 @@ async function initSlack() {
375611
375622
  if (!token || !channelId) {
375612
375623
  try {
375613
375624
  const { readFile: readFile45 } = await import("fs/promises");
375614
- const { join: join115 } = await import("path");
375625
+ const { join: join116 } = await import("path");
375615
375626
  const { homedir: homedir28 } = await import("os");
375616
375627
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
375617
- const newPath = join115(getClaudeConfigHomeDir3(), "slack.json");
375618
- const legacyPath = join115(homedir28(), ".claude", "slack.json");
375628
+ const newPath = join116(getClaudeConfigHomeDir3(), "slack.json");
375629
+ const legacyPath = join116(homedir28(), ".claude", "slack.json");
375619
375630
  let configPath = newPath;
375620
375631
  try {
375621
375632
  await (await import("fs/promises")).stat(newPath);
@@ -375931,11 +375942,11 @@ async function initDiscord() {
375931
375942
  if (!token || !channelId) {
375932
375943
  try {
375933
375944
  const { readFile: readFile45 } = await import("fs/promises");
375934
- const { join: join115 } = await import("path");
375945
+ const { join: join116 } = await import("path");
375935
375946
  const { homedir: homedir28 } = await import("os");
375936
375947
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
375937
- const newPath = join115(getClaudeConfigHomeDir3(), "discord.json");
375938
- const legacyPath = join115(homedir28(), ".claude", "discord.json");
375948
+ const newPath = join116(getClaudeConfigHomeDir3(), "discord.json");
375949
+ const legacyPath = join116(homedir28(), ".claude", "discord.json");
375939
375950
  let configPath = newPath;
375940
375951
  try {
375941
375952
  await (await import("fs/promises")).stat(newPath);
@@ -376328,8 +376339,8 @@ __export(exports_scheduler, {
376328
376339
  getSchedules: () => getSchedules,
376329
376340
  addSchedule: () => addSchedule
376330
376341
  });
376331
- import { mkdir as mkdir36, readFile as readFile45, writeFile as writeFile38 } from "fs/promises";
376332
- import { join as join115 } from "path";
376342
+ import { mkdir as mkdir37, readFile as readFile45, writeFile as writeFile39 } from "fs/promises";
376343
+ import { join as join116 } from "path";
376333
376344
  async function loadSchedules() {
376334
376345
  try {
376335
376346
  const raw = await readFile45(SCHEDULES_PATH, "utf-8");
@@ -376342,8 +376353,8 @@ async function loadSchedules() {
376342
376353
  }
376343
376354
  }
376344
376355
  async function saveSchedules(file) {
376345
- await mkdir36(getClaudeConfigHomeDir(), { recursive: true });
376346
- await writeFile38(SCHEDULES_PATH, JSON.stringify(file, null, 2), "utf-8");
376356
+ await mkdir37(getClaudeConfigHomeDir(), { recursive: true });
376357
+ await writeFile39(SCHEDULES_PATH, JSON.stringify(file, null, 2), "utf-8");
376347
376358
  }
376348
376359
  function nextRunTime(expr, from = Date.now()) {
376349
376360
  const trimmed = expr.trim().toLowerCase();
@@ -376547,7 +376558,7 @@ var SCHEDULES_PATH, TICK_INTERVAL_MS = 30000, _tickTimer = null;
376547
376558
  var init_scheduler = __esm(() => {
376548
376559
  init_debug();
376549
376560
  init_envUtils();
376550
- SCHEDULES_PATH = join115(getClaudeConfigHomeDir(), "schedules.json");
376561
+ SCHEDULES_PATH = join116(getClaudeConfigHomeDir(), "schedules.json");
376551
376562
  });
376552
376563
 
376553
376564
  // src/services/telegram/telegramBot.ts
@@ -376679,7 +376690,7 @@ async function initTelegram() {
376679
376690
  if (!token || !chatIdStr) {
376680
376691
  try {
376681
376692
  const { readFile: readFile46, stat: stat39 } = await import("fs/promises");
376682
- const { join: join116 } = await import("path");
376693
+ const { join: join117 } = await import("path");
376683
376694
  const { homedir: homedir28 } = await import("os");
376684
376695
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
376685
376696
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
@@ -376687,10 +376698,10 @@ async function initTelegram() {
376687
376698
  try {
376688
376699
  const cwd2 = getOriginalCwd2();
376689
376700
  if (cwd2)
376690
- candidates.push(join116(cwd2, ".localclawd", "telegram.json"));
376701
+ candidates.push(join117(cwd2, ".localclawd", "telegram.json"));
376691
376702
  } catch {}
376692
- candidates.push(join116(getClaudeConfigHomeDir3(), "telegram.json"));
376693
- candidates.push(join116(homedir28(), ".claude", "telegram.json"));
376703
+ candidates.push(join117(getClaudeConfigHomeDir3(), "telegram.json"));
376704
+ candidates.push(join117(homedir28(), ".claude", "telegram.json"));
376694
376705
  let configPath = null;
376695
376706
  for (const p of candidates) {
376696
376707
  try {
@@ -377289,8 +377300,8 @@ var exports_telegram = {};
377289
377300
  __export(exports_telegram, {
377290
377301
  call: () => call22
377291
377302
  });
377292
- import { writeFile as writeFile39, mkdir as mkdir37 } from "fs/promises";
377293
- import { join as join116 } from "path";
377303
+ import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
377304
+ import { join as join117 } from "path";
377294
377305
  function TelegramSetup({ onDone }) {
377295
377306
  const [step, setStep] = React61.useState("instructions");
377296
377307
  const [token, setToken] = React61.useState("");
@@ -377576,20 +377587,20 @@ async function saveTelegramConfig(token, chatId) {
377576
377587
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
377577
377588
  const cwd2 = getOriginalCwd2();
377578
377589
  if (cwd2) {
377579
- const projDir = join116(cwd2, ".localclawd");
377580
- await mkdir37(projDir, { recursive: true });
377581
- configPath = join116(projDir, "telegram.json");
377590
+ const projDir = join117(cwd2, ".localclawd");
377591
+ await mkdir38(projDir, { recursive: true });
377592
+ configPath = join117(projDir, "telegram.json");
377582
377593
  } else {
377583
377594
  const dir = getClaudeConfigHomeDir();
377584
- await mkdir37(dir, { recursive: true });
377585
- configPath = join116(dir, "telegram.json");
377595
+ await mkdir38(dir, { recursive: true });
377596
+ configPath = join117(dir, "telegram.json");
377586
377597
  }
377587
377598
  } catch {
377588
377599
  const dir = getClaudeConfigHomeDir();
377589
- await mkdir37(dir, { recursive: true });
377590
- configPath = join116(dir, "telegram.json");
377600
+ await mkdir38(dir, { recursive: true });
377601
+ configPath = join117(dir, "telegram.json");
377591
377602
  }
377592
- await writeFile39(configPath, JSON.stringify({ token, chatId }, null, 2), "utf-8");
377603
+ await writeFile40(configPath, JSON.stringify({ token, chatId }, null, 2), "utf-8");
377593
377604
  }
377594
377605
  function TelegramStatus({
377595
377606
  onDone
@@ -377799,8 +377810,8 @@ var exports_slack = {};
377799
377810
  __export(exports_slack, {
377800
377811
  call: () => call23
377801
377812
  });
377802
- import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
377803
- import { join as join117 } from "path";
377813
+ import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
377814
+ import { join as join118 } from "path";
377804
377815
  function SlackSetup({ onDone }) {
377805
377816
  const [step, setStep] = React62.useState("instructions");
377806
377817
  const [token, setToken] = React62.useState("");
@@ -378155,9 +378166,9 @@ function SlackSetupDone({
378155
378166
  }
378156
378167
  async function saveSlackConfig(token, channelId, userId) {
378157
378168
  const configDir = getClaudeConfigHomeDir();
378158
- await mkdir38(configDir, { recursive: true });
378159
- const configPath = join117(configDir, "slack.json");
378160
- await writeFile40(configPath, JSON.stringify({ token, channelId, userId: userId ?? null }, null, 2), "utf-8");
378169
+ await mkdir39(configDir, { recursive: true });
378170
+ const configPath = join118(configDir, "slack.json");
378171
+ await writeFile41(configPath, JSON.stringify({ token, channelId, userId: userId ?? null }, null, 2), "utf-8");
378161
378172
  }
378162
378173
  function SlackStatus({
378163
378174
  onDone
@@ -378382,8 +378393,8 @@ var exports_discord = {};
378382
378393
  __export(exports_discord, {
378383
378394
  call: () => call24
378384
378395
  });
378385
- import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
378386
- import { join as join118 } from "path";
378396
+ import { writeFile as writeFile42, mkdir as mkdir40 } from "fs/promises";
378397
+ import { join as join119 } from "path";
378387
378398
  function DiscordSetup({ onDone }) {
378388
378399
  const [step, setStep] = React64.useState("instructions");
378389
378400
  const [token, setToken] = React64.useState("");
@@ -378677,8 +378688,8 @@ function DiscordSetupDone({
378677
378688
  }
378678
378689
  async function saveConfig3(token, channelId, userId) {
378679
378690
  const configDir = getClaudeConfigHomeDir();
378680
- await mkdir39(configDir, { recursive: true });
378681
- await writeFile41(join118(configDir, "discord.json"), JSON.stringify({ token, channelId, userId: userId ?? null }, null, 2), "utf-8");
378691
+ await mkdir40(configDir, { recursive: true });
378692
+ await writeFile42(join119(configDir, "discord.json"), JSON.stringify({ token, channelId, userId: userId ?? null }, null, 2), "utf-8");
378682
378693
  }
378683
378694
  function DiscordStatus({
378684
378695
  onDone
@@ -379210,8 +379221,8 @@ var init_schedule2 = __esm(() => {
379210
379221
  });
379211
379222
 
379212
379223
  // src/services/sessionSearch/sessionSummarize.ts
379213
- import { readdir as readdir24, readFile as readFile46, writeFile as writeFile42, mkdir as mkdir40, stat as stat39 } from "fs/promises";
379214
- import { join as join119 } from "path";
379224
+ import { readdir as readdir24, readFile as readFile46, writeFile as writeFile43, mkdir as mkdir41, stat as stat39 } from "fs/promises";
379225
+ import { join as join120 } from "path";
379215
379226
  import { homedir as homedir28 } from "os";
379216
379227
  function extractText(obj) {
379217
379228
  if (typeof obj === "string")
@@ -379240,7 +379251,7 @@ async function listUnsummarized() {
379240
379251
  for (const f of files) {
379241
379252
  if (!f.endsWith(".json"))
379242
379253
  continue;
379243
- const s = await stat39(join119(SUMMARIES_DIR2, f)).catch(() => null);
379254
+ const s = await stat39(join120(SUMMARIES_DIR2, f)).catch(() => null);
379244
379255
  if (s)
379245
379256
  existing.set(f.replace(/\.json$/, ""), s.mtimeMs);
379246
379257
  }
@@ -379254,7 +379265,7 @@ async function listUnsummarized() {
379254
379265
  continue;
379255
379266
  }
379256
379267
  for (const slug of slugs) {
379257
- const slugDir = join119(projectsDir, slug);
379268
+ const slugDir = join120(projectsDir, slug);
379258
379269
  try {
379259
379270
  const entries = await readdir24(slugDir);
379260
379271
  for (const entry of entries) {
@@ -379264,7 +379275,7 @@ async function listUnsummarized() {
379264
379275
  if (seen.has(sessionId))
379265
379276
  continue;
379266
379277
  seen.add(sessionId);
379267
- const full = join119(slugDir, entry);
379278
+ const full = join120(slugDir, entry);
379268
379279
  const s = await stat39(full).catch(() => null);
379269
379280
  if (!s)
379270
379281
  continue;
@@ -379375,7 +379386,7 @@ ${transcript}`;
379375
379386
  };
379376
379387
  }
379377
379388
  async function summarizeAllPending(limit = 20, onProgress) {
379378
- await mkdir40(SUMMARIES_DIR2, { recursive: true });
379389
+ await mkdir41(SUMMARIES_DIR2, { recursive: true });
379379
379390
  const pending = await listUnsummarized();
379380
379391
  pending.sort((a, b3) => b3.mtime - a.mtime);
379381
379392
  const slice = pending.slice(0, limit);
@@ -379390,7 +379401,7 @@ async function summarizeAllPending(limit = 20, onProgress) {
379390
379401
  continue;
379391
379402
  }
379392
379403
  try {
379393
- await writeFile42(join119(SUMMARIES_DIR2, `${p.sessionId}.json`), JSON.stringify(summary, null, 2), "utf-8");
379404
+ await writeFile43(join120(SUMMARIES_DIR2, `${p.sessionId}.json`), JSON.stringify(summary, null, 2), "utf-8");
379394
379405
  summarized++;
379395
379406
  } catch (e) {
379396
379407
  logForDebugging(`[session-summarize] write failed: ${e}`);
@@ -379407,7 +379418,7 @@ async function loadAllSummaries() {
379407
379418
  if (!f.endsWith(".json"))
379408
379419
  continue;
379409
379420
  try {
379410
- const raw = await readFile46(join119(SUMMARIES_DIR2, f), "utf-8");
379421
+ const raw = await readFile46(join120(SUMMARIES_DIR2, f), "utf-8");
379411
379422
  summaries.push(JSON.parse(raw));
379412
379423
  } catch {}
379413
379424
  }
@@ -379422,15 +379433,15 @@ var init_sessionSummarize = __esm(() => {
379422
379433
  init_envUtils();
379423
379434
  init_providers();
379424
379435
  PROJECTS_DIRS = [
379425
- join119(getClaudeConfigHomeDir(), "projects"),
379426
- join119(homedir28(), ".claude", "projects")
379436
+ join120(getClaudeConfigHomeDir(), "projects"),
379437
+ join120(homedir28(), ".claude", "projects")
379427
379438
  ];
379428
- SUMMARIES_DIR2 = join119(getClaudeConfigHomeDir(), "session-summaries");
379439
+ SUMMARIES_DIR2 = join120(getClaudeConfigHomeDir(), "session-summaries");
379429
379440
  });
379430
379441
 
379431
379442
  // src/services/sessionSearch/fts5Index.ts
379432
379443
  import { readdir as readdir25, readFile as readFile47, stat as stat40 } from "fs/promises";
379433
- import { join as join120 } from "path";
379444
+ import { join as join121 } from "path";
379434
379445
  async function tryOpenDatabase() {
379435
379446
  if (_db)
379436
379447
  return _db;
@@ -379495,7 +379506,7 @@ async function rebuildIndex() {
379495
379506
  continue;
379496
379507
  const sessionId = entry.replace(/\.json$/, "");
379497
379508
  seen.add(sessionId);
379498
- const filePath = join120(SUMMARIES_DIR3, entry);
379509
+ const filePath = join121(SUMMARIES_DIR3, entry);
379499
379510
  let s;
379500
379511
  try {
379501
379512
  s = await stat40(filePath);
@@ -379566,13 +379577,13 @@ var DB_PATH, SUMMARIES_DIR3, _db = null, _available = null;
379566
379577
  var init_fts5Index = __esm(() => {
379567
379578
  init_debug();
379568
379579
  init_envUtils();
379569
- DB_PATH = join120(getClaudeConfigHomeDir(), "sessions.db");
379570
- SUMMARIES_DIR3 = join120(getClaudeConfigHomeDir(), "session-summaries");
379580
+ DB_PATH = join121(getClaudeConfigHomeDir(), "sessions.db");
379581
+ SUMMARIES_DIR3 = join121(getClaudeConfigHomeDir(), "session-summaries");
379571
379582
  });
379572
379583
 
379573
379584
  // src/services/sessionSearch/sessionSearch.ts
379574
379585
  import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
379575
- import { join as join121 } from "path";
379586
+ import { join as join122 } from "path";
379576
379587
  import { homedir as homedir29 } from "os";
379577
379588
  function tokenize6(text) {
379578
379589
  return text.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 2);
@@ -379607,13 +379618,13 @@ async function listSessionFiles() {
379607
379618
  continue;
379608
379619
  }
379609
379620
  for (const slug of projects) {
379610
- const slugDir = join121(projectsDir, slug);
379621
+ const slugDir = join122(projectsDir, slug);
379611
379622
  try {
379612
379623
  const entries = await readdir26(slugDir);
379613
379624
  for (const entry of entries) {
379614
379625
  if (!entry.endsWith(".jsonl"))
379615
379626
  continue;
379616
- const full = join121(slugDir, entry);
379627
+ const full = join122(slugDir, entry);
379617
379628
  if (seen.has(entry))
379618
379629
  continue;
379619
379630
  seen.add(entry);
@@ -379829,8 +379840,8 @@ var init_sessionSearch = __esm(() => {
379829
379840
  init_sessionSummarize();
379830
379841
  init_fts5Index();
379831
379842
  PROJECTS_DIRS2 = [
379832
- join121(getClaudeConfigHomeDir(), "projects"),
379833
- join121(homedir29(), ".claude", "projects")
379843
+ join122(getClaudeConfigHomeDir(), "projects"),
379844
+ join122(homedir29(), ".claude", "projects")
379834
379845
  ];
379835
379846
  MAX_FILE_BYTES = 5 * 1024 * 1024;
379836
379847
  });
@@ -379998,8 +380009,8 @@ var init_summarize_sessions2 = __esm(() => {
379998
380009
  });
379999
380010
 
380000
380011
  // src/services/sessionSearch/trajectoryCompress.ts
380001
- import { readFile as readFile49, writeFile as writeFile43, readdir as readdir27, mkdir as mkdir41, stat as stat42 } from "fs/promises";
380002
- import { join as join122 } from "path";
380012
+ import { readFile as readFile49, writeFile as writeFile44, readdir as readdir27, mkdir as mkdir42, stat as stat42 } from "fs/promises";
380013
+ import { join as join123 } from "path";
380003
380014
  import { homedir as homedir30 } from "os";
380004
380015
  function flattenText(obj) {
380005
380016
  if (typeof obj === "string")
@@ -380083,7 +380094,7 @@ async function compressSession(sessionId, projectSlug) {
380083
380094
  let source = null;
380084
380095
  let sourceStat = null;
380085
380096
  for (const projectsDir of PROJECTS_DIRS3) {
380086
- const candidate = join122(projectsDir, projectSlug, `${sessionId}.jsonl`);
380097
+ const candidate = join123(projectsDir, projectSlug, `${sessionId}.jsonl`);
380087
380098
  try {
380088
380099
  const text = await readFile49(candidate, "utf-8");
380089
380100
  const s = await stat42(candidate);
@@ -380117,8 +380128,8 @@ async function compressSession(sessionId, projectSlug) {
380117
380128
  };
380118
380129
  const serialized = JSON.stringify(trajectory, null, 0);
380119
380130
  trajectory.compressedBytes = Buffer.byteLength(serialized, "utf-8");
380120
- await mkdir41(TRAJECTORIES_DIR2, { recursive: true });
380121
- await writeFile43(join122(TRAJECTORIES_DIR2, `${sessionId}.json`), JSON.stringify(trajectory), "utf-8");
380131
+ await mkdir42(TRAJECTORIES_DIR2, { recursive: true });
380132
+ await writeFile44(join123(TRAJECTORIES_DIR2, `${sessionId}.json`), JSON.stringify(trajectory), "utf-8");
380122
380133
  return trajectory;
380123
380134
  }
380124
380135
  async function compressAllPending(limit = 20) {
@@ -380128,7 +380139,7 @@ async function compressAllPending(limit = 20) {
380128
380139
  for (const f of files) {
380129
380140
  if (!f.endsWith(".json"))
380130
380141
  continue;
380131
- const s = await stat42(join122(TRAJECTORIES_DIR2, f)).catch(() => null);
380142
+ const s = await stat42(join123(TRAJECTORIES_DIR2, f)).catch(() => null);
380132
380143
  if (s)
380133
380144
  existing.set(f.replace(/\.json$/, ""), s.mtimeMs);
380134
380145
  }
@@ -380144,7 +380155,7 @@ async function compressAllPending(limit = 20) {
380144
380155
  }
380145
380156
  for (const slug of slugs) {
380146
380157
  try {
380147
- const entries = await readdir27(join122(projectsDir, slug));
380158
+ const entries = await readdir27(join123(projectsDir, slug));
380148
380159
  for (const entry of entries) {
380149
380160
  if (!entry.endsWith(".jsonl"))
380150
380161
  continue;
@@ -380152,7 +380163,7 @@ async function compressAllPending(limit = 20) {
380152
380163
  if (seen.has(sessionId))
380153
380164
  continue;
380154
380165
  seen.add(sessionId);
380155
- const s = await stat42(join122(projectsDir, slug, entry)).catch(() => null);
380166
+ const s = await stat42(join123(projectsDir, slug, entry)).catch(() => null);
380156
380167
  if (!s)
380157
380168
  continue;
380158
380169
  const have = existing.get(sessionId);
@@ -380192,10 +380203,10 @@ var init_trajectoryCompress = __esm(() => {
380192
380203
  init_debug();
380193
380204
  init_envUtils();
380194
380205
  PROJECTS_DIRS3 = [
380195
- join122(getClaudeConfigHomeDir(), "projects"),
380196
- join122(homedir30(), ".claude", "projects")
380206
+ join123(getClaudeConfigHomeDir(), "projects"),
380207
+ join123(homedir30(), ".claude", "projects")
380197
380208
  ];
380198
- TRAJECTORIES_DIR2 = join122(getClaudeConfigHomeDir(), "trajectories");
380209
+ TRAJECTORIES_DIR2 = join123(getClaudeConfigHomeDir(), "trajectories");
380199
380210
  });
380200
380211
 
380201
380212
  // src/commands/compress-sessions/compress-sessions.tsx
@@ -380276,7 +380287,7 @@ var init_compress_sessions2 = __esm(() => {
380276
380287
 
380277
380288
  // src/services/skills/skillDistill.ts
380278
380289
  import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
380279
- import { join as join123 } from "path";
380290
+ import { join as join124 } from "path";
380280
380291
  import { homedir as homedir31 } from "os";
380281
380292
  function extractText3(obj) {
380282
380293
  if (typeof obj === "string")
@@ -380307,13 +380318,13 @@ async function findMostRecentSession() {
380307
380318
  continue;
380308
380319
  }
380309
380320
  for (const slug of slugs) {
380310
- const slugDir = join123(projectsDir, slug);
380321
+ const slugDir = join124(projectsDir, slug);
380311
380322
  try {
380312
380323
  const entries = await readdir28(slugDir);
380313
380324
  for (const entry of entries) {
380314
380325
  if (!entry.endsWith(".jsonl"))
380315
380326
  continue;
380316
- const full = join123(slugDir, entry);
380327
+ const full = join124(slugDir, entry);
380317
380328
  const s = await stat43(full).catch(() => null);
380318
380329
  if (!s)
380319
380330
  continue;
@@ -380437,8 +380448,8 @@ var init_skillDistill = __esm(() => {
380437
380448
  init_envUtils();
380438
380449
  init_providers();
380439
380450
  PROJECTS_DIRS4 = [
380440
- join123(getClaudeConfigHomeDir(), "projects"),
380441
- join123(homedir31(), ".claude", "projects")
380451
+ join124(getClaudeConfigHomeDir(), "projects"),
380452
+ join124(homedir31(), ".claude", "projects")
380442
380453
  ];
380443
380454
  });
380444
380455
 
@@ -381674,8 +381685,8 @@ var init_daytona_run2 = __esm(() => {
381674
381685
  });
381675
381686
 
381676
381687
  // src/services/skills/skillPortable.ts
381677
- import { readdir as readdir29, readFile as readFile51, writeFile as writeFile44, mkdir as mkdir42, stat as stat44 } from "fs/promises";
381678
- import { join as join124, basename as basename35, extname as extname13, resolve as resolve37 } from "path";
381688
+ import { readdir as readdir29, readFile as readFile51, writeFile as writeFile45, mkdir as mkdir43, stat as stat44 } from "fs/promises";
381689
+ import { join as join125, basename as basename35, extname as extname13, resolve as resolve37 } from "path";
381679
381690
  function parseFrontmatter2(raw) {
381680
381691
  const m2 = raw.match(/^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/);
381681
381692
  if (!m2)
@@ -381727,7 +381738,7 @@ async function listSkills() {
381727
381738
  out.push(entry.replace(/\.md$/, ""));
381728
381739
  } else {
381729
381740
  try {
381730
- const sub = await stat44(join124(USER_SKILLS_DIR, entry, "SKILL.md"));
381741
+ const sub = await stat44(join125(USER_SKILLS_DIR, entry, "SKILL.md"));
381731
381742
  if (sub.isFile())
381732
381743
  out.push(entry);
381733
381744
  } catch {}
@@ -381739,12 +381750,12 @@ async function listSkills() {
381739
381750
  }
381740
381751
  }
381741
381752
  async function readSkillFile(name) {
381742
- const flatPath = join124(USER_SKILLS_DIR, `${name}.md`);
381753
+ const flatPath = join125(USER_SKILLS_DIR, `${name}.md`);
381743
381754
  try {
381744
381755
  const raw = await readFile51(flatPath, "utf-8");
381745
381756
  return { raw, path: flatPath };
381746
381757
  } catch {}
381747
- const dirPath = join124(USER_SKILLS_DIR, name, "SKILL.md");
381758
+ const dirPath = join125(USER_SKILLS_DIR, name, "SKILL.md");
381748
381759
  try {
381749
381760
  const raw = await readFile51(dirPath, "utf-8");
381750
381761
  return { raw, path: dirPath };
@@ -381766,8 +381777,8 @@ async function exportSkill(name, destDir) {
381766
381777
  body
381767
381778
  };
381768
381779
  const outPath = resolve37(destDir, `${skill.name}.md`);
381769
- await mkdir42(destDir, { recursive: true });
381770
- await writeFile44(outPath, buildFrontmatter(skill), "utf-8");
381780
+ await mkdir43(destDir, { recursive: true });
381781
+ await writeFile45(outPath, buildFrontmatter(skill), "utf-8");
381771
381782
  return { ok: true, path: outPath };
381772
381783
  }
381773
381784
  async function importSkill(filePath) {
@@ -381788,10 +381799,10 @@ async function importSkill(filePath) {
381788
381799
  const description = typeof meta.description === "string" ? meta.description : "";
381789
381800
  const tags = Array.isArray(meta.tags) ? meta.tags : [];
381790
381801
  const skill = { name, description, tags, body };
381791
- const outPath = join124(USER_SKILLS_DIR, `${name}.md`);
381802
+ const outPath = join125(USER_SKILLS_DIR, `${name}.md`);
381792
381803
  try {
381793
- await mkdir42(USER_SKILLS_DIR, { recursive: true });
381794
- await writeFile44(outPath, buildFrontmatter(skill), "utf-8");
381804
+ await mkdir43(USER_SKILLS_DIR, { recursive: true });
381805
+ await writeFile45(outPath, buildFrontmatter(skill), "utf-8");
381795
381806
  logForDebugging(`[skills] imported ${name} → ${outPath}`);
381796
381807
  return { ok: true, name, path: outPath };
381797
381808
  } catch (e) {
@@ -381802,7 +381813,7 @@ var USER_SKILLS_DIR;
381802
381813
  var init_skillPortable = __esm(() => {
381803
381814
  init_debug();
381804
381815
  init_envUtils();
381805
- USER_SKILLS_DIR = join124(getClaudeConfigHomeDir(), "skills");
381816
+ USER_SKILLS_DIR = join125(getClaudeConfigHomeDir(), "skills");
381806
381817
  });
381807
381818
 
381808
381819
  // src/commands/skills-export/skills-export.tsx
@@ -381996,8 +382007,8 @@ var init_skills_import2 = __esm(() => {
381996
382007
  });
381997
382008
 
381998
382009
  // src/services/skills/skillUsage.ts
381999
- import { mkdir as mkdir43, readFile as readFile52, writeFile as writeFile45 } from "fs/promises";
382000
- import { join as join125 } from "path";
382010
+ import { mkdir as mkdir44, readFile as readFile52, writeFile as writeFile46 } from "fs/promises";
382011
+ import { join as join126 } from "path";
382001
382012
  async function loadFile() {
382002
382013
  try {
382003
382014
  const raw = await readFile52(USAGE_PATH, "utf-8");
@@ -382031,7 +382042,7 @@ async function shouldNudgeDistillation() {
382031
382042
  var USAGE_PATH;
382032
382043
  var init_skillUsage = __esm(() => {
382033
382044
  init_envUtils();
382034
- USAGE_PATH = join125(getClaudeConfigHomeDir(), "skill-usage.json");
382045
+ USAGE_PATH = join126(getClaudeConfigHomeDir(), "skill-usage.json");
382035
382046
  });
382036
382047
 
382037
382048
  // src/commands/skill-stats/skill-stats.tsx
@@ -382133,16 +382144,16 @@ var init_skill_stats2 = __esm(() => {
382133
382144
  });
382134
382145
 
382135
382146
  // src/services/skills/skillNotes.ts
382136
- import { mkdir as mkdir44, readFile as readFile53, writeFile as writeFile46, appendFile as appendFile5, stat as stat45 } from "fs/promises";
382137
- import { join as join126 } from "path";
382147
+ import { mkdir as mkdir45, readFile as readFile53, writeFile as writeFile47, appendFile as appendFile5, stat as stat45 } from "fs/promises";
382148
+ import { join as join127 } from "path";
382138
382149
  async function findNotesPath(skillName) {
382139
- const dirPath = join126(USER_SKILLS_DIR2, skillName, "NOTES.md");
382150
+ const dirPath = join127(USER_SKILLS_DIR2, skillName, "NOTES.md");
382140
382151
  try {
382141
- const s = await stat45(join126(USER_SKILLS_DIR2, skillName));
382152
+ const s = await stat45(join127(USER_SKILLS_DIR2, skillName));
382142
382153
  if (s.isDirectory())
382143
382154
  return dirPath;
382144
382155
  } catch {}
382145
- return join126(USER_SKILLS_DIR2, `${skillName}.notes.md`);
382156
+ return join127(USER_SKILLS_DIR2, `${skillName}.notes.md`);
382146
382157
  }
382147
382158
  async function loadSkillNotes(skillName) {
382148
382159
  const path12 = await findNotesPath(skillName);
@@ -382157,7 +382168,7 @@ async function appendSkillNote(skillName, note) {
382157
382168
  if (!trimmed)
382158
382169
  return { ok: false, error: "note is empty" };
382159
382170
  const path12 = await findNotesPath(skillName);
382160
- await mkdir44(USER_SKILLS_DIR2, { recursive: true });
382171
+ await mkdir45(USER_SKILLS_DIR2, { recursive: true });
382161
382172
  let existing = "";
382162
382173
  try {
382163
382174
  existing = await readFile53(path12, "utf-8");
@@ -382182,7 +382193,7 @@ async function appendSkillNote(skillName, note) {
382182
382193
  const compacted = lines.slice(0, headerEnd).concat(lines.slice(trimStart)).join(`
382183
382194
  `);
382184
382195
  try {
382185
- await writeFile46(path12, compacted + entry, "utf-8");
382196
+ await writeFile47(path12, compacted + entry, "utf-8");
382186
382197
  } catch (e) {
382187
382198
  return { ok: false, error: String(e) };
382188
382199
  }
@@ -382201,7 +382212,7 @@ var USER_SKILLS_DIR2, MAX_NOTES_BYTES, MAX_NOTE_LENGTH = 500;
382201
382212
  var init_skillNotes = __esm(() => {
382202
382213
  init_debug();
382203
382214
  init_envUtils();
382204
- USER_SKILLS_DIR2 = join126(getClaudeConfigHomeDir(), "skills");
382215
+ USER_SKILLS_DIR2 = join127(getClaudeConfigHomeDir(), "skills");
382205
382216
  MAX_NOTES_BYTES = 32 * 1024;
382206
382217
  });
382207
382218
 
@@ -382961,9 +382972,9 @@ __export(exports_webuiServer, {
382961
382972
  broadcastNewWindow: () => broadcastNewWindow
382962
382973
  });
382963
382974
  import { createServer as createServer5 } from "http";
382964
- import { mkdir as mkdir45, readdir as readdir30, readFile as readFile54, writeFile as writeFile47 } from "fs/promises";
382975
+ import { mkdir as mkdir46, readdir as readdir30, readFile as readFile54, writeFile as writeFile48 } from "fs/promises";
382965
382976
  import { createHash as createHash23 } from "crypto";
382966
- import { join as join127 } from "path";
382977
+ import { join as join128 } from "path";
382967
382978
  function getWebuiPort() {
382968
382979
  return _boundPort;
382969
382980
  }
@@ -382988,7 +382999,7 @@ function broadcastNewWindow(label) {
382988
382999
  }
382989
383000
  }
382990
383001
  async function listInstances() {
382991
- const sessionsDir = join127(getClaudeConfigHomeDir(), "sessions");
383002
+ const sessionsDir = join128(getClaudeConfigHomeDir(), "sessions");
382992
383003
  const out = [];
382993
383004
  let files;
382994
383005
  try {
@@ -383005,7 +383016,7 @@ async function listInstances() {
383005
383016
  let cwd2;
383006
383017
  let port;
383007
383018
  try {
383008
- const raw = await readFile54(join127(sessionsDir, f), "utf-8");
383019
+ const raw = await readFile54(join128(sessionsDir, f), "utf-8");
383009
383020
  const parsed = JSON.parse(raw);
383010
383021
  cwd2 = parsed.cwd;
383011
383022
  port = parsed.webuiPort;
@@ -383016,8 +383027,8 @@ async function listInstances() {
383016
383027
  }
383017
383028
  async function ensureStaticHtml() {
383018
383029
  try {
383019
- await mkdir45(getClaudeConfigHomeDir(), { recursive: true });
383020
- await writeFile47(WEBUI_HTML_PATH, STATIC_HTML, "utf-8");
383030
+ await mkdir46(getClaudeConfigHomeDir(), { recursive: true });
383031
+ await writeFile48(WEBUI_HTML_PATH, STATIC_HTML, "utf-8");
383021
383032
  } catch {}
383022
383033
  }
383023
383034
  function decodeFrame(buffer) {
@@ -383171,7 +383182,7 @@ async function startWebuiServer(port) {
383171
383182
  _boundPort = addr.port;
383172
383183
  _server = server;
383173
383184
  logForDebugging(`[webui] listening on http://127.0.0.1:${_boundPort}`);
383174
- mkdir45(getClaudeConfigHomeDir(), { recursive: true }).then(() => writeFile47(PORT_FILE, String(_boundPort), "utf-8").catch(() => {}));
383185
+ mkdir46(getClaudeConfigHomeDir(), { recursive: true }).then(() => writeFile48(PORT_FILE, String(_boundPort), "utf-8").catch(() => {}));
383175
383186
  resolve39({ ok: true, port: _boundPort });
383176
383187
  } else {
383177
383188
  resolve39({ ok: false, error: "no address bound" });
@@ -383393,8 +383404,8 @@ var DEFAULT_PORT = 7150, PORT_FILE, WEBUI_HTML_PATH, _server = null, _boundPort
383393
383404
  var init_webuiServer = __esm(() => {
383394
383405
  init_debug();
383395
383406
  init_envUtils();
383396
- PORT_FILE = join127(getClaudeConfigHomeDir(), "webui-port");
383397
- WEBUI_HTML_PATH = join127(getClaudeConfigHomeDir(), "webui-static.html");
383407
+ PORT_FILE = join128(getClaudeConfigHomeDir(), "webui-port");
383408
+ WEBUI_HTML_PATH = join128(getClaudeConfigHomeDir(), "webui-static.html");
383398
383409
  _websockets = new Set;
383399
383410
  _outputBuffer = [];
383400
383411
  });
@@ -383757,9 +383768,9 @@ var init_windows_setup2 = __esm(() => {
383757
383768
 
383758
383769
  // src/services/rpc/toolRpcServer.ts
383759
383770
  import { createServer as createServer6 } from "http";
383760
- import { readFile as readFile55, writeFile as writeFile48, mkdir as mkdir46, readdir as readdir31, stat as stat46 } from "fs/promises";
383771
+ import { readFile as readFile55, writeFile as writeFile49, mkdir as mkdir47, readdir as readdir31, stat as stat46 } from "fs/promises";
383761
383772
  import { spawn as spawn12 } from "child_process";
383762
- import { join as join128, resolve as resolvePath, relative as relative23 } from "path";
383773
+ import { join as join129, resolve as resolvePath, relative as relative23 } from "path";
383763
383774
  async function handleRead(p) {
383764
383775
  try {
383765
383776
  const raw = await readFile55(p.path, "utf-8");
@@ -383771,7 +383782,7 @@ async function handleRead(p) {
383771
383782
  }
383772
383783
  async function handleWrite(p) {
383773
383784
  try {
383774
- await writeFile48(p.path, p.content, "utf-8");
383785
+ await writeFile49(p.path, p.content, "utf-8");
383775
383786
  return { ok: true, data: { bytes: Buffer.byteLength(p.content, "utf-8") } };
383776
383787
  } catch (e) {
383777
383788
  return { ok: false, error: String(e) };
@@ -383798,7 +383809,7 @@ async function handleEdit(p) {
383798
383809
  updated = content.replace(p.oldString, p.newString);
383799
383810
  replacements2 = 1;
383800
383811
  }
383801
- await writeFile48(p.path, updated, "utf-8");
383812
+ await writeFile49(p.path, updated, "utf-8");
383802
383813
  return { ok: true, data: { replacements: replacements2 } };
383803
383814
  } catch (e) {
383804
383815
  return { ok: false, error: String(e) };
@@ -383870,7 +383881,7 @@ async function walk(root2, out, maxEntries) {
383870
383881
  for (const entry of entries) {
383871
383882
  if (out.length >= maxEntries)
383872
383883
  return;
383873
- const full = join128(root2, entry.name);
383884
+ const full = join129(root2, entry.name);
383874
383885
  if (entry.name === "node_modules" || entry.name === ".git" || entry.name === ".next")
383875
383886
  continue;
383876
383887
  if (entry.isDirectory()) {
@@ -384016,7 +384027,7 @@ async function startToolRpcServer() {
384016
384027
  _boundPort2 = addr.port;
384017
384028
  _server2 = server;
384018
384029
  logForDebugging(`[rpc] listening on 127.0.0.1:${_boundPort2}`);
384019
- mkdir46(getClaudeConfigHomeDir(), { recursive: true }).then(() => writeFile48(PORT_FILE2, String(_boundPort2), "utf-8").catch(() => {}));
384030
+ mkdir47(getClaudeConfigHomeDir(), { recursive: true }).then(() => writeFile49(PORT_FILE2, String(_boundPort2), "utf-8").catch(() => {}));
384020
384031
  }
384021
384032
  resolve39();
384022
384033
  });
@@ -384029,7 +384040,7 @@ var DEFAULT_PORT2 = 7149, PORT_FILE2, _server2 = null, _boundPort2 = 0;
384029
384040
  var init_toolRpcServer = __esm(() => {
384030
384041
  init_debug();
384031
384042
  init_envUtils();
384032
- PORT_FILE2 = join128(getClaudeConfigHomeDir(), "rpc-port");
384043
+ PORT_FILE2 = join129(getClaudeConfigHomeDir(), "rpc-port");
384033
384044
  });
384034
384045
 
384035
384046
  // src/commands/rpc/rpc.tsx
@@ -384915,8 +384926,8 @@ var init_versions2 = __esm(() => {
384915
384926
  });
384916
384927
 
384917
384928
  // src/components/memory/MemoryFileSelector.tsx
384918
- import { mkdir as mkdir47 } from "fs/promises";
384919
- import { join as join129 } from "path";
384929
+ import { mkdir as mkdir48 } from "fs/promises";
384930
+ import { join as join130 } from "path";
384920
384931
  function MemoryFileSelector(t0) {
384921
384932
  const $2 = c3(58);
384922
384933
  const {
@@ -384924,8 +384935,8 @@ function MemoryFileSelector(t0) {
384924
384935
  onCancel
384925
384936
  } = t0;
384926
384937
  const existingMemoryFiles = import_react112.use(getMemoryFiles());
384927
- const userMemoryPath = join129(getClaudeConfigHomeDir(), "CLAUDE.md");
384928
- const projectMemoryPath = join129(getOriginalCwd(), "CLAUDE.md");
384938
+ const userMemoryPath = join130(getClaudeConfigHomeDir(), "CLAUDE.md");
384939
+ const projectMemoryPath = join130(getOriginalCwd(), "CLAUDE.md");
384929
384940
  const hasUserMemory = existingMemoryFiles.some((f) => f.path === userMemoryPath);
384930
384941
  const hasProjectMemory = existingMemoryFiles.some((f_0) => f_0.path === projectMemoryPath);
384931
384942
  const allMemoryFiles = [...existingMemoryFiles.filter(_temp79).map(_temp230), ...hasUserMemory ? [] : [{
@@ -385264,7 +385275,7 @@ function MemoryFileSelector(t0) {
385264
385275
  t20 = (value) => {
385265
385276
  if (value.startsWith(OPEN_FOLDER_PREFIX)) {
385266
385277
  const folderPath = value.slice(OPEN_FOLDER_PREFIX.length);
385267
- mkdir47(folderPath, {
385278
+ mkdir48(folderPath, {
385268
385279
  recursive: true
385269
385280
  }).catch(_temp86).then(() => openPath(folderPath));
385270
385281
  return;
@@ -385624,19 +385635,19 @@ var exports_memory = {};
385624
385635
  __export(exports_memory, {
385625
385636
  call: () => call55
385626
385637
  });
385627
- import { mkdir as mkdir48, writeFile as writeFile49 } from "fs/promises";
385638
+ import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
385628
385639
  function MemoryCommand({
385629
385640
  onDone
385630
385641
  }) {
385631
385642
  const handleSelectMemoryFile = async (memoryPath) => {
385632
385643
  try {
385633
385644
  if (memoryPath.includes(getClaudeConfigHomeDir())) {
385634
- await mkdir48(getClaudeConfigHomeDir(), {
385645
+ await mkdir49(getClaudeConfigHomeDir(), {
385635
385646
  recursive: true
385636
385647
  });
385637
385648
  }
385638
385649
  try {
385639
- await writeFile49(memoryPath, "", {
385650
+ await writeFile50(memoryPath, "", {
385640
385651
  encoding: "utf8",
385641
385652
  flag: "wx"
385642
385653
  });
@@ -386558,7 +386569,7 @@ function Help(t0) {
386558
386569
  let t6;
386559
386570
  if ($2[31] !== tabs) {
386560
386571
  t6 = /* @__PURE__ */ jsx_dev_runtime238.jsxDEV(Tabs, {
386561
- title: `localclawd v${"1.7.8"}`,
386572
+ title: `localclawd v${"1.8.0"}`,
386562
386573
  color: "professionalBlue",
386563
386574
  defaultTab: "general",
386564
386575
  children: tabs
@@ -387936,7 +387947,7 @@ var exports_keybindings = {};
387936
387947
  __export(exports_keybindings, {
387937
387948
  call: () => call58
387938
387949
  });
387939
- import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
387950
+ import { mkdir as mkdir50, writeFile as writeFile51 } from "fs/promises";
387940
387951
  import { dirname as dirname47 } from "path";
387941
387952
  async function call58() {
387942
387953
  if (!isKeybindingCustomizationEnabled()) {
@@ -387947,9 +387958,9 @@ async function call58() {
387947
387958
  }
387948
387959
  const keybindingsPath = getKeybindingsPath();
387949
387960
  let fileExists = false;
387950
- await mkdir49(dirname47(keybindingsPath), { recursive: true });
387961
+ await mkdir50(dirname47(keybindingsPath), { recursive: true });
387951
387962
  try {
387952
- await writeFile50(keybindingsPath, generateKeybindingsTemplate(), {
387963
+ await writeFile51(keybindingsPath, generateKeybindingsTemplate(), {
387953
387964
  encoding: "utf-8",
387954
387965
  flag: "wx"
387955
387966
  });
@@ -392259,7 +392270,7 @@ __export(exports_pluginStartupCheck, {
392259
392270
  findMissingPlugins: () => findMissingPlugins,
392260
392271
  checkEnabledPlugins: () => checkEnabledPlugins
392261
392272
  });
392262
- import { join as join130 } from "path";
392273
+ import { join as join131 } from "path";
392263
392274
  async function checkEnabledPlugins() {
392264
392275
  const settings = getInitialSettings();
392265
392276
  const enabledPlugins = [];
@@ -392394,7 +392405,7 @@ async function installSelectedPlugins(pluginsToInstall, onProgress, scope = "use
392394
392405
  } else {
392395
392406
  registerPluginInstallation({
392396
392407
  pluginId,
392397
- installPath: join130(marketplaceInstallLocation, entry.source),
392408
+ installPath: join131(marketplaceInstallLocation, entry.source),
392398
392409
  version: entry.version
392399
392410
  }, scope, projectPath);
392400
392411
  }
@@ -392712,10 +392723,10 @@ var init_AddMarketplace = __esm(() => {
392712
392723
 
392713
392724
  // src/utils/plugins/installCounts.ts
392714
392725
  import { randomBytes as randomBytes17 } from "crypto";
392715
- import { readFile as readFile56, rename as rename7, unlink as unlink17, writeFile as writeFile51 } from "fs/promises";
392716
- import { join as join131 } from "path";
392726
+ import { readFile as readFile56, rename as rename7, unlink as unlink17, writeFile as writeFile52 } from "fs/promises";
392727
+ import { join as join132 } from "path";
392717
392728
  function getInstallCountsCachePath() {
392718
- return join131(getPluginsDirectory(), INSTALL_COUNTS_CACHE_FILENAME);
392729
+ return join132(getPluginsDirectory(), INSTALL_COUNTS_CACHE_FILENAME);
392719
392730
  }
392720
392731
  async function loadInstallCountsCache() {
392721
392732
  const cachePath = getInstallCountsCachePath();
@@ -392770,7 +392781,7 @@ async function saveInstallCountsCache(cache3) {
392770
392781
  const pluginsDir = getPluginsDirectory();
392771
392782
  await getFsImplementation().mkdir(pluginsDir);
392772
392783
  const content = jsonStringify(cache3, null, 2);
392773
- await writeFile51(tempPath, content, {
392784
+ await writeFile52(tempPath, content, {
392774
392785
  encoding: "utf-8",
392775
392786
  mode: 384
392776
392787
  });
@@ -395457,7 +395468,7 @@ var init_DiscoverPlugins = __esm(() => {
395457
395468
  });
395458
395469
 
395459
395470
  // src/services/plugins/pluginOperations.ts
395460
- import { dirname as dirname48, join as join132 } from "path";
395471
+ import { dirname as dirname48, join as join133 } from "path";
395461
395472
  function assertInstallableScope(scope) {
395462
395473
  if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
395463
395474
  throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
@@ -395935,7 +395946,7 @@ async function performPluginUpdate({
395935
395946
  throw e;
395936
395947
  }
395937
395948
  const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname48(marketplaceInstallLocation);
395938
- sourcePath = join132(marketplaceDir, entry.source);
395949
+ sourcePath = join133(marketplaceDir, entry.source);
395939
395950
  try {
395940
395951
  await fs4.stat(sourcePath);
395941
395952
  } catch (e) {
@@ -395950,7 +395961,7 @@ async function performPluginUpdate({
395950
395961
  throw e;
395951
395962
  }
395952
395963
  let pluginManifest;
395953
- const manifestPath = join132(sourcePath, ".claude-plugin", "plugin.json");
395964
+ const manifestPath = join133(sourcePath, ".claude-plugin", "plugin.json");
395954
395965
  try {
395955
395966
  pluginManifest = await loadPluginManifest(manifestPath, entry.name, entry.source);
395956
395967
  } catch {}
@@ -397167,10 +397178,10 @@ var init_ManageMarketplaces = __esm(() => {
397167
397178
 
397168
397179
  // src/utils/plugins/pluginFlagging.ts
397169
397180
  import { randomBytes as randomBytes18 } from "crypto";
397170
- import { readFile as readFile57, rename as rename8, unlink as unlink18, writeFile as writeFile52 } from "fs/promises";
397171
- import { join as join133 } from "path";
397181
+ import { readFile as readFile57, rename as rename8, unlink as unlink18, writeFile as writeFile53 } from "fs/promises";
397182
+ import { join as join134 } from "path";
397172
397183
  function getFlaggedPluginsPath() {
397173
- return join133(getPluginsDirectory(), FLAGGED_PLUGINS_FILENAME);
397184
+ return join134(getPluginsDirectory(), FLAGGED_PLUGINS_FILENAME);
397174
397185
  }
397175
397186
  function parsePluginsData(content) {
397176
397187
  const parsed = jsonParse(content);
@@ -397208,7 +397219,7 @@ async function writeToDisk(plugins) {
397208
397219
  try {
397209
397220
  await getFsImplementation().mkdir(getPluginsDirectory());
397210
397221
  const content = jsonStringify({ plugins }, null, 2);
397211
- await writeFile52(tempPath, content, {
397222
+ await writeFile53(tempPath, content, {
397212
397223
  encoding: "utf-8",
397213
397224
  mode: 384
397214
397225
  });
@@ -403717,10 +403728,10 @@ var init_transcriptSearch = __esm(() => {
403717
403728
  });
403718
403729
 
403719
403730
  // src/utils/releaseNotes.ts
403720
- import { mkdir as mkdir50, readFile as readFile60, writeFile as writeFile53 } from "fs/promises";
403721
- import { dirname as dirname50, join as join136 } from "path";
403731
+ import { mkdir as mkdir51, readFile as readFile60, writeFile as writeFile54 } from "fs/promises";
403732
+ import { dirname as dirname50, join as join137 } from "path";
403722
403733
  function getChangelogCachePath() {
403723
- return join136(getClaudeConfigHomeDir(), "cache", "changelog.md");
403734
+ return join137(getClaudeConfigHomeDir(), "cache", "changelog.md");
403724
403735
  }
403725
403736
  async function migrateChangelogFromConfig() {
403726
403737
  const config2 = getGlobalConfig();
@@ -403729,8 +403740,8 @@ async function migrateChangelogFromConfig() {
403729
403740
  }
403730
403741
  const cachePath = getChangelogCachePath();
403731
403742
  try {
403732
- await mkdir50(dirname50(cachePath), { recursive: true });
403733
- await writeFile53(cachePath, config2.cachedChangelog, {
403743
+ await mkdir51(dirname50(cachePath), { recursive: true });
403744
+ await writeFile54(cachePath, config2.cachedChangelog, {
403734
403745
  encoding: "utf-8",
403735
403746
  flag: "wx"
403736
403747
  });
@@ -403751,8 +403762,8 @@ async function fetchAndStoreChangelog() {
403751
403762
  return;
403752
403763
  }
403753
403764
  const cachePath = getChangelogCachePath();
403754
- await mkdir50(dirname50(cachePath), { recursive: true });
403755
- await writeFile53(cachePath, changelogContent, { encoding: "utf-8" });
403765
+ await mkdir51(dirname50(cachePath), { recursive: true });
403766
+ await writeFile54(cachePath, changelogContent, { encoding: "utf-8" });
403756
403767
  changelogMemoryCache = changelogContent;
403757
403768
  const changelogLastFetched = Date.now();
403758
403769
  saveGlobalConfig((current) => ({
@@ -403820,7 +403831,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403820
403831
  }
403821
403832
  return [];
403822
403833
  }
403823
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.7.8") {
403834
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.8.0") {
403824
403835
  if (process.env.USER_TYPE === "ant") {
403825
403836
  const changelog = MACRO.VERSION_CHANGELOG;
403826
403837
  if (changelog) {
@@ -403847,7 +403858,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.7.8") {
403847
403858
  releaseNotes
403848
403859
  };
403849
403860
  }
403850
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.7.8") {
403861
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.8.0") {
403851
403862
  if (process.env.USER_TYPE === "ant") {
403852
403863
  const changelog = MACRO.VERSION_CHANGELOG;
403853
403864
  if (changelog) {
@@ -404004,7 +404015,7 @@ function getRecentActivitySync() {
404004
404015
  return cachedActivity;
404005
404016
  }
404006
404017
  function getLogoDisplayData() {
404007
- const version = process.env.DEMO_VERSION ?? "1.7.8";
404018
+ const version = process.env.DEMO_VERSION ?? "1.8.0";
404008
404019
  const serverUrl = getDirectConnectServerUrl();
404009
404020
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
404010
404021
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -404389,9 +404400,9 @@ function checkCachedPassesEligibility() {
404389
404400
  hasCache: false
404390
404401
  };
404391
404402
  }
404392
- const { eligible: eligible2, timestamp: timestamp3 } = cachedEntry;
404403
+ const { eligible: eligible2, timestamp: timestamp4 } = cachedEntry;
404393
404404
  const now2 = Date.now();
404394
- const needsRefresh = now2 - timestamp3 > CACHE_EXPIRATION_MS;
404405
+ const needsRefresh = now2 - timestamp4 > CACHE_EXPIRATION_MS;
404395
404406
  return {
404396
404407
  eligible: eligible2,
404397
404408
  needsRefresh,
@@ -404474,11 +404485,11 @@ async function getCachedOrFetchPassesEligibility() {
404474
404485
  if (now2 - cachedEntry.timestamp > CACHE_EXPIRATION_MS) {
404475
404486
  logForDebugging("Passes: Cache stale, returning cached data and refreshing in background");
404476
404487
  fetchAndStorePassesEligibility();
404477
- const { timestamp: timestamp4, ...response2 } = cachedEntry;
404488
+ const { timestamp: timestamp5, ...response2 } = cachedEntry;
404478
404489
  return response2;
404479
404490
  }
404480
404491
  logForDebugging("Passes: Using fresh cached eligibility data");
404481
- const { timestamp: timestamp3, ...response } = cachedEntry;
404492
+ const { timestamp: timestamp4, ...response } = cachedEntry;
404482
404493
  return response;
404483
404494
  }
404484
404495
  async function prefetchPassesEligibility() {
@@ -405104,7 +405115,7 @@ function Logo() {
405104
405115
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
405105
405116
  t2 = () => {
405106
405117
  const currentConfig = getGlobalConfig();
405107
- if (currentConfig.lastReleaseNotesSeen === "1.7.8") {
405118
+ if (currentConfig.lastReleaseNotesSeen === "1.8.0") {
405108
405119
  return;
405109
405120
  }
405110
405121
  saveGlobalConfig(_temp326);
@@ -405763,12 +405774,12 @@ function Logo() {
405763
405774
  return t41;
405764
405775
  }
405765
405776
  function _temp326(current) {
405766
- if (current.lastReleaseNotesSeen === "1.7.8") {
405777
+ if (current.lastReleaseNotesSeen === "1.8.0") {
405767
405778
  return current;
405768
405779
  }
405769
405780
  return {
405770
405781
  ...current,
405771
- lastReleaseNotesSeen: "1.7.8"
405782
+ lastReleaseNotesSeen: "1.8.0"
405772
405783
  };
405773
405784
  }
405774
405785
  function _temp241(s_0) {
@@ -423126,7 +423137,7 @@ __export(exports_thinkback, {
423126
423137
  });
423127
423138
  import { execa as execa11 } from "execa";
423128
423139
  import { readFile as readFile61 } from "fs/promises";
423129
- import { join as join137 } from "path";
423140
+ import { join as join138 } from "path";
423130
423141
  function getMarketplaceName() {
423131
423142
  return OFFICIAL_MARKETPLACE_NAME;
423132
423143
  }
@@ -423144,15 +423155,15 @@ async function getThinkbackSkillDir() {
423144
423155
  if (!thinkbackPlugin) {
423145
423156
  return null;
423146
423157
  }
423147
- const skillDir = join137(thinkbackPlugin.path, "skills", SKILL_NAME);
423158
+ const skillDir = join138(thinkbackPlugin.path, "skills", SKILL_NAME);
423148
423159
  if (await pathExists(skillDir)) {
423149
423160
  return skillDir;
423150
423161
  }
423151
423162
  return null;
423152
423163
  }
423153
423164
  async function playAnimation(skillDir) {
423154
- const dataPath = join137(skillDir, "year_in_review.js");
423155
- const playerPath = join137(skillDir, "player.js");
423165
+ const dataPath = join138(skillDir, "year_in_review.js");
423166
+ const playerPath = join138(skillDir, "player.js");
423156
423167
  try {
423157
423168
  await readFile61(dataPath);
423158
423169
  } catch (e) {
@@ -423200,7 +423211,7 @@ async function playAnimation(skillDir) {
423200
423211
  } catch {} finally {
423201
423212
  inkInstance.exitAlternateScreen();
423202
423213
  }
423203
- const htmlPath = join137(skillDir, "year_in_review.html");
423214
+ const htmlPath = join138(skillDir, "year_in_review.html");
423204
423215
  if (await pathExists(htmlPath)) {
423205
423216
  const platform3 = getPlatform();
423206
423217
  const openCmd = platform3 === "macos" ? "open" : platform3 === "windows" ? "start" : "xdg-open";
@@ -423536,7 +423547,7 @@ function ThinkbackFlow(t0) {
423536
423547
  if (!skillDir) {
423537
423548
  return;
423538
423549
  }
423539
- const dataPath = join137(skillDir, "year_in_review.js");
423550
+ const dataPath = join138(skillDir, "year_in_review.js");
423540
423551
  pathExists(dataPath).then((exists) => {
423541
423552
  logForDebugging(`Checking for ${dataPath}: ${exists ? "found" : "not found"}`);
423542
423553
  setHasGenerated(exists);
@@ -423707,7 +423718,7 @@ var exports_thinkback_play = {};
423707
423718
  __export(exports_thinkback_play, {
423708
423719
  call: () => call72
423709
423720
  });
423710
- import { join as join138 } from "path";
423721
+ import { join as join139 } from "path";
423711
423722
  function getPluginId2() {
423712
423723
  const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
423713
423724
  return `thinkback@${marketplaceName}`;
@@ -423729,7 +423740,7 @@ async function call72() {
423729
423740
  value: "Thinkback plugin installation path not found."
423730
423741
  };
423731
423742
  }
423732
- const skillDir = join138(firstInstall.installPath, "skills", SKILL_NAME2);
423743
+ const skillDir = join139(firstInstall.installPath, "skills", SKILL_NAME2);
423733
423744
  const result = await playAnimation(skillDir);
423734
423745
  return { type: "text", value: result.message };
423735
423746
  }
@@ -429764,7 +429775,7 @@ __export(exports_branch, {
429764
429775
  call: () => call80
429765
429776
  });
429766
429777
  import { randomUUID as randomUUID27 } from "crypto";
429767
- import { mkdir as mkdir51, readFile as readFile62, writeFile as writeFile54 } from "fs/promises";
429778
+ import { mkdir as mkdir52, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
429768
429779
  function deriveFirstPrompt(firstUserMessage) {
429769
429780
  const content = firstUserMessage?.message?.content;
429770
429781
  if (!content)
@@ -429780,7 +429791,7 @@ async function createFork(customTitle) {
429780
429791
  const projectDir = getProjectDir2(getOriginalCwd());
429781
429792
  const forkSessionPath = getTranscriptPathForSession(forkSessionId);
429782
429793
  const currentTranscriptPath = getTranscriptPath();
429783
- await mkdir51(projectDir, { recursive: true, mode: 448 });
429794
+ await mkdir52(projectDir, { recursive: true, mode: 448 });
429784
429795
  let transcriptContent;
429785
429796
  try {
429786
429797
  transcriptContent = await readFile62(currentTranscriptPath);
@@ -429828,7 +429839,7 @@ async function createFork(customTitle) {
429828
429839
  };
429829
429840
  lines.push(jsonStringify(forkedReplacementEntry));
429830
429841
  }
429831
- await writeFile54(forkSessionPath, lines.join(`
429842
+ await writeFile55(forkSessionPath, lines.join(`
429832
429843
  `) + `
429833
429844
  `, {
429834
429845
  encoding: "utf8",
@@ -430090,8 +430101,8 @@ var init_types11 = __esm(() => {
430090
430101
  });
430091
430102
 
430092
430103
  // src/components/agents/agentFileUtils.ts
430093
- import { mkdir as mkdir52, open as open12, unlink as unlink19 } from "fs/promises";
430094
- import { join as join139 } from "path";
430104
+ import { mkdir as mkdir53, open as open12, unlink as unlink19 } from "fs/promises";
430105
+ import { join as join140 } from "path";
430095
430106
  function formatAgentAsMarkdown(agentType, whenToUse, tools, systemPrompt, color3, model, memory2, effort) {
430096
430107
  const escapedWhenToUse = whenToUse.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\\\n");
430097
430108
  const isAllTools = tools === undefined || tools.length === 1 && tools[0] === "*";
@@ -430118,26 +430129,26 @@ function getAgentDirectoryPath(location) {
430118
430129
  case "flagSettings":
430119
430130
  throw new Error(`Cannot get directory path for ${location} agents`);
430120
430131
  case "userSettings":
430121
- return join139(getClaudeConfigHomeDir(), AGENT_PATHS.AGENTS_DIR);
430132
+ return join140(getClaudeConfigHomeDir(), AGENT_PATHS.AGENTS_DIR);
430122
430133
  case "projectSettings":
430123
- return join139(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430134
+ return join140(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430124
430135
  case "policySettings":
430125
- return join139(getManagedFilePath(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430136
+ return join140(getManagedFilePath(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430126
430137
  case "localSettings":
430127
- return join139(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430138
+ return join140(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430128
430139
  }
430129
430140
  }
430130
430141
  function getRelativeAgentDirectoryPath(location) {
430131
430142
  switch (location) {
430132
430143
  case "projectSettings":
430133
- return join139(".", AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430144
+ return join140(".", AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
430134
430145
  default:
430135
430146
  return getAgentDirectoryPath(location);
430136
430147
  }
430137
430148
  }
430138
430149
  function getNewAgentFilePath(agent) {
430139
430150
  const dirPath = getAgentDirectoryPath(agent.source);
430140
- return join139(dirPath, `${agent.agentType}.md`);
430151
+ return join140(dirPath, `${agent.agentType}.md`);
430141
430152
  }
430142
430153
  function getActualAgentFilePath(agent) {
430143
430154
  if (agent.source === "built-in") {
@@ -430148,14 +430159,14 @@ function getActualAgentFilePath(agent) {
430148
430159
  }
430149
430160
  const dirPath = getAgentDirectoryPath(agent.source);
430150
430161
  const filename = agent.filename || agent.agentType;
430151
- return join139(dirPath, `${filename}.md`);
430162
+ return join140(dirPath, `${filename}.md`);
430152
430163
  }
430153
430164
  function getNewRelativeAgentFilePath(agent) {
430154
430165
  if (agent.source === "built-in") {
430155
430166
  return "Built-in";
430156
430167
  }
430157
430168
  const dirPath = getRelativeAgentDirectoryPath(agent.source);
430158
- return join139(dirPath, `${agent.agentType}.md`);
430169
+ return join140(dirPath, `${agent.agentType}.md`);
430159
430170
  }
430160
430171
  function getActualRelativeAgentFilePath(agent) {
430161
430172
  if (isBuiltInAgent(agent)) {
@@ -430169,11 +430180,11 @@ function getActualRelativeAgentFilePath(agent) {
430169
430180
  }
430170
430181
  const dirPath = getRelativeAgentDirectoryPath(agent.source);
430171
430182
  const filename = agent.filename || agent.agentType;
430172
- return join139(dirPath, `${filename}.md`);
430183
+ return join140(dirPath, `${filename}.md`);
430173
430184
  }
430174
430185
  async function ensureAgentDirectoryExists(source) {
430175
430186
  const dirPath = getAgentDirectoryPath(source);
430176
- await mkdir52(dirPath, { recursive: true });
430187
+ await mkdir53(dirPath, { recursive: true });
430177
430188
  return dirPath;
430178
430189
  }
430179
430190
  async function saveAgentToFile(source, agentType, whenToUse, tools, systemPrompt, checkExists = true, color3, model, memory2, effort) {
@@ -436156,8 +436167,8 @@ var init_rewind = __esm(() => {
436156
436167
 
436157
436168
  // src/utils/heapDumpService.ts
436158
436169
  import { createWriteStream as createWriteStream2, writeFileSync as writeFileSync4 } from "fs";
436159
- import { readdir as readdir34, readFile as readFile63, writeFile as writeFile55 } from "fs/promises";
436160
- import { join as join140 } from "path";
436170
+ import { readdir as readdir34, readFile as readFile63, writeFile as writeFile56 } from "fs/promises";
436171
+ import { join as join141 } from "path";
436161
436172
  import { pipeline as pipeline2 } from "stream/promises";
436162
436173
  import {
436163
436174
  getHeapSnapshot,
@@ -436247,7 +436258,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
436247
436258
  smapsRollup,
436248
436259
  platform: process.platform,
436249
436260
  nodeVersion: process.version,
436250
- ccVersion: "1.7.8"
436261
+ ccVersion: "1.8.0"
436251
436262
  };
436252
436263
  }
436253
436264
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -436265,9 +436276,9 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
436265
436276
  const suffix = dumpNumber > 0 ? `-dump${dumpNumber}` : "";
436266
436277
  const heapFilename = `${sessionId}${suffix}.heapsnapshot`;
436267
436278
  const diagFilename = `${sessionId}${suffix}-diagnostics.json`;
436268
- const heapPath = join140(dumpDir, heapFilename);
436269
- const diagPath = join140(dumpDir, diagFilename);
436270
- await writeFile55(diagPath, jsonStringify(diagnostics, null, 2), {
436279
+ const heapPath = join141(dumpDir, heapFilename);
436280
+ const diagPath = join141(dumpDir, diagFilename);
436281
+ await writeFile56(diagPath, jsonStringify(diagnostics, null, 2), {
436271
436282
  mode: 384
436272
436283
  });
436273
436284
  logForDebugging(`[HeapDump] Diagnostics written to ${diagPath}`);
@@ -436832,7 +436843,7 @@ var init_bridge_kick = __esm(() => {
436832
436843
  var call87 = async () => {
436833
436844
  return {
436834
436845
  type: "text",
436835
- value: `${"1.7.8"} (built ${"2026-05-07T15:04:15.342Z"})`
436846
+ value: `${"1.8.0"} (built ${"2026-05-07T15:13:54.479Z"})`
436836
436847
  };
436837
436848
  }, version, version_default;
436838
436849
  var init_version = __esm(() => {
@@ -438199,8 +438210,8 @@ var init_advisor2 = __esm(() => {
438199
438210
 
438200
438211
  // src/skills/bundledSkills.ts
438201
438212
  import { constants as fsConstants4 } from "fs";
438202
- import { mkdir as mkdir53, open as open13 } from "fs/promises";
438203
- import { dirname as dirname51, isAbsolute as isAbsolute24, join as join141, normalize as normalize12, sep as pathSep2 } from "path";
438213
+ import { mkdir as mkdir54, open as open13 } from "fs/promises";
438214
+ import { dirname as dirname51, isAbsolute as isAbsolute24, join as join142, normalize as normalize12, sep as pathSep2 } from "path";
438204
438215
  function registerBundledSkill(definition) {
438205
438216
  const { files: files2 } = definition;
438206
438217
  let skillRoot;
@@ -438248,7 +438259,7 @@ function getBundledSkills() {
438248
438259
  return [...bundledSkills];
438249
438260
  }
438250
438261
  function getBundledSkillExtractDir(skillName) {
438251
- return join141(getBundledSkillsRoot(), skillName);
438262
+ return join142(getBundledSkillsRoot(), skillName);
438252
438263
  }
438253
438264
  async function extractBundledSkillFiles(skillName, files2) {
438254
438265
  const dir = getBundledSkillExtractDir(skillName);
@@ -438273,7 +438284,7 @@ async function writeSkillFiles(dir, files2) {
438273
438284
  byParent.set(parent2, [entry]);
438274
438285
  }
438275
438286
  await Promise.all([...byParent].map(async ([parent2, entries]) => {
438276
- await mkdir53(parent2, { recursive: true, mode: 448 });
438287
+ await mkdir54(parent2, { recursive: true, mode: 448 });
438277
438288
  await Promise.all(entries.map(([p, c5]) => safeWriteFile(p, c5)));
438278
438289
  }));
438279
438290
  }
@@ -438290,7 +438301,7 @@ function resolveSkillFilePath(baseDir, relPath) {
438290
438301
  if (isAbsolute24(normalized) || normalized.split(pathSep2).includes("..") || normalized.split("/").includes("..")) {
438291
438302
  throw new Error(`bundled skill file path escapes skill dir: ${relPath}`);
438292
438303
  }
438293
- return join141(baseDir, normalized);
438304
+ return join142(baseDir, normalized);
438294
438305
  }
438295
438306
  function prependBaseDir(blocks, baseDir) {
438296
438307
  const prefix = `Base directory for this skill: ${baseDir}
@@ -438649,7 +438660,7 @@ var init_exit2 = __esm(() => {
438649
438660
  });
438650
438661
 
438651
438662
  // src/components/ExportDialog.tsx
438652
- import { join as join142 } from "path";
438663
+ import { join as join143 } from "path";
438653
438664
  function ExportDialog({
438654
438665
  content,
438655
438666
  defaultFilename,
@@ -438682,7 +438693,7 @@ function ExportDialog({
438682
438693
  };
438683
438694
  const handleFilenameSubmit = () => {
438684
438695
  const finalFilename = filename.endsWith(".txt") ? filename : filename.replace(/\.[^.]+$/, "") + ".txt";
438685
- const filepath = join142(getCwd(), finalFilename);
438696
+ const filepath = join143(getCwd(), finalFilename);
438686
438697
  try {
438687
438698
  writeFileSync_DEPRECATED(filepath, content, {
438688
438699
  encoding: "utf-8",
@@ -438905,7 +438916,7 @@ __export(exports_export, {
438905
438916
  extractFirstPrompt: () => extractFirstPrompt,
438906
438917
  call: () => call91
438907
438918
  });
438908
- import { join as join143 } from "path";
438919
+ import { join as join144 } from "path";
438909
438920
  function formatTimestamp(date2) {
438910
438921
  const year = date2.getFullYear();
438911
438922
  const month = String(date2.getMonth() + 1).padStart(2, "0");
@@ -438949,7 +438960,7 @@ async function call91(onDone, context7, args) {
438949
438960
  const filename = args.trim();
438950
438961
  if (filename) {
438951
438962
  const finalFilename = filename.endsWith(".txt") ? filename : filename.replace(/\.[^.]+$/, "") + ".txt";
438952
- const filepath = join143(getCwd(), finalFilename);
438963
+ const filepath = join144(getCwd(), finalFilename);
438953
438964
  try {
438954
438965
  writeFileSync_DEPRECATED(filepath, content, {
438955
438966
  encoding: "utf-8",
@@ -438963,13 +438974,13 @@ async function call91(onDone, context7, args) {
438963
438974
  }
438964
438975
  }
438965
438976
  const firstPrompt = extractFirstPrompt(context7.messages);
438966
- const timestamp3 = formatTimestamp(new Date);
438977
+ const timestamp4 = formatTimestamp(new Date);
438967
438978
  let defaultFilename;
438968
438979
  if (firstPrompt) {
438969
438980
  const sanitized = sanitizeFilename(firstPrompt);
438970
- defaultFilename = sanitized ? `${timestamp3}-${sanitized}.txt` : `conversation-${timestamp3}.txt`;
438981
+ defaultFilename = sanitized ? `${timestamp4}-${sanitized}.txt` : `conversation-${timestamp4}.txt`;
438971
438982
  } else {
438972
- defaultFilename = `conversation-${timestamp3}.txt`;
438983
+ defaultFilename = `conversation-${timestamp4}.txt`;
438973
438984
  }
438974
438985
  return /* @__PURE__ */ jsx_dev_runtime368.jsxDEV(ExportDialog, {
438975
438986
  content,
@@ -440494,7 +440505,7 @@ var init_asciichart = __esm(() => {
440494
440505
  // src/utils/statsCache.ts
440495
440506
  import { randomBytes as randomBytes19 } from "crypto";
440496
440507
  import { open as open14 } from "fs/promises";
440497
- import { join as join144 } from "path";
440508
+ import { join as join145 } from "path";
440498
440509
  async function withStatsCacheLock(fn) {
440499
440510
  while (statsCacheLockPromise) {
440500
440511
  await statsCacheLockPromise;
@@ -440511,7 +440522,7 @@ async function withStatsCacheLock(fn) {
440511
440522
  }
440512
440523
  }
440513
440524
  function getStatsCachePath() {
440514
- return join144(getClaudeConfigHomeDir(), STATS_CACHE_FILENAME);
440525
+ return join145(getClaudeConfigHomeDir(), STATS_CACHE_FILENAME);
440515
440526
  }
440516
440527
  function getEmptyCache() {
440517
440528
  return {
@@ -441177,16 +441188,16 @@ var init_ansiToPng = __esm(() => {
441177
441188
  });
441178
441189
 
441179
441190
  // src/utils/screenshotClipboard.ts
441180
- import { mkdir as mkdir54, unlink as unlink20, writeFile as writeFile56 } from "fs/promises";
441191
+ import { mkdir as mkdir55, unlink as unlink20, writeFile as writeFile57 } from "fs/promises";
441181
441192
  import { tmpdir as tmpdir8 } from "os";
441182
- import { join as join145 } from "path";
441193
+ import { join as join146 } from "path";
441183
441194
  async function copyAnsiToClipboard(ansiText, options) {
441184
441195
  try {
441185
- const tempDir = join145(tmpdir8(), "claude-code-screenshots");
441186
- await mkdir54(tempDir, { recursive: true });
441187
- const pngPath = join145(tempDir, `screenshot-${Date.now()}.png`);
441196
+ const tempDir = join146(tmpdir8(), "claude-code-screenshots");
441197
+ await mkdir55(tempDir, { recursive: true });
441198
+ const pngPath = join146(tempDir, `screenshot-${Date.now()}.png`);
441188
441199
  const pngBuffer = ansiToPng(ansiText, options);
441189
- await writeFile56(pngPath, pngBuffer);
441200
+ await writeFile57(pngPath, pngBuffer);
441190
441201
  const result = await copyPngToClipboard(pngPath);
441191
441202
  try {
441192
441203
  await unlink20(pngPath);
@@ -441255,7 +441266,7 @@ var init_screenshotClipboard = __esm(() => {
441255
441266
 
441256
441267
  // src/utils/stats.ts
441257
441268
  import { open as open15 } from "fs/promises";
441258
- import { basename as basename40, join as join146, sep as sep30 } from "path";
441269
+ import { basename as basename40, join as join147, sep as sep30 } from "path";
441259
441270
  async function processSessionFiles(sessionFiles, options = {}) {
441260
441271
  const { fromDate, toDate } = options;
441261
441272
  const fs5 = getFsImplementation();
@@ -441433,17 +441444,17 @@ async function getAllSessionFiles() {
441433
441444
  return [];
441434
441445
  throw e;
441435
441446
  }
441436
- const projectDirs = allEntries.filter((dirent) => dirent.isDirectory()).map((dirent) => join146(projectsDir, dirent.name));
441447
+ const projectDirs = allEntries.filter((dirent) => dirent.isDirectory()).map((dirent) => join147(projectsDir, dirent.name));
441437
441448
  const projectResults = await Promise.all(projectDirs.map(async (projectDir) => {
441438
441449
  try {
441439
441450
  const entries = await fs5.readdir(projectDir);
441440
- const mainFiles = entries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl")).map((dirent) => join146(projectDir, dirent.name));
441451
+ const mainFiles = entries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl")).map((dirent) => join147(projectDir, dirent.name));
441441
441452
  const sessionDirs = entries.filter((dirent) => dirent.isDirectory());
441442
441453
  const subagentResults = await Promise.all(sessionDirs.map(async (sessionDir) => {
441443
- const subagentsDir = join146(projectDir, sessionDir.name, "subagents");
441454
+ const subagentsDir = join147(projectDir, sessionDir.name, "subagents");
441444
441455
  try {
441445
441456
  const subagentEntries = await fs5.readdir(subagentsDir);
441446
- return subagentEntries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl") && dirent.name.startsWith("agent-")).map((dirent) => join146(subagentsDir, dirent.name));
441457
+ return subagentEntries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl") && dirent.name.startsWith("agent-")).map((dirent) => join147(subagentsDir, dirent.name));
441447
441458
  } catch {
441448
441459
  return [];
441449
441460
  }
@@ -443313,16 +443324,16 @@ import { execFileSync as execFileSync3 } from "child_process";
443313
443324
  import { constants as fsConstants5 } from "fs";
443314
443325
  import {
443315
443326
  copyFile as copyFile9,
443316
- mkdir as mkdir55,
443327
+ mkdir as mkdir56,
443317
443328
  mkdtemp,
443318
443329
  readdir as readdir35,
443319
443330
  readFile as readFile64,
443320
443331
  rm as rm10,
443321
443332
  unlink as unlink21,
443322
- writeFile as writeFile57
443333
+ writeFile as writeFile58
443323
443334
  } from "fs/promises";
443324
443335
  import { tmpdir as tmpdir9 } from "os";
443325
- import { extname as extname14, join as join147 } from "path";
443336
+ import { extname as extname14, join as join148 } from "path";
443326
443337
  function getAnalysisModel() {
443327
443338
  return getDefaultOpusModel();
443328
443339
  }
@@ -443330,13 +443341,13 @@ function getInsightsModel() {
443330
443341
  return getDefaultOpusModel();
443331
443342
  }
443332
443343
  function getDataDir() {
443333
- return join147(getClaudeConfigHomeDir(), "usage-data");
443344
+ return join148(getClaudeConfigHomeDir(), "usage-data");
443334
443345
  }
443335
443346
  function getFacetsDir() {
443336
- return join147(getDataDir(), "facets");
443347
+ return join148(getDataDir(), "facets");
443337
443348
  }
443338
443349
  function getSessionMetaDir() {
443339
- return join147(getDataDir(), "session-meta");
443350
+ return join148(getDataDir(), "session-meta");
443340
443351
  }
443341
443352
  function getLanguageFromPath(filePath) {
443342
443353
  const ext = extname14(filePath).toLowerCase();
@@ -443681,7 +443692,7 @@ async function formatTranscriptWithSummarization(log2) {
443681
443692
  `);
443682
443693
  }
443683
443694
  async function loadCachedFacets(sessionId) {
443684
- const facetPath = join147(getFacetsDir(), `${sessionId}.json`);
443695
+ const facetPath = join148(getFacetsDir(), `${sessionId}.json`);
443685
443696
  try {
443686
443697
  const content = await readFile64(facetPath, { encoding: "utf-8" });
443687
443698
  const parsed = jsonParse(content);
@@ -443698,16 +443709,16 @@ async function loadCachedFacets(sessionId) {
443698
443709
  }
443699
443710
  async function saveFacets(facets) {
443700
443711
  try {
443701
- await mkdir55(getFacetsDir(), { recursive: true });
443712
+ await mkdir56(getFacetsDir(), { recursive: true });
443702
443713
  } catch {}
443703
- const facetPath = join147(getFacetsDir(), `${facets.session_id}.json`);
443704
- await writeFile57(facetPath, jsonStringify(facets, null, 2), {
443714
+ const facetPath = join148(getFacetsDir(), `${facets.session_id}.json`);
443715
+ await writeFile58(facetPath, jsonStringify(facets, null, 2), {
443705
443716
  encoding: "utf-8",
443706
443717
  mode: 384
443707
443718
  });
443708
443719
  }
443709
443720
  async function loadCachedSessionMeta(sessionId) {
443710
- const metaPath = join147(getSessionMetaDir(), `${sessionId}.json`);
443721
+ const metaPath = join148(getSessionMetaDir(), `${sessionId}.json`);
443711
443722
  try {
443712
443723
  const content = await readFile64(metaPath, { encoding: "utf-8" });
443713
443724
  return jsonParse(content);
@@ -443717,10 +443728,10 @@ async function loadCachedSessionMeta(sessionId) {
443717
443728
  }
443718
443729
  async function saveSessionMeta(meta) {
443719
443730
  try {
443720
- await mkdir55(getSessionMetaDir(), { recursive: true });
443731
+ await mkdir56(getSessionMetaDir(), { recursive: true });
443721
443732
  } catch {}
443722
- const metaPath = join147(getSessionMetaDir(), `${meta.session_id}.json`);
443723
- await writeFile57(metaPath, jsonStringify(meta, null, 2), {
443733
+ const metaPath = join148(getSessionMetaDir(), `${meta.session_id}.json`);
443734
+ await writeFile58(metaPath, jsonStringify(meta, null, 2), {
443724
443735
  encoding: "utf-8",
443725
443736
  mode: 384
443726
443737
  });
@@ -443775,9 +443786,9 @@ function detectMultiClauding(sessions) {
443775
443786
  const OVERLAP_WINDOW_MS = 30 * 60000;
443776
443787
  const allSessionMessages = [];
443777
443788
  for (const session2 of sessions) {
443778
- for (const timestamp3 of session2.user_message_timestamps) {
443789
+ for (const timestamp4 of session2.user_message_timestamps) {
443779
443790
  try {
443780
- const ts = new Date(timestamp3).getTime();
443791
+ const ts = new Date(timestamp4).getTime();
443781
443792
  allSessionMessages.push({ ts, sessionId: session2.session_id });
443782
443793
  } catch {}
443783
443794
  }
@@ -444776,7 +444787,7 @@ function generateHtmlReport(data, insights) {
444776
444787
  </html>`;
444777
444788
  }
444778
444789
  function buildExportData(data, insights, facets, remoteStats) {
444779
- const version2 = typeof MACRO !== "undefined" ? "1.7.8" : "unknown";
444790
+ const version2 = typeof MACRO !== "undefined" ? "1.8.0" : "unknown";
444780
444791
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444781
444792
  const facets_summary = {
444782
444793
  total: facets.size,
@@ -444827,7 +444838,7 @@ async function scanAllSessions() {
444827
444838
  } catch {
444828
444839
  return [];
444829
444840
  }
444830
- const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join147(projectsDir, dirent.name));
444841
+ const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join148(projectsDir, dirent.name));
444831
444842
  const allSessions = [];
444832
444843
  for (let i2 = 0;i2 < projectDirs.length; i2++) {
444833
444844
  const sessionFiles = await getSessionFilesWithMtime(projectDirs[i2]);
@@ -444849,7 +444860,7 @@ async function scanAllSessions() {
444849
444860
  async function generateUsageReport(options) {
444850
444861
  let remoteStats;
444851
444862
  if (process.env.USER_TYPE === "ant" && options?.collectRemote) {
444852
- const destDir = join147(getClaudeConfigHomeDir(), "projects");
444863
+ const destDir = join148(getClaudeConfigHomeDir(), "projects");
444853
444864
  const { hosts, totalCopied } = await collectAllRemoteHostData(destDir);
444854
444865
  remoteStats = { hosts, totalCopied };
444855
444866
  }
@@ -444986,10 +444997,10 @@ async function generateUsageReport(options) {
444986
444997
  const insights = await generateParallelInsights(aggregated, facets);
444987
444998
  const htmlReport = generateHtmlReport(aggregated, insights);
444988
444999
  try {
444989
- await mkdir55(getDataDir(), { recursive: true });
445000
+ await mkdir56(getDataDir(), { recursive: true });
444990
445001
  } catch {}
444991
- const htmlPath = join147(getDataDir(), "report.html");
444992
- await writeFile57(htmlPath, htmlReport, {
445002
+ const htmlPath = join148(getDataDir(), "report.html");
445003
+ await writeFile58(htmlPath, htmlReport, {
444993
445004
  encoding: "utf-8",
444994
445005
  mode: 384
444995
445006
  });
@@ -445084,13 +445095,13 @@ var init_insights = __esm(() => {
445084
445095
  } : async () => 0;
445085
445096
  collectFromRemoteHost = process.env.USER_TYPE === "ant" ? async (homespace, destDir) => {
445086
445097
  const result = { copied: 0, skipped: 0 };
445087
- const tempDir = await mkdtemp(join147(tmpdir9(), "claude-hs-"));
445098
+ const tempDir = await mkdtemp(join148(tmpdir9(), "claude-hs-"));
445088
445099
  try {
445089
445100
  const scpResult = await execFileNoThrow("scp", ["-rq", `${homespace}.coder:/root/.claude/projects/`, tempDir], { timeout: 300000 });
445090
445101
  if (scpResult.code !== 0) {
445091
445102
  return result;
445092
445103
  }
445093
- const projectsDir = join147(tempDir, "projects");
445104
+ const projectsDir = join148(tempDir, "projects");
445094
445105
  let projectDirents;
445095
445106
  try {
445096
445107
  projectDirents = await readdir35(projectsDir, { withFileTypes: true });
@@ -445099,13 +445110,13 @@ var init_insights = __esm(() => {
445099
445110
  }
445100
445111
  await Promise.all(projectDirents.map(async (dirent) => {
445101
445112
  const projectName = dirent.name;
445102
- const projectPath = join147(projectsDir, projectName);
445113
+ const projectPath = join148(projectsDir, projectName);
445103
445114
  if (!dirent.isDirectory())
445104
445115
  return;
445105
445116
  const destProjectName = `${projectName}__${homespace}`;
445106
- const destProjectPath = join147(destDir, destProjectName);
445117
+ const destProjectPath = join148(destDir, destProjectName);
445107
445118
  try {
445108
- await mkdir55(destProjectPath, { recursive: true });
445119
+ await mkdir56(destProjectPath, { recursive: true });
445109
445120
  } catch {}
445110
445121
  let files2;
445111
445122
  try {
@@ -445117,8 +445128,8 @@ var init_insights = __esm(() => {
445117
445128
  const fileName = fileDirent.name;
445118
445129
  if (!fileName.endsWith(".jsonl"))
445119
445130
  return;
445120
- const srcFile = join147(projectPath, fileName);
445121
- const destFile = join147(destProjectPath, fileName);
445131
+ const srcFile = join148(projectPath, fileName);
445132
+ const destFile = join148(destProjectPath, fileName);
445122
445133
  try {
445123
445134
  await copyFile9(srcFile, destFile, fsConstants5.COPYFILE_EXCL);
445124
445135
  result.copied++;
@@ -445425,9 +445436,9 @@ Find something genuinely interesting or amusing from the session summaries.`,
445425
445436
  let reportUrl = `file://${htmlPath}`;
445426
445437
  let uploadHint = "";
445427
445438
  if (process.env.USER_TYPE === "ant") {
445428
- const timestamp3 = new Date().toISOString().replace(/[-:]/g, "").replace("T", "_").slice(0, 15);
445439
+ const timestamp4 = new Date().toISOString().replace(/[-:]/g, "").replace("T", "_").slice(0, 15);
445429
445440
  const username = process.env.SAFEUSER || process.env.USER || "unknown";
445430
- const filename = `${username}_insights_${timestamp3}.html`;
445441
+ const filename = `${username}_insights_${timestamp4}.html`;
445431
445442
  const s3Path = `s3://anthropic-serve/atamkin/cc-user-reports/${filename}`;
445432
445443
  const s3Url = `https://s3-frontend.infra.ant.dev/anthropic-serve/atamkin/cc-user-reports/${filename}`;
445433
445444
  reportUrl = s3Url;
@@ -446149,14 +446160,14 @@ import { closeSync as closeSync4, fstatSync, openSync as openSync5, readSync as
446149
446160
  import {
446150
446161
  appendFile as fsAppendFile,
446151
446162
  open as fsOpen2,
446152
- mkdir as mkdir56,
446163
+ mkdir as mkdir57,
446153
446164
  readdir as readdir36,
446154
446165
  readFile as readFile65,
446155
446166
  stat as stat49,
446156
446167
  unlink as unlink22,
446157
- writeFile as writeFile58
446168
+ writeFile as writeFile59
446158
446169
  } from "fs/promises";
446159
- import { basename as basename41, dirname as dirname53, join as join148 } from "path";
446170
+ import { basename as basename41, dirname as dirname53, join as join149 } from "path";
446160
446171
  function isTranscriptMessage(entry) {
446161
446172
  return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
446162
446173
  }
@@ -446170,18 +446181,18 @@ function isEphemeralToolProgress(dataType) {
446170
446181
  return typeof dataType === "string" && EPHEMERAL_PROGRESS_TYPES.has(dataType);
446171
446182
  }
446172
446183
  function getProjectsDir2() {
446173
- return join148(getClaudeConfigHomeDir(), "projects");
446184
+ return join149(getClaudeConfigHomeDir(), "projects");
446174
446185
  }
446175
446186
  function getTranscriptPath() {
446176
446187
  const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
446177
- return join148(projectDir, `${getSessionId()}.jsonl`);
446188
+ return join149(projectDir, `${getSessionId()}.jsonl`);
446178
446189
  }
446179
446190
  function getTranscriptPathForSession(sessionId) {
446180
446191
  if (sessionId === getSessionId()) {
446181
446192
  return getTranscriptPath();
446182
446193
  }
446183
446194
  const projectDir = getProjectDir2(getOriginalCwd());
446184
- return join148(projectDir, `${sessionId}.jsonl`);
446195
+ return join149(projectDir, `${sessionId}.jsonl`);
446185
446196
  }
446186
446197
  function setAgentTranscriptSubdir(agentId, subdir) {
446187
446198
  agentTranscriptSubdirs.set(agentId, subdir);
@@ -446193,16 +446204,16 @@ function getAgentTranscriptPath(agentId) {
446193
446204
  const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
446194
446205
  const sessionId = getSessionId();
446195
446206
  const subdir = agentTranscriptSubdirs.get(agentId);
446196
- const base = subdir ? join148(projectDir, sessionId, "subagents", subdir) : join148(projectDir, sessionId, "subagents");
446197
- return join148(base, `agent-${agentId}.jsonl`);
446207
+ const base = subdir ? join149(projectDir, sessionId, "subagents", subdir) : join149(projectDir, sessionId, "subagents");
446208
+ return join149(base, `agent-${agentId}.jsonl`);
446198
446209
  }
446199
446210
  function getAgentMetadataPath(agentId) {
446200
446211
  return getAgentTranscriptPath(agentId).replace(/\.jsonl$/, ".meta.json");
446201
446212
  }
446202
446213
  async function writeAgentMetadata(agentId, metadata) {
446203
446214
  const path15 = getAgentMetadataPath(agentId);
446204
- await mkdir56(dirname53(path15), { recursive: true });
446205
- await writeFile58(path15, JSON.stringify(metadata));
446215
+ await mkdir57(dirname53(path15), { recursive: true });
446216
+ await writeFile59(path15, JSON.stringify(metadata));
446206
446217
  }
446207
446218
  async function readAgentMetadata(agentId) {
446208
446219
  const path15 = getAgentMetadataPath(agentId);
@@ -446217,15 +446228,15 @@ async function readAgentMetadata(agentId) {
446217
446228
  }
446218
446229
  function getRemoteAgentsDir() {
446219
446230
  const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
446220
- return join148(projectDir, getSessionId(), "remote-agents");
446231
+ return join149(projectDir, getSessionId(), "remote-agents");
446221
446232
  }
446222
446233
  function getRemoteAgentMetadataPath(taskId) {
446223
- return join148(getRemoteAgentsDir(), `remote-agent-${taskId}.meta.json`);
446234
+ return join149(getRemoteAgentsDir(), `remote-agent-${taskId}.meta.json`);
446224
446235
  }
446225
446236
  async function writeRemoteAgentMetadata(taskId, metadata) {
446226
446237
  const path15 = getRemoteAgentMetadataPath(taskId);
446227
- await mkdir56(dirname53(path15), { recursive: true });
446228
- await writeFile58(path15, JSON.stringify(metadata));
446238
+ await mkdir57(dirname53(path15), { recursive: true });
446239
+ await writeFile59(path15, JSON.stringify(metadata));
446229
446240
  }
446230
446241
  async function readRemoteAgentMetadata(taskId) {
446231
446242
  const path15 = getRemoteAgentMetadataPath(taskId);
@@ -446263,7 +446274,7 @@ async function listRemoteAgentMetadata() {
446263
446274
  if (!entry.isFile() || !entry.name.endsWith(".meta.json"))
446264
446275
  continue;
446265
446276
  try {
446266
- const raw = await readFile65(join148(dir, entry.name), "utf-8");
446277
+ const raw = await readFile65(join149(dir, entry.name), "utf-8");
446267
446278
  results.push(JSON.parse(raw));
446268
446279
  } catch (e) {
446269
446280
  logForDebugging(`listRemoteAgentMetadata: skipping ${entry.name}: ${String(e)}`);
@@ -446273,7 +446284,7 @@ async function listRemoteAgentMetadata() {
446273
446284
  }
446274
446285
  function sessionIdExists(sessionId) {
446275
446286
  const projectDir = getProjectDir2(getOriginalCwd());
446276
- const sessionFile = join148(projectDir, `${sessionId}.jsonl`);
446287
+ const sessionFile = join149(projectDir, `${sessionId}.jsonl`);
446277
446288
  const fs5 = getFsImplementation();
446278
446289
  try {
446279
446290
  fs5.statSync(sessionFile);
@@ -446413,7 +446424,7 @@ class Project {
446413
446424
  try {
446414
446425
  await fsAppendFile(filePath, data, { mode: 384 });
446415
446426
  } catch {
446416
- await mkdir56(dirname53(filePath), { recursive: true, mode: 448 });
446427
+ await mkdir57(dirname53(filePath), { recursive: true, mode: 448 });
446417
446428
  await fsAppendFile(filePath, data, { mode: 384 });
446418
446429
  }
446419
446430
  }
@@ -446617,7 +446628,7 @@ class Project {
446617
446628
  return true;
446618
446629
  }
446619
446630
  });
446620
- await writeFile58(this.sessionFile, lines.join(`
446631
+ await writeFile59(this.sessionFile, lines.join(`
446621
446632
  `), {
446622
446633
  encoding: "utf8"
446623
446634
  });
@@ -446954,11 +446965,11 @@ async function hydrateRemoteSession(sessionId, ingressUrl) {
446954
446965
  try {
446955
446966
  const remoteLogs = await getSessionLogs(sessionId, ingressUrl) || [];
446956
446967
  const projectDir = getProjectDir2(getOriginalCwd());
446957
- await mkdir56(projectDir, { recursive: true, mode: 448 });
446968
+ await mkdir57(projectDir, { recursive: true, mode: 448 });
446958
446969
  const sessionFile = getTranscriptPathForSession(sessionId);
446959
446970
  const content = remoteLogs.map((e) => jsonStringify(e) + `
446960
446971
  `).join("");
446961
- await writeFile58(sessionFile, content, { encoding: "utf8", mode: 384 });
446972
+ await writeFile59(sessionFile, content, { encoding: "utf8", mode: 384 });
446962
446973
  logForDebugging(`Hydrated ${remoteLogs.length} entries from remote`);
446963
446974
  return remoteLogs.length > 0;
446964
446975
  } catch (error5) {
@@ -446986,11 +446997,11 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
446986
446997
  return false;
446987
446998
  }
446988
446999
  const projectDir = getProjectDir2(getOriginalCwd());
446989
- await mkdir56(projectDir, { recursive: true, mode: 448 });
447000
+ await mkdir57(projectDir, { recursive: true, mode: 448 });
446990
447001
  const sessionFile = getTranscriptPathForSession(sessionId);
446991
447002
  const fgContent = events2.map((e) => jsonStringify(e.payload) + `
446992
447003
  `).join("");
446993
- await writeFile58(sessionFile, fgContent, { encoding: "utf8", mode: 384 });
447004
+ await writeFile59(sessionFile, fgContent, { encoding: "utf8", mode: 384 });
446994
447005
  logForDebugging(`Hydrated ${events2.length} foreground entries from CCR v2 internal events`);
446995
447006
  let subagentEventCount = 0;
446996
447007
  const subagentReader = project2.getInternalSubagentEventReader();
@@ -447012,10 +447023,10 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
447012
447023
  }
447013
447024
  for (const [agentId, entries] of byAgent) {
447014
447025
  const agentFile = getAgentTranscriptPath(asAgentId(agentId));
447015
- await mkdir56(dirname53(agentFile), { recursive: true, mode: 448 });
447026
+ await mkdir57(dirname53(agentFile), { recursive: true, mode: 448 });
447016
447027
  const agentContent = entries.map((p) => jsonStringify(p) + `
447017
447028
  `).join("");
447018
- await writeFile58(agentFile, agentContent, {
447029
+ await writeFile59(agentFile, agentContent, {
447019
447030
  encoding: "utf8",
447020
447031
  mode: 384
447021
447032
  });
@@ -448242,7 +448253,7 @@ async function loadTranscriptFile(filePath, opts) {
448242
448253
  };
448243
448254
  }
448244
448255
  async function loadSessionFile(sessionId) {
448245
- const sessionFile = join148(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), `${sessionId}.jsonl`);
448256
+ const sessionFile = join149(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), `${sessionId}.jsonl`);
448246
448257
  return loadTranscriptFile(sessionFile);
448247
448258
  }
448248
448259
  function clearSessionMessagesCache() {
@@ -448310,7 +448321,7 @@ async function loadAllProjectsMessageLogsFull(limit) {
448310
448321
  } catch {
448311
448322
  return [];
448312
448323
  }
448313
- const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join148(projectsDir, dirent.name));
448324
+ const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join149(projectsDir, dirent.name));
448314
448325
  const logsPerProject = await Promise.all(projectDirs.map((projectDir) => getLogsWithoutIndex(projectDir, limit)));
448315
448326
  const allLogs = logsPerProject.flat();
448316
448327
  const deduped = new Map;
@@ -448335,7 +448346,7 @@ async function loadAllProjectsMessageLogsProgressive(limit, initialEnrichCount =
448335
448346
  } catch {
448336
448347
  return { logs: [], allStatLogs: [], nextIndex: 0 };
448337
448348
  }
448338
- const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join148(projectsDir, dirent.name));
448349
+ const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join149(projectsDir, dirent.name));
448339
448350
  const rawLogs = [];
448340
448351
  for (const projectDir of projectDirs) {
448341
448352
  rawLogs.push(...await getSessionFilesLite(projectDir, limit));
@@ -448396,7 +448407,7 @@ async function getStatOnlyLogsForWorktrees(worktreePaths, limit) {
448396
448407
  for (const { path: wtPath, prefix } of indexed) {
448397
448408
  if (dirName === prefix || dirName.startsWith(prefix + "-")) {
448398
448409
  seenDirs.add(dirName);
448399
- allLogs.push(...await getSessionFilesLite(join148(projectsDir, dirent.name), undefined, wtPath));
448410
+ allLogs.push(...await getSessionFilesLite(join149(projectsDir, dirent.name), undefined, wtPath));
448400
448411
  break;
448401
448412
  }
448402
448413
  }
@@ -448465,7 +448476,7 @@ async function loadSubagentTranscripts(agentIds) {
448465
448476
  return transcripts;
448466
448477
  }
448467
448478
  async function loadAllSubagentTranscriptsFromDisk() {
448468
- const subagentsDir = join148(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), getSessionId(), "subagents");
448479
+ const subagentsDir = join149(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), getSessionId(), "subagents");
448469
448480
  let entries;
448470
448481
  try {
448471
448482
  entries = await readdir36(subagentsDir, { withFileTypes: true });
@@ -448593,7 +448604,7 @@ async function getSessionFilesWithMtime(projectDir) {
448593
448604
  const sessionId = validateUuid2(basename41(dirent.name, ".jsonl"));
448594
448605
  if (!sessionId)
448595
448606
  continue;
448596
- candidates.push({ sessionId, filePath: join148(projectDir, dirent.name) });
448607
+ candidates.push({ sessionId, filePath: join149(projectDir, dirent.name) });
448597
448608
  }
448598
448609
  await Promise.all(candidates.map(async ({ sessionId, filePath }) => {
448599
448610
  try {
@@ -448977,7 +448988,7 @@ var init_sessionStorage = __esm(() => {
448977
448988
  init_settings2();
448978
448989
  init_slowOperations();
448979
448990
  init_uuid();
448980
- VERSION6 = typeof MACRO !== "undefined" ? "1.7.8" : "unknown";
448991
+ VERSION6 = typeof MACRO !== "undefined" ? "1.8.0" : "unknown";
448981
448992
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448982
448993
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448983
448994
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -448989,7 +449000,7 @@ var init_sessionStorage = __esm(() => {
448989
449000
  MAX_TRANSCRIPT_READ_BYTES = 50 * 1024 * 1024;
448990
449001
  agentTranscriptSubdirs = new Map;
448991
449002
  getProjectDir2 = memoize_default((projectDir) => {
448992
- return join148(getProjectsDir2(), sanitizePath2(projectDir));
449003
+ return join149(getProjectsDir2(), sanitizePath2(projectDir));
448993
449004
  });
448994
449005
  METADATA_TYPE_MARKERS = [
448995
449006
  '"type":"summary"',
@@ -449225,41 +449236,41 @@ var init_memdir = __esm(() => {
449225
449236
  });
449226
449237
 
449227
449238
  // src/tools/AgentTool/agentMemory.ts
449228
- import { join as join149, normalize as normalize13, sep as sep31 } from "path";
449239
+ import { join as join150, normalize as normalize13, sep as sep31 } from "path";
449229
449240
  function sanitizeAgentTypeForPath(agentType) {
449230
449241
  return agentType.replace(/:/g, "-");
449231
449242
  }
449232
449243
  function getLocalAgentMemoryDir(dirName) {
449233
449244
  if (process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR) {
449234
- return join149(process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR, "projects", sanitizePath2(findCanonicalGitRoot(getProjectRoot()) ?? getProjectRoot()), "agent-memory-local", dirName) + sep31;
449245
+ return join150(process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR, "projects", sanitizePath2(findCanonicalGitRoot(getProjectRoot()) ?? getProjectRoot()), "agent-memory-local", dirName) + sep31;
449235
449246
  }
449236
- return join149(getProjectMemoryBaseDir(), "agent-memory-local", dirName) + sep31;
449247
+ return join150(getProjectMemoryBaseDir(), "agent-memory-local", dirName) + sep31;
449237
449248
  }
449238
449249
  function getAgentMemoryDir(agentType, scope) {
449239
449250
  const dirName = sanitizeAgentTypeForPath(agentType);
449240
449251
  switch (scope) {
449241
449252
  case "project":
449242
- return join149(getProjectMemoryBaseDir(), "agent-memory", dirName) + sep31;
449253
+ return join150(getProjectMemoryBaseDir(), "agent-memory", dirName) + sep31;
449243
449254
  case "local":
449244
449255
  return getLocalAgentMemoryDir(dirName);
449245
449256
  case "user":
449246
- return join149(getMemoryBaseDir(), "agent-memory", dirName) + sep31;
449257
+ return join150(getMemoryBaseDir(), "agent-memory", dirName) + sep31;
449247
449258
  }
449248
449259
  }
449249
449260
  function isAgentMemoryPath(absolutePath) {
449250
449261
  const normalizedPath = normalize13(absolutePath);
449251
449262
  const memoryBase = getMemoryBaseDir();
449252
- if (normalizedPath.startsWith(join149(memoryBase, "agent-memory") + sep31)) {
449263
+ if (normalizedPath.startsWith(join150(memoryBase, "agent-memory") + sep31)) {
449253
449264
  return true;
449254
449265
  }
449255
- if (normalizedPath.startsWith(join149(getProjectMemoryBaseDir(), "agent-memory") + sep31)) {
449266
+ if (normalizedPath.startsWith(join150(getProjectMemoryBaseDir(), "agent-memory") + sep31)) {
449256
449267
  return true;
449257
449268
  }
449258
449269
  if (process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR) {
449259
- if (normalizedPath.includes(sep31 + "agent-memory-local" + sep31) && normalizedPath.startsWith(join149(process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR, "projects") + sep31)) {
449270
+ if (normalizedPath.includes(sep31 + "agent-memory-local" + sep31) && normalizedPath.startsWith(join150(process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR, "projects") + sep31)) {
449260
449271
  return true;
449261
449272
  }
449262
- } else if (normalizedPath.startsWith(join149(getProjectMemoryBaseDir(), "agent-memory-local") + sep31)) {
449273
+ } else if (normalizedPath.startsWith(join150(getProjectMemoryBaseDir(), "agent-memory-local") + sep31)) {
449263
449274
  return true;
449264
449275
  }
449265
449276
  return false;
@@ -449267,7 +449278,7 @@ function isAgentMemoryPath(absolutePath) {
449267
449278
  function getMemoryScopeDisplay(memory2) {
449268
449279
  switch (memory2) {
449269
449280
  case "user":
449270
- return `User (${join149(getMemoryBaseDir(), "agent-memory")}/)`;
449281
+ return `User (${join150(getMemoryBaseDir(), "agent-memory")}/)`;
449271
449282
  case "project":
449272
449283
  return "Project (.localclawd/agent-memory/)";
449273
449284
  case "local":
@@ -449309,7 +449320,7 @@ var init_agentMemory = __esm(() => {
449309
449320
  // src/utils/permissions/filesystem.ts
449310
449321
  import { randomBytes as randomBytes20 } from "crypto";
449311
449322
  import { homedir as homedir35, tmpdir as tmpdir10 } from "os";
449312
- import { join as join150, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
449323
+ import { join as join151, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
449313
449324
  function normalizeCaseForComparison(path15) {
449314
449325
  return path15.toLowerCase();
449315
449326
  }
@@ -449318,11 +449329,11 @@ function getClaudeSkillScope(filePath) {
449318
449329
  const absolutePathLower = normalizeCaseForComparison(absolutePath);
449319
449330
  const bases = [
449320
449331
  {
449321
- dir: expandPath(join150(getOriginalCwd(), ".claude", "skills")),
449332
+ dir: expandPath(join151(getOriginalCwd(), ".claude", "skills")),
449322
449333
  prefix: "/.claude/skills/"
449323
449334
  },
449324
449335
  {
449325
- dir: expandPath(join150(homedir35(), ".claude", "skills")),
449336
+ dir: expandPath(join151(homedir35(), ".claude", "skills")),
449326
449337
  prefix: "~/.claude/skills/"
449327
449338
  }
449328
449339
  ];
@@ -449377,21 +449388,21 @@ function isClaudeConfigFilePath(filePath) {
449377
449388
  if (isClaudeSettingsPath(filePath)) {
449378
449389
  return true;
449379
449390
  }
449380
- const commandsDir = join150(getOriginalCwd(), ".claude", "commands");
449381
- const agentsDir = join150(getOriginalCwd(), ".claude", "agents");
449382
- const skillsDir = join150(getOriginalCwd(), ".claude", "skills");
449391
+ const commandsDir = join151(getOriginalCwd(), ".claude", "commands");
449392
+ const agentsDir = join151(getOriginalCwd(), ".claude", "agents");
449393
+ const skillsDir = join151(getOriginalCwd(), ".claude", "skills");
449383
449394
  return pathInWorkingPath(filePath, commandsDir) || pathInWorkingPath(filePath, agentsDir) || pathInWorkingPath(filePath, skillsDir);
449384
449395
  }
449385
449396
  function isSessionPlanFile(absolutePath) {
449386
- const expectedPrefix = join150(getPlansDirectory(), getPlanSlug());
449397
+ const expectedPrefix = join151(getPlansDirectory(), getPlanSlug());
449387
449398
  const normalizedPath = normalize14(absolutePath);
449388
449399
  return normalizedPath.startsWith(expectedPrefix) && normalizedPath.endsWith(".md");
449389
449400
  }
449390
449401
  function getSessionMemoryDir() {
449391
- return join150(getProjectDir2(getCwd()), getSessionId(), "session-memory") + sep32;
449402
+ return join151(getProjectDir2(getCwd()), getSessionId(), "session-memory") + sep32;
449392
449403
  }
449393
449404
  function getSessionMemoryPath() {
449394
- return join150(getSessionMemoryDir(), "summary.md");
449405
+ return join151(getSessionMemoryDir(), "summary.md");
449395
449406
  }
449396
449407
  function isSessionMemoryPath(absolutePath) {
449397
449408
  const normalizedPath = normalize14(absolutePath);
@@ -449413,10 +449424,10 @@ function getClaudeTempDirName() {
449413
449424
  return `claude-${uid}`;
449414
449425
  }
449415
449426
  function getProjectTempDir() {
449416
- return join150(getClaudeTempDir(), sanitizePath2(getOriginalCwd())) + sep32;
449427
+ return join151(getClaudeTempDir(), sanitizePath2(getOriginalCwd())) + sep32;
449417
449428
  }
449418
449429
  function getScratchpadDir() {
449419
- return join150(getProjectTempDir(), getSessionId(), "scratchpad");
449430
+ return join151(getProjectTempDir(), getSessionId(), "scratchpad");
449420
449431
  }
449421
449432
  async function ensureScratchpadDir() {
449422
449433
  if (!isScratchpadEnabled()) {
@@ -449994,7 +450005,7 @@ function checkEditableInternalPath(absolutePath, input) {
449994
450005
  }
449995
450006
  };
449996
450007
  }
449997
- if (normalizeCaseForComparison(normalizedPath) === normalizeCaseForComparison(join150(getOriginalCwd(), ".claude", "launch.json"))) {
450008
+ if (normalizeCaseForComparison(normalizedPath) === normalizeCaseForComparison(join151(getOriginalCwd(), ".claude", "launch.json"))) {
449998
450009
  return {
449999
450010
  behavior: "allow",
450000
450011
  updatedInput: input,
@@ -450091,7 +450102,7 @@ function checkReadableInternalPath(absolutePath, input) {
450091
450102
  }
450092
450103
  };
450093
450104
  }
450094
- const tasksDir = join150(getClaudeConfigHomeDir(), "tasks") + sep32;
450105
+ const tasksDir = join151(getClaudeConfigHomeDir(), "tasks") + sep32;
450095
450106
  if (normalizedPath === tasksDir.slice(0, -1) || normalizedPath.startsWith(tasksDir)) {
450096
450107
  return {
450097
450108
  behavior: "allow",
@@ -450102,7 +450113,7 @@ function checkReadableInternalPath(absolutePath, input) {
450102
450113
  }
450103
450114
  };
450104
450115
  }
450105
- const teamsReadDir = join150(getClaudeConfigHomeDir(), "teams") + sep32;
450116
+ const teamsReadDir = join151(getClaudeConfigHomeDir(), "teams") + sep32;
450106
450117
  if (normalizedPath === teamsReadDir.slice(0, -1) || normalizedPath.startsWith(teamsReadDir)) {
450107
450118
  return {
450108
450119
  behavior: "allow",
@@ -450174,11 +450185,11 @@ var init_filesystem = __esm(() => {
450174
450185
  try {
450175
450186
  resolvedBaseTmpDir = fs5.realpathSync(baseTmpDir);
450176
450187
  } catch {}
450177
- return join150(resolvedBaseTmpDir, getClaudeTempDirName()) + sep32;
450188
+ return join151(resolvedBaseTmpDir, getClaudeTempDirName()) + sep32;
450178
450189
  });
450179
450190
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
450180
450191
  const nonce = randomBytes20(16).toString("hex");
450181
- return join150(getClaudeTempDir(), "bundled-skills", "1.7.8", nonce);
450192
+ return join151(getClaudeTempDir(), "bundled-skills", "1.8.0", nonce);
450182
450193
  });
450183
450194
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
450184
450195
  });
@@ -450186,24 +450197,24 @@ var init_filesystem = __esm(() => {
450186
450197
  // src/utils/task/diskOutput.ts
450187
450198
  import { constants as fsConstants6 } from "fs";
450188
450199
  import {
450189
- mkdir as mkdir57,
450200
+ mkdir as mkdir58,
450190
450201
  open as open16,
450191
450202
  stat as stat50,
450192
450203
  symlink as symlink4,
450193
450204
  unlink as unlink23
450194
450205
  } from "fs/promises";
450195
- import { join as join151 } from "path";
450206
+ import { join as join152 } from "path";
450196
450207
  function getTaskOutputDir() {
450197
450208
  if (_taskOutputDir === undefined) {
450198
- _taskOutputDir = join151(getProjectTempDir(), getSessionId(), "tasks");
450209
+ _taskOutputDir = join152(getProjectTempDir(), getSessionId(), "tasks");
450199
450210
  }
450200
450211
  return _taskOutputDir;
450201
450212
  }
450202
450213
  async function ensureOutputDir() {
450203
- await mkdir57(getTaskOutputDir(), { recursive: true });
450214
+ await mkdir58(getTaskOutputDir(), { recursive: true });
450204
450215
  }
450205
450216
  function getTaskOutputPath(taskId) {
450206
- return join151(getTaskOutputDir(), `${taskId}.output`);
450217
+ return join152(getTaskOutputDir(), `${taskId}.output`);
450207
450218
  }
450208
450219
  function track(p) {
450209
450220
  _pendingOps.add(p);
@@ -454462,14 +454473,14 @@ __export(exports_worktree, {
454462
454473
  import { spawnSync as spawnSync9 } from "child_process";
454463
454474
  import {
454464
454475
  copyFile as copyFile10,
454465
- mkdir as mkdir58,
454476
+ mkdir as mkdir59,
454466
454477
  readdir as readdir37,
454467
454478
  readFile as readFile66,
454468
454479
  stat as stat52,
454469
454480
  symlink as symlink5,
454470
454481
  utimes as utimes2
454471
454482
  } from "fs/promises";
454472
- import { basename as basename43, dirname as dirname54, join as join152 } from "path";
454483
+ import { basename as basename43, dirname as dirname54, join as join153 } from "path";
454473
454484
  function validateWorktreeSlug(slug) {
454474
454485
  if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
454475
454486
  throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`);
@@ -454484,7 +454495,7 @@ function validateWorktreeSlug(slug) {
454484
454495
  }
454485
454496
  }
454486
454497
  async function mkdirRecursive(dirPath) {
454487
- await mkdir58(dirPath, { recursive: true });
454498
+ await mkdir59(dirPath, { recursive: true });
454488
454499
  }
454489
454500
  async function symlinkDirectories(repoRootPath, worktreePath, dirsToSymlink) {
454490
454501
  for (const dir of dirsToSymlink) {
@@ -454492,8 +454503,8 @@ async function symlinkDirectories(repoRootPath, worktreePath, dirsToSymlink) {
454492
454503
  logForDebugging(`Skipping symlink for "${dir}": path traversal detected`, { level: "warn" });
454493
454504
  continue;
454494
454505
  }
454495
- const sourcePath = join152(repoRootPath, dir);
454496
- const destPath = join152(worktreePath, dir);
454506
+ const sourcePath = join153(repoRootPath, dir);
454507
+ const destPath = join153(worktreePath, dir);
454497
454508
  try {
454498
454509
  await symlink5(sourcePath, destPath, "dir");
454499
454510
  logForDebugging(`Symlinked ${dir} from main repository to worktree to avoid disk bloat`);
@@ -454517,7 +454528,7 @@ function generateTmuxSessionName(repoPath, branch2) {
454517
454528
  return combined.replace(/[/.]/g, "_");
454518
454529
  }
454519
454530
  function worktreesDir(repoRoot) {
454520
- return join152(repoRoot, ".claude", "worktrees");
454531
+ return join153(repoRoot, ".claude", "worktrees");
454521
454532
  }
454522
454533
  function flattenSlug(slug) {
454523
454534
  return slug.replaceAll("/", "+");
@@ -454526,7 +454537,7 @@ function worktreeBranchName(slug) {
454526
454537
  return `worktree-${flattenSlug(slug)}`;
454527
454538
  }
454528
454539
  function worktreePathFor(repoRoot, slug) {
454529
- return join152(worktreesDir(repoRoot), flattenSlug(slug));
454540
+ return join153(worktreesDir(repoRoot), flattenSlug(slug));
454530
454541
  }
454531
454542
  async function getOrCreateWorktree(repoRoot, slug, options) {
454532
454543
  const worktreePath = worktreePathFor(repoRoot, slug);
@@ -454540,7 +454551,7 @@ async function getOrCreateWorktree(repoRoot, slug, options) {
454540
454551
  existed: true
454541
454552
  };
454542
454553
  }
454543
- await mkdir58(worktreesDir(repoRoot), { recursive: true });
454554
+ await mkdir59(worktreesDir(repoRoot), { recursive: true });
454544
454555
  const fetchEnv = { ...process.env, ...GIT_NO_PROMPT_ENV2 };
454545
454556
  let baseBranch;
454546
454557
  let baseSha = null;
@@ -454607,7 +454618,7 @@ async function getOrCreateWorktree(repoRoot, slug, options) {
454607
454618
  async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
454608
454619
  let includeContent;
454609
454620
  try {
454610
- includeContent = await readFile66(join152(repoRoot, ".worktreeinclude"), "utf-8");
454621
+ includeContent = await readFile66(join153(repoRoot, ".worktreeinclude"), "utf-8");
454611
454622
  } catch {
454612
454623
  return [];
454613
454624
  }
@@ -454662,10 +454673,10 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
454662
454673
  }
454663
454674
  const copied = [];
454664
454675
  for (const relativePath2 of files2) {
454665
- const srcPath = join152(repoRoot, relativePath2);
454666
- const destPath = join152(worktreePath, relativePath2);
454676
+ const srcPath = join153(repoRoot, relativePath2);
454677
+ const destPath = join153(worktreePath, relativePath2);
454667
454678
  try {
454668
- await mkdir58(dirname54(destPath), { recursive: true });
454679
+ await mkdir59(dirname54(destPath), { recursive: true });
454669
454680
  await copyFile10(srcPath, destPath);
454670
454681
  copied.push(relativePath2);
454671
454682
  } catch (e) {
@@ -454679,9 +454690,9 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
454679
454690
  }
454680
454691
  async function performPostCreationSetup(repoRoot, worktreePath) {
454681
454692
  const localSettingsRelativePath = getRelativeSettingsFilePathForSource("localSettings");
454682
- const sourceSettingsLocal = join152(repoRoot, localSettingsRelativePath);
454693
+ const sourceSettingsLocal = join153(repoRoot, localSettingsRelativePath);
454683
454694
  try {
454684
- const destSettingsLocal = join152(worktreePath, localSettingsRelativePath);
454695
+ const destSettingsLocal = join153(worktreePath, localSettingsRelativePath);
454685
454696
  await mkdirRecursive(dirname54(destSettingsLocal));
454686
454697
  await copyFile10(sourceSettingsLocal, destSettingsLocal);
454687
454698
  logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
@@ -454691,8 +454702,8 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
454691
454702
  logForDebugging(`Failed to copy settings.local.json: ${e.message}`, { level: "warn" });
454692
454703
  }
454693
454704
  }
454694
- const huskyPath = join152(repoRoot, ".husky");
454695
- const gitHooksPath = join152(repoRoot, ".git", "hooks");
454705
+ const huskyPath = join153(repoRoot, ".husky");
454706
+ const gitHooksPath = join153(repoRoot, ".git", "hooks");
454696
454707
  let hooksPath = null;
454697
454708
  for (const candidatePath of [huskyPath, gitHooksPath]) {
454698
454709
  try {
@@ -454967,7 +454978,7 @@ async function cleanupStaleAgentWorktrees(cutoffDate) {
454967
454978
  if (!EPHEMERAL_WORKTREE_PATTERNS.some((p) => p.test(slug))) {
454968
454979
  continue;
454969
454980
  }
454970
- const worktreePath = join152(dir, slug);
454981
+ const worktreePath = join153(dir, slug);
454971
454982
  if (currentPath === worktreePath) {
454972
454983
  continue;
454973
454984
  }
@@ -457844,9 +457855,9 @@ __export(exports_upstreamproxy, {
457844
457855
  getUpstreamProxyEnv: () => getUpstreamProxyEnv,
457845
457856
  SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
457846
457857
  });
457847
- import { mkdir as mkdir59, readFile as readFile67, unlink as unlink24, writeFile as writeFile59 } from "fs/promises";
457858
+ import { mkdir as mkdir60, readFile as readFile67, unlink as unlink24, writeFile as writeFile60 } from "fs/promises";
457848
457859
  import { homedir as homedir36 } from "os";
457849
- import { join as join153 } from "path";
457860
+ import { join as join154 } from "path";
457850
457861
  async function initUpstreamProxy(opts) {
457851
457862
  if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
457852
457863
  return state;
@@ -457867,7 +457878,7 @@ async function initUpstreamProxy(opts) {
457867
457878
  }
457868
457879
  setNonDumpable();
457869
457880
  const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
457870
- const caBundlePath = opts?.caBundlePath ?? join153(homedir36(), ".ccr", "ca-bundle.crt");
457881
+ const caBundlePath = opts?.caBundlePath ?? join154(homedir36(), ".ccr", "ca-bundle.crt");
457871
457882
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
457872
457883
  if (!caOk)
457873
457884
  return state;
@@ -457967,8 +457978,8 @@ async function downloadCaBundle(baseUrl, systemCaPath, outPath) {
457967
457978
  }
457968
457979
  const ccrCa = await resp.text();
457969
457980
  const systemCa = await readFile67(systemCaPath, "utf8").catch(() => "");
457970
- await mkdir59(join153(outPath, ".."), { recursive: true });
457971
- await writeFile59(outPath, systemCa + `
457981
+ await mkdir60(join154(outPath, ".."), { recursive: true });
457982
+ await writeFile60(outPath, systemCa + `
457972
457983
  ` + ccrCa, "utf8");
457973
457984
  return true;
457974
457985
  } catch (err2) {
@@ -459415,7 +459426,7 @@ function buildSystemInitMessage(inputs) {
459415
459426
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
459416
459427
  apiKeySource: getAnthropicApiKeyWithSource().source,
459417
459428
  betas: getSdkBetas(),
459418
- claude_code_version: "1.7.8",
459429
+ claude_code_version: "1.8.0",
459419
459430
  output_style: outputStyle2,
459420
459431
  agents: inputs.agents.map((agent) => agent.agentType),
459421
459432
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -465774,7 +465785,7 @@ var init_ShowInIDEPrompt = __esm(() => {
465774
465785
 
465775
465786
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
465776
465787
  import { homedir as homedir37 } from "os";
465777
- import { basename as basename47, join as join154, sep as sep33 } from "path";
465788
+ import { basename as basename47, join as join155, sep as sep33 } from "path";
465778
465789
  function isInClaudeFolder(filePath) {
465779
465790
  const absolutePath = expandPath(filePath);
465780
465791
  const claudeFolderPath = expandPath(`${getOriginalCwd()}/.claude`);
@@ -465784,7 +465795,7 @@ function isInClaudeFolder(filePath) {
465784
465795
  }
465785
465796
  function isInGlobalClaudeFolder(filePath) {
465786
465797
  const absolutePath = expandPath(filePath);
465787
- const globalClaudeFolderPath = join154(homedir37(), ".claude");
465798
+ const globalClaudeFolderPath = join155(homedir37(), ".claude");
465788
465799
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
465789
465800
  const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison(globalClaudeFolderPath);
465790
465801
  return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
@@ -473572,7 +473583,7 @@ var init_useVoiceEnabled = __esm(() => {
473572
473583
  function getSemverPart(version2) {
473573
473584
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
473574
473585
  }
473575
- function useUpdateNotification(updatedVersion, initialVersion = "1.7.8") {
473586
+ function useUpdateNotification(updatedVersion, initialVersion = "1.8.0") {
473576
473587
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
473577
473588
  if (!updatedVersion) {
473578
473589
  return null;
@@ -473612,7 +473623,7 @@ function AutoUpdater({
473612
473623
  return;
473613
473624
  }
473614
473625
  if (false) {}
473615
- const currentVersion = "1.7.8";
473626
+ const currentVersion = "1.8.0";
473616
473627
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
473617
473628
  let latestVersion = await getLatestVersion(channel);
473618
473629
  const isDisabled = isAutoUpdaterDisabled();
@@ -473823,12 +473834,12 @@ function NativeAutoUpdater({
473823
473834
  logEvent("tengu_native_auto_updater_start", {});
473824
473835
  try {
473825
473836
  const maxVersion = await getMaxVersion();
473826
- if (maxVersion && gt("1.7.8", maxVersion)) {
473837
+ if (maxVersion && gt("1.8.0", maxVersion)) {
473827
473838
  const msg = await getMaxVersionMessage();
473828
473839
  setMaxVersionIssue(msg ?? "affects your version");
473829
473840
  }
473830
473841
  const result = await installLatest(channel);
473831
- const currentVersion = "1.7.8";
473842
+ const currentVersion = "1.8.0";
473832
473843
  const latencyMs = Date.now() - startTime;
473833
473844
  if (result.lockFailed) {
473834
473845
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473963,17 +473974,17 @@ function PackageManagerAutoUpdater(t0) {
473963
473974
  const maxVersion = await getMaxVersion();
473964
473975
  if (maxVersion && latest && gt(latest, maxVersion)) {
473965
473976
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473966
- if (gte("1.7.8", maxVersion)) {
473967
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.7.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
473977
+ if (gte("1.8.0", maxVersion)) {
473978
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.8.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
473968
473979
  setUpdateAvailable(false);
473969
473980
  return;
473970
473981
  }
473971
473982
  latest = maxVersion;
473972
473983
  }
473973
- const hasUpdate = latest && !gte("1.7.8", latest) && !shouldSkipVersion(latest);
473984
+ const hasUpdate = latest && !gte("1.8.0", latest) && !shouldSkipVersion(latest);
473974
473985
  setUpdateAvailable(!!hasUpdate);
473975
473986
  if (hasUpdate) {
473976
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.7.8"} -> ${latest}`);
473987
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.8.0"} -> ${latest}`);
473977
473988
  }
473978
473989
  };
473979
473990
  $2[0] = t1;
@@ -474007,7 +474018,7 @@ function PackageManagerAutoUpdater(t0) {
474007
474018
  wrap: "truncate",
474008
474019
  children: [
474009
474020
  "currentVersion: ",
474010
- "1.7.8"
474021
+ "1.8.0"
474011
474022
  ]
474012
474023
  }, undefined, true, undefined, this);
474013
474024
  $2[3] = verbose;
@@ -481567,7 +481578,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
481567
481578
  project_dir: getOriginalCwd(),
481568
481579
  added_dirs: addedDirs
481569
481580
  },
481570
- version: "1.7.8",
481581
+ version: "1.8.0",
481571
481582
  output_style: {
481572
481583
  name: outputStyleName
481573
481584
  },
@@ -487651,9 +487662,9 @@ function initSkillImprovement() {
487651
487662
  async function applySkillImprovement(skillName, updates) {
487652
487663
  if (!skillName)
487653
487664
  return;
487654
- const { join: join155 } = await import("path");
487665
+ const { join: join156 } = await import("path");
487655
487666
  const fs5 = await import("fs/promises");
487656
- const filePath = join155(getCwd(), ".claude", "skills", skillName, "SKILL.md");
487667
+ const filePath = join156(getCwd(), ".claude", "skills", skillName, "SKILL.md");
487657
487668
  let currentContent;
487658
487669
  try {
487659
487670
  currentContent = await fs5.readFile(filePath, "utf-8");
@@ -487912,7 +487923,7 @@ var init_cacache = __esm(() => {
487912
487923
  // src/utils/cleanup.ts
487913
487924
  import * as fs5 from "fs/promises";
487914
487925
  import { homedir as homedir38 } from "os";
487915
- import { join as join155 } from "path";
487926
+ import { join as join156 } from "path";
487916
487927
  function getCutoffDate() {
487917
487928
  const settings = getSettings_DEPRECATED() || {};
487918
487929
  const cleanupPeriodDays = settings.cleanupPeriodDays ?? DEFAULT_CLEANUP_PERIOD_DAYS;
@@ -487935,9 +487946,9 @@ async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
487935
487946
  const files2 = await getFsImplementation().readdir(dirPath);
487936
487947
  for (const file of files2) {
487937
487948
  try {
487938
- const timestamp3 = convertFileNameToDate(file.name);
487939
- if (timestamp3 < cutoffDate) {
487940
- await getFsImplementation().unlink(join155(dirPath, file.name));
487949
+ const timestamp4 = convertFileNameToDate(file.name);
487950
+ if (timestamp4 < cutoffDate) {
487951
+ await getFsImplementation().unlink(join156(dirPath, file.name));
487941
487952
  if (isMessagePath) {
487942
487953
  result.messages++;
487943
487954
  } else {
@@ -487968,7 +487979,7 @@ async function cleanupOldMessageFiles() {
487968
487979
  } catch {
487969
487980
  return result;
487970
487981
  }
487971
- const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) => join155(baseCachePath, dirent.name));
487982
+ const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) => join156(baseCachePath, dirent.name));
487972
487983
  for (const mcpLogDir of mcpLogDirs) {
487973
487984
  result = addCleanupResults(result, await cleanupOldFilesInDirectory(mcpLogDir, cutoffDate, true));
487974
487985
  await tryRmdir(mcpLogDir, fsImpl);
@@ -488007,7 +488018,7 @@ async function cleanupOldSessionFiles() {
488007
488018
  for (const projectDirent of projectDirents) {
488008
488019
  if (!projectDirent.isDirectory())
488009
488020
  continue;
488010
- const projectDir = join155(projectsDir, projectDirent.name);
488021
+ const projectDir = join156(projectsDir, projectDirent.name);
488011
488022
  let entries;
488012
488023
  try {
488013
488024
  entries = await fsImpl.readdir(projectDir);
@@ -488021,15 +488032,15 @@ async function cleanupOldSessionFiles() {
488021
488032
  continue;
488022
488033
  }
488023
488034
  try {
488024
- if (await unlinkIfOld(join155(projectDir, entry.name), cutoffDate, fsImpl)) {
488035
+ if (await unlinkIfOld(join156(projectDir, entry.name), cutoffDate, fsImpl)) {
488025
488036
  result.messages++;
488026
488037
  }
488027
488038
  } catch {
488028
488039
  result.errors++;
488029
488040
  }
488030
488041
  } else if (entry.isDirectory()) {
488031
- const sessionDir = join155(projectDir, entry.name);
488032
- const toolResultsDir = join155(sessionDir, TOOL_RESULTS_SUBDIR);
488042
+ const sessionDir = join156(projectDir, entry.name);
488043
+ const toolResultsDir = join156(sessionDir, TOOL_RESULTS_SUBDIR);
488033
488044
  let toolDirs;
488034
488045
  try {
488035
488046
  toolDirs = await fsImpl.readdir(toolResultsDir);
@@ -488040,14 +488051,14 @@ async function cleanupOldSessionFiles() {
488040
488051
  for (const toolEntry of toolDirs) {
488041
488052
  if (toolEntry.isFile()) {
488042
488053
  try {
488043
- if (await unlinkIfOld(join155(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
488054
+ if (await unlinkIfOld(join156(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
488044
488055
  result.messages++;
488045
488056
  }
488046
488057
  } catch {
488047
488058
  result.errors++;
488048
488059
  }
488049
488060
  } else if (toolEntry.isDirectory()) {
488050
- const toolDirPath = join155(toolResultsDir, toolEntry.name);
488061
+ const toolDirPath = join156(toolResultsDir, toolEntry.name);
488051
488062
  let toolFiles;
488052
488063
  try {
488053
488064
  toolFiles = await fsImpl.readdir(toolDirPath);
@@ -488058,7 +488069,7 @@ async function cleanupOldSessionFiles() {
488058
488069
  if (!tf.isFile())
488059
488070
  continue;
488060
488071
  try {
488061
- if (await unlinkIfOld(join155(toolDirPath, tf.name), cutoffDate, fsImpl)) {
488072
+ if (await unlinkIfOld(join156(toolDirPath, tf.name), cutoffDate, fsImpl)) {
488062
488073
  result.messages++;
488063
488074
  }
488064
488075
  } catch {
@@ -488090,7 +488101,7 @@ async function cleanupSingleDirectory(dirPath, extension2, removeEmptyDir = true
488090
488101
  if (!dirent.isFile() || !dirent.name.endsWith(extension2))
488091
488102
  continue;
488092
488103
  try {
488093
- if (await unlinkIfOld(join155(dirPath, dirent.name), cutoffDate, fsImpl)) {
488104
+ if (await unlinkIfOld(join156(dirPath, dirent.name), cutoffDate, fsImpl)) {
488094
488105
  result.messages++;
488095
488106
  }
488096
488107
  } catch {
@@ -488103,7 +488114,7 @@ async function cleanupSingleDirectory(dirPath, extension2, removeEmptyDir = true
488103
488114
  return result;
488104
488115
  }
488105
488116
  function cleanupOldPlanFiles() {
488106
- const plansDir = join155(getClaudeConfigHomeDir(), "plans");
488117
+ const plansDir = join156(getClaudeConfigHomeDir(), "plans");
488107
488118
  return cleanupSingleDirectory(plansDir, ".md");
488108
488119
  }
488109
488120
  async function cleanupOldFileHistoryBackups() {
@@ -488112,14 +488123,14 @@ async function cleanupOldFileHistoryBackups() {
488112
488123
  const fsImpl = getFsImplementation();
488113
488124
  try {
488114
488125
  const configDir = getClaudeConfigHomeDir();
488115
- const fileHistoryStorageDir = join155(configDir, "file-history");
488126
+ const fileHistoryStorageDir = join156(configDir, "file-history");
488116
488127
  let dirents;
488117
488128
  try {
488118
488129
  dirents = await fsImpl.readdir(fileHistoryStorageDir);
488119
488130
  } catch {
488120
488131
  return result;
488121
488132
  }
488122
- const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join155(fileHistoryStorageDir, dirent.name));
488133
+ const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join156(fileHistoryStorageDir, dirent.name));
488123
488134
  await Promise.all(fileHistorySessionsDirs.map(async (fileHistorySessionDir) => {
488124
488135
  try {
488125
488136
  const stats2 = await fsImpl.stat(fileHistorySessionDir);
@@ -488146,14 +488157,14 @@ async function cleanupOldSessionEnvDirs() {
488146
488157
  const fsImpl = getFsImplementation();
488147
488158
  try {
488148
488159
  const configDir = getClaudeConfigHomeDir();
488149
- const sessionEnvBaseDir = join155(configDir, "session-env");
488160
+ const sessionEnvBaseDir = join156(configDir, "session-env");
488150
488161
  let dirents;
488151
488162
  try {
488152
488163
  dirents = await fsImpl.readdir(sessionEnvBaseDir);
488153
488164
  } catch {
488154
488165
  return result;
488155
488166
  }
488156
- const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join155(sessionEnvBaseDir, dirent.name));
488167
+ const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join156(sessionEnvBaseDir, dirent.name));
488157
488168
  for (const sessionEnvDir of sessionEnvDirs) {
488158
488169
  try {
488159
488170
  const stats2 = await fsImpl.stat(sessionEnvDir);
@@ -488175,7 +488186,7 @@ async function cleanupOldDebugLogs() {
488175
488186
  const cutoffDate = getCutoffDate();
488176
488187
  const result = { messages: 0, errors: 0 };
488177
488188
  const fsImpl = getFsImplementation();
488178
- const debugDir = join155(getClaudeConfigHomeDir(), "debug");
488189
+ const debugDir = join156(getClaudeConfigHomeDir(), "debug");
488179
488190
  let dirents;
488180
488191
  try {
488181
488192
  dirents = await fsImpl.readdir(debugDir);
@@ -488187,7 +488198,7 @@ async function cleanupOldDebugLogs() {
488187
488198
  continue;
488188
488199
  }
488189
488200
  try {
488190
- if (await unlinkIfOld(join155(debugDir, dirent.name), cutoffDate, fsImpl)) {
488201
+ if (await unlinkIfOld(join156(debugDir, dirent.name), cutoffDate, fsImpl)) {
488191
488202
  result.messages++;
488192
488203
  }
488193
488204
  } catch {
@@ -488197,7 +488208,7 @@ async function cleanupOldDebugLogs() {
488197
488208
  return result;
488198
488209
  }
488199
488210
  async function cleanupNpmCacheForAnthropicPackages() {
488200
- const markerPath = join155(getClaudeConfigHomeDir(), ".npm-cache-cleanup");
488211
+ const markerPath = join156(getClaudeConfigHomeDir(), ".npm-cache-cleanup");
488201
488212
  try {
488202
488213
  const stat54 = await fs5.stat(markerPath);
488203
488214
  if (Date.now() - stat54.mtimeMs < ONE_DAY_MS) {
@@ -488212,7 +488223,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
488212
488223
  return;
488213
488224
  }
488214
488225
  logForDebugging("npm cache cleanup: starting");
488215
- const npmCachePath = join155(homedir38(), ".npm", "_cacache");
488226
+ const npmCachePath = join156(homedir38(), ".npm", "_cacache");
488216
488227
  const NPM_CACHE_RETENTION_COUNT = 5;
488217
488228
  const startTime = Date.now();
488218
488229
  try {
@@ -488267,7 +488278,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
488267
488278
  }
488268
488279
  }
488269
488280
  async function cleanupOldVersionsThrottled() {
488270
- const markerPath = join155(getClaudeConfigHomeDir(), ".version-cleanup");
488281
+ const markerPath = join156(getClaudeConfigHomeDir(), ".version-cleanup");
488271
488282
  try {
488272
488283
  const stat54 = await fs5.stat(markerPath);
488273
488284
  if (Date.now() - stat54.mtimeMs < ONE_DAY_MS) {
@@ -491497,7 +491508,7 @@ __export(exports_asciicast, {
491497
491508
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
491498
491509
  });
491499
491510
  import { appendFile as appendFile6, rename as rename10 } from "fs/promises";
491500
- import { basename as basename56, dirname as dirname55, join as join157 } from "path";
491511
+ import { basename as basename56, dirname as dirname55, join as join158 } from "path";
491501
491512
  function getRecordFilePath() {
491502
491513
  if (recordingState.filePath !== null) {
491503
491514
  return recordingState.filePath;
@@ -491508,10 +491519,10 @@ function getRecordFilePath() {
491508
491519
  if (!isEnvTruthy(process.env.CLAUDE_CODE_TERMINAL_RECORDING)) {
491509
491520
  return null;
491510
491521
  }
491511
- const projectsDir = join157(getClaudeConfigHomeDir(), "projects");
491512
- const projectDir = join157(projectsDir, sanitizePath2(getOriginalCwd()));
491522
+ const projectsDir = join158(getClaudeConfigHomeDir(), "projects");
491523
+ const projectDir = join158(projectsDir, sanitizePath2(getOriginalCwd()));
491513
491524
  recordingState.timestamp = Date.now();
491514
- recordingState.filePath = join157(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
491525
+ recordingState.filePath = join158(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
491515
491526
  return recordingState.filePath;
491516
491527
  }
491517
491528
  function _resetRecordingStateForTesting() {
@@ -491520,13 +491531,13 @@ function _resetRecordingStateForTesting() {
491520
491531
  }
491521
491532
  function getSessionRecordingPaths() {
491522
491533
  const sessionId = getSessionId();
491523
- const projectsDir = join157(getClaudeConfigHomeDir(), "projects");
491524
- const projectDir = join157(projectsDir, sanitizePath2(getOriginalCwd()));
491534
+ const projectsDir = join158(getClaudeConfigHomeDir(), "projects");
491535
+ const projectDir = join158(projectsDir, sanitizePath2(getOriginalCwd()));
491525
491536
  try {
491526
491537
  const entries = getFsImplementation().readdirSync(projectDir);
491527
491538
  const names = typeof entries[0] === "string" ? entries : entries.map((e) => e.name);
491528
491539
  const files2 = names.filter((f) => f.startsWith(sessionId) && f.endsWith(".cast")).sort();
491529
- return files2.map((f) => join157(projectDir, f));
491540
+ return files2.map((f) => join158(projectDir, f));
491530
491541
  } catch {
491531
491542
  return [];
491532
491543
  }
@@ -491536,9 +491547,9 @@ async function renameRecordingForSession() {
491536
491547
  if (!oldPath || recordingState.timestamp === 0) {
491537
491548
  return;
491538
491549
  }
491539
- const projectsDir = join157(getClaudeConfigHomeDir(), "projects");
491540
- const projectDir = join157(projectsDir, sanitizePath2(getOriginalCwd()));
491541
- const newPath = join157(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
491550
+ const projectsDir = join158(getClaudeConfigHomeDir(), "projects");
491551
+ const projectDir = join158(projectsDir, sanitizePath2(getOriginalCwd()));
491552
+ const newPath = join158(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
491542
491553
  if (oldPath === newPath) {
491543
491554
  return;
491544
491555
  }
@@ -493139,7 +493150,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
493139
493150
  } catch {}
493140
493151
  const data = {
493141
493152
  trigger,
493142
- version: "1.7.8",
493153
+ version: "1.8.0",
493143
493154
  platform: process.platform,
493144
493155
  transcript,
493145
493156
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -493294,21 +493305,21 @@ function useFeedbackSurvey(messages, isLoading, submitCount, surveyType = "sessi
493294
493305
  messagesRef.current = messages;
493295
493306
  const probabilityPassedRef = import_react280.useRef(false);
493296
493307
  const lastEligibleSubmitCountRef = import_react280.useRef(null);
493297
- const updateLastShownTime = import_react280.useCallback((timestamp3, submitCountValue) => {
493308
+ const updateLastShownTime = import_react280.useCallback((timestamp4, submitCountValue) => {
493298
493309
  setFeedbackSurvey((prev) => {
493299
- if (prev.timeLastShown === timestamp3 && prev.submitCountAtLastAppearance === submitCountValue) {
493310
+ if (prev.timeLastShown === timestamp4 && prev.submitCountAtLastAppearance === submitCountValue) {
493300
493311
  return prev;
493301
493312
  }
493302
493313
  return {
493303
- timeLastShown: timestamp3,
493314
+ timeLastShown: timestamp4,
493304
493315
  submitCountAtLastAppearance: submitCountValue
493305
493316
  };
493306
493317
  });
493307
- if (getGlobalConfig().feedbackSurveyState?.lastShownTime !== timestamp3) {
493318
+ if (getGlobalConfig().feedbackSurveyState?.lastShownTime !== timestamp4) {
493308
493319
  saveGlobalConfig((current) => ({
493309
493320
  ...current,
493310
493321
  feedbackSurveyState: {
493311
- lastShownTime: timestamp3
493322
+ lastShownTime: timestamp4
493312
493323
  }
493313
493324
  }));
493314
493325
  }
@@ -494351,7 +494362,7 @@ var init_useAwaySummary = __esm(() => {
494351
494362
  });
494352
494363
 
494353
494364
  // src/utils/plugins/officialMarketplaceStartupCheck.ts
494354
- import { join as join158 } from "path";
494365
+ import { join as join159 } from "path";
494355
494366
  function isOfficialMarketplaceAutoInstallDisabled() {
494356
494367
  return isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL);
494357
494368
  }
@@ -494434,7 +494445,7 @@ async function checkAndInstallOfficialMarketplace() {
494434
494445
  return { installed: false, skipped: true, reason: "policy_blocked" };
494435
494446
  }
494436
494447
  const cacheDir = getMarketplacesCacheDir();
494437
- const installLocation = join158(cacheDir, OFFICIAL_MARKETPLACE_NAME);
494448
+ const installLocation = join159(cacheDir, OFFICIAL_MARKETPLACE_NAME);
494438
494449
  const gcsSha = await fetchOfficialMarketplaceFromGcs(installLocation, cacheDir);
494439
494450
  if (gcsSha !== null) {
494440
494451
  const known = await loadKnownMarketplacesConfig();
@@ -494690,7 +494701,7 @@ var init_tipHistory = __esm(() => {
494690
494701
 
494691
494702
  // src/utils/desktopDeepLink.ts
494692
494703
  import { readdir as readdir38 } from "fs/promises";
494693
- import { join as join159 } from "path";
494704
+ import { join as join160 } from "path";
494694
494705
  function isDevMode() {
494695
494706
  if (true) {
494696
494707
  return true;
@@ -494753,7 +494764,7 @@ async function getDesktopVersion() {
494753
494764
  if (!localAppData) {
494754
494765
  return null;
494755
494766
  }
494756
- const installDir = join159(localAppData, "AnthropicClaude");
494767
+ const installDir = join160(localAppData, "AnthropicClaude");
494757
494768
  try {
494758
494769
  const entries = await readdir38(installDir);
494759
494770
  const versions = entries.filter((e) => e.startsWith("app-")).map((e) => e.slice(4)).filter((v2) => import_semver14.coerce(v2) !== null).sort((a, b3) => {
@@ -497785,7 +497796,7 @@ var init_usePluginRecommendationBase = __esm(() => {
497785
497796
  });
497786
497797
 
497787
497798
  // src/hooks/useLspPluginRecommendation.tsx
497788
- import { extname as extname16, join as join160 } from "path";
497799
+ import { extname as extname16, join as join161 } from "path";
497789
497800
  function useLspPluginRecommendation() {
497790
497801
  const $2 = c3(12);
497791
497802
  const trackedFiles = useAppState(_temp204);
@@ -497870,7 +497881,7 @@ function useLspPluginRecommendation() {
497870
497881
  case "yes": {
497871
497882
  installPluginAndNotify(pluginId, pluginName, "lsp-plugin", addNotification, async (pluginData) => {
497872
497883
  logForDebugging(`[useLspPluginRecommendation] Installing plugin: ${pluginId}`);
497873
- const localSourcePath = typeof pluginData.entry.source === "string" ? join160(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
497884
+ const localSourcePath = typeof pluginData.entry.source === "string" ? join161(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
497874
497885
  await cacheAndRegisterPlugin(pluginId, pluginData.entry, "user", undefined, localSourcePath);
497875
497886
  const settings = getSettingsForSource("userSettings");
497876
497887
  updateSettingsForSource("userSettings", {
@@ -500702,9 +500713,9 @@ var exports_REPL = {};
500702
500713
  __export(exports_REPL, {
500703
500714
  REPL: () => REPL
500704
500715
  });
500705
- import { dirname as dirname57, join as join161 } from "path";
500716
+ import { dirname as dirname57, join as join162 } from "path";
500706
500717
  import { tmpdir as tmpdir11 } from "os";
500707
- import { writeFile as writeFile61 } from "fs/promises";
500718
+ import { writeFile as writeFile62 } from "fs/promises";
500708
500719
  import { randomUUID as randomUUID46 } from "crypto";
500709
500720
  function TranscriptModeFooter(t0) {
500710
500721
  const $2 = c3(9);
@@ -503272,8 +503283,8 @@ Note: ctrl + z now suspends localclawd, ctrl + _ undoes input.
503272
503283
  const w2 = Math.max(80, (process.stdout.columns ?? 80) - 6);
503273
503284
  const raw = await renderMessagesToPlainText(deferredMessages, tools, w2);
503274
503285
  const text = raw.replace(/[ \t]+$/gm, "");
503275
- const path17 = join161(tmpdir11(), `cc-transcript-${Date.now()}.txt`);
503276
- await writeFile61(path17, text);
503286
+ const path17 = join162(tmpdir11(), `cc-transcript-${Date.now()}.txt`);
503287
+ await writeFile62(path17, text);
503277
503288
  const opened = openFileInExternalEditor(path17);
503278
503289
  setStatus(opened ? `opening ${path17}` : `wrote ${path17} · no $VISUAL/$EDITOR set`);
503279
503290
  } catch (e) {
@@ -507109,7 +507120,7 @@ var init_debug2 = __esm(() => {
507109
507120
  // src/skills/bundled/imagePipeline.ts
507110
507121
  function registerImagePipelineSkill() {
507111
507122
  registerBundledSkill({
507112
- name: "image-pipeline",
507123
+ name: "local-image-gen",
507113
507124
  description: "Set up and operate a project-local image generation and review pipeline for game textures, sprites, and other art assets.",
507114
507125
  whenToUse: "Use when the user wants local texture generation, sprite/image iteration, project-local asset prompts, or visual review of generated game art.",
507115
507126
  argumentHint: "[setup request or asset brief]",
@@ -509999,12 +510010,12 @@ var init_createDirectConnectSession = __esm(() => {
509999
510010
  });
510000
510011
 
510001
510012
  // src/utils/errorLogSink.ts
510002
- import { dirname as dirname59, join as join162 } from "path";
510013
+ import { dirname as dirname59, join as join163 } from "path";
510003
510014
  function getErrorsPath() {
510004
- return join162(CACHE_PATHS.errors(), DATE + ".jsonl");
510015
+ return join163(CACHE_PATHS.errors(), DATE + ".jsonl");
510005
510016
  }
510006
510017
  function getMCPLogsPath(serverName) {
510007
- return join162(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
510018
+ return join163(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
510008
510019
  }
510009
510020
  function createJsonlWriter(options) {
510010
510021
  const writer = createBufferedWriter(options);
@@ -510048,7 +510059,7 @@ function appendToLog(path17, message) {
510048
510059
  cwd: getFsImplementation().cwd(),
510049
510060
  userType: process.env.USER_TYPE,
510050
510061
  sessionId: getSessionId(),
510051
- version: "1.7.8"
510062
+ version: "1.8.0"
510052
510063
  };
510053
510064
  getLogWriter(path17).write(messageWithTimestamp);
510054
510065
  }
@@ -510147,7 +510158,7 @@ var init_sinks = __esm(() => {
510147
510158
  });
510148
510159
 
510149
510160
  // src/services/SessionMemory/sessionMemory.ts
510150
- import { writeFile as writeFile62 } from "fs/promises";
510161
+ import { writeFile as writeFile63 } from "fs/promises";
510151
510162
  function isSessionMemoryGateEnabled() {
510152
510163
  if (isEnvTruthy(process.env.ENABLE_CLAUDE_CODE_SESSION_MEMORY)) {
510153
510164
  return true;
@@ -510210,13 +510221,13 @@ async function setupSessionMemoryFile(toolUseContext) {
510210
510221
  await fs6.mkdir(sessionMemoryDir, { mode: 448 });
510211
510222
  const memoryPath = getSessionMemoryPath();
510212
510223
  try {
510213
- await writeFile62(memoryPath, "", {
510224
+ await writeFile63(memoryPath, "", {
510214
510225
  encoding: "utf-8",
510215
510226
  mode: 384,
510216
510227
  flag: "wx"
510217
510228
  });
510218
510229
  const template = await loadSessionMemoryTemplate();
510219
- await writeFile62(memoryPath, template, {
510230
+ await writeFile63(memoryPath, template, {
510220
510231
  encoding: "utf-8",
510221
510232
  mode: 384
510222
510233
  });
@@ -510354,7 +510365,7 @@ var init_sessionMemory = __esm(() => {
510354
510365
  // src/utils/iTermBackup.ts
510355
510366
  import { copyFile as copyFile11, stat as stat56 } from "fs/promises";
510356
510367
  import { homedir as homedir40 } from "os";
510357
- import { join as join163 } from "path";
510368
+ import { join as join164 } from "path";
510358
510369
  function markITerm2SetupComplete() {
510359
510370
  saveGlobalConfig((current) => ({
510360
510371
  ...current,
@@ -510369,7 +510380,7 @@ function getIterm2RecoveryInfo() {
510369
510380
  };
510370
510381
  }
510371
510382
  function getITerm2PlistPath() {
510372
- return join163(homedir40(), "Library", "Preferences", "com.googlecode.iterm2.plist");
510383
+ return join164(homedir40(), "Library", "Preferences", "com.googlecode.iterm2.plist");
510373
510384
  }
510374
510385
  async function checkAndRestoreITerm2Backup() {
510375
510386
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -513765,8 +513776,8 @@ var init_idleTimeout = __esm(() => {
513765
513776
 
513766
513777
  // src/bridge/inboundAttachments.ts
513767
513778
  import { randomUUID as randomUUID49 } from "crypto";
513768
- import { mkdir as mkdir60, writeFile as writeFile63 } from "fs/promises";
513769
- import { basename as basename57, join as join164 } from "path";
513779
+ import { mkdir as mkdir61, writeFile as writeFile64 } from "fs/promises";
513780
+ import { basename as basename57, join as join165 } from "path";
513770
513781
  import { z as z95 } from "zod/v4";
513771
513782
  function debug3(msg) {
513772
513783
  logForDebugging(`[bridge:inbound-attach] ${msg}`);
@@ -513783,7 +513794,7 @@ function sanitizeFileName(name) {
513783
513794
  return base || "attachment";
513784
513795
  }
513785
513796
  function uploadsDir() {
513786
- return join164(getClaudeConfigHomeDir(), "uploads", getSessionId());
513797
+ return join165(getClaudeConfigHomeDir(), "uploads", getSessionId());
513787
513798
  }
513788
513799
  async function resolveOne(att) {
513789
513800
  const token = getBridgeAccessToken();
@@ -513812,10 +513823,10 @@ async function resolveOne(att) {
513812
513823
  const safeName = sanitizeFileName(att.file_name);
513813
513824
  const prefix = (att.file_uuid.slice(0, 8) || randomUUID49().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
513814
513825
  const dir = uploadsDir();
513815
- const outPath = join164(dir, `${prefix}-${safeName}`);
513826
+ const outPath = join165(dir, `${prefix}-${safeName}`);
513816
513827
  try {
513817
- await mkdir60(dir, { recursive: true });
513818
- await writeFile63(outPath, data);
513828
+ await mkdir61(dir, { recursive: true });
513829
+ await writeFile64(outPath, data);
513819
513830
  } catch (e) {
513820
513831
  debug3(`write ${outPath} failed: ${e}`);
513821
513832
  return;
@@ -513911,7 +513922,7 @@ var init_sessionUrl = __esm(() => {
513911
513922
 
513912
513923
  // src/utils/plugins/zipCacheAdapters.ts
513913
513924
  import { readFile as readFile69 } from "fs/promises";
513914
- import { join as join165 } from "path";
513925
+ import { join as join166 } from "path";
513915
513926
  async function readZipCacheKnownMarketplaces() {
513916
513927
  try {
513917
513928
  const content = await readFile69(getZipCacheKnownMarketplacesPath(), "utf-8");
@@ -513936,13 +513947,13 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
513936
513947
  const content = await readMarketplaceJsonContent(installLocation);
513937
513948
  if (content !== null) {
513938
513949
  const relPath = getMarketplaceJsonRelativePath(marketplaceName);
513939
- await atomicWriteToZipCache(join165(zipCachePath, relPath), content);
513950
+ await atomicWriteToZipCache(join166(zipCachePath, relPath), content);
513940
513951
  }
513941
513952
  }
513942
513953
  async function readMarketplaceJsonContent(dir) {
513943
513954
  const candidates = [
513944
- join165(dir, ".claude-plugin", "marketplace.json"),
513945
- join165(dir, "marketplace.json"),
513955
+ join166(dir, ".claude-plugin", "marketplace.json"),
513956
+ join166(dir, "marketplace.json"),
513946
513957
  dir
513947
513958
  ];
513948
513959
  for (const candidate of candidates) {
@@ -514072,8 +514083,8 @@ async function getEnvLessBridgeConfig() {
514072
514083
  }
514073
514084
  async function checkEnvLessBridgeMinVersion() {
514074
514085
  const cfg = await getEnvLessBridgeConfig();
514075
- if (cfg.min_version && lt("1.7.8", cfg.min_version)) {
514076
- return `Your version of localclawd (${"1.7.8"}) is too old for Remote Control.
514086
+ if (cfg.min_version && lt("1.8.0", cfg.min_version)) {
514087
+ return `Your version of localclawd (${"1.8.0"}) is too old for Remote Control.
514077
514088
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
514078
514089
  }
514079
514090
  return null;
@@ -514398,17 +514409,17 @@ __export(exports_bridgePointer, {
514398
514409
  clearBridgePointer: () => clearBridgePointer,
514399
514410
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
514400
514411
  });
514401
- import { mkdir as mkdir61, readFile as readFile70, stat as stat57, unlink as unlink25, writeFile as writeFile64 } from "fs/promises";
514402
- import { dirname as dirname60, join as join166 } from "path";
514412
+ import { mkdir as mkdir62, readFile as readFile70, stat as stat57, unlink as unlink25, writeFile as writeFile65 } from "fs/promises";
514413
+ import { dirname as dirname60, join as join167 } from "path";
514403
514414
  import { z as z97 } from "zod/v4";
514404
514415
  function getBridgePointerPath(dir) {
514405
- return join166(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
514416
+ return join167(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
514406
514417
  }
514407
514418
  async function writeBridgePointer(dir, pointer) {
514408
514419
  const path17 = getBridgePointerPath(dir);
514409
514420
  try {
514410
- await mkdir61(dirname60(path17), { recursive: true });
514411
- await writeFile64(path17, jsonStringify(pointer), "utf8");
514421
+ await mkdir62(dirname60(path17), { recursive: true });
514422
+ await writeFile65(path17, jsonStringify(pointer), "utf8");
514412
514423
  logForDebugging(`[bridge:pointer] wrote ${path17}`);
514413
514424
  } catch (err2) {
514414
514425
  logForDebugging(`[bridge:pointer] write failed: ${err2}`, { level: "warn" });
@@ -514545,7 +514556,7 @@ async function initBridgeCore(params) {
514545
514556
  const rawApi = createBridgeApiClient({
514546
514557
  baseUrl,
514547
514558
  getAccessToken,
514548
- runnerVersion: "1.7.8",
514559
+ runnerVersion: "1.8.0",
514549
514560
  onDebug: logForDebugging,
514550
514561
  onAuth401,
514551
514562
  getTrustedDeviceToken
@@ -520264,7 +520275,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
520264
520275
  setCwd(cwd3);
520265
520276
  const server = new Server({
520266
520277
  name: "claude/tengu",
520267
- version: "1.7.8"
520278
+ version: "1.8.0"
520268
520279
  }, {
520269
520280
  capabilities: {
520270
520281
  tools: {}
@@ -520396,14 +520407,14 @@ __export(exports_appDesktop, {
520396
520407
  });
520397
520408
  import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
520398
520409
  import { homedir as homedir41 } from "os";
520399
- import { join as join167 } from "path";
520410
+ import { join as join168 } from "path";
520400
520411
  async function getClaudeDesktopConfigPath() {
520401
520412
  const platform3 = getPlatform();
520402
520413
  if (!SUPPORTED_PLATFORMS.includes(platform3)) {
520403
520414
  throw new Error(`Unsupported platform: ${platform3} - desktop app integration only works on macOS and WSL.`);
520404
520415
  }
520405
520416
  if (platform3 === "macos") {
520406
- return join167(homedir41(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
520417
+ return join168(homedir41(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
520407
520418
  }
520408
520419
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
520409
520420
  if (windowsHome) {
@@ -520422,7 +520433,7 @@ async function getClaudeDesktopConfigPath() {
520422
520433
  if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
520423
520434
  continue;
520424
520435
  }
520425
- const potentialConfigPath = join167(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
520436
+ const potentialConfigPath = join168(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
520426
520437
  try {
520427
520438
  await stat59(potentialConfigPath);
520428
520439
  return potentialConfigPath;
@@ -521345,7 +521356,7 @@ function WelcomeLogo() {
521345
521356
  dimColor: true,
521346
521357
  children: [
521347
521358
  "v",
521348
- "1.7.8"
521359
+ "1.8.0"
521349
521360
  ]
521350
521361
  }, undefined, true, undefined, this)
521351
521362
  ]
@@ -521536,7 +521547,7 @@ __export(exports_update, {
521536
521547
  });
521537
521548
  async function update() {
521538
521549
  logEvent("tengu_update_check", {});
521539
- writeToStdout(`Current version: ${"1.7.8"}
521550
+ writeToStdout(`Current version: ${"1.8.0"}
521540
521551
  `);
521541
521552
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
521542
521553
  writeToStdout(`Checking for updates to ${channel} version...
@@ -521611,8 +521622,8 @@ async function update() {
521611
521622
  writeToStdout(`localclawd is managed by Homebrew.
521612
521623
  `);
521613
521624
  const latest = await getLatestVersion(channel);
521614
- if (latest && !gte("1.7.8", latest)) {
521615
- writeToStdout(`Update available: ${"1.7.8"} → ${latest}
521625
+ if (latest && !gte("1.8.0", latest)) {
521626
+ writeToStdout(`Update available: ${"1.8.0"} → ${latest}
521616
521627
  `);
521617
521628
  writeToStdout(`
521618
521629
  `);
@@ -521628,8 +521639,8 @@ async function update() {
521628
521639
  writeToStdout(`localclawd is managed by winget.
521629
521640
  `);
521630
521641
  const latest = await getLatestVersion(channel);
521631
- if (latest && !gte("1.7.8", latest)) {
521632
- writeToStdout(`Update available: ${"1.7.8"} → ${latest}
521642
+ if (latest && !gte("1.8.0", latest)) {
521643
+ writeToStdout(`Update available: ${"1.8.0"} → ${latest}
521633
521644
  `);
521634
521645
  writeToStdout(`
521635
521646
  `);
@@ -521643,8 +521654,8 @@ async function update() {
521643
521654
  writeToStdout(`localclawd is managed by apk.
521644
521655
  `);
521645
521656
  const latest = await getLatestVersion(channel);
521646
- if (latest && !gte("1.7.8", latest)) {
521647
- writeToStdout(`Update available: ${"1.7.8"} → ${latest}
521657
+ if (latest && !gte("1.8.0", latest)) {
521658
+ writeToStdout(`Update available: ${"1.8.0"} → ${latest}
521648
521659
  `);
521649
521660
  writeToStdout(`
521650
521661
  `);
@@ -521709,11 +521720,11 @@ async function update() {
521709
521720
  `);
521710
521721
  await gracefulShutdown(1);
521711
521722
  }
521712
- if (result.latestVersion === "1.7.8") {
521713
- writeToStdout(source_default.green(`localclawd is up to date (${"1.7.8"})`) + `
521723
+ if (result.latestVersion === "1.8.0") {
521724
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.8.0"})`) + `
521714
521725
  `);
521715
521726
  } else {
521716
- writeToStdout(source_default.green(`Successfully updated from ${"1.7.8"} to version ${result.latestVersion}`) + `
521727
+ writeToStdout(source_default.green(`Successfully updated from ${"1.8.0"} to version ${result.latestVersion}`) + `
521717
521728
  `);
521718
521729
  await regenerateCompletionCache();
521719
521730
  }
@@ -521773,12 +521784,12 @@ async function update() {
521773
521784
  `);
521774
521785
  await gracefulShutdown(1);
521775
521786
  }
521776
- if (latestVersion === "1.7.8") {
521777
- writeToStdout(source_default.green(`localclawd is up to date (${"1.7.8"})`) + `
521787
+ if (latestVersion === "1.8.0") {
521788
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.8.0"})`) + `
521778
521789
  `);
521779
521790
  await gracefulShutdown(0);
521780
521791
  }
521781
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.7.8"})
521792
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.8.0"})
521782
521793
  `);
521783
521794
  writeToStdout(`Installing update...
521784
521795
  `);
@@ -521823,7 +521834,7 @@ async function update() {
521823
521834
  logForDebugging(`update: Installation status: ${status2}`);
521824
521835
  switch (status2) {
521825
521836
  case "success":
521826
- writeToStdout(source_default.green(`Successfully updated from ${"1.7.8"} to version ${latestVersion}`) + `
521837
+ writeToStdout(source_default.green(`Successfully updated from ${"1.8.0"} to version ${latestVersion}`) + `
521827
521838
  `);
521828
521839
  await regenerateCompletionCache();
521829
521840
  break;
@@ -523065,7 +523076,7 @@ Run with --debug for more details.
523065
523076
  }
523066
523077
  }
523067
523078
  logForDiagnosticsNoPII("info", "started", {
523068
- version: "1.7.8",
523079
+ version: "1.8.0",
523069
523080
  is_native_binary: isInBundledMode()
523070
523081
  });
523071
523082
  registerCleanup(async () => {
@@ -523849,7 +523860,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523849
523860
  pendingHookMessages
523850
523861
  }, renderAndRun);
523851
523862
  }
523852
- }).version("1.7.8 (localclawd)", "-v, --version", "Output the version number");
523863
+ }).version("1.8.0 (localclawd)", "-v, --version", "Output the version number");
523853
523864
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523854
523865
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523855
523866
  if (canUserConfigureAdvisor()) {
@@ -524363,7 +524374,7 @@ if (false) {}
524363
524374
  async function main2() {
524364
524375
  const args = process.argv.slice(2);
524365
524376
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
524366
- console.log(`${"1.7.8"} (localclawd)`);
524377
+ console.log(`${"1.8.0"} (localclawd)`);
524367
524378
  return;
524368
524379
  }
524369
524380
  const {
@@ -524446,4 +524457,4 @@ localclawd crashed: ${msg}
524446
524457
  process.exit(1);
524447
524458
  });
524448
524459
 
524449
- //# debugId=5E6DF3FB4EDA637264756E2164756E21
524460
+ //# debugId=83EC49A6660FF49E64756E2164756E21