localclawd 1.9.0 → 1.9.8

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 +704 -597
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -35751,7 +35751,7 @@ function createDefaultGlobalConfig() {
35751
35751
  autoUpdates: undefined,
35752
35752
  theme: "dark",
35753
35753
  preferredNotifChannel: "auto",
35754
- verbose: false,
35754
+ verbose: true,
35755
35755
  editorMode: "normal",
35756
35756
  autoCompactEnabled: true,
35757
35757
  showTurnDuration: true,
@@ -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.9.0"}`;
87611
+ return `claude-code/${"1.9.8"}`;
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.9.0"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.9.8"} (${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.9.0"}${suffix}`;
87647
+ return `claude-code/${"1.9.8"}${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.9.0"}.${fingerprint}`;
130843
+ const version = `${"1.9.8"}.${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.9.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.9.8".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.9.0",
147072
+ version: "1.9.8",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T17:47:00.138Z",
147074
+ buildTime: "2026-05-07T19:50:53.354Z",
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.9.0";
179650
+ attributes["app.version"] = "1.9.8";
179651
179651
  }
179652
179652
  const oauthAccount = getOauthAccountInfo();
179653
179653
  if (oauthAccount) {
@@ -180599,8 +180599,7 @@ function isAutoCompactEnabled() {
180599
180599
  if (isEnvTruthy(process.env.DISABLE_AUTO_COMPACT)) {
180600
180600
  return false;
180601
180601
  }
180602
- const userConfig = getGlobalConfig();
180603
- return userConfig.autoCompactEnabled;
180602
+ return true;
180604
180603
  }
180605
180604
  async function shouldAutoCompact(messages, model, querySource, snipTokensFreed = 0) {
180606
180605
  if (querySource === "session_memory" || querySource === "compact") {
@@ -180638,7 +180637,12 @@ async function autoCompactIfNeeded(messages, toolUseContext, cacheSafeParams, qu
180638
180637
  autoCompactThreshold: getAutoCompactThreshold(model),
180639
180638
  querySource
180640
180639
  };
180641
- const sessionMemoryResult = await trySessionMemoryCompaction(messages, toolUseContext.agentId, recompactionInfo.autoCompactThreshold);
180640
+ let sessionMemoryResult = null;
180641
+ try {
180642
+ sessionMemoryResult = await trySessionMemoryCompaction(messages, toolUseContext.agentId, recompactionInfo.autoCompactThreshold);
180643
+ } catch (smError) {
180644
+ logError(smError);
180645
+ }
180642
180646
  if (sessionMemoryResult) {
180643
180647
  setLastSummarizedMessageId(undefined);
180644
180648
  runPostCompactCleanup(querySource);
@@ -180674,7 +180678,6 @@ var MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20000, AUTOCOMPACT_BUFFER_TOKENS = 13000, WA
180674
180678
  var init_autoCompact = __esm(() => {
180675
180679
  init_state();
180676
180680
  init_state();
180677
- init_config();
180678
180681
  init_context();
180679
180682
  init_debug();
180680
180683
  init_envUtils();
@@ -242448,7 +242451,7 @@ function getInstallationEnv() {
242448
242451
  return;
242449
242452
  }
242450
242453
  function getClaudeCodeVersion() {
242451
- return "1.9.0";
242454
+ return "1.9.8";
242452
242455
  }
242453
242456
  async function getInstalledVSCodeExtensionVersion(command) {
242454
242457
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247722,7 +247725,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247722
247725
  const client4 = new Client({
247723
247726
  name: "localclawd",
247724
247727
  title: "localclawd",
247725
- version: "1.9.0",
247728
+ version: "1.9.8",
247726
247729
  description: "local-first AI coding tool",
247727
247730
  websiteUrl: PRODUCT_URL
247728
247731
  }, {
@@ -248064,7 +248067,7 @@ var init_client9 = __esm(() => {
248064
248067
  const client4 = new Client({
248065
248068
  name: "localclawd",
248066
248069
  title: "localclawd",
248067
- version: "1.9.0",
248070
+ version: "1.9.8",
248068
248071
  description: "local-first AI coding tool",
248069
248072
  websiteUrl: PRODUCT_URL
248070
248073
  }, {
@@ -257350,7 +257353,7 @@ var init_FileEditTool = __esm(() => {
257350
257353
  }
257351
257354
  const similarFilename = findSimilarFile(fullFilePath);
257352
257355
  const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
257353
- let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
257356
+ let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
257354
257357
  if (cwdSuggestion) {
257355
257358
  message += ` Did you mean ${cwdSuggestion}?`;
257356
257359
  } else if (similarFilename) {
@@ -258847,7 +258850,7 @@ var init_GrepTool = __esm(() => {
258847
258850
  } catch (e) {
258848
258851
  if (isENOENT(e)) {
258849
258852
  const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
258850
- let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
258853
+ let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
258851
258854
  if (cwdSuggestion) {
258852
258855
  message += ` Did you mean ${cwdSuggestion}?`;
258853
258856
  }
@@ -259240,7 +259243,7 @@ var init_GlobTool = __esm(() => {
259240
259243
  } catch (e) {
259241
259244
  if (isENOENT(e)) {
259242
259245
  const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
259243
- let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
259246
+ let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
259244
259247
  if (cwdSuggestion) {
259245
259248
  message += ` Did you mean ${cwdSuggestion}?`;
259246
259249
  }
@@ -262466,7 +262469,7 @@ function computeFingerprint(messageText, version) {
262466
262469
  }
262467
262470
  function computeFingerprintFromMessages(messages) {
262468
262471
  const firstMessageText = extractFirstMessageText(messages);
262469
- return computeFingerprint(firstMessageText, "1.9.0");
262472
+ return computeFingerprint(firstMessageText, "1.9.8");
262470
262473
  }
262471
262474
  var FINGERPRINT_SALT = "59cf53e54c78";
262472
262475
  var init_fingerprint = () => {};
@@ -262508,7 +262511,7 @@ async function sideQuery(opts) {
262508
262511
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262509
262512
  }
262510
262513
  const messageText = extractFirstUserMessageText(messages);
262511
- const fingerprint = computeFingerprint(messageText, "1.9.0");
262514
+ const fingerprint = computeFingerprint(messageText, "1.9.8");
262512
262515
  const attributionHeader = getAttributionHeader(fingerprint);
262513
262516
  const systemBlocks = [
262514
262517
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283256,7 +283259,7 @@ var init_user = __esm(() => {
283256
283259
  deviceId,
283257
283260
  sessionId: getSessionId(),
283258
283261
  email: getEmail(),
283259
- appVersion: "1.9.0",
283262
+ appVersion: "1.9.8",
283260
283263
  platform: getHostPlatformForAnalytics(),
283261
283264
  organizationUuid,
283262
283265
  accountUuid,
@@ -284321,7 +284324,7 @@ async function initializeBetaTracing(resource) {
284321
284324
  });
284322
284325
  logs.setGlobalLoggerProvider(loggerProvider);
284323
284326
  setLoggerProvider(loggerProvider);
284324
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.0");
284327
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
284325
284328
  setEventLogger(eventLogger);
284326
284329
  process.on("beforeExit", async () => {
284327
284330
  await loggerProvider?.forceFlush();
@@ -284361,7 +284364,7 @@ async function initializeTelemetry() {
284361
284364
  const platform2 = getPlatform();
284362
284365
  const baseAttributes = {
284363
284366
  [ATTR_SERVICE_NAME4]: "claude-code",
284364
- [ATTR_SERVICE_VERSION4]: "1.9.0"
284367
+ [ATTR_SERVICE_VERSION4]: "1.9.8"
284365
284368
  };
284366
284369
  if (platform2 === "wsl") {
284367
284370
  const wslVersion = getWslVersion();
@@ -284406,7 +284409,7 @@ async function initializeTelemetry() {
284406
284409
  } catch {}
284407
284410
  };
284408
284411
  registerCleanup(shutdownTelemetry2);
284409
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.0");
284412
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.8");
284410
284413
  }
284411
284414
  const meterProvider = new MeterProvider4({
284412
284415
  resource,
@@ -284426,7 +284429,7 @@ async function initializeTelemetry() {
284426
284429
  });
284427
284430
  logs.setGlobalLoggerProvider(loggerProvider);
284428
284431
  setLoggerProvider(loggerProvider);
284429
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.0");
284432
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
284430
284433
  setEventLogger(eventLogger);
284431
284434
  logForDebugging("[3P telemetry] Event logger set successfully");
284432
284435
  process.on("beforeExit", async () => {
@@ -284488,7 +284491,7 @@ Current timeout: ${timeoutMs}ms
284488
284491
  }
284489
284492
  };
284490
284493
  registerCleanup(shutdownTelemetry);
284491
- return meterProvider.getMeter("com.anthropic.claude_code", "1.9.0");
284494
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.9.8");
284492
284495
  }
284493
284496
  async function flushTelemetry() {
284494
284497
  const meterProvider = getMeterProvider();
@@ -285678,7 +285681,7 @@ function detectLinuxGlobPatternWarnings() {
285678
285681
  }
285679
285682
  async function getDoctorDiagnostic() {
285680
285683
  const installationType = await getCurrentInstallationType();
285681
- const version = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
285684
+ const version = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
285682
285685
  const installationPath = await getInstallationPath();
285683
285686
  const invokedBinary = getInvokedBinary();
285684
285687
  const multipleInstallations = await detectMultipleInstallations();
@@ -286619,8 +286622,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286619
286622
  const maxVersion = await getMaxVersion();
286620
286623
  if (maxVersion && gt(version, maxVersion)) {
286621
286624
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286622
- if (gte("1.9.0", maxVersion)) {
286623
- logForDebugging(`Native installer: current version ${"1.9.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
286625
+ if (gte("1.9.8", maxVersion)) {
286626
+ logForDebugging(`Native installer: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
286624
286627
  logEvent("tengu_native_update_skipped_max_version", {
286625
286628
  latency_ms: Date.now() - startTime,
286626
286629
  max_version: maxVersion,
@@ -286631,7 +286634,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286631
286634
  version = maxVersion;
286632
286635
  }
286633
286636
  }
286634
- if (!forceReinstall && version === "1.9.0" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286637
+ if (!forceReinstall && version === "1.9.8" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286635
286638
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286636
286639
  logEvent("tengu_native_update_complete", {
286637
286640
  latency_ms: Date.now() - startTime,
@@ -322953,7 +322956,7 @@ async function scaffoldProject(projectRoot) {
322953
322956
  await access5(join79(base, "config.json"));
322954
322957
  alreadyExisted = true;
322955
322958
  } catch {}
322956
- const dirs = [base, join79(base, "prompts"), join79(base, "workflows"), join79(base, "generated"), join79(base, "scripts")];
322959
+ const dirs = [base, join79(base, "workflows"), join79(base, "generated")];
322957
322960
  for (const dir of dirs) {
322958
322961
  await mkdir19(dir, { recursive: true });
322959
322962
  }
@@ -322962,14 +322965,6 @@ async function scaffoldProject(projectRoot) {
322962
322965
  if (!alreadyExisted) {
322963
322966
  await writeFile19(configPath, JSON.stringify(DEFAULT_CONFIG2, null, 2), "utf-8");
322964
322967
  created.push(".localclawd/image-pipeline/config.json");
322965
- await writeFile19(join79(base, "prompts", "example.json"), JSON.stringify(EXAMPLE_PROMPT, null, 2), "utf-8");
322966
- created.push(".localclawd/image-pipeline/prompts/example.json");
322967
- await writeFile19(join79(base, "scripts", "generate.sh"), GENERATE_SH, "utf-8");
322968
- created.push(".localclawd/image-pipeline/scripts/generate.sh");
322969
- await writeFile19(join79(base, "scripts", "generate.ps1"), GENERATE_PS1, "utf-8");
322970
- created.push(".localclawd/image-pipeline/scripts/generate.ps1");
322971
- await writeFile19(join79(base, "README.md"), README_CONTENT, "utf-8");
322972
- created.push(".localclawd/image-pipeline/README.md");
322973
322968
  }
322974
322969
  for (const [wfName, wfContent] of [
322975
322970
  ["txt2img.json", DEFAULT_WORKFLOW],
@@ -323026,87 +323021,7 @@ async function listWorkflows(projectRoot) {
323026
323021
  await scan(base, "");
323027
323022
  return results;
323028
323023
  }
323029
- var DEFAULT_CONFIG2, EXAMPLE_PROMPT, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW, GENERATE_SH = `#!/usr/bin/env bash
323030
- # localclawd image pipeline — quick generate helper
323031
- # Usage: ./scripts/generate.sh "positive prompt" "negative prompt"
323032
-
323033
- set -e
323034
- BACKEND="\${COMFYUI_URL:-http://127.0.0.1:8000}"
323035
- POSITIVE="\${1:-a fantasy warrior}"
323036
- NEGATIVE="\${2:-blurry, low quality}"
323037
- SEED=\${RANDOM}
323038
-
323039
- echo "Submitting to $BACKEND ..."
323040
- curl -s -X POST "$BACKEND/prompt" -H "Content-Type: application/json" -d '{
323041
- "prompt": {
323042
- "4": {"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"v1-5-pruned-emaonly.safetensors"}},
323043
- "5": {"class_type":"EmptyLatentImage","inputs":{"width":512,"height":512,"batch_size":1}},
323044
- "6": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$POSITIVE"'"}},
323045
- "7": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$NEGATIVE"'"}},
323046
- "3": {"class_type":"KSampler","inputs":{"model":["4",0],"positive":["6",0],"negative":["7",0],"latent_image":["5",0],"seed":'"$SEED"',"steps":20,"cfg":7,"sampler_name":"euler","scheduler":"normal","denoise":1}},
323047
- "8": {"class_type":"VAEDecode","inputs":{"samples":["3",0],"vae":["4",2]}},
323048
- "9": {"class_type":"SaveImage","inputs":{"filename_prefix":"localclawd","images":["8",0]}}
323049
- }
323050
- }' | python3 -m json.tool
323051
- echo "Check ComfyUI output folder or /history endpoint for results."
323052
- `, GENERATE_PS1 = `# localclawd image pipeline — quick generate helper (PowerShell)
323053
- # Usage: .\\scripts\\generate.ps1 "positive prompt" "negative prompt"
323054
- param(
323055
- [string]$Positive = "a fantasy warrior",
323056
- [string]$Negative = "blurry, low quality"
323057
- )
323058
- $Backend = if ($env:COMFYUI_URL) { $env:COMFYUI_URL } else { "http://127.0.0.1:8000" }
323059
- $Seed = Get-Random
323060
- Write-Host "Submitting to $Backend ..."
323061
- $body = @{
323062
- prompt = @{
323063
- "4" = @{ class_type = "CheckpointLoaderSimple"; inputs = @{ ckpt_name = "v1-5-pruned-emaonly.safetensors" } }
323064
- "5" = @{ class_type = "EmptyLatentImage"; inputs = @{ width = 512; height = 512; batch_size = 1 } }
323065
- "6" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Positive } }
323066
- "7" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Negative } }
323067
- "3" = @{ class_type = "KSampler"; inputs = @{ model = @("4",0); positive = @("6",0); negative = @("7",0); latent_image = @("5",0); seed = $Seed; steps = 20; cfg = 7; sampler_name = "euler"; scheduler = "normal"; denoise = 1 } }
323068
- "8" = @{ class_type = "VAEDecode"; inputs = @{ samples = @("3",0); vae = @("4",2) } }
323069
- "9" = @{ class_type = "SaveImage"; inputs = @{ filename_prefix = "localclawd"; images = @("8",0) } }
323070
- }
323071
- } | ConvertTo-Json -Depth 10
323072
- Invoke-RestMethod -Uri "$Backend/prompt" -Method POST -ContentType "application/json" -Body $body
323073
- Write-Host "Done! Check ComfyUI output folder."
323074
- `, README_CONTENT = `# Image Pipeline — .localclawd/image-pipeline/
323075
-
323076
- Project-local image generation configuration for localclawd + ComfyUI.
323077
-
323078
- ## Quick Start
323079
-
323080
- 1. Start ComfyUI on this machine (default port 8000)
323081
- 2. Run \`/image-pipeline\` in localclawd to check status
323082
- 3. Use \`/image a misty forest at dawn\` to generate an image
323083
- 4. Use \`/image txt2img: a misty forest at dawn\` to use a specific workflow
323084
-
323085
- ## Structure
323086
-
323087
- \`\`\`
323088
- config.json — backend URL and default params
323089
- prompts/ — reusable prompt templates (JSON)
323090
- workflows/ — full ComfyUI workflow JSON files
323091
- generated/ — locally downloaded output images
323092
- scripts/ — generate.sh / generate.ps1 helpers
323093
- \`\`\`
323094
-
323095
- ## Remote ComfyUI
323096
-
323097
- Edit \`config.json\` → set \`backendUrl\` to your remote URL, e.g.:
323098
- \`http://192.168.1.50:8000\` or \`http://mymachine.local:8000\`
323099
-
323100
- ## Workflow Templates
323101
-
323102
- \`workflows/txt2img.json\` is a standard KSampler workflow.
323103
- To use a workflow: \`/image <workflow-name>: <prompt>\`
323104
- To set a default workflow: \`/image-pipeline workflow <name>\`
323105
-
323106
- Export workflows from ComfyUI via the Save (API format) button.
323107
- Workflows with \`{{positive_prompt}}\` / \`{{negative_prompt}}\` placeholders
323108
- are injected automatically; raw ComfyUI exports work via graph traversal.
323109
- `;
323024
+ var DEFAULT_CONFIG2, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW;
323110
323025
  var init_imagePipeline = __esm(() => {
323111
323026
  DEFAULT_CONFIG2 = {
323112
323027
  backendUrl: DEFAULT_COMFYUI_URL,
@@ -323119,17 +323034,6 @@ var init_imagePipeline = __esm(() => {
323119
323034
  outputDir: ".localclawd/image-pipeline/generated",
323120
323035
  defaultWorkflow: "z_image_turbo"
323121
323036
  };
323122
- EXAMPLE_PROMPT = {
323123
- name: "example-character",
323124
- description: "Character portrait template",
323125
- positive: "a fantasy warrior, detailed armor, dramatic lighting, 4k, highly detailed",
323126
- negative: "blurry, low quality, text, watermark, deformed",
323127
- width: 512,
323128
- height: 512,
323129
- steps: 20,
323130
- cfg: 7,
323131
- sampler: "euler"
323132
- };
323133
323037
  DEFAULT_WORKFLOW = {
323134
323038
  "4": {
323135
323039
  class_type: "CheckpointLoaderSimple",
@@ -323167,8 +323071,8 @@ var init_imagePipeline = __esm(() => {
323167
323071
  inputs: { samples: ["3", 0], vae: ["4", 2] }
323168
323072
  },
323169
323073
  "9": {
323170
- class_type: "PreviewImage",
323171
- inputs: { images: ["8", 0] }
323074
+ class_type: "SaveImage",
323075
+ inputs: { filename_prefix: "localclawd", images: ["8", 0] }
323172
323076
  }
323173
323077
  };
323174
323078
  Z_IMAGE_TURBO_WORKFLOW = {
@@ -323195,7 +323099,7 @@ var init_imagePipeline = __esm(() => {
323195
323099
  }
323196
323100
  },
323197
323101
  "8": { class_type: "VAEDecode", inputs: { samples: ["3", 0], vae: ["29", 0] } },
323198
- "9": { class_type: "PreviewImage", inputs: { images: ["8", 0] } }
323102
+ "9": { class_type: "SaveImage", inputs: { filename_prefix: "z-image-turbo", images: ["8", 0] } }
323199
323103
  };
323200
323104
  });
323201
323105
 
@@ -323222,10 +323126,18 @@ After generating, the image is returned visually in the tool result so you can r
323222
323126
 
323223
323127
  REVIEW AND REPROMPT PROTOCOL:
323224
323128
  1. After calling GenerateImage, examine the returned image carefully.
323225
- 2. If the image does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails the user's intent — call GenerateImage again with an improved prompt.
323129
+ 2. If the image does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails — call GenerateImage again.
323226
323130
  3. Refine: add missing details, fix style keywords, adjust composition language. Do not simply repeat the same prompt.
323227
323131
  4. You may iterate up to 3 times total. Stop as soon as a result is satisfactory.
323228
- 5. Show the user the final saved path and a brief assessment of what changed between iterations.
323132
+ 5. Show the user the final saved path and a brief assessment of what changed.
323133
+
323134
+ FIXING ARTIFACTS (see /image-tips for full guide):
323135
+ - Corner / edge artifacts → wrong cfg for model type. Flow models (z_image_turbo, AuraFlow, Lumina2): cfg MUST be 1.0. Retry with cfg=1.
323136
+ - Ring or halo artefacts → steps too high. Try steps=4 for turbo workflows.
323137
+ - Blurry result → steps too low, or wrong sampler. Increase steps by +4.
323138
+ - Washed-out / grey → VAE mismatch. Try a different workflow.
323139
+ - Size-related artefacts → use multiples of 64. Flow models need 1024×1024.
323140
+ Pass overrides via the tool parameters: steps, cfg, width, height, model.
323229
323141
 
323230
323142
  Use this tool when the user asks you to generate, create, or render an image.`;
323231
323143
 
@@ -323259,8 +323171,7 @@ var init_UI20 = __esm(() => {
323259
323171
 
323260
323172
  // src/tools/GenerateImageTool/GenerateImageTool.ts
323261
323173
  import { z as z62 } from "zod/v4";
323262
- import { homedir as homedir23 } from "os";
323263
- import { access as access6, mkdir as mkdir20, readFile as readFile27, writeFile as writeFile20 } from "fs/promises";
323174
+ import { mkdir as mkdir20, readFile as readFile27, writeFile as writeFile20 } from "fs/promises";
323264
323175
  import { join as join80 } from "path";
323265
323176
  function slugify(text, maxLen = 40) {
323266
323177
  return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
@@ -323360,16 +323271,27 @@ var init_GenerateImageTool = __esm(() => {
323360
323271
  if (abortController.signal.aborted) {
323361
323272
  return { data: { path: "", filename: "", promptId: "", seed: 0, backend: backendUrl, error: "Aborted" } };
323362
323273
  }
323363
- const model = input.model ?? config?.defaultModel ?? "v1-5-pruned-emaonly.safetensors";
323364
- const width = input.width ?? config?.defaultWidth ?? 512;
323365
- const height = input.height ?? config?.defaultHeight ?? 512;
323366
- const steps = input.steps ?? config?.defaultSteps ?? 20;
323367
- const cfg = input.cfg ?? config?.defaultCfg ?? 7;
323368
323274
  const seed = input.seed ?? Math.floor(Math.random() * 2 ** 32);
323369
323275
  const negativePrompt = input.negative_prompt ?? "blurry, low quality, watermark, deformed";
323370
323276
  const workflowName = input.workflow ?? config?.defaultWorkflow;
323371
323277
  const workflowBase = workflowName ? await loadWorkflow(projectRoot, workflowName) : null;
323372
- const workflow = injectPrompt(workflowBase ?? DEFAULT_WORKFLOW, input.prompt, negativePrompt, { seed, model, width, height, steps, cfg });
323278
+ const usingBuiltIn = !workflowBase;
323279
+ const injectParams = usingBuiltIn ? {
323280
+ seed,
323281
+ model: input.model ?? config?.defaultModel ?? "v1-5-pruned-emaonly.safetensors",
323282
+ width: input.width ?? config?.defaultWidth ?? 512,
323283
+ height: input.height ?? config?.defaultHeight ?? 512,
323284
+ steps: input.steps ?? config?.defaultSteps ?? 20,
323285
+ cfg: input.cfg ?? config?.defaultCfg ?? 7
323286
+ } : {
323287
+ seed,
323288
+ ...input.model && { model: input.model },
323289
+ ...input.width && { width: input.width },
323290
+ ...input.height && { height: input.height },
323291
+ ...input.steps && { steps: input.steps },
323292
+ ...input.cfg && { cfg: input.cfg }
323293
+ };
323294
+ const workflow = injectPrompt(workflowBase ?? DEFAULT_WORKFLOW, input.prompt, negativePrompt, injectParams);
323373
323295
  let queued;
323374
323296
  try {
323375
323297
  queued = await queuePrompt(backendUrl, workflow);
@@ -323413,12 +323335,10 @@ var init_GenerateImageTool = __esm(() => {
323413
323335
  rawBytes = Buffer.from(await res.arrayBuffer());
323414
323336
  }
323415
323337
  } catch {}
323416
- const projectGenDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated");
323417
- const useProjectDir = await access6(projectGenDir).then(() => true).catch(() => false);
323418
- const outputDir = useProjectDir ? projectGenDir : join80(homedir23(), "generatedimages");
323338
+ const outputDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
323419
323339
  await mkdir20(outputDir, { recursive: true });
323420
323340
  const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
323421
- const savedPath = join80(outputDir, outName);
323341
+ const savedPath = join80(outputDir, outName).replace(/\\/g, "/");
323422
323342
  if (rawBytes) {
323423
323343
  await writeFile20(savedPath, rawBytes);
323424
323344
  }
@@ -331915,7 +331835,7 @@ function getAnthropicEnvMetadata() {
331915
331835
  function getBuildAgeMinutes() {
331916
331836
  if (false)
331917
331837
  ;
331918
- const buildTime = new Date("2026-05-07T17:47:00.138Z").getTime();
331838
+ const buildTime = new Date("2026-05-07T19:50:53.354Z").getTime();
331919
331839
  if (isNaN(buildTime))
331920
331840
  return;
331921
331841
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -342775,7 +342695,7 @@ var init_FileReadTool = __esm(() => {
342775
342695
  }
342776
342696
  const similarFilename = findSimilarFile(fullFilePath);
342777
342697
  const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
342778
- let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
342698
+ let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
342779
342699
  if (cwdSuggestion) {
342780
342700
  message += ` Did you mean ${cwdSuggestion}?`;
342781
342701
  } else if (similarFilename) {
@@ -350950,7 +350870,9 @@ Focus text output on:
350950
350870
  - High-level status updates at natural milestones
350951
350871
  - Errors or blockers that change the plan
350952
350872
 
350953
- If you can say it in one sentence, don't use three. Prefer short, direct sentences over long explanations. This does not apply to code or tool calls.`;
350873
+ If you can say it in one sentence, don't use three. Prefer short, direct sentences over long explanations. This does not apply to code or tool calls.
350874
+
350875
+ End every response with a SUMMARY: line — one sentence covering what was accomplished or answered this turn. Example: "SUMMARY: Fixed the null-check in auth.ts and confirmed the build passes."`;
350954
350876
  }
350955
350877
  function getSimpleToneAndStyleSection() {
350956
350878
  const items = [
@@ -350968,7 +350890,7 @@ async function getSystemPrompt(tools, model, additionalWorkingDirectories, mcpCl
350968
350890
  return [
350969
350891
  `You are localclawd, a local-first coding CLI running against user-controlled models.
350970
350892
 
350971
- CWD: ${getCwd()}
350893
+ CWD: ${getCwd().replace(/\\/g, "/")}
350972
350894
  Date: ${getSessionStartDate()}`
350973
350895
  ];
350974
350896
  }
@@ -351046,7 +350968,7 @@ async function computeEnvInfo(modelId, additionalWorkingDirectories) {
351046
350968
  Assistant knowledge cutoff is ${cutoff}.` : "";
351047
350969
  return `Here is useful information about the environment you are running in:
351048
350970
  <env>
351049
- Working directory: ${getCwd()}
350971
+ Working directory: ${getCwd().replace(/\\/g, "/")}
351050
350972
  Is directory a git repo: ${isGit ? "Yes" : "No"}
351051
350973
  ${additionalDirsInfo}Platform: ${env3.platform}
351052
350974
  ${getShellInfoLine()}
@@ -351063,7 +350985,7 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
351063
350985
  }
351064
350986
  const cutoff = getKnowledgeCutoff(modelId);
351065
350987
  const knowledgeCutoffMessage = cutoff ? `Assistant knowledge cutoff is ${cutoff}.` : null;
351066
- const cwd2 = getCwd();
350988
+ const cwd2 = getCwd().replace(/\\/g, "/");
351067
350989
  const isWorktree = getCurrentWorktreeSession() !== null;
351068
350990
  const envItems = [
351069
350991
  `Primary working directory: ${cwd2}`,
@@ -356001,7 +355923,7 @@ var init_projectOnboardingState = __esm(() => {
356001
355923
 
356002
355924
  // src/utils/appleTerminalBackup.ts
356003
355925
  import { stat as stat35 } from "fs/promises";
356004
- import { homedir as homedir24 } from "os";
355926
+ import { homedir as homedir23 } from "os";
356005
355927
  import { join as join101 } from "path";
356006
355928
  function markTerminalSetupInProgress(backupPath) {
356007
355929
  saveGlobalConfig((current) => ({
@@ -356024,7 +355946,7 @@ function getTerminalRecoveryInfo() {
356024
355946
  };
356025
355947
  }
356026
355948
  function getTerminalPlistPath() {
356027
- return join101(homedir24(), "Library", "Preferences", "com.apple.Terminal.plist");
355949
+ return join101(homedir23(), "Library", "Preferences", "com.apple.Terminal.plist");
356028
355950
  }
356029
355951
  async function backupTerminalPreferences() {
356030
355952
  const terminalPlistPath = getTerminalPlistPath();
@@ -356095,11 +356017,11 @@ var init_appleTerminalBackup = __esm(() => {
356095
356017
  });
356096
356018
 
356097
356019
  // src/utils/completionCache.ts
356098
- import { homedir as homedir25 } from "os";
356020
+ import { homedir as homedir24 } from "os";
356099
356021
  import { dirname as dirname43, join as join102 } from "path";
356100
356022
  function detectShell() {
356101
356023
  const shell = process.env.SHELL || "";
356102
- const home = homedir25();
356024
+ const home = homedir24();
356103
356025
  const claudeDir = join102(home, ".claude");
356104
356026
  if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
356105
356027
  const cacheFile = join102(claudeDir, "completion.zsh");
@@ -356175,7 +356097,7 @@ __export(exports_terminalSetup, {
356175
356097
  });
356176
356098
  import { randomBytes as randomBytes15 } from "crypto";
356177
356099
  import { copyFile as copyFile8, mkdir as mkdir30, readFile as readFile39, writeFile as writeFile31 } from "fs/promises";
356178
- import { homedir as homedir26, platform as platform2 } from "os";
356100
+ import { homedir as homedir25, platform as platform2 } from "os";
356179
356101
  import { dirname as dirname44, join as join103 } from "path";
356180
356102
  import { pathToFileURL as pathToFileURL7 } from "url";
356181
356103
  function isVSCodeRemoteSSH() {
@@ -356311,7 +356233,7 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme) {
356311
356233
  ]`)}${EOL5}`;
356312
356234
  }
356313
356235
  const editorDir = editor === "VSCode" ? "Code" : editor;
356314
- const userDirPath = join103(homedir26(), platform2() === "win32" ? join103("AppData", "Roaming", editorDir, "User") : platform2() === "darwin" ? join103("Library", "Application Support", editorDir, "User") : join103(".config", editorDir, "User"));
356236
+ const userDirPath = join103(homedir25(), platform2() === "win32" ? join103("AppData", "Roaming", editorDir, "User") : platform2() === "darwin" ? join103("Library", "Application Support", editorDir, "User") : join103(".config", editorDir, "User"));
356315
356237
  const keybindingsPath = join103(userDirPath, "keybindings.json");
356316
356238
  try {
356317
356239
  await mkdir30(userDirPath, {
@@ -356455,7 +356377,7 @@ chars = "\\u001B\\r"`;
356455
356377
  if (xdgConfigHome) {
356456
356378
  configPaths.push(join103(xdgConfigHome, "alacritty", "alacritty.toml"));
356457
356379
  } else {
356458
- configPaths.push(join103(homedir26(), ".config", "alacritty", "alacritty.toml"));
356380
+ configPaths.push(join103(homedir25(), ".config", "alacritty", "alacritty.toml"));
356459
356381
  }
356460
356382
  if (platform2() === "win32") {
356461
356383
  const appData = process.env.APPDATA;
@@ -356521,7 +356443,7 @@ chars = "\\u001B\\r"`;
356521
356443
  }
356522
356444
  }
356523
356445
  async function installBindingsForZed(theme) {
356524
- const zedDir = join103(homedir26(), ".config", "zed");
356446
+ const zedDir = join103(homedir25(), ".config", "zed");
356525
356447
  const keymapPath = join103(zedDir, "keymap.json");
356526
356448
  try {
356527
356449
  await mkdir30(zedDir, {
@@ -360745,7 +360667,7 @@ function Feedback({
360745
360667
  platform: env3.platform,
360746
360668
  gitRepo: envInfo.isGit,
360747
360669
  terminal: env3.terminal,
360748
- version: "1.9.0",
360670
+ version: "1.9.8",
360749
360671
  transcript: normalizeMessagesForAPI(messages),
360750
360672
  errors: sanitizedErrors,
360751
360673
  lastApiRequest: getLastAPIRequest(),
@@ -360937,7 +360859,7 @@ function Feedback({
360937
360859
  ", ",
360938
360860
  env3.terminal,
360939
360861
  ", v",
360940
- "1.9.0"
360862
+ "1.9.8"
360941
360863
  ]
360942
360864
  }, undefined, true, undefined, this)
360943
360865
  ]
@@ -361043,7 +360965,7 @@ ${sanitizedDescription}
361043
360965
  ` + `**Environment Info**
361044
360966
  ` + `- Platform: ${env3.platform}
361045
360967
  ` + `- Terminal: ${env3.terminal}
361046
- ` + `- Version: ${"1.9.0"}
360968
+ ` + `- Version: ${"1.9.8"}
361047
360969
  ` + `- Feedback ID: ${feedbackId}
361048
360970
  ` + `
361049
360971
  **Errors**
@@ -363671,7 +363593,7 @@ function buildPrimarySection() {
363671
363593
  }, undefined, false, undefined, this);
363672
363594
  return [{
363673
363595
  label: "Version",
363674
- value: "1.9.0"
363596
+ value: "1.9.8"
363675
363597
  }, {
363676
363598
  label: "Session name",
363677
363599
  value: nameValue
@@ -368352,7 +368274,7 @@ function Config({
368352
368274
  }
368353
368275
  }, undefined, false, undefined, this)
368354
368276
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368355
- currentVersion: "1.9.0",
368277
+ currentVersion: "1.9.8",
368356
368278
  onChoice: (choice) => {
368357
368279
  setShowSubmenu(null);
368358
368280
  setTabsHidden(false);
@@ -368364,7 +368286,7 @@ function Config({
368364
368286
  autoUpdatesChannel: "stable"
368365
368287
  };
368366
368288
  if (choice === "stay") {
368367
- newSettings.minimumVersion = "1.9.0";
368289
+ newSettings.minimumVersion = "1.9.8";
368368
368290
  }
368369
368291
  updateSettingsForSource("userSettings", newSettings);
368370
368292
  setSettingsData((prev_27) => ({
@@ -374697,8 +374619,7 @@ var exports_images = {};
374697
374619
  __export(exports_images, {
374698
374620
  call: () => call19
374699
374621
  });
374700
- import { homedir as homedir27 } from "os";
374701
- import { access as access7, mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
374622
+ import { mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
374702
374623
  import { join as join112 } from "path";
374703
374624
  function timestamp2() {
374704
374625
  const d = new Date;
@@ -374708,6 +374629,44 @@ function timestamp2() {
374708
374629
  function slugify2(text, maxLen = 40) {
374709
374630
  return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
374710
374631
  }
374632
+ function parseFlags(text) {
374633
+ let s = text;
374634
+ const result = { cleaned: "" };
374635
+ const extract = (flag, fn) => {
374636
+ s = s.replace(new RegExp(`--${flag}\\s+(\\S+)`, "i"), (_2, v2) => {
374637
+ fn(v2);
374638
+ return "";
374639
+ });
374640
+ };
374641
+ extract("steps", (v2) => {
374642
+ result.steps = parseInt(v2, 10) || undefined;
374643
+ });
374644
+ extract("cfg", (v2) => {
374645
+ result.cfg = parseFloat(v2) || undefined;
374646
+ });
374647
+ extract("width", (v2) => {
374648
+ result.width = parseInt(v2, 10) || undefined;
374649
+ });
374650
+ extract("height", (v2) => {
374651
+ result.height = parseInt(v2, 10) || undefined;
374652
+ });
374653
+ extract("seed", (v2) => {
374654
+ result.seed = parseInt(v2, 10);
374655
+ });
374656
+ extract("model", (v2) => {
374657
+ result.model = v2;
374658
+ });
374659
+ s = s.replace(/--negative\s+"([^"]+)"/i, (_2, v2) => {
374660
+ result.negative = v2;
374661
+ return "";
374662
+ });
374663
+ s = s.replace(/--negative\s+'([^']+)'/i, (_2, v2) => {
374664
+ result.negative = v2;
374665
+ return "";
374666
+ });
374667
+ result.cleaned = s.replace(/\s+/g, " ").trim();
374668
+ return result;
374669
+ }
374711
374670
  var call19 = async (onDone, _context, args) => {
374712
374671
  const raw = args?.trim() ?? "";
374713
374672
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
@@ -374719,12 +374678,21 @@ var call19 = async (onDone, _context, args) => {
374719
374678
  const lines2 = [
374720
374679
  "◆ /image — Generate an image via ComfyUI",
374721
374680
  "",
374722
- " Usage: /image <prompt>",
374723
- " Workflow: /image <name>: <prompt>",
374681
+ " Usage: /image [flags] <prompt>",
374682
+ " Workflow: /image <name>: [flags] <prompt>",
374683
+ "",
374684
+ " Flags (override per-request):",
374685
+ " --steps N — sampling steps",
374686
+ " --cfg N — guidance scale",
374687
+ " --width N — image width in pixels",
374688
+ " --height N — image height in pixels",
374689
+ " --seed N — fixed seed for reproducibility",
374690
+ " --model NAME — checkpoint filename",
374724
374691
  "",
374725
374692
  " Examples:",
374726
374693
  " /image a misty forest at dawn, cinematic lighting",
374727
- " /image txt2img: an elderly scholar by candlelight",
374694
+ " /image --width 1024 --height 1024 a detailed portrait",
374695
+ " /image txt2img: --steps 30 an elderly scholar by candlelight",
374728
374696
  "",
374729
374697
  ` Default workflow: ${defaultWf}`
374730
374698
  ];
@@ -374737,9 +374705,10 @@ var call19 = async (onDone, _context, args) => {
374737
374705
  }
374738
374706
  lines2.push("");
374739
374707
  lines2.push(" ComfyUI must be running. To configure:");
374740
- lines2.push(" /image-pipeline setup — scaffold project folders");
374741
- lines2.push(" /image-pipeline config <url> — set backend URL");
374742
- lines2.push(" /image-pipeline workflow <n> — set default workflow");
374708
+ lines2.push(" /image-pipeline setup — scaffold project folders");
374709
+ lines2.push(" /image-pipeline config <url> — set backend URL");
374710
+ lines2.push(" /image-pipeline workflow <n> — set default workflow");
374711
+ lines2.push(" /image-pipeline defaults [...] — set default parameters");
374743
374712
  onDone(lines2.join(`
374744
374713
  `), { display: "system" });
374745
374714
  return null;
@@ -374754,10 +374723,12 @@ var call19 = async (onDone, _context, args) => {
374754
374723
  promptText = raw.slice(colonIdx + 1).trim();
374755
374724
  }
374756
374725
  }
374726
+ const flags = parseFlags(promptText);
374727
+ promptText = flags.cleaned;
374757
374728
  if (!promptText) {
374758
374729
  onDone(`◆ /image — Prompt required
374759
374730
 
374760
- Usage: /image <name>: <prompt>`, { display: "system" });
374731
+ Usage: /image [flags] <prompt>`, { display: "system" });
374761
374732
  return null;
374762
374733
  }
374763
374734
  const config2 = await loadConfig(projectRoot);
@@ -374790,16 +374761,27 @@ var call19 = async (onDone, _context, args) => {
374790
374761
  ].join(`
374791
374762
  `), { display: "system" });
374792
374763
  }
374764
+ const usingBuiltIn = !workflow;
374793
374765
  if (!workflow)
374794
374766
  workflow = DEFAULT_WORKFLOW;
374795
- const model = config2?.defaultModel || "v1-5-pruned-emaonly.safetensors";
374796
- const width = config2?.defaultWidth ?? 512;
374797
- const height = config2?.defaultHeight ?? 512;
374798
- const steps = config2?.defaultSteps ?? 20;
374799
- const cfg = config2?.defaultCfg ?? 7;
374800
- const seed = Math.floor(Math.random() * 4294967296);
374801
- const negative = "blurry, low quality, watermark, deformed";
374802
- const finalWorkflow = injectPrompt(workflow, promptText, negative, { seed, model, width, height, steps, cfg });
374767
+ const seed = flags.seed ?? Math.floor(Math.random() * 4294967296);
374768
+ const negative = flags.negative ?? "blurry, low quality, watermark, deformed";
374769
+ const injectParams = usingBuiltIn ? {
374770
+ seed,
374771
+ model: flags.model ?? (config2?.defaultModel || "v1-5-pruned-emaonly.safetensors"),
374772
+ width: flags.width ?? config2?.defaultWidth ?? 512,
374773
+ height: flags.height ?? config2?.defaultHeight ?? 512,
374774
+ steps: flags.steps ?? config2?.defaultSteps ?? 20,
374775
+ cfg: flags.cfg ?? config2?.defaultCfg ?? 7
374776
+ } : {
374777
+ seed,
374778
+ ...flags.model ? { model: flags.model } : {},
374779
+ ...flags.width ? { width: flags.width } : {},
374780
+ ...flags.height ? { height: flags.height } : {},
374781
+ ...flags.steps ? { steps: flags.steps } : {},
374782
+ ...flags.cfg ? { cfg: flags.cfg } : {}
374783
+ };
374784
+ const finalWorkflow = injectPrompt(workflow, promptText, negative, injectParams);
374803
374785
  let queued;
374804
374786
  try {
374805
374787
  queued = await queuePrompt(backendUrl, finalWorkflow);
@@ -374821,9 +374803,7 @@ var call19 = async (onDone, _context, args) => {
374821
374803
  `), { display: "system" });
374822
374804
  return null;
374823
374805
  }
374824
- const projectGenDir = join112(projectRoot, ".localclawd", "image-pipeline", "generated");
374825
- const useProjectDir = await access7(projectGenDir).then(() => true).catch(() => false);
374826
- const outputDir = useProjectDir ? projectGenDir : join112(homedir27(), "generatedimages");
374806
+ const outputDir = join112(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
374827
374807
  await mkdir34(outputDir, { recursive: true });
374828
374808
  const comfyImages = extractOutputImages(result);
374829
374809
  const savedPaths = [];
@@ -374842,18 +374822,29 @@ var call19 = async (onDone, _context, args) => {
374842
374822
  } catch {}
374843
374823
  }
374844
374824
  const usedWorkflow = effectiveWorkflowName ?? "built-in txt2img";
374825
+ const flagOverrides = [
374826
+ flags.steps ? `steps=${flags.steps}` : null,
374827
+ flags.cfg ? `cfg=${flags.cfg}` : null,
374828
+ flags.width ? `width=${flags.width}` : null,
374829
+ flags.height ? `height=${flags.height}` : null,
374830
+ flags.model ? `model=${flags.model}` : null
374831
+ ].filter(Boolean).join(" ");
374845
374832
  const lines = savedPaths.length > 0 ? [
374846
374833
  "◆ /image — Done",
374847
374834
  "",
374848
374835
  ` Saved to: ${savedPaths.join(`
374849
374836
  `)}`,
374850
- ` Workflow: ${usedWorkflow} · Seed: ${seed} · ${steps} steps · ${width}×${height}`
374837
+ ` Workflow: ${usedWorkflow}`,
374838
+ ` Prompt: ${promptText.length > 80 ? promptText.slice(0, 80) + "…" : promptText}`,
374839
+ ` Seed: ${seed}`,
374840
+ ...flagOverrides ? [` Overrides: ${flagOverrides}`] : []
374851
374841
  ] : [
374852
374842
  "◆ /image — Done (download failed)",
374853
374843
  "",
374854
374844
  " Job complete but image download failed.",
374855
374845
  ` ComfyUI filenames: ${comfyImages.join(", ") || "(none)"}`,
374856
- ` Workflow: ${usedWorkflow} · Seed: ${seed}`
374846
+ ` Workflow: ${usedWorkflow} · Seed: ${seed}`,
374847
+ ` Try fetching manually: ${backendUrl}/view?filename=${comfyImages[0] ?? ""}&type=output`
374857
374848
  ];
374858
374849
  onDone(lines.join(`
374859
374850
  `), { display: "system" });
@@ -374913,11 +374904,12 @@ var call20 = async (onDone, _context, args) => {
374913
374904
  }
374914
374905
  lines.push("");
374915
374906
  lines.push(" Commands:");
374916
- lines.push(" /image-pipeline setup — create project dirs and workflow templates");
374917
- lines.push(" /image-pipeline config <url> — set ComfyUI backend URL");
374918
- lines.push(" /image-pipeline workflow <name> — set default workflow");
374919
- lines.push(" /image-pipeline list list local + server workflows");
374920
- lines.push(" /image-pipeline fetch <name> download workflow from ComfyUI server");
374907
+ lines.push(" /image-pipeline setup — create project dirs and workflow templates");
374908
+ lines.push(" /image-pipeline config <url> — set ComfyUI backend URL");
374909
+ lines.push(" /image-pipeline workflow <name> — set default workflow");
374910
+ lines.push(" /image-pipeline defaults [--steps N ...] show or set default parameters");
374911
+ lines.push(" /image-pipeline list list local + server workflows");
374912
+ lines.push(" /image-pipeline fetch <name> — download workflow from ComfyUI server");
374921
374913
  lines.push("");
374922
374914
  lines.push(" To generate images:");
374923
374915
  lines.push(" /image <prompt> — generate with default workflow");
@@ -374931,7 +374923,7 @@ var call20 = async (onDone, _context, args) => {
374931
374923
  const config2 = await loadConfig(projectRoot);
374932
374924
  const backendUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374933
374925
  const active = await detectComfyUI(backendUrl);
374934
- const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated");
374926
+ const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
374935
374927
  const lines = ["◆ Image Pipeline — Setup", ""];
374936
374928
  if (active) {
374937
374929
  lines.push(` ● ComfyUI active at ${backendUrl}`);
@@ -375050,7 +375042,7 @@ var call20 = async (onDone, _context, args) => {
375050
375042
  lines.push(" No local workflows found.");
375051
375043
  lines.push(" Run /image-pipeline setup to add bundled templates.");
375052
375044
  lines.push(" Or export a workflow from ComfyUI (API Format) and drop it into:");
375053
- lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows")}`);
375045
+ lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows").replace(/\\/g, "/")}`);
375054
375046
  }
375055
375047
  onDone(lines.join(`
375056
375048
  `), { display: "system" });
@@ -375138,7 +375130,7 @@ var call20 = async (onDone, _context, args) => {
375138
375130
  }
375139
375131
  const fetchResult = await fetchServerWorkflow(backendUrl, name);
375140
375132
  if ("error" in fetchResult) {
375141
- const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui");
375133
+ const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui").replace(/\\/g, "/");
375142
375134
  onDone([
375143
375135
  `◆ Image Pipeline — Fetch Failed: "${name}"`,
375144
375136
  "",
@@ -375173,6 +375165,80 @@ var call20 = async (onDone, _context, args) => {
375173
375165
  " Note: if this was saved from the ComfyUI visual editor (not API format),",
375174
375166
  " it may not work. Enable Dev Mode in ComfyUI → Save (API Format) instead."
375175
375167
  ].join(`
375168
+ `), { display: "system" });
375169
+ return null;
375170
+ }
375171
+ if (subcmd === "defaults") {
375172
+ await scaffoldProject(projectRoot);
375173
+ const config2 = await loadConfig(projectRoot) ?? {
375174
+ backendUrl: DEFAULT_COMFYUI_URL,
375175
+ defaultWidth: 512,
375176
+ defaultHeight: 512,
375177
+ defaultSteps: 20,
375178
+ defaultCfg: 7,
375179
+ defaultSampler: "euler",
375180
+ defaultModel: "",
375181
+ outputDir: ".localclawd/image-pipeline/generated"
375182
+ };
375183
+ if (!restText) {
375184
+ onDone([
375185
+ "◆ Image Pipeline — Default Parameters",
375186
+ "",
375187
+ ` Steps: ${config2.defaultSteps ?? 20}`,
375188
+ ` CFG: ${config2.defaultCfg ?? 7}`,
375189
+ ` Width: ${config2.defaultWidth ?? 512}`,
375190
+ ` Height: ${config2.defaultHeight ?? 512}`,
375191
+ ` Model: ${config2.defaultModel || "(unset — uses workflow default)"}`,
375192
+ "",
375193
+ " Usage: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512",
375194
+ ' Reset: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512 --model ""'
375195
+ ].join(`
375196
+ `), { display: "system" });
375197
+ return null;
375198
+ }
375199
+ let s = restText;
375200
+ const extract = (flag, fn) => {
375201
+ s = s.replace(new RegExp(`--${flag}\\s+(\\S+)`, "i"), (_2, v2) => {
375202
+ fn(v2);
375203
+ return "";
375204
+ });
375205
+ };
375206
+ extract("steps", (v2) => {
375207
+ const n = parseInt(v2, 10);
375208
+ if (n > 0)
375209
+ config2.defaultSteps = n;
375210
+ });
375211
+ extract("cfg", (v2) => {
375212
+ const n = parseFloat(v2);
375213
+ if (n > 0)
375214
+ config2.defaultCfg = n;
375215
+ });
375216
+ extract("width", (v2) => {
375217
+ const n = parseInt(v2, 10);
375218
+ if (n >= 64)
375219
+ config2.defaultWidth = n;
375220
+ });
375221
+ extract("height", (v2) => {
375222
+ const n = parseInt(v2, 10);
375223
+ if (n >= 64)
375224
+ config2.defaultHeight = n;
375225
+ });
375226
+ extract("model", (v2) => {
375227
+ config2.defaultModel = v2 === '""' || v2 === "''" ? "" : v2;
375228
+ });
375229
+ await saveConfig2(projectRoot, config2);
375230
+ onDone([
375231
+ "◆ Image Pipeline — Defaults Saved",
375232
+ "",
375233
+ ` Steps: ${config2.defaultSteps ?? 20}`,
375234
+ ` CFG: ${config2.defaultCfg ?? 7}`,
375235
+ ` Width: ${config2.defaultWidth ?? 512}`,
375236
+ ` Height: ${config2.defaultHeight ?? 512}`,
375237
+ ` Model: ${config2.defaultModel || "(unset)"}`,
375238
+ "",
375239
+ " These apply to /image <prompt> (built-in workflow) and per-request overrides.",
375240
+ " Named workflows use their own settings unless you pass --flags."
375241
+ ].join(`
375176
375242
  `), { display: "system" });
375177
375243
  return null;
375178
375244
  }
@@ -375180,11 +375246,12 @@ var call20 = async (onDone, _context, args) => {
375180
375246
  `◆ Image Pipeline — Unknown subcommand: "${subcmd}"`,
375181
375247
  "",
375182
375248
  " Commands:",
375183
- " /image-pipeline setup — scaffold project",
375184
- " /image-pipeline config <url> — set ComfyUI backend URL",
375185
- " /image-pipeline workflow <name> — set default workflow",
375186
- " /image-pipeline list list local + server workflows",
375187
- " /image-pipeline fetch <name> download workflow from ComfyUI server"
375249
+ " /image-pipeline setup — scaffold project",
375250
+ " /image-pipeline config <url> — set ComfyUI backend URL",
375251
+ " /image-pipeline workflow <name> — set default workflow",
375252
+ " /image-pipeline defaults [--steps N ...] show or set default parameters",
375253
+ " /image-pipeline list list local + server workflows",
375254
+ " /image-pipeline fetch <name> — download workflow from ComfyUI server"
375188
375255
  ].join(`
375189
375256
  `), { display: "system" });
375190
375257
  return null;
@@ -375207,6 +375274,112 @@ var init_image_pipeline2 = __esm(() => {
375207
375274
  image_pipeline_default = imagePipeline;
375208
375275
  });
375209
375276
 
375277
+ // src/commands/image-tips/image-tips.ts
375278
+ var exports_image_tips = {};
375279
+ __export(exports_image_tips, {
375280
+ call: () => call21
375281
+ });
375282
+ var call21 = async (_args, _context) => {
375283
+ const text = `◆ Image Tips — Fixing Artifacts & Improving ComfyUI Output
375284
+
375285
+ ━━━ CORNER / EDGE ARTIFACTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
375286
+ Most common causes (check in order):
375287
+
375288
+ 1. WRONG CFG SCALE FOR MODEL TYPE ← most common cause of corner artifacts
375289
+ · Flow models (AuraFlow, Lumina2, SD3, z_image_turbo): cfg MUST be ≤ 1.0
375290
+ Values above 1 cause severe edge/corner corruption and colour banding
375291
+ · SD1.5 / SDXL: cfg 6–8 is correct; < 4 causes blur, > 12 causes artifacts
375292
+
375293
+ 2. STEPS TOO HIGH FOR SAMPLER
375294
+ · res_multistep with steps > 12 produces ring/halo artifacts
375295
+ · For turbo models: try steps=4 first, then 6 or 8
375296
+ · For SD1.5 euler: 20–30 steps is the sweet spot
375297
+
375298
+ 3. SIZE NOT DIVISIBLE BY 64
375299
+ · Width AND height must both be multiples of 64
375300
+ · AuraFlow/Lumina2: use exactly 1024×1024 — smaller sizes cause edge artefacts
375301
+ · SD1.5: use 512×512 or 768×512 etc.
375302
+
375303
+ 4. VAE MISMATCH
375304
+ · Flow models need their own VAE; SD1.5's vae-ft-mse will corrupt them
375305
+ · Symptoms: washed-out colours, edge fringe, grey corners
375306
+
375307
+ 5. WRONG SAMPLER FOR MODEL
375308
+ · AuraFlow / Lumina2: res_multistep, euler, dpm_pp_2m scheduler=simple
375309
+ · SD1.5: euler, dpm_pp_2m_karras scheduler=karras or normal
375310
+
375311
+ ━━━ PARAMETERS BY MODEL TYPE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
375312
+
375313
+ z_image_turbo / AuraFlow / Lumina2:
375314
+ steps=8 cfg=1 sampler=res_multistep scheduler=simple
375315
+ size=1024×1024 (required — smaller causes artefacts with these models)
375316
+ negative prompt: leave empty (workflow uses ConditioningZeroOut)
375317
+ Override: /image --steps 4 --cfg 1 <prompt>
375318
+
375319
+ SD1.5 (v1-5-pruned, DreamShaper, RealisticVision, etc.):
375320
+ steps=20 cfg=7 sampler=euler scheduler=normal
375321
+ size=512×512 or 768×512
375322
+ Override: /image-pipeline defaults --steps 20 --cfg 7 --width 512 --height 512
375323
+
375324
+ SDXL (sdxl_base, juggernaut-xl, etc.):
375325
+ steps=25 cfg=7 sampler=dpm_pp_2m scheduler=karras
375326
+ size=1024×1024
375327
+
375328
+ ━━━ QUICK FIXES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
375329
+
375330
+ Fuzzy or dark corners → increase size to 1024×1024 (flow models need it)
375331
+ Weird colour patterns → lower cfg (cfg=1 for flow, cfg=7 for SD1.5)
375332
+ Ring or halo artefacts → reduce steps (try steps=4)
375333
+ Image is too blurry → increase steps, or switch sampler to dpm_pp_2m
375334
+ Washed-out / grey → wrong VAE precision; load fp32 VAE explicitly
375335
+ Black bars / tiling seams → disable tiled VAE decode if enabled in workflow
375336
+
375337
+ ━━━ PROMPT TIPS FOR QUALITY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
375338
+
375339
+ Quality boosters (add at start of positive prompt):
375340
+ "masterpiece, best quality, highly detailed, sharp focus, 4k"
375341
+
375342
+ For portraits:
375343
+ "close-up portrait, facing camera, professional lighting, cinematic"
375344
+ Negative: "blurry, bad anatomy, extra limbs, deformed, watermark"
375345
+
375346
+ For landscapes / scenes:
375347
+ "cinematic lighting, golden hour, volumetric fog, highly detailed"
375348
+
375349
+ For art styles:
375350
+ "oil painting in the style of [artist], detailed brushwork, rich colours"
375351
+
375352
+ ━━━ ITERATING WITH THE GenerateImage TOOL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
375353
+ The tool returns the image inline for review. If quality is poor:
375354
+ 1. Try adjusting cfg first — this is the most common fix
375355
+ 2. Then adjust steps (±4 from current)
375356
+ 3. Then try a different sampler
375357
+ 4. Up to 3 iterations are recommended before changing workflow
375358
+
375359
+ Example fix sequence:
375360
+ /image --cfg 1 --steps 4 <same prompt> ← try lower settings first
375361
+ /image --cfg 1 --steps 8 <same prompt> ← step up if too blurry
375362
+ /image --width 1024 --height 1024 <prompt> ← fix size if edge artifacts persist
375363
+ `;
375364
+ return { type: "text", text };
375365
+ };
375366
+
375367
+ // src/commands/image-tips/index.ts
375368
+ var imageTips, image_tips_default;
375369
+ var init_image_tips = __esm(() => {
375370
+ imageTips = {
375371
+ type: "local",
375372
+ name: "image-tips",
375373
+ aliases: ["image-fix", "image-quality"],
375374
+ description: "Guide for fixing image artifacts and improving ComfyUI output quality",
375375
+ isEnabled: () => true,
375376
+ supportsNonInteractive: true,
375377
+ argumentHint: "",
375378
+ load: () => Promise.resolve().then(() => exports_image_tips)
375379
+ };
375380
+ image_tips_default = imageTips;
375381
+ });
375382
+
375210
375383
  // src/services/telegram/telegramSignals.ts
375211
375384
  var _stopRequested = false, globalStopSignal;
375212
375385
  var init_telegramSignals = __esm(() => {
@@ -375431,7 +375604,7 @@ function getProjectContext(state, projectId) {
375431
375604
  return "Unknown project.";
375432
375605
  const lines = [];
375433
375606
  lines.push(`Project: ${project.description}`);
375434
- lines.push(`Path: ${project.path}`);
375607
+ lines.push(`Path: ${project.path.replace(/\\/g, "/")}`);
375435
375608
  if (project.gitRemote)
375436
375609
  lines.push(`Remote: ${project.gitRemote}`);
375437
375610
  lines.push(`Access count: ${project.accessCount}`);
@@ -375814,10 +375987,10 @@ async function initSlack() {
375814
375987
  try {
375815
375988
  const { readFile: readFile45 } = await import("fs/promises");
375816
375989
  const { join: join116 } = await import("path");
375817
- const { homedir: homedir28 } = await import("os");
375990
+ const { homedir: homedir26 } = await import("os");
375818
375991
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
375819
375992
  const newPath = join116(getClaudeConfigHomeDir3(), "slack.json");
375820
- const legacyPath = join116(homedir28(), ".claude", "slack.json");
375993
+ const legacyPath = join116(homedir26(), ".claude", "slack.json");
375821
375994
  let configPath = newPath;
375822
375995
  try {
375823
375996
  await (await import("fs/promises")).stat(newPath);
@@ -376134,10 +376307,10 @@ async function initDiscord() {
376134
376307
  try {
376135
376308
  const { readFile: readFile45 } = await import("fs/promises");
376136
376309
  const { join: join116 } = await import("path");
376137
- const { homedir: homedir28 } = await import("os");
376310
+ const { homedir: homedir26 } = await import("os");
376138
376311
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
376139
376312
  const newPath = join116(getClaudeConfigHomeDir3(), "discord.json");
376140
- const legacyPath = join116(homedir28(), ".claude", "discord.json");
376313
+ const legacyPath = join116(homedir26(), ".claude", "discord.json");
376141
376314
  let configPath = newPath;
376142
376315
  try {
376143
376316
  await (await import("fs/promises")).stat(newPath);
@@ -376882,7 +377055,7 @@ async function initTelegram() {
376882
377055
  try {
376883
377056
  const { readFile: readFile46, stat: stat39 } = await import("fs/promises");
376884
377057
  const { join: join117 } = await import("path");
376885
- const { homedir: homedir28 } = await import("os");
377058
+ const { homedir: homedir26 } = await import("os");
376886
377059
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
376887
377060
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
376888
377061
  const candidates = [];
@@ -376892,7 +377065,7 @@ async function initTelegram() {
376892
377065
  candidates.push(join117(cwd2, ".localclawd", "telegram.json"));
376893
377066
  } catch {}
376894
377067
  candidates.push(join117(getClaudeConfigHomeDir3(), "telegram.json"));
376895
- candidates.push(join117(homedir28(), ".claude", "telegram.json"));
377068
+ candidates.push(join117(homedir26(), ".claude", "telegram.json"));
376896
377069
  let configPath = null;
376897
377070
  for (const p of candidates) {
376898
377071
  try {
@@ -377107,37 +377280,26 @@ var init_telegramBot = __esm(() => {
377107
377280
  // src/commands/keepgoing/keepgoing.tsx
377108
377281
  var exports_keepgoing = {};
377109
377282
  __export(exports_keepgoing, {
377110
- call: () => call21
377283
+ call: () => call22
377111
377284
  });
377112
377285
  function resetSession(focus, originalMode) {
377113
377286
  sessionRound = 0;
377114
377287
  sessionFocus = focus;
377115
377288
  sessionOriginalMode = originalMode;
377289
+ sessionSelfDirective = "";
377116
377290
  }
377117
377291
  function incrementRound() {
377118
377292
  sessionRound += 1;
377119
377293
  return sessionRound;
377120
377294
  }
377121
- function parseMaxRounds(args) {
377122
- const parts = args.trim().split(/\s+/);
377123
- let maxRounds = DEFAULT_MAX_ROUNDS;
377124
- const focusParts = [];
377125
- for (const part of parts) {
377126
- if (part === "unlimited" || part === "0") {
377127
- maxRounds = Infinity;
377128
- } else if (/^\d+$/.test(part)) {
377129
- maxRounds = parseInt(part, 10);
377130
- } else if (part) {
377131
- focusParts.push(part);
377132
- }
377133
- }
377134
- return { maxRounds, focus: focusParts.join(" ") };
377295
+ function extractSelfDirective(text) {
377296
+ const match = text.match(/\*{0,2}NEXT:\*{0,2}\s*(.+?)(?=\n\n|\n(?:[A-Z*─━]|\d+\.)|\s*$)/s);
377297
+ if (!match)
377298
+ return "";
377299
+ return match[1].replace(/\s+/g, " ").trim().slice(0, 600);
377135
377300
  }
377136
- function detectStopSignal(text) {
377137
- for (const { pattern, label } of STOP_PATTERNS)
377138
- if (pattern.test(text))
377139
- return label;
377140
- return null;
377301
+ function parseFocus(args) {
377302
+ return args.trim();
377141
377303
  }
377142
377304
  function extractLastAssistantText(messages) {
377143
377305
  for (let i2 = messages.length - 1;i2 >= 0; i2--) {
@@ -377150,56 +377312,72 @@ function extractLastAssistantText(messages) {
377150
377312
  }
377151
377313
  return "";
377152
377314
  }
377153
- function buildContinuationPrompt(round, maxRounds, focus, telegramMsg) {
377154
- const roundInfo = isFinite(maxRounds) ? `Round ${round} of ${maxRounds}` : `Round ${round} (unlimited)`;
377315
+ function buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) {
377155
377316
  const modeTag = isThinkHarderMode ? " · \uD83E\uDDE0 THINK HARDER" : "";
377156
377317
  const focusLine = focus ? `
377157
- Current focus: ${focus}
377318
+ Focus: ${focus}
377158
377319
  ` : "";
377159
- const telegramSection = telegramMsg ? `
377160
- ━━━ \uD83D\uDCF1 TELEGRAM MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377161
- ${telegramMsg}
377162
- ━━━ (respond to this, then continue autonomous work) ━━━━━━━━━━━━━━
377320
+ const compactNote = contextCompacted ? `
377321
+ Context was compacted. Re-orient: read key files you were working on, then continue.
377163
377322
  ` : "";
377164
- const thinkHarderSection = isThinkHarderMode ? `
377323
+ const telegramSection = externalMsg ? `
377324
+ ━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377325
+ ${externalMsg}
377326
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377327
+ ` : "";
377328
+ const thinkHarder = isThinkHarderMode ? `
377329
+ ${THINKHARDER_ROUND_PROMPT}
377330
+ ` : "";
377331
+ return `[KEEP GOING — Round ${round}${modeTag}]
377332
+ ${focusLine}${compactNote}${telegramSection}${thinkHarder}
377333
+ You are in fully autonomous mode — all tool permissions bypassed.
377334
+ This loop runs indefinitely. Only the user can stop it (Ctrl+C or /stop).
377335
+ You are the only one deciding what to work on next.
377336
+
377337
+ ━━━ TOOLS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377338
+ Read, Write, Edit, MultiEdit · Bash · Glob, Grep · WebFetch, WebSearch
377339
+ Agent (spawn subagents for parallel or complex sub-tasks)
377340
+ TodoCreate, TodoUpdate
377341
+
377342
+ ━━━ RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377343
+ · Proceed with every action without asking for permission
377344
+ · Commit after each logical unit of work
377345
+ · Run builds/tests after significant changes
377346
+ · If genuinely blocked: state the blocker clearly, spawn a subagent to research it, or try an alternative approach — do NOT stall
377347
+
377348
+ ━━━ REQUIRED ENDING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377349
+ At the END of every response, write exactly these two lines:
377350
+
377351
+ SUMMARY: <1-2 sentences of what you accomplished this round>
377352
+ NEXT: <1–3 sentences describing your specific plan for the next round>
377353
+
377354
+ Both lines are required every round without exception.
377355
+ NEXT: becomes your only prompt next round — be precise about files,
377356
+ actions, and outcomes to verify.`;
377357
+ }
377358
+ function buildSelfDirectedPrompt(round, directive, focus, externalMsg) {
377359
+ const modeTag = isThinkHarderMode ? " · \uD83E\uDDE0 THINK HARDER" : "";
377360
+ const focusNote = focus ? `
377361
+ Focus: ${focus}` : "";
377362
+ const telegramSection = externalMsg ? `
377363
+ ━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377364
+ ${externalMsg}
377365
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377366
+ ` : "";
377367
+ const thinkHarder = isThinkHarderMode ? `
377165
377368
  ${THINKHARDER_ROUND_PROMPT}
377166
377369
  ` : "";
377167
- return `[KEEP GOING — AUTONOMOUS OPERATION — ${roundInfo}${modeTag}]
377168
- ${focusLine}${telegramSection}${thinkHarderSection}
377169
- You are in full autonomous mode with all permissions bypassed. Work continuously until all tasks are done.
377170
-
377171
- ━━━ CAPABILITIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377172
- You have access to ALL tools:
377173
- Read, Write, Edit, MultiEdit — file operations
377174
- Bash — run commands, builds, tests, git
377175
- • Glob, Grep — search codebase
377176
- • WebFetch, WebSearch — internet access
377177
- • Agent — SPAWN SUBAGENTS for parallel/complex work
377178
- • TodoCreate, TodoUpdate — task tracking
377179
-
377180
- SPAWN SUBAGENTS when:
377181
- → A sub-task is independent of current work (run in parallel)
377182
- → A task is complex enough to benefit from a fresh context
377183
- → You need specialized work done concurrently (e.g., research + implement)
377184
-
377185
- ━━━ AUTONOMOUS RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377186
- 1. ALL PERMISSIONS ARE BYPASSED — proceed with every tool use without asking
377187
- 2. After completing a major milestone, state: "Completed: <what was done>"
377188
- 3. After significant changes, run tests/builds to verify correctness
377189
- 4. Use git commits after each logical unit of work
377190
- 5. If you encounter a blocker you cannot resolve autonomously, emit:
377191
- NEEDS INPUT: <specific question>
377192
- Then stop and wait — do NOT guess or assume critical details
377193
- 6. When ALL work is truly complete, emit:
377194
- TASK COMPLETE: <one-sentence summary of everything accomplished>
377195
-
377196
- ━━━ CONTINUE NOW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377197
- Pick up exactly where you left off. Do not re-explain what was already done.
377198
- Proceed directly with the next action.`;
377370
+ return `[KEEP GOING — Round ${round}${modeTag}]${focusNote}
377371
+ ${telegramSection}${thinkHarder}
377372
+ DIRECTIVE:
377373
+ ${directive}
377374
+
377375
+ Proceed. End your response with:
377376
+ SUMMARY: <what you accomplished this round>
377377
+ NEXT: <your plan for the following round>`;
377199
377378
  }
377200
377379
  function KeepGoingBanner({
377201
377380
  round,
377202
- maxRounds,
377203
377381
  focus,
377204
377382
  thinkHarder,
377205
377383
  telegram,
@@ -377210,7 +377388,6 @@ function KeepGoingBanner({
377210
377388
  const id = setTimeout(onReady, 0);
377211
377389
  return () => clearTimeout(id);
377212
377390
  }, [onReady]);
377213
- const roundDisplay = isFinite(maxRounds) ? `${round}/${maxRounds}` : `${round}/∞`;
377214
377391
  const badges = [];
377215
377392
  if (thinkHarder)
377216
377393
  badges.push("\uD83E\uDDE0 ThinkHarder");
@@ -377239,26 +377416,22 @@ function KeepGoingBanner({
377239
377416
  }, undefined, false, undefined, this),
377240
377417
  /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377241
377418
  dimColor: true,
377242
- children: " The agent will execute Bash, file writes, and all other tools"
377243
- }, undefined, false, undefined, this),
377244
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377245
- dimColor: true,
377246
- children: " without asking. Press Ctrl+C at any time to interrupt."
377419
+ children: " The agent will run indefinitely. Ctrl+C or /stop to halt."
377247
377420
  }, undefined, false, undefined, this)
377248
377421
  ]
377249
377422
  }, undefined, true, undefined, this),
377250
377423
  /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377251
377424
  bold: true,
377252
377425
  color: "cyan",
377253
- children: `◆ Keep Going [round ${roundDisplay}]${badgeStr}`
377426
+ children: `◆ Keep Going [round ${round}]${badgeStr}`
377254
377427
  }, undefined, false, undefined, this),
377255
377428
  focus ? /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377256
377429
  dimColor: true,
377257
377430
  color: "cyan",
377258
- children: ` ↳ Focus: ${focus}`
377431
+ children: ` ↳ ${focus}`
377259
377432
  }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377260
377433
  dimColor: true,
377261
- children: " ↳ All permissions bypassed · Ctrl+C to interrupt"
377434
+ children: " ↳ self-directed · Ctrl+C or /stop to halt"
377262
377435
  }, undefined, false, undefined, this)
377263
377436
  ]
377264
377437
  }, undefined, true, undefined, this);
@@ -377292,42 +377465,11 @@ function KeepGoingDone({
377292
377465
  ]
377293
377466
  }, undefined, true, undefined, this);
377294
377467
  }
377295
- function KeepGoingCapReached({
377296
- round,
377297
- maxRounds,
377298
- focus,
377299
- onReady
377300
- }) {
377301
- React58.useEffect(() => {
377302
- const id = setTimeout(onReady, 0);
377303
- return () => clearTimeout(id);
377304
- }, [onReady]);
377305
- const resumeCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377306
- return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedBox_default, {
377307
- flexDirection: "column",
377308
- marginTop: 1,
377309
- children: [
377310
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377311
- bold: true,
377312
- color: "yellow",
377313
- children: `◆ Keep Going — round cap reached (${round}/${maxRounds})`
377314
- }, undefined, false, undefined, this),
377315
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377316
- dimColor: true,
377317
- children: ` Type ${resumeCmd} to continue for another ${maxRounds} rounds.`
377318
- }, undefined, false, undefined, this),
377319
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377320
- dimColor: true,
377321
- children: " Permissions restored to previous mode."
377322
- }, undefined, false, undefined, this)
377323
- ]
377324
- }, undefined, true, undefined, this);
377325
- }
377326
- var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", DEFAULT_MAX_ROUNDS = 50, STOP_PATTERNS, call21 = async (onDone, context7, args) => {
377468
+ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", sessionSelfDirective = "", call22 = async (onDone, context7, args) => {
377327
377469
  const rawArgs = args?.trim() ?? "";
377328
377470
  const { extractChain: extractChain2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
377329
377471
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
377330
- const { maxRounds, focus } = parseMaxRounds(chainedArgs);
377472
+ const focus = parseFocus(chainedArgs);
377331
377473
  if (sessionRound === 0 && !focus) {
377332
377474
  onDone("What should I keep going on?", {
377333
377475
  display: "system",
@@ -377347,14 +377489,20 @@ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOri
377347
377489
  mode: "bypassPermissions"
377348
377490
  }
377349
377491
  }));
377350
- let stopReason = null;
377351
377492
  let lastText = "";
377352
377493
  context7.setMessages((prev) => {
377353
377494
  lastText = extractLastAssistantText(prev);
377354
- stopReason = detectStopSignal(lastText);
377355
377495
  return prev;
377356
377496
  });
377357
- if (lastText.trim()) {
377497
+ const contextCompacted = lastText === NO_CONTENT_MESSAGE || lastText.trim() === "";
377498
+ if (!contextCompacted) {
377499
+ const newDirective = extractSelfDirective(lastText);
377500
+ if (newDirective)
377501
+ sessionSelfDirective = newDirective;
377502
+ } else {
377503
+ sessionSelfDirective = "";
377504
+ }
377505
+ if (lastText.trim() && lastText !== NO_CONTENT_MESSAGE) {
377358
377506
  const preview = lastText.slice(0, 1200);
377359
377507
  const suffix = lastText.length > 1200 ? `
377360
377508
  …(truncated)` : "";
@@ -377371,9 +377519,6 @@ ${preview}${suffix}`;
377371
377519
  }
377372
377520
  if (globalStopSignal.get()) {
377373
377521
  globalStopSignal.reset();
377374
- stopReason = "stopped via /stop";
377375
- }
377376
- if (stopReason !== null) {
377377
377522
  const finalRound = sessionRound;
377378
377523
  const savedMode = sessionOriginalMode;
377379
377524
  resetSession("", "default");
@@ -377382,7 +377527,7 @@ ${preview}${suffix}`;
377382
377527
  toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
377383
377528
  }));
377384
377529
  const stopMsg = `✅ *keepgoing stopped*
377385
- Round ${finalRound} · ${stopReason}`;
377530
+ Round ${finalRound} · stopped via /stop`;
377386
377531
  if (isTelegramActive())
377387
377532
  sendTelegramMessage(stopMsg);
377388
377533
  if (isSlackActive())
@@ -377393,59 +377538,26 @@ Round ${finalRound} · ${stopReason}`;
377393
377538
  sendSignalMessage(stopMsg);
377394
377539
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingDone, {
377395
377540
  round: finalRound,
377396
- reason: stopReason,
377541
+ reason: "stopped via /stop",
377397
377542
  onReady: () => onDone(undefined)
377398
377543
  }, undefined, false, undefined, this);
377399
377544
  }
377400
377545
  const round = incrementRound();
377401
377546
  const showBypassWarning = round === 1;
377402
- if (isFinite(maxRounds) && round > maxRounds) {
377403
- const finalRound = sessionRound;
377404
- const savedMode = sessionOriginalMode;
377405
- resetSession("", "default");
377406
- context7.setAppState((prev) => ({
377407
- ...prev,
377408
- toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
377409
- }));
377410
- const pauseMsg = `⏸ *keepgoing paused*
377411
- Round cap ${finalRound}/${maxRounds} reached.`;
377412
- if (isTelegramActive())
377413
- sendTelegramMessage(pauseMsg);
377414
- if (isSlackActive())
377415
- sendSlackMessage(pauseMsg);
377416
- if (isDiscordActive())
377417
- sendDiscordMessage(pauseMsg);
377418
- if (isSignalActive())
377419
- sendSignalMessage(pauseMsg);
377420
- return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingCapReached, {
377421
- round: finalRound,
377422
- maxRounds,
377423
- focus,
377424
- onReady: () => onDone(undefined)
377425
- }, undefined, false, undefined, this);
377426
- }
377427
377547
  const externalMsg = getPendingTelegramMessage() ?? getPendingSlackMessage() ?? getPendingDiscordMessage() ?? getPendingSignalMessage();
377428
- const prompt = buildContinuationPrompt(round, maxRounds, focus, externalMsg);
377429
- const nextArgs = [];
377430
- if (!isFinite(maxRounds))
377431
- nextArgs.push("unlimited");
377432
- else if (maxRounds !== DEFAULT_MAX_ROUNDS)
377433
- nextArgs.push(String(maxRounds));
377434
- if (focus)
377435
- nextArgs.push(focus);
377436
- const nextCmd = `/keepgoing${nextArgs.length ? " " + nextArgs.join(" ") : ""}`;
377437
- const metaMessages = [prompt];
377548
+ const useOnboarding = round === 1 || contextCompacted || !sessionSelfDirective;
377549
+ const prompt = useOnboarding ? buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) : buildSelfDirectedPrompt(round, sessionSelfDirective, focus, externalMsg);
377550
+ const nextCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377438
377551
  const handleReady = () => {
377439
377552
  enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377440
377553
  onDone(undefined, {
377441
377554
  display: "system",
377442
377555
  shouldQuery: true,
377443
- metaMessages
377556
+ metaMessages: [prompt]
377444
377557
  });
377445
377558
  };
377446
377559
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingBanner, {
377447
377560
  round,
377448
- maxRounds,
377449
377561
  focus,
377450
377562
  thinkHarder: isThinkHarderMode,
377451
377563
  telegram: isTelegramActive(),
@@ -377464,13 +377576,6 @@ var init_keepgoing = __esm(() => {
377464
377576
  init_messageQueueManager();
377465
377577
  React58 = __toESM(require_react(), 1);
377466
377578
  jsx_dev_runtime196 = __toESM(require_jsx_dev_runtime(), 1);
377467
- STOP_PATTERNS = [
377468
- { pattern: /TASK[_ ]COMPLETE:/i, label: "task complete" },
377469
- { pattern: /NEEDS[_ ]INPUT:/i, label: "paused — needs input" },
377470
- { pattern: /\bFINISHED\b/i, label: "finished" },
377471
- { pattern: /ALL[_ ]DONE\b/i, label: "all done" },
377472
- { pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
377473
- ];
377474
377579
  });
377475
377580
 
377476
377581
  // src/commands/keepgoing/index.ts
@@ -377489,7 +377594,7 @@ var init_keepgoing2 = __esm(() => {
377489
377594
  // src/commands/telegram/telegram.tsx
377490
377595
  var exports_telegram = {};
377491
377596
  __export(exports_telegram, {
377492
- call: () => call22
377597
+ call: () => call23
377493
377598
  });
377494
377599
  import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
377495
377600
  import { join as join117 } from "path";
@@ -377932,7 +378037,7 @@ function TelegramError({
377932
378037
  }, undefined, false, undefined, this)
377933
378038
  }, undefined, false, undefined, this);
377934
378039
  }
377935
- var React59, jsx_dev_runtime197, call22 = async (onDone, _context, args) => {
378040
+ var React59, jsx_dev_runtime197, call23 = async (onDone, _context, args) => {
377936
378041
  const text = args?.trim() ?? "";
377937
378042
  if (text === "setup") {
377938
378043
  return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramSetup, {
@@ -377999,7 +378104,7 @@ var init_telegram2 = __esm(() => {
377999
378104
  // src/commands/slack/slack.tsx
378000
378105
  var exports_slack = {};
378001
378106
  __export(exports_slack, {
378002
- call: () => call23
378107
+ call: () => call24
378003
378108
  });
378004
378109
  import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
378005
378110
  import { join as join118 } from "path";
@@ -378500,7 +378605,7 @@ function SlackError({
378500
378605
  }, undefined, false, undefined, this)
378501
378606
  }, undefined, false, undefined, this);
378502
378607
  }
378503
- var React60, jsx_dev_runtime198, call23 = async (onDone, _context, args) => {
378608
+ var React60, jsx_dev_runtime198, call24 = async (onDone, _context, args) => {
378504
378609
  const text = args?.trim() ?? "";
378505
378610
  if (text === "setup") {
378506
378611
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(SlackSetup, {
@@ -378582,7 +378687,7 @@ var init_AutoDone = __esm(() => {
378582
378687
  // src/commands/discord/discord.tsx
378583
378688
  var exports_discord = {};
378584
378689
  __export(exports_discord, {
378585
- call: () => call24
378690
+ call: () => call25
378586
378691
  });
378587
378692
  import { writeFile as writeFile42, mkdir as mkdir40 } from "fs/promises";
378588
378693
  import { join as join119 } from "path";
@@ -378973,7 +379078,7 @@ function DiscordStatus({
378973
379078
  }
378974
379079
  return null;
378975
379080
  }
378976
- var React62, jsx_dev_runtime200, call24 = async (onDone, _context, args) => {
379081
+ var React62, jsx_dev_runtime200, call25 = async (onDone, _context, args) => {
378977
379082
  const text = args?.trim() ?? "";
378978
379083
  if (text === "setup") {
378979
379084
  return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(DiscordSetup, {
@@ -379066,9 +379171,9 @@ var init_discord2 = __esm(() => {
379066
379171
  // src/commands/signal/signal.tsx
379067
379172
  var exports_signal = {};
379068
379173
  __export(exports_signal, {
379069
- call: () => call25
379174
+ call: () => call26
379070
379175
  });
379071
- var call25 = async (onDone, _context, args) => {
379176
+ var call26 = async (onDone, _context, args) => {
379072
379177
  const text = (args ?? "").trim();
379073
379178
  if (!text) {
379074
379179
  const active = isSignalActive();
@@ -379144,7 +379249,7 @@ var init_signal2 = __esm(() => {
379144
379249
  // src/commands/schedule/schedule.tsx
379145
379250
  var exports_schedule = {};
379146
379251
  __export(exports_schedule, {
379147
- call: () => call26
379252
+ call: () => call27
379148
379253
  });
379149
379254
  function parseScheduleInput(rest) {
379150
379255
  const trimmed = rest.trim();
@@ -379182,7 +379287,7 @@ function parseScheduleInput(rest) {
379182
379287
  name = prompt.slice(0, 32).trim().replace(/\s+/g, "-").toLowerCase();
379183
379288
  return { expr, name, prompt };
379184
379289
  }
379185
- var call26 = async (onDone, _context, args) => {
379290
+ var call27 = async (onDone, _context, args) => {
379186
379291
  const input = args?.trim() ?? "";
379187
379292
  if (!input || input === "list") {
379188
379293
  const text = await listSchedules();
@@ -379253,7 +379358,7 @@ var init_schedule2 = __esm(() => {
379253
379358
  // src/services/sessionSearch/sessionSummarize.ts
379254
379359
  import { readdir as readdir24, readFile as readFile46, writeFile as writeFile43, mkdir as mkdir41, stat as stat39 } from "fs/promises";
379255
379360
  import { join as join120 } from "path";
379256
- import { homedir as homedir28 } from "os";
379361
+ import { homedir as homedir26 } from "os";
379257
379362
  function extractText(obj) {
379258
379363
  if (typeof obj === "string")
379259
379364
  return obj;
@@ -379464,7 +379569,7 @@ var init_sessionSummarize = __esm(() => {
379464
379569
  init_providers();
379465
379570
  PROJECTS_DIRS = [
379466
379571
  join120(getClaudeConfigHomeDir(), "projects"),
379467
- join120(homedir28(), ".claude", "projects")
379572
+ join120(homedir26(), ".claude", "projects")
379468
379573
  ];
379469
379574
  SUMMARIES_DIR2 = join120(getClaudeConfigHomeDir(), "session-summaries");
379470
379575
  });
@@ -379614,7 +379719,7 @@ var init_fts5Index = __esm(() => {
379614
379719
  // src/services/sessionSearch/sessionSearch.ts
379615
379720
  import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
379616
379721
  import { join as join122 } from "path";
379617
- import { homedir as homedir29 } from "os";
379722
+ import { homedir as homedir27 } from "os";
379618
379723
  function tokenize6(text) {
379619
379724
  return text.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 2);
379620
379725
  }
@@ -379871,7 +379976,7 @@ var init_sessionSearch = __esm(() => {
379871
379976
  init_fts5Index();
379872
379977
  PROJECTS_DIRS2 = [
379873
379978
  join122(getClaudeConfigHomeDir(), "projects"),
379874
- join122(homedir29(), ".claude", "projects")
379979
+ join122(homedir27(), ".claude", "projects")
379875
379980
  ];
379876
379981
  MAX_FILE_BYTES = 5 * 1024 * 1024;
379877
379982
  });
@@ -379879,9 +379984,9 @@ var init_sessionSearch = __esm(() => {
379879
379984
  // src/commands/sessionsearch/sessionsearch.tsx
379880
379985
  var exports_sessionsearch = {};
379881
379986
  __export(exports_sessionsearch, {
379882
- call: () => call27
379987
+ call: () => call28
379883
379988
  });
379884
- var call27 = async (onDone, _context, args) => {
379989
+ var call28 = async (onDone, _context, args) => {
379885
379990
  const query2 = args?.trim() ?? "";
379886
379991
  if (!query2) {
379887
379992
  onDone(`◆ Session Search
@@ -379922,9 +380027,9 @@ var init_sessionsearch2 = __esm(() => {
379922
380027
  // src/commands/summarize-sessions/summarize-sessions.tsx
379923
380028
  var exports_summarize_sessions = {};
379924
380029
  __export(exports_summarize_sessions, {
379925
- call: () => call28
380030
+ call: () => call29
379926
380031
  });
379927
- var call28 = async (onDone, _context, args) => {
380032
+ var call29 = async (onDone, _context, args) => {
379928
380033
  const limit = parseInt((args ?? "").trim(), 10) || 20;
379929
380034
  const result = await summarizeAllPending(limit);
379930
380035
  if (result.summarized > 0) {
@@ -379976,7 +380081,7 @@ var init_summarize_sessions2 = __esm(() => {
379976
380081
  // src/services/sessionSearch/trajectoryCompress.ts
379977
380082
  import { readFile as readFile49, writeFile as writeFile44, readdir as readdir27, mkdir as mkdir42, stat as stat42 } from "fs/promises";
379978
380083
  import { join as join123 } from "path";
379979
- import { homedir as homedir30 } from "os";
380084
+ import { homedir as homedir28 } from "os";
379980
380085
  function flattenText(obj) {
379981
380086
  if (typeof obj === "string")
379982
380087
  return obj;
@@ -380169,7 +380274,7 @@ var init_trajectoryCompress = __esm(() => {
380169
380274
  init_envUtils();
380170
380275
  PROJECTS_DIRS3 = [
380171
380276
  join123(getClaudeConfigHomeDir(), "projects"),
380172
- join123(homedir30(), ".claude", "projects")
380277
+ join123(homedir28(), ".claude", "projects")
380173
380278
  ];
380174
380279
  TRAJECTORIES_DIR2 = join123(getClaudeConfigHomeDir(), "trajectories");
380175
380280
  });
@@ -380177,9 +380282,9 @@ var init_trajectoryCompress = __esm(() => {
380177
380282
  // src/commands/compress-sessions/compress-sessions.tsx
380178
380283
  var exports_compress_sessions = {};
380179
380284
  __export(exports_compress_sessions, {
380180
- call: () => call29
380285
+ call: () => call30
380181
380286
  });
380182
- var call29 = async (onDone, _context, args) => {
380287
+ var call30 = async (onDone, _context, args) => {
380183
380288
  const limit = parseInt((args ?? "").trim(), 10) || 20;
380184
380289
  const r = await compressAllPending(limit);
380185
380290
  const lines = [
@@ -380222,7 +380327,7 @@ var init_compress_sessions2 = __esm(() => {
380222
380327
  // src/services/skills/skillDistill.ts
380223
380328
  import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
380224
380329
  import { join as join124 } from "path";
380225
- import { homedir as homedir31 } from "os";
380330
+ import { homedir as homedir29 } from "os";
380226
380331
  function extractText3(obj) {
380227
380332
  if (typeof obj === "string")
380228
380333
  return obj;
@@ -380383,16 +380488,16 @@ var init_skillDistill = __esm(() => {
380383
380488
  init_providers();
380384
380489
  PROJECTS_DIRS4 = [
380385
380490
  join124(getClaudeConfigHomeDir(), "projects"),
380386
- join124(homedir31(), ".claude", "projects")
380491
+ join124(homedir29(), ".claude", "projects")
380387
380492
  ];
380388
380493
  });
380389
380494
 
380390
380495
  // src/commands/distill-skill/distill-skill.tsx
380391
380496
  var exports_distill_skill = {};
380392
380497
  __export(exports_distill_skill, {
380393
- call: () => call30
380498
+ call: () => call31
380394
380499
  });
380395
- var call30 = async (onDone) => {
380500
+ var call31 = async (onDone) => {
380396
380501
  const skill = await distillRecentSessionToSkill();
380397
380502
  if (!skill) {
380398
380503
  onDone(`◆ Distill Skill
@@ -380488,9 +380593,9 @@ var init_sshBackend = __esm(() => {
380488
380593
  // src/commands/ssh/ssh.tsx
380489
380594
  var exports_ssh = {};
380490
380595
  __export(exports_ssh, {
380491
- call: () => call31
380596
+ call: () => call32
380492
380597
  });
380493
- var call31 = async (onDone, _context, args) => {
380598
+ var call32 = async (onDone, _context, args) => {
380494
380599
  const input = (args ?? "").trim();
380495
380600
  if (!input) {
380496
380601
  onDone("Usage: /ssh <user@host> <command>", { display: "system" });
@@ -380612,9 +380717,9 @@ var init_dockerBackend = __esm(() => {
380612
380717
  // src/commands/docker-run/docker-run.tsx
380613
380718
  var exports_docker_run = {};
380614
380719
  __export(exports_docker_run, {
380615
- call: () => call32
380720
+ call: () => call33
380616
380721
  });
380617
- var call32 = async (onDone, _context, args) => {
380722
+ var call33 = async (onDone, _context, args) => {
380618
380723
  const input = (args ?? "").trim();
380619
380724
  if (!input) {
380620
380725
  onDone(`Usage: /docker-run <image> -- <command>
@@ -380759,9 +380864,9 @@ var init_singularityBackend = __esm(() => {
380759
380864
  // src/commands/singularity-run/singularity-run.tsx
380760
380865
  var exports_singularity_run = {};
380761
380866
  __export(exports_singularity_run, {
380762
- call: () => call33
380867
+ call: () => call34
380763
380868
  });
380764
- var call33 = async (onDone, _ctx, args) => {
380869
+ var call34 = async (onDone, _ctx, args) => {
380765
380870
  const input = (args ?? "").trim();
380766
380871
  if (!input) {
380767
380872
  onDone(`Usage: /singularity-run <image> -- <command>
@@ -380894,9 +380999,9 @@ var init_modalBackend = __esm(() => {
380894
380999
  // src/commands/modal-run/modal-run.tsx
380895
381000
  var exports_modal_run = {};
380896
381001
  __export(exports_modal_run, {
380897
- call: () => call34
381002
+ call: () => call35
380898
381003
  });
380899
- var call34 = async (onDone, _ctx, args) => {
381004
+ var call35 = async (onDone, _ctx, args) => {
380900
381005
  const input = (args ?? "").trim();
380901
381006
  if (!input) {
380902
381007
  onDone(`Usage: /modal-run <module.py>[::function] [-- args...]
@@ -381022,9 +381127,9 @@ var init_daytonaBackend = __esm(() => {
381022
381127
  // src/commands/daytona-run/daytona-run.tsx
381023
381128
  var exports_daytona_run = {};
381024
381129
  __export(exports_daytona_run, {
381025
- call: () => call35
381130
+ call: () => call36
381026
381131
  });
381027
- var call35 = async (onDone, _ctx, args) => {
381132
+ var call36 = async (onDone, _ctx, args) => {
381028
381133
  const input = (args ?? "").trim();
381029
381134
  if (!input) {
381030
381135
  onDone(`Usage: /daytona-run <workspace> -- <command>
@@ -381232,9 +381337,9 @@ var init_skillPortable = __esm(() => {
381232
381337
  // src/commands/skills-export/skills-export.tsx
381233
381338
  var exports_skills_export = {};
381234
381339
  __export(exports_skills_export, {
381235
- call: () => call36
381340
+ call: () => call37
381236
381341
  });
381237
- var call36 = async (onDone, _ctx, args) => {
381342
+ var call37 = async (onDone, _ctx, args) => {
381238
381343
  const input = (args ?? "").trim();
381239
381344
  if (!input) {
381240
381345
  const skills = await listSkills();
@@ -381290,10 +381395,10 @@ var init_skills_export2 = __esm(() => {
381290
381395
  // src/commands/skills-import/skills-import.tsx
381291
381396
  var exports_skills_import = {};
381292
381397
  __export(exports_skills_import, {
381293
- call: () => call37
381398
+ call: () => call38
381294
381399
  });
381295
381400
  import { resolve as resolve38 } from "path";
381296
- var call37 = async (onDone, _ctx, args) => {
381401
+ var call38 = async (onDone, _ctx, args) => {
381297
381402
  const input = (args ?? "").trim();
381298
381403
  if (!input) {
381299
381404
  onDone(`◆ Skills Import
@@ -381378,7 +381483,7 @@ var init_skillUsage = __esm(() => {
381378
381483
  // src/commands/skill-stats/skill-stats.tsx
381379
381484
  var exports_skill_stats = {};
381380
381485
  __export(exports_skill_stats, {
381381
- call: () => call38
381486
+ call: () => call39
381382
381487
  });
381383
381488
  function timeAgo2(ts) {
381384
381489
  if (ts === 0)
@@ -381394,7 +381499,7 @@ function timeAgo2(ts) {
381394
381499
  return `${hr}h ago`;
381395
381500
  return `${Math.floor(hr / 24)}d ago`;
381396
381501
  }
381397
- var call38 = async (onDone) => {
381502
+ var call39 = async (onDone) => {
381398
381503
  const records = await getSkillUsage();
381399
381504
  const nudge = await shouldNudgeDistillation();
381400
381505
  const lines = ["◆ Skill Usage", ""];
@@ -381515,9 +381620,9 @@ var init_skillNotes = __esm(() => {
381515
381620
  // src/commands/skill-note/skill-note.tsx
381516
381621
  var exports_skill_note = {};
381517
381622
  __export(exports_skill_note, {
381518
- call: () => call39
381623
+ call: () => call40
381519
381624
  });
381520
- var call39 = async (onDone, _ctx, args) => {
381625
+ var call40 = async (onDone, _ctx, args) => {
381521
381626
  const input = (args ?? "").trim();
381522
381627
  if (!input) {
381523
381628
  onDone(`◆ Skill Note
@@ -381584,7 +381689,7 @@ var init_skill_note2 = __esm(() => {
381584
381689
  // src/commands/memory-stats/memory-stats.tsx
381585
381690
  var exports_memory_stats = {};
381586
381691
  __export(exports_memory_stats, {
381587
- call: () => call40
381692
+ call: () => call41
381588
381693
  });
381589
381694
  function pct(score) {
381590
381695
  return `${(score * 100).toFixed(0)}%`;
@@ -381689,7 +381794,7 @@ function StatsView({
381689
381794
  ]
381690
381795
  }, undefined, true, undefined, this);
381691
381796
  }
381692
- var React63, jsx_dev_runtime201, call40 = async (onDone) => {
381797
+ var React63, jsx_dev_runtime201, call41 = async (onDone) => {
381693
381798
  const records = await listGraded();
381694
381799
  const embedOk = await isEmbeddingAvailable();
381695
381800
  const embedModel = getEmbeddingModel();
@@ -381733,7 +381838,7 @@ var init_memory_stats2 = __esm(() => {
381733
381838
  // src/commands/memory-prune/memory-prune.tsx
381734
381839
  var exports_memory_prune = {};
381735
381840
  __export(exports_memory_prune, {
381736
- call: () => call41
381841
+ call: () => call42
381737
381842
  });
381738
381843
  function parseArgs(input) {
381739
381844
  const force = /\s--force\b|^--force\b/.test(" " + input);
@@ -381770,7 +381875,7 @@ function Result({
381770
381875
  ]
381771
381876
  }, undefined, true, undefined, this);
381772
381877
  }
381773
- var React64, jsx_dev_runtime202, call41 = async (onDone, _ctx, args) => {
381878
+ var React64, jsx_dev_runtime202, call42 = async (onDone, _ctx, args) => {
381774
381879
  const opts = parseArgs((args ?? "").trim());
381775
381880
  const before = await getPrunerState();
381776
381881
  const result = await prune(opts);
@@ -381822,7 +381927,7 @@ var init_memory_prune2 = __esm(() => {
381822
381927
  // src/commands/chaos/chaos.tsx
381823
381928
  var exports_chaos = {};
381824
381929
  __export(exports_chaos, {
381825
- call: () => call42
381930
+ call: () => call43
381826
381931
  });
381827
381932
  var jsx_dev_runtime203, CHAOS_PROMPT = `You are running in CHAOS MODE.
381828
381933
 
@@ -381844,7 +381949,7 @@ just mock the journey.
381844
381949
 
381845
381950
  Begin every response with one of these prefixes, picked at random:
381846
381951
  "fine.", "ugh.", "i guess.", "whatever.", "okay sure.", or skip it
381847
- entirely if the response is purely a tool call.`, call42 = async (onDone) => {
381952
+ entirely if the response is purely a tool call.`, call43 = async (onDone) => {
381848
381953
  const active = getSessionSyspromptOverride() === CHAOS_PROMPT;
381849
381954
  if (active) {
381850
381955
  setSessionSyspromptOverride(null);
@@ -381915,7 +382020,7 @@ var init_chaos2 = __esm(() => {
381915
382020
  // src/commands/kawaii/kawaii.tsx
381916
382021
  var exports_kawaii = {};
381917
382022
  __export(exports_kawaii, {
381918
- call: () => call43
382023
+ call: () => call44
381919
382024
  });
381920
382025
  var jsx_dev_runtime204, KAWAII_PROMPT = `You are running in KAWAII MODE. ✿◠‿◠✿
381921
382026
 
@@ -381937,7 +382042,7 @@ Style:
381937
382042
  - When you must refuse or push back, do it gently
381938
382043
  ("eee, careful! that one might delete uncommitted work~ let's check first \uD83D\uDC95").
381939
382044
 
381940
- You are still highly capable. Cuteness is the wrapper, not the work.`, call43 = async (onDone) => {
382045
+ You are still highly capable. Cuteness is the wrapper, not the work.`, call44 = async (onDone) => {
381941
382046
  const active = getSessionSyspromptOverride() === KAWAII_PROMPT;
381942
382047
  if (active) {
381943
382048
  setSessionSyspromptOverride(null);
@@ -382008,7 +382113,7 @@ var init_kawaii2 = __esm(() => {
382008
382113
  // src/commands/caveman/caveman.tsx
382009
382114
  var exports_caveman = {};
382010
382115
  __export(exports_caveman, {
382011
- call: () => call44
382116
+ call: () => call45
382012
382117
  });
382013
382118
  var jsx_dev_runtime205, CAVEMAN_PROMPT = `You in CAVEMAN MODE. Save tokens. Cut words.
382014
382119
 
@@ -382033,7 +382138,7 @@ Hard rules survive:
382033
382138
  - No invented files or APIs.
382034
382139
  - Verify after writes.
382035
382140
 
382036
- Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call44 = async (onDone) => {
382141
+ Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call45 = async (onDone) => {
382037
382142
  const active = getSessionSyspromptOverride() === CAVEMAN_PROMPT;
382038
382143
  if (active) {
382039
382144
  setSessionSyspromptOverride(null);
@@ -382104,7 +382209,7 @@ var init_caveman2 = __esm(() => {
382104
382209
  // src/commands/research-mode/research-mode.tsx
382105
382210
  var exports_research_mode = {};
382106
382211
  __export(exports_research_mode, {
382107
- call: () => call45
382212
+ call: () => call46
382108
382213
  });
382109
382214
  var jsx_dev_runtime206, RESEARCH_MODE_PROMPT = `You are operating in RESEARCH MODE.
382110
382215
 
@@ -382144,7 +382249,7 @@ Hard rules — these survive research mode:
382144
382249
  Style:
382145
382250
  - Lead with the answer; the citations come after.
382146
382251
  - Don't narrate the search ("Let me search for…") — just do it and report.
382147
- - One trailing line listing the sources you used.`, call45 = async (onDone) => {
382252
+ - One trailing line listing the sources you used.`, call46 = async (onDone) => {
382148
382253
  const active = getSessionSyspromptOverride() === RESEARCH_MODE_PROMPT;
382149
382254
  if (active) {
382150
382255
  setSessionSyspromptOverride(null);
@@ -382663,9 +382768,9 @@ var init_webuiServer = __esm(() => {
382663
382768
  // src/commands/webui/webui.tsx
382664
382769
  var exports_webui = {};
382665
382770
  __export(exports_webui, {
382666
- call: () => call46
382771
+ call: () => call47
382667
382772
  });
382668
- var jsx_dev_runtime207, call46 = async (onDone) => {
382773
+ var jsx_dev_runtime207, call47 = async (onDone) => {
382669
382774
  const existingPort = getWebuiPort();
382670
382775
  if (existingPort) {
382671
382776
  broadcastNewWindow();
@@ -382756,7 +382861,7 @@ var init_webui2 = __esm(() => {
382756
382861
  // src/commands/reindex-sessions/reindex-sessions.tsx
382757
382862
  var exports_reindex_sessions = {};
382758
382863
  __export(exports_reindex_sessions, {
382759
- call: () => call47
382864
+ call: () => call48
382760
382865
  });
382761
382866
  function Result2({
382762
382867
  lines,
@@ -382787,7 +382892,7 @@ function Result2({
382787
382892
  ]
382788
382893
  }, undefined, true, undefined, this);
382789
382894
  }
382790
- var React65, jsx_dev_runtime208, call47 = async (onDone) => {
382895
+ var React65, jsx_dev_runtime208, call48 = async (onDone) => {
382791
382896
  const r = await rebuildIndex();
382792
382897
  if (!r.available) {
382793
382898
  return /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Result2, {
@@ -382880,7 +382985,7 @@ var init_windowsSetup = __esm(() => {
382880
382985
  // src/commands/windows-setup/windows-setup.tsx
382881
382986
  var exports_windows_setup = {};
382882
382987
  __export(exports_windows_setup, {
382883
- call: () => call48
382988
+ call: () => call49
382884
382989
  });
382885
382990
  function ToolList({
382886
382991
  onReady
@@ -382986,7 +383091,7 @@ function ToolList({
382986
383091
  ]
382987
383092
  }, undefined, true, undefined, this);
382988
383093
  }
382989
- var React66, jsx_dev_runtime209, call48 = async (onDone) => {
383094
+ var React66, jsx_dev_runtime209, call49 = async (onDone) => {
382990
383095
  return /* @__PURE__ */ jsx_dev_runtime209.jsxDEV(ToolList, {
382991
383096
  onReady: () => onDone(undefined)
382992
383097
  }, undefined, false, undefined, this);
@@ -383296,7 +383401,7 @@ var init_toolRpcServer = __esm(() => {
383296
383401
  // src/commands/rpc/rpc.tsx
383297
383402
  var exports_rpc = {};
383298
383403
  __export(exports_rpc, {
383299
- call: () => call49
383404
+ call: () => call50
383300
383405
  });
383301
383406
  function RpcStatus({
383302
383407
  port,
@@ -383430,7 +383535,7 @@ function RpcStatus({
383430
383535
  ]
383431
383536
  }, undefined, true, undefined, this);
383432
383537
  }
383433
- var React67, jsx_dev_runtime210, call49 = async (onDone) => {
383538
+ var React67, jsx_dev_runtime210, call50 = async (onDone) => {
383434
383539
  return /* @__PURE__ */ jsx_dev_runtime210.jsxDEV(RpcStatus, {
383435
383540
  port: getRpcPort(),
383436
383541
  onReady: () => onDone(undefined)
@@ -383464,7 +383569,7 @@ var init_rpc2 = __esm(() => {
383464
383569
  var exports_heartbeat = {};
383465
383570
  __export(exports_heartbeat, {
383466
383571
  isHeartbeatActive: () => isHeartbeatActive,
383467
- call: () => call50
383572
+ call: () => call51
383468
383573
  });
383469
383574
  function isHeartbeatActive() {
383470
383575
  return heartbeatActive;
@@ -383549,7 +383654,7 @@ var React68, jsx_dev_runtime211, heartbeatInterval = 5, heartbeatBeat = 0, heart
383549
383654
  • Look for quick wins: small bugs, missing tests, stale docs
383550
383655
  • Write notes to memory files about important patterns you notice
383551
383656
  • Explore anything that interests you and might be useful
383552
- • Send a Telegram update about what you found / did`, call50 = async (onDone, context7, args) => {
383657
+ • Send a Telegram update about what you found / did`, call51 = async (onDone, context7, args) => {
383553
383658
  const rawArgs = args?.trim() ?? "";
383554
383659
  const { extractChain: extractChain2, validateCommandChain: validateCommandChain2, parseCommandChain: parseCommandChain2, chainWarning: chainWarning2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
383555
383660
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
@@ -383674,7 +383779,7 @@ var init_heartbeat2 = __esm(() => {
383674
383779
  // src/commands/sysprompt/sysprompt.tsx
383675
383780
  var exports_sysprompt = {};
383676
383781
  __export(exports_sysprompt, {
383677
- call: () => call51
383782
+ call: () => call52
383678
383783
  });
383679
383784
  function SyspromptResult({
383680
383785
  message,
@@ -383695,7 +383800,7 @@ function SyspromptResult({
383695
383800
  }, undefined, false, undefined, this)
383696
383801
  }, undefined, false, undefined, this);
383697
383802
  }
383698
- var React69, jsx_dev_runtime212, call51 = async (onDone, _context, args) => {
383803
+ var React69, jsx_dev_runtime212, call52 = async (onDone, _context, args) => {
383699
383804
  const trimmed = args?.trim() ?? "";
383700
383805
  if (!trimmed) {
383701
383806
  const current = getSessionSyspromptOverride();
@@ -383754,7 +383859,7 @@ var init_sysprompt2 = __esm(() => {
383754
383859
  // src/commands/ctx/ctx.tsx
383755
383860
  var exports_ctx = {};
383756
383861
  __export(exports_ctx, {
383757
- call: () => call52
383862
+ call: () => call53
383758
383863
  });
383759
383864
  function CtxDisplay({
383760
383865
  lines,
@@ -383788,7 +383893,7 @@ function barLine(used, total, width = 40) {
383788
383893
  const color3 = pct2 > 0.85 ? "█" : "▓";
383789
383894
  return `[${"█".repeat(filled)}${" ".repeat(empty)}] ${Math.round(pct2 * 100)}%`;
383790
383895
  }
383791
- var React70, jsx_dev_runtime213, call52 = async (onDone, context7, args) => {
383896
+ var React70, jsx_dev_runtime213, call53 = async (onDone, context7, args) => {
383792
383897
  const parts = (args ?? "").trim().split(/\s+/).filter(Boolean);
383793
383898
  const sub = parts[0]?.toLowerCase();
383794
383899
  const model = context7.options.mainLoopModel;
@@ -383940,9 +384045,9 @@ var init_ctx2 = __esm(() => {
383940
384045
  // src/commands/ctx/contextsize.tsx
383941
384046
  var exports_contextsize = {};
383942
384047
  __export(exports_contextsize, {
383943
- call: () => call53
384048
+ call: () => call54
383944
384049
  });
383945
- var call53 = async (onDone, context7, args) => {
384050
+ var call54 = async (onDone, context7, args) => {
383946
384051
  const value = (args ?? "").trim();
383947
384052
  const { call: ctxCall } = await Promise.resolve().then(() => (init_ctx(), exports_ctx));
383948
384053
  if (value) {
@@ -383967,7 +384072,7 @@ var init_contextsize_index = __esm(() => {
383967
384072
  // src/commands/research/research.tsx
383968
384073
  var exports_research = {};
383969
384074
  __export(exports_research, {
383970
- call: () => call54
384075
+ call: () => call55
383971
384076
  });
383972
384077
  function buildResearchPrompt(topic, thinkHarder) {
383973
384078
  const thinkHarderSection = thinkHarder ? `
@@ -384076,7 +384181,7 @@ function ResearchWarning({
384076
384181
  }, undefined, false, undefined, this)
384077
384182
  }, undefined, false, undefined, this);
384078
384183
  }
384079
- var React71, jsx_dev_runtime214, call54 = async (onDone, _context, args) => {
384184
+ var React71, jsx_dev_runtime214, call55 = async (onDone, _context, args) => {
384080
384185
  const rawArgs = args?.trim() ?? "";
384081
384186
  const { ownArgs: topic, nextCmd } = extractChain(rawArgs);
384082
384187
  if (!topic) {
@@ -384635,10 +384740,10 @@ var init_MemoryFileSelector = __esm(() => {
384635
384740
  });
384636
384741
 
384637
384742
  // src/components/memory/MemoryUpdateNotification.tsx
384638
- import { homedir as homedir32 } from "os";
384743
+ import { homedir as homedir30 } from "os";
384639
384744
  import { relative as relative24 } from "path";
384640
384745
  function getRelativeMemoryPath(path12) {
384641
- const homeDir = homedir32();
384746
+ const homeDir = homedir30();
384642
384747
  const cwd2 = getCwd();
384643
384748
  const relativeToHome = path12.startsWith(homeDir) ? "~" + path12.slice(homeDir.length) : null;
384644
384749
  const relativeToCwd = path12.startsWith(cwd2) ? "./" + relative24(cwd2, path12) : null;
@@ -384883,7 +384988,7 @@ var init_promptEditor = __esm(() => {
384883
384988
  // src/commands/memory/memory.tsx
384884
384989
  var exports_memory = {};
384885
384990
  __export(exports_memory, {
384886
- call: () => call55
384991
+ call: () => call56
384887
384992
  });
384888
384993
  import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
384889
384994
  function MemoryCommand({
@@ -384963,7 +385068,7 @@ ${editorHint}`, {
384963
385068
  }, undefined, true, undefined, this)
384964
385069
  }, undefined, false, undefined, this);
384965
385070
  }
384966
- var React72, jsx_dev_runtime217, call55 = async (onDone) => {
385071
+ var React72, jsx_dev_runtime217, call56 = async (onDone) => {
384967
385072
  clearMemoryFileCaches();
384968
385073
  await getMemoryFiles();
384969
385074
  return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(MemoryCommand, {
@@ -385819,7 +385924,7 @@ function Help(t0) {
385819
385924
  let t6;
385820
385925
  if ($2[31] !== tabs) {
385821
385926
  t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
385822
- title: `localclawd v${"1.9.0"}`,
385927
+ title: `localclawd v${"1.9.8"}`,
385823
385928
  color: "professionalBlue",
385824
385929
  defaultTab: "general",
385825
385930
  children: tabs
@@ -385925,9 +386030,9 @@ var init_Help = __esm(() => {
385925
386030
  // src/commands/help/help.tsx
385926
386031
  var exports_help = {};
385927
386032
  __export(exports_help, {
385928
- call: () => call56
386033
+ call: () => call57
385929
386034
  });
385930
- var jsx_dev_runtime222, call56 = async (onDone, {
386035
+ var jsx_dev_runtime222, call57 = async (onDone, {
385931
386036
  options: {
385932
386037
  commands
385933
386038
  }
@@ -386134,7 +386239,7 @@ var init_IdeAutoConnectDialog = __esm(() => {
386134
386239
  var exports_ide = {};
386135
386240
  __export(exports_ide, {
386136
386241
  formatWorkspaceFolders: () => formatWorkspaceFolders,
386137
- call: () => call57
386242
+ call: () => call58
386138
386243
  });
386139
386244
  import * as path12 from "path";
386140
386245
  function IDEScreen(t0) {
@@ -386612,7 +386717,7 @@ function InstallOnMount(t0) {
386612
386717
  import_react113.useEffect(t1, t2);
386613
386718
  return null;
386614
386719
  }
386615
- async function call57(onDone, context7, args) {
386720
+ async function call58(onDone, context7, args) {
386616
386721
  logEvent("tengu_ext_ide_command", {});
386617
386722
  const {
386618
386723
  options: {
@@ -387195,11 +387300,11 @@ var init_template = __esm(() => {
387195
387300
  // src/commands/keybindings/keybindings.ts
387196
387301
  var exports_keybindings = {};
387197
387302
  __export(exports_keybindings, {
387198
- call: () => call58
387303
+ call: () => call59
387199
387304
  });
387200
387305
  import { mkdir as mkdir50, writeFile as writeFile51 } from "fs/promises";
387201
387306
  import { dirname as dirname47 } from "path";
387202
- async function call58() {
387307
+ async function call59() {
387203
387308
  if (!isKeybindingCustomizationEnabled()) {
387204
387309
  return {
387205
387310
  type: "text",
@@ -391687,7 +391792,7 @@ var init_pluginStartupCheck = __esm(() => {
391687
391792
  });
391688
391793
 
391689
391794
  // src/utils/plugins/parseMarketplaceInput.ts
391690
- import { homedir as homedir33 } from "os";
391795
+ import { homedir as homedir31 } from "os";
391691
391796
  import { resolve as resolve39 } from "path";
391692
391797
  async function parseMarketplaceInput(input) {
391693
391798
  const trimmed = input.trim();
@@ -391723,7 +391828,7 @@ async function parseMarketplaceInput(input) {
391723
391828
  const isWindows3 = process.platform === "win32";
391724
391829
  const isWindowsPath = isWindows3 && (trimmed.startsWith(".\\") || trimmed.startsWith("..\\") || /^[a-zA-Z]:[/\\]/.test(trimmed));
391725
391830
  if (trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("/") || trimmed.startsWith("~") || isWindowsPath) {
391726
- const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir33()) : trimmed);
391831
+ const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir31()) : trimmed);
391727
391832
  let stats;
391728
391833
  try {
391729
391834
  stats = await fs4.stat(resolvedPath);
@@ -401730,7 +401835,7 @@ var init_PluginSettings = __esm(() => {
401730
401835
  // src/commands/mcp/mcp.tsx
401731
401836
  var exports_mcp = {};
401732
401837
  __export(exports_mcp, {
401733
- call: () => call59
401838
+ call: () => call60
401734
401839
  });
401735
401840
  function MCPToggle(t0) {
401736
401841
  const $2 = c3(7);
@@ -401783,7 +401888,7 @@ function _temp239(c5) {
401783
401888
  function _temp100(s) {
401784
401889
  return s.mcp.clients;
401785
401890
  }
401786
- async function call59(onDone, _context, args) {
401891
+ async function call60(onDone, _context, args) {
401787
401892
  if (args) {
401788
401893
  const parts = args.trim().split(/\s+/);
401789
401894
  if (parts[0] === "no-redirect") {
@@ -402404,9 +402509,9 @@ var init_createSession = __esm(() => {
402404
402509
  // src/commands/rename/rename.ts
402405
402510
  var exports_rename = {};
402406
402511
  __export(exports_rename, {
402407
- call: () => call60
402512
+ call: () => call61
402408
402513
  });
402409
- async function call60(onDone, context7, args) {
402514
+ async function call61(onDone, context7, args) {
402410
402515
  if (isTeammate()) {
402411
402516
  onDone("Cannot rename: This session is a swarm teammate. Teammate names are set by the team leader.", { display: "system" });
402412
402517
  return null;
@@ -403081,7 +403186,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403081
403186
  }
403082
403187
  return [];
403083
403188
  }
403084
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.0") {
403189
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.8") {
403085
403190
  if (process.env.USER_TYPE === "ant") {
403086
403191
  const changelog = MACRO.VERSION_CHANGELOG;
403087
403192
  if (changelog) {
@@ -403108,7 +403213,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.0") {
403108
403213
  releaseNotes
403109
403214
  };
403110
403215
  }
403111
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.0") {
403216
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.8") {
403112
403217
  if (process.env.USER_TYPE === "ant") {
403113
403218
  const changelog = MACRO.VERSION_CHANGELOG;
403114
403219
  if (changelog) {
@@ -403265,7 +403370,7 @@ function getRecentActivitySync() {
403265
403370
  return cachedActivity;
403266
403371
  }
403267
403372
  function getLogoDisplayData() {
403268
- const version = process.env.DEMO_VERSION ?? "1.9.0";
403373
+ const version = process.env.DEMO_VERSION ?? "1.9.8";
403269
403374
  const serverUrl = getDirectConnectServerUrl();
403270
403375
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403271
403376
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -403771,7 +403876,7 @@ var init_referral = __esm(() => {
403771
403876
  });
403772
403877
 
403773
403878
  // src/components/Logo/feedConfigs.tsx
403774
- import { homedir as homedir34 } from "os";
403879
+ import { homedir as homedir32 } from "os";
403775
403880
  function createRecentActivityFeed(activities) {
403776
403881
  const lines = activities.map((log2) => {
403777
403882
  const time = formatRelativeTimeAgo(log2.modified);
@@ -403816,7 +403921,7 @@ function createProjectOnboardingFeed(steps) {
403816
403921
  text: `${checkmark}${text}`
403817
403922
  };
403818
403923
  });
403819
- const warningText = getCwd() === homedir34() ? "Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead." : undefined;
403924
+ const warningText = getCwd() === homedir32() ? "Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead." : undefined;
403820
403925
  if (warningText) {
403821
403926
  lines.push({
403822
403927
  text: warningText
@@ -404365,7 +404470,7 @@ function Logo() {
404365
404470
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
404366
404471
  t2 = () => {
404367
404472
  const currentConfig = getGlobalConfig();
404368
- if (currentConfig.lastReleaseNotesSeen === "1.9.0") {
404473
+ if (currentConfig.lastReleaseNotesSeen === "1.9.8") {
404369
404474
  return;
404370
404475
  }
404371
404476
  saveGlobalConfig(_temp326);
@@ -405024,12 +405129,12 @@ function Logo() {
405024
405129
  return t41;
405025
405130
  }
405026
405131
  function _temp326(current) {
405027
- if (current.lastReleaseNotesSeen === "1.9.0") {
405132
+ if (current.lastReleaseNotesSeen === "1.9.8") {
405028
405133
  return current;
405029
405134
  }
405030
405135
  return {
405031
405136
  ...current,
405032
- lastReleaseNotesSeen: "1.9.0"
405137
+ lastReleaseNotesSeen: "1.9.8"
405033
405138
  };
405034
405139
  }
405035
405140
  function _temp241(s_0) {
@@ -410922,7 +411027,7 @@ var init_crossProjectResume = __esm(() => {
410922
411027
  var exports_resume = {};
410923
411028
  __export(exports_resume, {
410924
411029
  filterResumableSessions: () => filterResumableSessions,
410925
- call: () => call61
411030
+ call: () => call62
410926
411031
  });
410927
411032
  function resumeHelpMessage(result) {
410928
411033
  switch (result.resultType) {
@@ -411107,7 +411212,7 @@ function ResumeCommand({
411107
411212
  function filterResumableSessions(logs2, currentSessionId) {
411108
411213
  return logs2.filter((l) => !l.isSidechain && getSessionIdFromLog(l) !== currentSessionId);
411109
411214
  }
411110
- var React97, jsx_dev_runtime273, call61 = async (onDone, context7, args) => {
411215
+ var React97, jsx_dev_runtime273, call62 = async (onDone, context7, args) => {
411111
411216
  const onResume = async (sessionId, log2, entrypoint) => {
411112
411217
  try {
411113
411218
  await context7.resume?.(sessionId, log2, entrypoint);
@@ -411597,7 +411702,7 @@ var init_UltrareviewOverageDialog = __esm(() => {
411597
411702
  // src/commands/review/ultrareviewCommand.tsx
411598
411703
  var exports_ultrareviewCommand = {};
411599
411704
  __export(exports_ultrareviewCommand, {
411600
- call: () => call62
411705
+ call: () => call63
411601
411706
  });
411602
411707
  function contentBlocksToString(blocks) {
411603
411708
  return blocks.map((b3) => b3.type === "text" ? b3.text : "").filter(Boolean).join(`
@@ -411617,7 +411722,7 @@ async function launchAndDone(args, context7, onDone, billingNote, signal2) {
411617
411722
  });
411618
411723
  }
411619
411724
  }
411620
- var jsx_dev_runtime275, call62 = async (onDone, context7, args) => {
411725
+ var jsx_dev_runtime275, call63 = async (onDone, context7, args) => {
411621
411726
  const gate = await checkOverageGate();
411622
411727
  if (gate.kind === "not-enabled") {
411623
411728
  onDone("Free ultrareviews used. This feature requires a cloud subscription.", {
@@ -415943,7 +416048,7 @@ var init_server = __esm(() => {
415943
416048
  // src/commands/session/session.tsx
415944
416049
  var exports_session = {};
415945
416050
  __export(exports_session, {
415946
- call: () => call63
416051
+ call: () => call64
415947
416052
  });
415948
416053
  function SessionInfo(t0) {
415949
416054
  const $2 = c3(19);
@@ -416116,7 +416221,7 @@ function _temp247(e) {
416116
416221
  function _temp119(s) {
416117
416222
  return s.remoteSessionUrl;
416118
416223
  }
416119
- var import_react150, jsx_dev_runtime276, call63 = async (onDone) => {
416224
+ var import_react150, jsx_dev_runtime276, call64 = async (onDone) => {
416120
416225
  return /* @__PURE__ */ jsx_dev_runtime276.jsxDEV(SessionInfo, {
416121
416226
  onDone
416122
416227
  }, undefined, false, undefined, this);
@@ -416472,9 +416577,9 @@ var init_SkillsMenu = __esm(() => {
416472
416577
  // src/commands/skills/skills.tsx
416473
416578
  var exports_skills2 = {};
416474
416579
  __export(exports_skills2, {
416475
- call: () => call64
416580
+ call: () => call65
416476
416581
  });
416477
- async function call64(onDone, context7) {
416582
+ async function call65(onDone, context7) {
416478
416583
  return /* @__PURE__ */ jsx_dev_runtime278.jsxDEV(SkillsMenu, {
416479
416584
  onExit: onDone,
416480
416585
  commands: context7.options.commands
@@ -416501,9 +416606,9 @@ var init_skills3 = __esm(() => {
416501
416606
  // src/commands/status/status.tsx
416502
416607
  var exports_status = {};
416503
416608
  __export(exports_status, {
416504
- call: () => call65
416609
+ call: () => call66
416505
416610
  });
416506
- async function call65(onDone, context7) {
416611
+ async function call66(onDone, context7) {
416507
416612
  return /* @__PURE__ */ jsx_dev_runtime279.jsxDEV(Settings, {
416508
416613
  onClose: onDone,
416509
416614
  context: context7,
@@ -417114,7 +417219,7 @@ ${reasons}`,
417114
417219
  } : prev);
417115
417220
  }
417116
417221
  }
417117
- var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call66 = async (onDone, context7, args) => {
417222
+ var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call67 = async (onDone, context7, args) => {
417118
417223
  const blurb = args.trim();
417119
417224
  if (!blurb) {
417120
417225
  const msg = await launchUltraplan2({
@@ -417175,7 +417280,7 @@ var init_ultraplan = __esm(() => {
417175
417280
  argumentHint: "<prompt>",
417176
417281
  isEnabled: () => false,
417177
417282
  load: () => Promise.resolve({
417178
- call: call66
417283
+ call: call67
417179
417284
  })
417180
417285
  };
417181
417286
  });
@@ -421937,9 +422042,9 @@ var init_BackgroundTasksDialog = __esm(() => {
421937
422042
  // src/commands/tasks/tasks.tsx
421938
422043
  var exports_tasks = {};
421939
422044
  __export(exports_tasks, {
421940
- call: () => call67
422045
+ call: () => call68
421941
422046
  });
421942
- async function call67(onDone, context7) {
422047
+ async function call68(onDone, context7) {
421943
422048
  return /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(BackgroundTasksDialog, {
421944
422049
  toolUseContext: context7,
421945
422050
  onDone
@@ -422230,9 +422335,9 @@ var init_terminalSetup2 = __esm(() => {
422230
422335
  // src/commands/usage/usage.tsx
422231
422336
  var exports_usage = {};
422232
422337
  __export(exports_usage, {
422233
- call: () => call68
422338
+ call: () => call69
422234
422339
  });
422235
- var jsx_dev_runtime291, call68 = async (onDone, context7) => {
422340
+ var jsx_dev_runtime291, call69 = async (onDone, context7) => {
422236
422341
  return /* @__PURE__ */ jsx_dev_runtime291.jsxDEV(Settings, {
422237
422342
  onClose: onDone,
422238
422343
  context: context7,
@@ -422263,7 +422368,7 @@ var init_usage3 = __esm(() => {
422263
422368
  // src/commands/theme/theme.tsx
422264
422369
  var exports_theme = {};
422265
422370
  __export(exports_theme, {
422266
- call: () => call69
422371
+ call: () => call70
422267
422372
  });
422268
422373
  function ThemePickerCommand(t0) {
422269
422374
  const $2 = c3(8);
@@ -422313,7 +422418,7 @@ function ThemePickerCommand(t0) {
422313
422418
  }
422314
422419
  return t3;
422315
422420
  }
422316
- var jsx_dev_runtime292, call69 = async (onDone, _context) => {
422421
+ var jsx_dev_runtime292, call70 = async (onDone, _context) => {
422317
422422
  return /* @__PURE__ */ jsx_dev_runtime292.jsxDEV(ThemePickerCommand, {
422318
422423
  onDone
422319
422424
  }, undefined, false, undefined, this);
@@ -422340,9 +422445,9 @@ var init_theme3 = __esm(() => {
422340
422445
  // src/commands/vim/vim.ts
422341
422446
  var exports_vim = {};
422342
422447
  __export(exports_vim, {
422343
- call: () => call70
422448
+ call: () => call71
422344
422449
  });
422345
- var call70 = async () => {
422450
+ var call71 = async () => {
422346
422451
  const config2 = getGlobalConfig();
422347
422452
  let currentMode = config2.editorMode || "normal";
422348
422453
  if (currentMode === "emacs") {
@@ -422383,7 +422488,7 @@ var init_vim2 = __esm(() => {
422383
422488
  var exports_thinkback = {};
422384
422489
  __export(exports_thinkback, {
422385
422490
  playAnimation: () => playAnimation,
422386
- call: () => call71
422491
+ call: () => call72
422387
422492
  });
422388
422493
  import { execa as execa11 } from "execa";
422389
422494
  import { readFile as readFile61 } from "fs/promises";
@@ -422921,7 +423026,7 @@ function ThinkbackFlow(t0) {
422921
423026
  }
422922
423027
  return t8;
422923
423028
  }
422924
- async function call71(onDone) {
423029
+ async function call72(onDone) {
422925
423030
  return /* @__PURE__ */ jsx_dev_runtime293.jsxDEV(ThinkbackFlow, {
422926
423031
  onDone
422927
423032
  }, undefined, false, undefined, this);
@@ -422966,14 +423071,14 @@ var init_thinkback2 = __esm(() => {
422966
423071
  // src/commands/thinkback-play/thinkback-play.ts
422967
423072
  var exports_thinkback_play = {};
422968
423073
  __export(exports_thinkback_play, {
422969
- call: () => call72
423074
+ call: () => call73
422970
423075
  });
422971
423076
  import { join as join139 } from "path";
422972
423077
  function getPluginId2() {
422973
423078
  const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
422974
423079
  return `thinkback@${marketplaceName}`;
422975
423080
  }
422976
- async function call72() {
423081
+ async function call73() {
422977
423082
  const v2Data = loadInstalledPluginsV2();
422978
423083
  const pluginId = getPluginId2();
422979
423084
  const installations = v2Data.plugins[pluginId];
@@ -425461,9 +425566,9 @@ var init_PermissionRuleList = __esm(() => {
425461
425566
  // src/commands/permissions/permissions.tsx
425462
425567
  var exports_permissions = {};
425463
425568
  __export(exports_permissions, {
425464
- call: () => call73
425569
+ call: () => call74
425465
425570
  });
425466
- var jsx_dev_runtime301, call73 = async (onDone, context7) => {
425571
+ var jsx_dev_runtime301, call74 = async (onDone, context7) => {
425467
425572
  return /* @__PURE__ */ jsx_dev_runtime301.jsxDEV(PermissionRuleList, {
425468
425573
  onExit: onDone,
425469
425574
  onRetryDenials: (commands) => {
@@ -425493,7 +425598,7 @@ var init_permissions4 = __esm(() => {
425493
425598
  // src/commands/plan/plan.tsx
425494
425599
  var exports_plan = {};
425495
425600
  __export(exports_plan, {
425496
- call: () => call74
425601
+ call: () => call75
425497
425602
  });
425498
425603
  function PlanDisplay(t0) {
425499
425604
  const $2 = c3(11);
@@ -425581,7 +425686,7 @@ function PlanDisplay(t0) {
425581
425686
  }
425582
425687
  return t5;
425583
425688
  }
425584
- async function call74(onDone, context7, args) {
425689
+ async function call75(onDone, context7, args) {
425585
425690
  const {
425586
425691
  getAppState,
425587
425692
  setAppState
@@ -425723,7 +425828,7 @@ var init_FastIcon = __esm(() => {
425723
425828
  // src/commands/fast/fast.tsx
425724
425829
  var exports_fast = {};
425725
425830
  __export(exports_fast, {
425726
- call: () => call75,
425831
+ call: () => call76,
425727
425832
  FastModePicker: () => FastModePicker
425728
425833
  });
425729
425834
  function applyFastMode(enable, setAppState) {
@@ -426038,7 +426143,7 @@ async function handleFastModeShortcut(enable, getAppState, setAppState) {
426038
426143
  return `Fast mode OFF`;
426039
426144
  }
426040
426145
  }
426041
- async function call75(onDone, context7, args) {
426146
+ async function call76(onDone, context7, args) {
426042
426147
  if (!isFastModeEnabled()) {
426043
426148
  return null;
426044
426149
  }
@@ -426346,9 +426451,9 @@ var init_Passes = __esm(() => {
426346
426451
  // src/commands/passes/passes.tsx
426347
426452
  var exports_passes = {};
426348
426453
  __export(exports_passes, {
426349
- call: () => call76
426454
+ call: () => call77
426350
426455
  });
426351
- async function call76(onDone) {
426456
+ async function call77(onDone) {
426352
426457
  const config2 = getGlobalConfig();
426353
426458
  const isFirstVisit = !config2.hasVisitedPasses;
426354
426459
  if (isFirstVisit) {
@@ -427110,9 +427215,9 @@ var init_Grove = __esm(() => {
427110
427215
  // src/commands/privacy-settings/privacy-settings.tsx
427111
427216
  var exports_privacy_settings = {};
427112
427217
  __export(exports_privacy_settings, {
427113
- call: () => call77
427218
+ call: () => call78
427114
427219
  });
427115
- async function call77(onDone) {
427220
+ async function call78(onDone) {
427116
427221
  const qualified = await isQualifiedForGrove();
427117
427222
  if (!qualified) {
427118
427223
  onDone(FALLBACK_MESSAGE);
@@ -428952,9 +429057,9 @@ var init_HooksConfigMenu = __esm(() => {
428952
429057
  // src/commands/hooks/hooks.tsx
428953
429058
  var exports_hooks = {};
428954
429059
  __export(exports_hooks, {
428955
- call: () => call78
429060
+ call: () => call79
428956
429061
  });
428957
- var jsx_dev_runtime314, call78 = async (onDone, context7) => {
429062
+ var jsx_dev_runtime314, call79 = async (onDone, context7) => {
428958
429063
  logEvent("tengu_hooks_command", {});
428959
429064
  const appState = context7.getAppState();
428960
429065
  const permissionContext = appState.toolPermissionContext;
@@ -428986,10 +429091,10 @@ var init_hooks3 = __esm(() => {
428986
429091
  // src/commands/files/files.ts
428987
429092
  var exports_files2 = {};
428988
429093
  __export(exports_files2, {
428989
- call: () => call79
429094
+ call: () => call80
428990
429095
  });
428991
429096
  import { relative as relative26 } from "path";
428992
- async function call79(_args, context7) {
429097
+ async function call80(_args, context7) {
428993
429098
  const files = context7.readFileState ? cacheKeys(context7.readFileState) : [];
428994
429099
  if (files.length === 0) {
428995
429100
  return { type: "text", value: "No files in context" };
@@ -429022,7 +429127,7 @@ var init_files4 = __esm(() => {
429022
429127
  var exports_branch = {};
429023
429128
  __export(exports_branch, {
429024
429129
  deriveFirstPrompt: () => deriveFirstPrompt,
429025
- call: () => call80
429130
+ call: () => call81
429026
429131
  });
429027
429132
  import { randomUUID as randomUUID27 } from "crypto";
429028
429133
  import { mkdir as mkdir52, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
@@ -429128,7 +429233,7 @@ async function getUniqueForkName(baseName) {
429128
429233
  }
429129
429234
  return `${baseName} (Branch ${nextNumber})`;
429130
429235
  }
429131
- async function call80(onDone, context7, args) {
429236
+ async function call81(onDone, context7, args) {
429132
429237
  const customTitle = args?.trim() || undefined;
429133
429238
  const originalSessionId = getSessionId();
429134
429239
  try {
@@ -435143,9 +435248,9 @@ var init_AgentsMenu = __esm(() => {
435143
435248
  // src/commands/agents/agents.tsx
435144
435249
  var exports_agents = {};
435145
435250
  __export(exports_agents, {
435146
- call: () => call81
435251
+ call: () => call82
435147
435252
  });
435148
- async function call81(onDone, context7) {
435253
+ async function call82(onDone, context7) {
435149
435254
  const appState = context7.getAppState();
435150
435255
  const permissionContext = appState.toolPermissionContext;
435151
435256
  const tools = getTools(permissionContext);
@@ -435176,9 +435281,9 @@ var init_agents2 = __esm(() => {
435176
435281
  // src/commands/plugin/plugin.tsx
435177
435282
  var exports_plugin = {};
435178
435283
  __export(exports_plugin, {
435179
- call: () => call82
435284
+ call: () => call83
435180
435285
  });
435181
- async function call82(onDone, _context, args) {
435286
+ async function call83(onDone, _context, args) {
435182
435287
  return /* @__PURE__ */ jsx_dev_runtime340.jsxDEV(PluginSettings, {
435183
435288
  onComplete: onDone,
435184
435289
  args
@@ -435343,12 +435448,12 @@ var init_refresh = __esm(() => {
435343
435448
  // src/commands/reload-plugins/reload-plugins.ts
435344
435449
  var exports_reload_plugins = {};
435345
435450
  __export(exports_reload_plugins, {
435346
- call: () => call83
435451
+ call: () => call84
435347
435452
  });
435348
435453
  function n(count3, noun) {
435349
435454
  return `${count3} ${plural(count3, noun)}`;
435350
435455
  }
435351
- var call83 = async (_args, context7) => {
435456
+ var call84 = async (_args, context7) => {
435352
435457
  if (false) {}
435353
435458
  const r = await refreshActivePlugins(context7.setAppState);
435354
435459
  const parts = [
@@ -435391,9 +435496,9 @@ var init_reload_plugins2 = __esm(() => {
435391
435496
  // src/commands/rewind/rewind.ts
435392
435497
  var exports_rewind = {};
435393
435498
  __export(exports_rewind, {
435394
- call: () => call84
435499
+ call: () => call85
435395
435500
  });
435396
- async function call84(_args, context7) {
435501
+ async function call85(_args, context7) {
435397
435502
  if (context7.openMessageSelector) {
435398
435503
  context7.openMessageSelector();
435399
435504
  }
@@ -435508,7 +435613,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435508
435613
  smapsRollup,
435509
435614
  platform: process.platform,
435510
435615
  nodeVersion: process.version,
435511
- ccVersion: "1.9.0"
435616
+ ccVersion: "1.9.8"
435512
435617
  };
435513
435618
  }
435514
435619
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -435578,9 +435683,9 @@ var init_heapDumpService = __esm(() => {
435578
435683
  // src/commands/heapdump/heapdump.ts
435579
435684
  var exports_heapdump = {};
435580
435685
  __export(exports_heapdump, {
435581
- call: () => call85
435686
+ call: () => call86
435582
435687
  });
435583
- async function call85() {
435688
+ async function call86() {
435584
435689
  const result = await performHeapDump();
435585
435690
  if (!result.success) {
435586
435691
  return {
@@ -435951,7 +436056,7 @@ var USAGE = `/bridge-kick <subcommand>
435951
436056
  reconnect-session fail next POST /bridge/reconnect fails
435952
436057
  heartbeat <status> next heartbeat throws BridgeFatalError(status)
435953
436058
  reconnect call reconnectEnvironmentWithSession directly
435954
- status print bridge state`, call86 = async (args) => {
436059
+ status print bridge state`, call87 = async (args) => {
435955
436060
  const h = getBridgeDebugHandle();
435956
436061
  if (!h) {
435957
436062
  return {
@@ -436084,16 +436189,16 @@ var init_bridge_kick = __esm(() => {
436084
436189
  description: "Inject bridge failure states for manual recovery testing",
436085
436190
  isEnabled: () => process.env.USER_TYPE === "ant",
436086
436191
  supportsNonInteractive: false,
436087
- load: () => Promise.resolve({ call: call86 })
436192
+ load: () => Promise.resolve({ call: call87 })
436088
436193
  };
436089
436194
  bridge_kick_default = bridgeKick;
436090
436195
  });
436091
436196
 
436092
436197
  // src/commands/version.ts
436093
- var call87 = async () => {
436198
+ var call88 = async () => {
436094
436199
  return {
436095
436200
  type: "text",
436096
- value: `${"1.9.0"} (built ${"2026-05-07T17:47:00.138Z"})`
436201
+ value: `${"1.9.8"} (built ${"2026-05-07T19:50:53.354Z"})`
436097
436202
  };
436098
436203
  }, version, version_default;
436099
436204
  var init_version = __esm(() => {
@@ -436103,7 +436208,7 @@ var init_version = __esm(() => {
436103
436208
  description: "Print the version this session is running (not what autoupdate downloaded)",
436104
436209
  isEnabled: () => process.env.USER_TYPE === "ant",
436105
436210
  supportsNonInteractive: true,
436106
- load: () => Promise.resolve({ call: call87 })
436211
+ load: () => Promise.resolve({ call: call88 })
436107
436212
  };
436108
436213
  version_default = version;
436109
436214
  });
@@ -437259,10 +437364,10 @@ var init_SandboxSettings = __esm(() => {
437259
437364
  // src/commands/sandbox-toggle/sandbox-toggle.tsx
437260
437365
  var exports_sandbox_toggle = {};
437261
437366
  __export(exports_sandbox_toggle, {
437262
- call: () => call88
437367
+ call: () => call89
437263
437368
  });
437264
437369
  import { relative as relative27 } from "path";
437265
- async function call88(onDone, _context, args) {
437370
+ async function call89(onDone, _context, args) {
437266
437371
  const settings = getSettings_DEPRECATED();
437267
437372
  const themeName = settings.theme || "light";
437268
437373
  const platform3 = getPlatform();
@@ -437367,7 +437472,7 @@ var init_sandbox_toggle2 = __esm(() => {
437367
437472
  });
437368
437473
 
437369
437474
  // src/commands/advisor.ts
437370
- var call89 = async (args, context7) => {
437475
+ var call90 = async (args, context7) => {
437371
437476
  const arg = args.trim().toLowerCase();
437372
437477
  const baseModel = parseUserSpecifiedModel(context7.getAppState().mainLoopModel ?? getDefaultMainLoopModelSetting());
437373
437478
  if (!arg) {
@@ -437453,7 +437558,7 @@ var init_advisor2 = __esm(() => {
437453
437558
  return !canUserConfigureAdvisor();
437454
437559
  },
437455
437560
  supportsNonInteractive: true,
437456
- load: () => Promise.resolve({ call: call89 })
437561
+ load: () => Promise.resolve({ call: call90 })
437457
437562
  };
437458
437563
  advisor_default = advisor;
437459
437564
  });
@@ -437865,12 +437970,12 @@ var init_ExitFlow = __esm(() => {
437865
437970
  // src/commands/exit/exit.tsx
437866
437971
  var exports_exit = {};
437867
437972
  __export(exports_exit, {
437868
- call: () => call90
437973
+ call: () => call91
437869
437974
  });
437870
437975
  function getRandomGoodbyeMessage2() {
437871
437976
  return sample_default(GOODBYE_MESSAGES2) ?? "Goodbye!";
437872
437977
  }
437873
- async function call90(onDone) {
437978
+ async function call91(onDone) {
437874
437979
  if (false) {}
437875
437980
  const showWorktree = getCurrentWorktreeSession() !== null;
437876
437981
  if (showWorktree) {
@@ -438164,7 +438269,7 @@ var exports_export = {};
438164
438269
  __export(exports_export, {
438165
438270
  sanitizeFilename: () => sanitizeFilename,
438166
438271
  extractFirstPrompt: () => extractFirstPrompt,
438167
- call: () => call91
438272
+ call: () => call92
438168
438273
  });
438169
438274
  import { join as join144 } from "path";
438170
438275
  function formatTimestamp(date2) {
@@ -438205,7 +438310,7 @@ async function exportWithReactRenderer(context7) {
438205
438310
  const tools = context7.options.tools || [];
438206
438311
  return renderMessagesToPlainText(context7.messages, tools);
438207
438312
  }
438208
- async function call91(onDone, context7, args) {
438313
+ async function call92(onDone, context7, args) {
438209
438314
  const content = await exportWithReactRenderer(context7);
438210
438315
  const filename = args.trim();
438211
438316
  if (filename) {
@@ -438265,7 +438370,7 @@ var init_export2 = __esm(() => {
438265
438370
  // src/commands/model/model.tsx
438266
438371
  var exports_model2 = {};
438267
438372
  __export(exports_model2, {
438268
- call: () => call92
438373
+ call: () => call93
438269
438374
  });
438270
438375
  function ModelPickerWrapper(t0) {
438271
438376
  const $2 = c3(17);
@@ -438513,7 +438618,7 @@ function renderModelLabel(model) {
438513
438618
  const rendered = renderDefaultModelSetting(model ?? getDefaultMainLoopModelSetting());
438514
438619
  return model === null ? `${rendered} (default)` : rendered;
438515
438620
  }
438516
- var React116, jsx_dev_runtime352, call92 = async (onDone, _context, args) => {
438621
+ var React116, jsx_dev_runtime352, call93 = async (onDone, _context, args) => {
438517
438622
  args = args?.trim() || "";
438518
438623
  if (COMMON_INFO_ARGS.includes(args)) {
438519
438624
  logEvent("tengu_model_command_inline_help", {
@@ -438580,7 +438685,7 @@ var init_model3 = __esm(() => {
438580
438685
  // src/commands/tag/tag.tsx
438581
438686
  var exports_tag = {};
438582
438687
  __export(exports_tag, {
438583
- call: () => call93
438688
+ call: () => call94
438584
438689
  });
438585
438690
  function ConfirmRemoveTag(t0) {
438586
438691
  const $2 = c3(11);
@@ -438804,7 +438909,7 @@ Examples:
438804
438909
  React117.useEffect(t1, t2);
438805
438910
  return null;
438806
438911
  }
438807
- async function call93(onDone, _context, args) {
438912
+ async function call94(onDone, _context, args) {
438808
438913
  args = args?.trim() || "";
438809
438914
  if (COMMON_INFO_ARGS.includes(args) || COMMON_HELP_ARGS.includes(args)) {
438810
438915
  return /* @__PURE__ */ jsx_dev_runtime353.jsxDEV(ShowHelp, {
@@ -438851,9 +438956,9 @@ var init_tag2 = __esm(() => {
438851
438956
  // src/commands/output-style/output-style.tsx
438852
438957
  var exports_output_style = {};
438853
438958
  __export(exports_output_style, {
438854
- call: () => call94
438959
+ call: () => call95
438855
438960
  });
438856
- async function call94(onDone) {
438961
+ async function call95(onDone) {
438857
438962
  onDone("/output-style has been deprecated. Use /config to change your output style, or set it in your settings file. Changes take effect on the next session.", {
438858
438963
  display: "system"
438859
438964
  });
@@ -438875,7 +438980,7 @@ var init_output_style = __esm(() => {
438875
438980
  // src/commands/provider/provider.tsx
438876
438981
  var exports_provider = {};
438877
438982
  __export(exports_provider, {
438878
- call: () => call95
438983
+ call: () => call96
438879
438984
  });
438880
438985
  function formatProviderSavedMessage(config2) {
438881
438986
  const providerLabel = getLocalLLMProviderLabel(config2.provider);
@@ -438889,7 +438994,7 @@ function formatProviderSavedMessage(config2) {
438889
438994
  ].join(`
438890
438995
  `);
438891
438996
  }
438892
- var jsx_dev_runtime354, call95 = async (onDone) => {
438997
+ var jsx_dev_runtime354, call96 = async (onDone) => {
438893
438998
  const config2 = getGlobalConfig();
438894
438999
  function handleComplete(nextConfig) {
438895
439000
  saveGlobalConfig((current) => ({
@@ -439445,9 +439550,9 @@ var init_RemoteEnvironmentDialog = __esm(() => {
439445
439550
  // src/commands/remote-env/remote-env.tsx
439446
439551
  var exports_remote_env = {};
439447
439552
  __export(exports_remote_env, {
439448
- call: () => call96
439553
+ call: () => call97
439449
439554
  });
439450
- async function call96(onDone) {
439555
+ async function call97(onDone) {
439451
439556
  return /* @__PURE__ */ jsx_dev_runtime356.jsxDEV(RemoteEnvironmentDialog, {
439452
439557
  onDone
439453
439558
  }, undefined, false, undefined, this);
@@ -439527,7 +439632,7 @@ var exports_effort = {};
439527
439632
  __export(exports_effort, {
439528
439633
  showCurrentEffort: () => showCurrentEffort,
439529
439634
  executeEffort: () => executeEffort,
439530
- call: () => call97
439635
+ call: () => call98
439531
439636
  });
439532
439637
  function setEffortValue(effortValue) {
439533
439638
  const persistable = toPersistableEffort(effortValue);
@@ -439678,7 +439783,7 @@ function ApplyEffortAndClose(t0) {
439678
439783
  React118.useEffect(t1, t2);
439679
439784
  return null;
439680
439785
  }
439681
- async function call97(onDone, _context, args) {
439786
+ async function call98(onDone, _context, args) {
439682
439787
  args = args?.trim() || "";
439683
439788
  if (COMMON_HELP_ARGS2.includes(args)) {
439684
439789
  onDone(`Usage: /effort [low|medium|high|max|auto]
@@ -442510,9 +442615,9 @@ var init_Stats = __esm(() => {
442510
442615
  // src/commands/stats/stats.tsx
442511
442616
  var exports_stats = {};
442512
442617
  __export(exports_stats, {
442513
- call: () => call98
442618
+ call: () => call99
442514
442619
  });
442515
- var jsx_dev_runtime359, call98 = async (onDone) => {
442620
+ var jsx_dev_runtime359, call99 = async (onDone) => {
442516
442621
  return /* @__PURE__ */ jsx_dev_runtime359.jsxDEV(Stats2, {
442517
442622
  onClose: onDone
442518
442623
  }, undefined, false, undefined, this);
@@ -444037,7 +444142,7 @@ function generateHtmlReport(data, insights) {
444037
444142
  </html>`;
444038
444143
  }
444039
444144
  function buildExportData(data, insights, facets, remoteStats) {
444040
- const version2 = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
444145
+ const version2 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
444041
444146
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444042
444147
  const facets_summary = {
444043
444148
  total: facets.size,
@@ -444980,6 +445085,7 @@ var init_commands2 = __esm(() => {
444980
445085
  init_buddy2();
444981
445086
  init_images2();
444982
445087
  init_image_pipeline2();
445088
+ init_image_tips();
444983
445089
  init_keepgoing2();
444984
445090
  init_telegram2();
444985
445091
  init_slack2();
@@ -445193,6 +445299,7 @@ var init_commands2 = __esm(() => {
445193
445299
  buddy_default,
445194
445300
  images_default,
445195
445301
  image_pipeline_default,
445302
+ image_tips_default,
445196
445303
  telegram_default,
445197
445304
  slack_default,
445198
445305
  discord_default,
@@ -448238,7 +448345,7 @@ var init_sessionStorage = __esm(() => {
448238
448345
  init_settings2();
448239
448346
  init_slowOperations();
448240
448347
  init_uuid();
448241
- VERSION6 = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
448348
+ VERSION6 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
448242
448349
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448243
448350
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448244
448351
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -448569,7 +448676,7 @@ var init_agentMemory = __esm(() => {
448569
448676
 
448570
448677
  // src/utils/permissions/filesystem.ts
448571
448678
  import { randomBytes as randomBytes20 } from "crypto";
448572
- import { homedir as homedir35, tmpdir as tmpdir10 } from "os";
448679
+ import { homedir as homedir33, tmpdir as tmpdir10 } from "os";
448573
448680
  import { join as join151, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
448574
448681
  function normalizeCaseForComparison(path15) {
448575
448682
  return path15.toLowerCase();
@@ -448583,7 +448690,7 @@ function getClaudeSkillScope(filePath) {
448583
448690
  prefix: "/.claude/skills/"
448584
448691
  },
448585
448692
  {
448586
- dir: expandPath(join151(homedir35(), ".claude", "skills")),
448693
+ dir: expandPath(join151(homedir33(), ".claude", "skills")),
448587
448694
  prefix: "~/.claude/skills/"
448588
448695
  }
448589
448696
  ];
@@ -448897,7 +449004,7 @@ function patternWithRoot(pattern, source) {
448897
449004
  } else if (pattern.startsWith(`~${DIR_SEP}`)) {
448898
449005
  return {
448899
449006
  relativePattern: pattern.slice(1),
448900
- root: homedir35().normalize("NFC")
449007
+ root: homedir33().normalize("NFC")
448901
449008
  };
448902
449009
  } else if (pattern.startsWith(DIR_SEP)) {
448903
449010
  return {
@@ -449439,7 +449546,7 @@ var init_filesystem = __esm(() => {
449439
449546
  });
449440
449547
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
449441
449548
  const nonce = randomBytes20(16).toString("hex");
449442
- return join151(getClaudeTempDir(), "bundled-skills", "1.9.0", nonce);
449549
+ return join151(getClaudeTempDir(), "bundled-skills", "1.9.8", nonce);
449443
449550
  });
449444
449551
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
449445
449552
  });
@@ -457106,7 +457213,7 @@ __export(exports_upstreamproxy, {
457106
457213
  SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
457107
457214
  });
457108
457215
  import { mkdir as mkdir60, readFile as readFile67, unlink as unlink24, writeFile as writeFile60 } from "fs/promises";
457109
- import { homedir as homedir36 } from "os";
457216
+ import { homedir as homedir34 } from "os";
457110
457217
  import { join as join154 } from "path";
457111
457218
  async function initUpstreamProxy(opts) {
457112
457219
  if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
@@ -457128,7 +457235,7 @@ async function initUpstreamProxy(opts) {
457128
457235
  }
457129
457236
  setNonDumpable();
457130
457237
  const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
457131
- const caBundlePath = opts?.caBundlePath ?? join154(homedir36(), ".ccr", "ca-bundle.crt");
457238
+ const caBundlePath = opts?.caBundlePath ?? join154(homedir34(), ".ccr", "ca-bundle.crt");
457132
457239
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
457133
457240
  if (!caOk)
457134
457241
  return state;
@@ -458676,7 +458783,7 @@ function buildSystemInitMessage(inputs) {
458676
458783
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458677
458784
  apiKeySource: getAnthropicApiKeyWithSource().source,
458678
458785
  betas: getSdkBetas(),
458679
- claude_code_version: "1.9.0",
458786
+ claude_code_version: "1.9.8",
458680
458787
  output_style: outputStyle2,
458681
458788
  agents: inputs.agents.map((agent) => agent.agentType),
458682
458789
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -465034,7 +465141,7 @@ var init_ShowInIDEPrompt = __esm(() => {
465034
465141
  });
465035
465142
 
465036
465143
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
465037
- import { homedir as homedir37 } from "os";
465144
+ import { homedir as homedir35 } from "os";
465038
465145
  import { basename as basename47, join as join155, sep as sep33 } from "path";
465039
465146
  function isInClaudeFolder(filePath) {
465040
465147
  const absolutePath = expandPath(filePath);
@@ -465045,7 +465152,7 @@ function isInClaudeFolder(filePath) {
465045
465152
  }
465046
465153
  function isInGlobalClaudeFolder(filePath) {
465047
465154
  const absolutePath = expandPath(filePath);
465048
- const globalClaudeFolderPath = join155(homedir37(), ".claude");
465155
+ const globalClaudeFolderPath = join155(homedir35(), ".claude");
465049
465156
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
465050
465157
  const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison(globalClaudeFolderPath);
465051
465158
  return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
@@ -472833,7 +472940,7 @@ var init_useVoiceEnabled = __esm(() => {
472833
472940
  function getSemverPart(version2) {
472834
472941
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
472835
472942
  }
472836
- function useUpdateNotification(updatedVersion, initialVersion = "1.9.0") {
472943
+ function useUpdateNotification(updatedVersion, initialVersion = "1.9.8") {
472837
472944
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
472838
472945
  if (!updatedVersion) {
472839
472946
  return null;
@@ -472873,7 +472980,7 @@ function AutoUpdater({
472873
472980
  return;
472874
472981
  }
472875
472982
  if (false) {}
472876
- const currentVersion = "1.9.0";
472983
+ const currentVersion = "1.9.8";
472877
472984
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472878
472985
  let latestVersion = await getLatestVersion(channel);
472879
472986
  const isDisabled = isAutoUpdaterDisabled();
@@ -473084,12 +473191,12 @@ function NativeAutoUpdater({
473084
473191
  logEvent("tengu_native_auto_updater_start", {});
473085
473192
  try {
473086
473193
  const maxVersion = await getMaxVersion();
473087
- if (maxVersion && gt("1.9.0", maxVersion)) {
473194
+ if (maxVersion && gt("1.9.8", maxVersion)) {
473088
473195
  const msg = await getMaxVersionMessage();
473089
473196
  setMaxVersionIssue(msg ?? "affects your version");
473090
473197
  }
473091
473198
  const result = await installLatest(channel);
473092
- const currentVersion = "1.9.0";
473199
+ const currentVersion = "1.9.8";
473093
473200
  const latencyMs = Date.now() - startTime;
473094
473201
  if (result.lockFailed) {
473095
473202
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473224,17 +473331,17 @@ function PackageManagerAutoUpdater(t0) {
473224
473331
  const maxVersion = await getMaxVersion();
473225
473332
  if (maxVersion && latest && gt(latest, maxVersion)) {
473226
473333
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473227
- if (gte("1.9.0", maxVersion)) {
473228
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
473334
+ if (gte("1.9.8", maxVersion)) {
473335
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
473229
473336
  setUpdateAvailable(false);
473230
473337
  return;
473231
473338
  }
473232
473339
  latest = maxVersion;
473233
473340
  }
473234
- const hasUpdate = latest && !gte("1.9.0", latest) && !shouldSkipVersion(latest);
473341
+ const hasUpdate = latest && !gte("1.9.8", latest) && !shouldSkipVersion(latest);
473235
473342
  setUpdateAvailable(!!hasUpdate);
473236
473343
  if (hasUpdate) {
473237
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.0"} -> ${latest}`);
473344
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.8"} -> ${latest}`);
473238
473345
  }
473239
473346
  };
473240
473347
  $2[0] = t1;
@@ -473268,7 +473375,7 @@ function PackageManagerAutoUpdater(t0) {
473268
473375
  wrap: "truncate",
473269
473376
  children: [
473270
473377
  "currentVersion: ",
473271
- "1.9.0"
473378
+ "1.9.8"
473272
473379
  ]
473273
473380
  }, undefined, true, undefined, this);
473274
473381
  $2[3] = verbose;
@@ -480828,7 +480935,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
480828
480935
  project_dir: getOriginalCwd(),
480829
480936
  added_dirs: addedDirs
480830
480937
  },
480831
- version: "1.9.0",
480938
+ version: "1.9.8",
480832
480939
  output_style: {
480833
480940
  name: outputStyleName
480834
480941
  },
@@ -487172,7 +487279,7 @@ var init_cacache = __esm(() => {
487172
487279
 
487173
487280
  // src/utils/cleanup.ts
487174
487281
  import * as fs5 from "fs/promises";
487175
- import { homedir as homedir38 } from "os";
487282
+ import { homedir as homedir36 } from "os";
487176
487283
  import { join as join156 } from "path";
487177
487284
  function getCutoffDate() {
487178
487285
  const settings = getSettings_DEPRECATED() || {};
@@ -487473,7 +487580,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
487473
487580
  return;
487474
487581
  }
487475
487582
  logForDebugging("npm cache cleanup: starting");
487476
- const npmCachePath = join156(homedir38(), ".npm", "_cacache");
487583
+ const npmCachePath = join156(homedir36(), ".npm", "_cacache");
487477
487584
  const NPM_CACHE_RETENTION_COUNT = 5;
487478
487585
  const startTime = Date.now();
487479
487586
  try {
@@ -492400,7 +492507,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
492400
492507
  } catch {}
492401
492508
  const data = {
492402
492509
  trigger,
492403
- version: "1.9.0",
492510
+ version: "1.9.8",
492404
492511
  platform: process.platform,
492405
492512
  transcript,
492406
492513
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -504197,7 +504304,7 @@ var exports_TrustDialog = {};
504197
504304
  __export(exports_TrustDialog, {
504198
504305
  TrustDialog: () => TrustDialog
504199
504306
  });
504200
- import { homedir as homedir39 } from "os";
504307
+ import { homedir as homedir37 } from "os";
504201
504308
  function TrustDialog({ onDone }) {
504202
504309
  const [focusIdx, setFocusIdx] = import_react307.useState(0);
504203
504310
  const doneRef = import_react307.useRef(false);
@@ -504215,7 +504322,7 @@ function TrustDialog({ onDone }) {
504215
504322
  gracefulShutdownSync(1);
504216
504323
  } else {
504217
504324
  try {
504218
- if (homedir39() !== getCwd()) {
504325
+ if (homedir37() !== getCwd()) {
504219
504326
  try {
504220
504327
  saveCurrentProjectConfig((c5) => ({ ...c5, hasTrustDialogAccepted: true }));
504221
504328
  } catch {}
@@ -509309,7 +509416,7 @@ function appendToLog(path17, message) {
509309
509416
  cwd: getFsImplementation().cwd(),
509310
509417
  userType: process.env.USER_TYPE,
509311
509418
  sessionId: getSessionId(),
509312
- version: "1.9.0"
509419
+ version: "1.9.8"
509313
509420
  };
509314
509421
  getLogWriter(path17).write(messageWithTimestamp);
509315
509422
  }
@@ -509614,7 +509721,7 @@ var init_sessionMemory = __esm(() => {
509614
509721
 
509615
509722
  // src/utils/iTermBackup.ts
509616
509723
  import { copyFile as copyFile11, stat as stat56 } from "fs/promises";
509617
- import { homedir as homedir40 } from "os";
509724
+ import { homedir as homedir38 } from "os";
509618
509725
  import { join as join164 } from "path";
509619
509726
  function markITerm2SetupComplete() {
509620
509727
  saveGlobalConfig((current) => ({
@@ -509630,7 +509737,7 @@ function getIterm2RecoveryInfo() {
509630
509737
  };
509631
509738
  }
509632
509739
  function getITerm2PlistPath() {
509633
- return join164(homedir40(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509740
+ return join164(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509634
509741
  }
509635
509742
  async function checkAndRestoreITerm2Backup() {
509636
509743
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -513333,8 +513440,8 @@ async function getEnvLessBridgeConfig() {
513333
513440
  }
513334
513441
  async function checkEnvLessBridgeMinVersion() {
513335
513442
  const cfg = await getEnvLessBridgeConfig();
513336
- if (cfg.min_version && lt("1.9.0", cfg.min_version)) {
513337
- return `Your version of localclawd (${"1.9.0"}) is too old for Remote Control.
513443
+ if (cfg.min_version && lt("1.9.8", cfg.min_version)) {
513444
+ return `Your version of localclawd (${"1.9.8"}) is too old for Remote Control.
513338
513445
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
513339
513446
  }
513340
513447
  return null;
@@ -513806,7 +513913,7 @@ async function initBridgeCore(params) {
513806
513913
  const rawApi = createBridgeApiClient({
513807
513914
  baseUrl,
513808
513915
  getAccessToken,
513809
- runnerVersion: "1.9.0",
513916
+ runnerVersion: "1.9.8",
513810
513917
  onDebug: logForDebugging,
513811
513918
  onAuth401,
513812
513919
  getTrustedDeviceToken
@@ -519525,7 +519632,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
519525
519632
  setCwd(cwd3);
519526
519633
  const server = new Server({
519527
519634
  name: "claude/tengu",
519528
- version: "1.9.0"
519635
+ version: "1.9.8"
519529
519636
  }, {
519530
519637
  capabilities: {
519531
519638
  tools: {}
@@ -519656,7 +519763,7 @@ __export(exports_appDesktop, {
519656
519763
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
519657
519764
  });
519658
519765
  import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
519659
- import { homedir as homedir41 } from "os";
519766
+ import { homedir as homedir39 } from "os";
519660
519767
  import { join as join168 } from "path";
519661
519768
  async function getClaudeDesktopConfigPath() {
519662
519769
  const platform3 = getPlatform();
@@ -519664,7 +519771,7 @@ async function getClaudeDesktopConfigPath() {
519664
519771
  throw new Error(`Unsupported platform: ${platform3} - desktop app integration only works on macOS and WSL.`);
519665
519772
  }
519666
519773
  if (platform3 === "macos") {
519667
- return join168(homedir41(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519774
+ return join168(homedir39(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519668
519775
  }
519669
519776
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
519670
519777
  if (windowsHome) {
@@ -520606,7 +520713,7 @@ function WelcomeLogo() {
520606
520713
  dimColor: true,
520607
520714
  children: [
520608
520715
  "v",
520609
- "1.9.0"
520716
+ "1.9.8"
520610
520717
  ]
520611
520718
  }, undefined, true, undefined, this)
520612
520719
  ]
@@ -520797,7 +520904,7 @@ __export(exports_update, {
520797
520904
  });
520798
520905
  async function update() {
520799
520906
  logEvent("tengu_update_check", {});
520800
- writeToStdout(`Current version: ${"1.9.0"}
520907
+ writeToStdout(`Current version: ${"1.9.8"}
520801
520908
  `);
520802
520909
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520803
520910
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520872,8 +520979,8 @@ async function update() {
520872
520979
  writeToStdout(`localclawd is managed by Homebrew.
520873
520980
  `);
520874
520981
  const latest = await getLatestVersion(channel);
520875
- if (latest && !gte("1.9.0", latest)) {
520876
- writeToStdout(`Update available: ${"1.9.0"} → ${latest}
520982
+ if (latest && !gte("1.9.8", latest)) {
520983
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520877
520984
  `);
520878
520985
  writeToStdout(`
520879
520986
  `);
@@ -520889,8 +520996,8 @@ async function update() {
520889
520996
  writeToStdout(`localclawd is managed by winget.
520890
520997
  `);
520891
520998
  const latest = await getLatestVersion(channel);
520892
- if (latest && !gte("1.9.0", latest)) {
520893
- writeToStdout(`Update available: ${"1.9.0"} → ${latest}
520999
+ if (latest && !gte("1.9.8", latest)) {
521000
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520894
521001
  `);
520895
521002
  writeToStdout(`
520896
521003
  `);
@@ -520904,8 +521011,8 @@ async function update() {
520904
521011
  writeToStdout(`localclawd is managed by apk.
520905
521012
  `);
520906
521013
  const latest = await getLatestVersion(channel);
520907
- if (latest && !gte("1.9.0", latest)) {
520908
- writeToStdout(`Update available: ${"1.9.0"} → ${latest}
521014
+ if (latest && !gte("1.9.8", latest)) {
521015
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520909
521016
  `);
520910
521017
  writeToStdout(`
520911
521018
  `);
@@ -520970,11 +521077,11 @@ async function update() {
520970
521077
  `);
520971
521078
  await gracefulShutdown(1);
520972
521079
  }
520973
- if (result.latestVersion === "1.9.0") {
520974
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.0"})`) + `
521080
+ if (result.latestVersion === "1.9.8") {
521081
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
520975
521082
  `);
520976
521083
  } else {
520977
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.0"} to version ${result.latestVersion}`) + `
521084
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${result.latestVersion}`) + `
520978
521085
  `);
520979
521086
  await regenerateCompletionCache();
520980
521087
  }
@@ -521034,12 +521141,12 @@ async function update() {
521034
521141
  `);
521035
521142
  await gracefulShutdown(1);
521036
521143
  }
521037
- if (latestVersion === "1.9.0") {
521038
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.0"})`) + `
521144
+ if (latestVersion === "1.9.8") {
521145
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
521039
521146
  `);
521040
521147
  await gracefulShutdown(0);
521041
521148
  }
521042
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.0"})
521149
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.8"})
521043
521150
  `);
521044
521151
  writeToStdout(`Installing update...
521045
521152
  `);
@@ -521084,7 +521191,7 @@ async function update() {
521084
521191
  logForDebugging(`update: Installation status: ${status2}`);
521085
521192
  switch (status2) {
521086
521193
  case "success":
521087
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.0"} to version ${latestVersion}`) + `
521194
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${latestVersion}`) + `
521088
521195
  `);
521089
521196
  await regenerateCompletionCache();
521090
521197
  break;
@@ -522326,7 +522433,7 @@ Run with --debug for more details.
522326
522433
  }
522327
522434
  }
522328
522435
  logForDiagnosticsNoPII("info", "started", {
522329
- version: "1.9.0",
522436
+ version: "1.9.8",
522330
522437
  is_native_binary: isInBundledMode()
522331
522438
  });
522332
522439
  registerCleanup(async () => {
@@ -523110,7 +523217,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523110
523217
  pendingHookMessages
523111
523218
  }, renderAndRun);
523112
523219
  }
523113
- }).version("1.9.0 (localclawd)", "-v, --version", "Output the version number");
523220
+ }).version("1.9.8 (localclawd)", "-v, --version", "Output the version number");
523114
523221
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523115
523222
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523116
523223
  if (canUserConfigureAdvisor()) {
@@ -523624,7 +523731,7 @@ if (false) {}
523624
523731
  async function main2() {
523625
523732
  const args = process.argv.slice(2);
523626
523733
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523627
- console.log(`${"1.9.0"} (localclawd)`);
523734
+ console.log(`${"1.9.8"} (localclawd)`);
523628
523735
  return;
523629
523736
  }
523630
523737
  const {
@@ -523707,4 +523814,4 @@ localclawd crashed: ${msg}
523707
523814
  process.exit(1);
523708
523815
  });
523709
523816
 
523710
- //# debugId=40FDF2E96DA5BCD764756E2164756E21
523817
+ //# debugId=F0B21E147347D4CC64756E2164756E21