localclawd 1.9.1 → 1.9.9

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 +747 -605
  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.1"}`;
87611
+ return `claude-code/${"1.9.9"}`;
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.1"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.9.9"} (${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.1"}${suffix}`;
87647
+ return `claude-code/${"1.9.9"}${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.1"}.${fingerprint}`;
130843
+ const version = `${"1.9.9"}.${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.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.9.9".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.1",
147072
+ version: "1.9.9",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T18:03:44.736Z",
147074
+ buildTime: "2026-05-07T20:02:04.277Z",
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.1";
179650
+ attributes["app.version"] = "1.9.9";
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.1";
242454
+ return "1.9.9";
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.1",
247728
+ version: "1.9.9",
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.1",
248070
+ version: "1.9.9",
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.1");
262472
+ return computeFingerprint(firstMessageText, "1.9.9");
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.1");
262514
+ const fingerprint = computeFingerprint(messageText, "1.9.9");
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.1",
283262
+ appVersion: "1.9.9",
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.1");
284327
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.9");
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.1"
284367
+ [ATTR_SERVICE_VERSION4]: "1.9.9"
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.1");
284412
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.9");
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.1");
284432
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.9");
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.1");
284494
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.9.9");
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.1" : "unknown";
285684
+ const version = typeof MACRO !== "undefined" ? "1.9.9" : "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.1", maxVersion)) {
286623
- logForDebugging(`Native installer: current version ${"1.9.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
286625
+ if (gte("1.9.9", maxVersion)) {
286626
+ logForDebugging(`Native installer: current version ${"1.9.9"} 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.1" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286637
+ if (!forceReinstall && version === "1.9.9" && 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",
@@ -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);
@@ -323424,12 +323335,10 @@ var init_GenerateImageTool = __esm(() => {
323424
323335
  rawBytes = Buffer.from(await res.arrayBuffer());
323425
323336
  }
323426
323337
  } catch {}
323427
- const projectGenDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated");
323428
- const useProjectDir = await access6(projectGenDir).then(() => true).catch(() => false);
323429
- const outputDir = useProjectDir ? projectGenDir : join80(homedir23(), "generatedimages");
323338
+ const outputDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
323430
323339
  await mkdir20(outputDir, { recursive: true });
323431
323340
  const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
323432
- const savedPath = join80(outputDir, outName);
323341
+ const savedPath = join80(outputDir, outName).replace(/\\/g, "/");
323433
323342
  if (rawBytes) {
323434
323343
  await writeFile20(savedPath, rawBytes);
323435
323344
  }
@@ -331926,7 +331835,7 @@ function getAnthropicEnvMetadata() {
331926
331835
  function getBuildAgeMinutes() {
331927
331836
  if (false)
331928
331837
  ;
331929
- const buildTime = new Date("2026-05-07T18:03:44.736Z").getTime();
331838
+ const buildTime = new Date("2026-05-07T20:02:04.277Z").getTime();
331930
331839
  if (isNaN(buildTime))
331931
331840
  return;
331932
331841
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -342786,7 +342695,7 @@ var init_FileReadTool = __esm(() => {
342786
342695
  }
342787
342696
  const similarFilename = findSimilarFile(fullFilePath);
342788
342697
  const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
342789
- 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, "/")}.`;
342790
342699
  if (cwdSuggestion) {
342791
342700
  message += ` Did you mean ${cwdSuggestion}?`;
342792
342701
  } else if (similarFilename) {
@@ -350961,7 +350870,9 @@ Focus text output on:
350961
350870
  - High-level status updates at natural milestones
350962
350871
  - Errors or blockers that change the plan
350963
350872
 
350964
- 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."`;
350965
350876
  }
350966
350877
  function getSimpleToneAndStyleSection() {
350967
350878
  const items = [
@@ -350979,7 +350890,7 @@ async function getSystemPrompt(tools, model, additionalWorkingDirectories, mcpCl
350979
350890
  return [
350980
350891
  `You are localclawd, a local-first coding CLI running against user-controlled models.
350981
350892
 
350982
- CWD: ${getCwd()}
350893
+ CWD: ${getCwd().replace(/\\/g, "/")}
350983
350894
  Date: ${getSessionStartDate()}`
350984
350895
  ];
350985
350896
  }
@@ -351057,7 +350968,7 @@ async function computeEnvInfo(modelId, additionalWorkingDirectories) {
351057
350968
  Assistant knowledge cutoff is ${cutoff}.` : "";
351058
350969
  return `Here is useful information about the environment you are running in:
351059
350970
  <env>
351060
- Working directory: ${getCwd()}
350971
+ Working directory: ${getCwd().replace(/\\/g, "/")}
351061
350972
  Is directory a git repo: ${isGit ? "Yes" : "No"}
351062
350973
  ${additionalDirsInfo}Platform: ${env3.platform}
351063
350974
  ${getShellInfoLine()}
@@ -351074,7 +350985,7 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
351074
350985
  }
351075
350986
  const cutoff = getKnowledgeCutoff(modelId);
351076
350987
  const knowledgeCutoffMessage = cutoff ? `Assistant knowledge cutoff is ${cutoff}.` : null;
351077
- const cwd2 = getCwd();
350988
+ const cwd2 = getCwd().replace(/\\/g, "/");
351078
350989
  const isWorktree = getCurrentWorktreeSession() !== null;
351079
350990
  const envItems = [
351080
350991
  `Primary working directory: ${cwd2}`,
@@ -356012,7 +355923,7 @@ var init_projectOnboardingState = __esm(() => {
356012
355923
 
356013
355924
  // src/utils/appleTerminalBackup.ts
356014
355925
  import { stat as stat35 } from "fs/promises";
356015
- import { homedir as homedir24 } from "os";
355926
+ import { homedir as homedir23 } from "os";
356016
355927
  import { join as join101 } from "path";
356017
355928
  function markTerminalSetupInProgress(backupPath) {
356018
355929
  saveGlobalConfig((current) => ({
@@ -356035,7 +355946,7 @@ function getTerminalRecoveryInfo() {
356035
355946
  };
356036
355947
  }
356037
355948
  function getTerminalPlistPath() {
356038
- return join101(homedir24(), "Library", "Preferences", "com.apple.Terminal.plist");
355949
+ return join101(homedir23(), "Library", "Preferences", "com.apple.Terminal.plist");
356039
355950
  }
356040
355951
  async function backupTerminalPreferences() {
356041
355952
  const terminalPlistPath = getTerminalPlistPath();
@@ -356106,11 +356017,11 @@ var init_appleTerminalBackup = __esm(() => {
356106
356017
  });
356107
356018
 
356108
356019
  // src/utils/completionCache.ts
356109
- import { homedir as homedir25 } from "os";
356020
+ import { homedir as homedir24 } from "os";
356110
356021
  import { dirname as dirname43, join as join102 } from "path";
356111
356022
  function detectShell() {
356112
356023
  const shell = process.env.SHELL || "";
356113
- const home = homedir25();
356024
+ const home = homedir24();
356114
356025
  const claudeDir = join102(home, ".claude");
356115
356026
  if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
356116
356027
  const cacheFile = join102(claudeDir, "completion.zsh");
@@ -356186,7 +356097,7 @@ __export(exports_terminalSetup, {
356186
356097
  });
356187
356098
  import { randomBytes as randomBytes15 } from "crypto";
356188
356099
  import { copyFile as copyFile8, mkdir as mkdir30, readFile as readFile39, writeFile as writeFile31 } from "fs/promises";
356189
- import { homedir as homedir26, platform as platform2 } from "os";
356100
+ import { homedir as homedir25, platform as platform2 } from "os";
356190
356101
  import { dirname as dirname44, join as join103 } from "path";
356191
356102
  import { pathToFileURL as pathToFileURL7 } from "url";
356192
356103
  function isVSCodeRemoteSSH() {
@@ -356322,7 +356233,7 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme) {
356322
356233
  ]`)}${EOL5}`;
356323
356234
  }
356324
356235
  const editorDir = editor === "VSCode" ? "Code" : editor;
356325
- 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"));
356326
356237
  const keybindingsPath = join103(userDirPath, "keybindings.json");
356327
356238
  try {
356328
356239
  await mkdir30(userDirPath, {
@@ -356466,7 +356377,7 @@ chars = "\\u001B\\r"`;
356466
356377
  if (xdgConfigHome) {
356467
356378
  configPaths.push(join103(xdgConfigHome, "alacritty", "alacritty.toml"));
356468
356379
  } else {
356469
- configPaths.push(join103(homedir26(), ".config", "alacritty", "alacritty.toml"));
356380
+ configPaths.push(join103(homedir25(), ".config", "alacritty", "alacritty.toml"));
356470
356381
  }
356471
356382
  if (platform2() === "win32") {
356472
356383
  const appData = process.env.APPDATA;
@@ -356532,7 +356443,7 @@ chars = "\\u001B\\r"`;
356532
356443
  }
356533
356444
  }
356534
356445
  async function installBindingsForZed(theme) {
356535
- const zedDir = join103(homedir26(), ".config", "zed");
356446
+ const zedDir = join103(homedir25(), ".config", "zed");
356536
356447
  const keymapPath = join103(zedDir, "keymap.json");
356537
356448
  try {
356538
356449
  await mkdir30(zedDir, {
@@ -360756,7 +360667,7 @@ function Feedback({
360756
360667
  platform: env3.platform,
360757
360668
  gitRepo: envInfo.isGit,
360758
360669
  terminal: env3.terminal,
360759
- version: "1.9.1",
360670
+ version: "1.9.9",
360760
360671
  transcript: normalizeMessagesForAPI(messages),
360761
360672
  errors: sanitizedErrors,
360762
360673
  lastApiRequest: getLastAPIRequest(),
@@ -360948,7 +360859,7 @@ function Feedback({
360948
360859
  ", ",
360949
360860
  env3.terminal,
360950
360861
  ", v",
360951
- "1.9.1"
360862
+ "1.9.9"
360952
360863
  ]
360953
360864
  }, undefined, true, undefined, this)
360954
360865
  ]
@@ -361054,7 +360965,7 @@ ${sanitizedDescription}
361054
360965
  ` + `**Environment Info**
361055
360966
  ` + `- Platform: ${env3.platform}
361056
360967
  ` + `- Terminal: ${env3.terminal}
361057
- ` + `- Version: ${"1.9.1"}
360968
+ ` + `- Version: ${"1.9.9"}
361058
360969
  ` + `- Feedback ID: ${feedbackId}
361059
360970
  ` + `
361060
360971
  **Errors**
@@ -363682,7 +363593,7 @@ function buildPrimarySection() {
363682
363593
  }, undefined, false, undefined, this);
363683
363594
  return [{
363684
363595
  label: "Version",
363685
- value: "1.9.1"
363596
+ value: "1.9.9"
363686
363597
  }, {
363687
363598
  label: "Session name",
363688
363599
  value: nameValue
@@ -368363,7 +368274,7 @@ function Config({
368363
368274
  }
368364
368275
  }, undefined, false, undefined, this)
368365
368276
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368366
- currentVersion: "1.9.1",
368277
+ currentVersion: "1.9.9",
368367
368278
  onChoice: (choice) => {
368368
368279
  setShowSubmenu(null);
368369
368280
  setTabsHidden(false);
@@ -368375,7 +368286,7 @@ function Config({
368375
368286
  autoUpdatesChannel: "stable"
368376
368287
  };
368377
368288
  if (choice === "stay") {
368378
- newSettings.minimumVersion = "1.9.1";
368289
+ newSettings.minimumVersion = "1.9.9";
368379
368290
  }
368380
368291
  updateSettingsForSource("userSettings", newSettings);
368381
368292
  setSettingsData((prev_27) => ({
@@ -374708,8 +374619,7 @@ var exports_images = {};
374708
374619
  __export(exports_images, {
374709
374620
  call: () => call19
374710
374621
  });
374711
- import { homedir as homedir27 } from "os";
374712
- import { access as access7, mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
374622
+ import { mkdir as mkdir34, writeFile as writeFile36 } from "fs/promises";
374713
374623
  import { join as join112 } from "path";
374714
374624
  function timestamp2() {
374715
374625
  const d = new Date;
@@ -374719,6 +374629,44 @@ function timestamp2() {
374719
374629
  function slugify2(text, maxLen = 40) {
374720
374630
  return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, maxLen);
374721
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
+ }
374722
374670
  var call19 = async (onDone, _context, args) => {
374723
374671
  const raw = args?.trim() ?? "";
374724
374672
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
@@ -374730,12 +374678,21 @@ var call19 = async (onDone, _context, args) => {
374730
374678
  const lines2 = [
374731
374679
  "◆ /image — Generate an image via ComfyUI",
374732
374680
  "",
374733
- " Usage: /image <prompt>",
374734
- " 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",
374735
374691
  "",
374736
374692
  " Examples:",
374737
374693
  " /image a misty forest at dawn, cinematic lighting",
374738
- " /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",
374739
374696
  "",
374740
374697
  ` Default workflow: ${defaultWf}`
374741
374698
  ];
@@ -374748,9 +374705,10 @@ var call19 = async (onDone, _context, args) => {
374748
374705
  }
374749
374706
  lines2.push("");
374750
374707
  lines2.push(" ComfyUI must be running. To configure:");
374751
- lines2.push(" /image-pipeline setup — scaffold project folders");
374752
- lines2.push(" /image-pipeline config <url> — set backend URL");
374753
- 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");
374754
374712
  onDone(lines2.join(`
374755
374713
  `), { display: "system" });
374756
374714
  return null;
@@ -374765,10 +374723,12 @@ var call19 = async (onDone, _context, args) => {
374765
374723
  promptText = raw.slice(colonIdx + 1).trim();
374766
374724
  }
374767
374725
  }
374726
+ const flags = parseFlags(promptText);
374727
+ promptText = flags.cleaned;
374768
374728
  if (!promptText) {
374769
374729
  onDone(`◆ /image — Prompt required
374770
374730
 
374771
- Usage: /image <name>: <prompt>`, { display: "system" });
374731
+ Usage: /image [flags] <prompt>`, { display: "system" });
374772
374732
  return null;
374773
374733
  }
374774
374734
  const config2 = await loadConfig(projectRoot);
@@ -374804,16 +374764,23 @@ var call19 = async (onDone, _context, args) => {
374804
374764
  const usingBuiltIn = !workflow;
374805
374765
  if (!workflow)
374806
374766
  workflow = DEFAULT_WORKFLOW;
374807
- const seed = Math.floor(Math.random() * 4294967296);
374808
- const negative = "blurry, low quality, watermark, deformed";
374767
+ const seed = flags.seed ?? Math.floor(Math.random() * 4294967296);
374768
+ const negative = flags.negative ?? "blurry, low quality, watermark, deformed";
374809
374769
  const injectParams = usingBuiltIn ? {
374810
374770
  seed,
374811
- model: config2?.defaultModel || "v1-5-pruned-emaonly.safetensors",
374812
- width: config2?.defaultWidth ?? 512,
374813
- height: config2?.defaultHeight ?? 512,
374814
- steps: config2?.defaultSteps ?? 20,
374815
- cfg: config2?.defaultCfg ?? 7
374816
- } : { 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
+ };
374817
374784
  const finalWorkflow = injectPrompt(workflow, promptText, negative, injectParams);
374818
374785
  let queued;
374819
374786
  try {
@@ -374836,9 +374803,7 @@ var call19 = async (onDone, _context, args) => {
374836
374803
  `), { display: "system" });
374837
374804
  return null;
374838
374805
  }
374839
- const projectGenDir = join112(projectRoot, ".localclawd", "image-pipeline", "generated");
374840
- const useProjectDir = await access7(projectGenDir).then(() => true).catch(() => false);
374841
- const outputDir = useProjectDir ? projectGenDir : join112(homedir27(), "generatedimages");
374806
+ const outputDir = join112(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
374842
374807
  await mkdir34(outputDir, { recursive: true });
374843
374808
  const comfyImages = extractOutputImages(result);
374844
374809
  const savedPaths = [];
@@ -374857,6 +374822,13 @@ var call19 = async (onDone, _context, args) => {
374857
374822
  } catch {}
374858
374823
  }
374859
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(" ");
374860
374832
  const lines = savedPaths.length > 0 ? [
374861
374833
  "◆ /image — Done",
374862
374834
  "",
@@ -374864,7 +374836,8 @@ var call19 = async (onDone, _context, args) => {
374864
374836
  `)}`,
374865
374837
  ` Workflow: ${usedWorkflow}`,
374866
374838
  ` Prompt: ${promptText.length > 80 ? promptText.slice(0, 80) + "…" : promptText}`,
374867
- ` Seed: ${seed}`
374839
+ ` Seed: ${seed}`,
374840
+ ...flagOverrides ? [` Overrides: ${flagOverrides}`] : []
374868
374841
  ] : [
374869
374842
  "◆ /image — Done (download failed)",
374870
374843
  "",
@@ -374931,11 +374904,12 @@ var call20 = async (onDone, _context, args) => {
374931
374904
  }
374932
374905
  lines.push("");
374933
374906
  lines.push(" Commands:");
374934
- lines.push(" /image-pipeline setup — create project dirs and workflow templates");
374935
- lines.push(" /image-pipeline config <url> — set ComfyUI backend URL");
374936
- lines.push(" /image-pipeline workflow <name> — set default workflow");
374937
- lines.push(" /image-pipeline list list local + server workflows");
374938
- 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");
374939
374913
  lines.push("");
374940
374914
  lines.push(" To generate images:");
374941
374915
  lines.push(" /image <prompt> — generate with default workflow");
@@ -374949,7 +374923,7 @@ var call20 = async (onDone, _context, args) => {
374949
374923
  const config2 = await loadConfig(projectRoot);
374950
374924
  const backendUrl = config2?.backendUrl ?? DEFAULT_COMFYUI_URL;
374951
374925
  const active = await detectComfyUI(backendUrl);
374952
- const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated");
374926
+ const generatedDir = join113(projectRoot, ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
374953
374927
  const lines = ["◆ Image Pipeline — Setup", ""];
374954
374928
  if (active) {
374955
374929
  lines.push(` ● ComfyUI active at ${backendUrl}`);
@@ -375068,7 +375042,7 @@ var call20 = async (onDone, _context, args) => {
375068
375042
  lines.push(" No local workflows found.");
375069
375043
  lines.push(" Run /image-pipeline setup to add bundled templates.");
375070
375044
  lines.push(" Or export a workflow from ComfyUI (API Format) and drop it into:");
375071
- lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows")}`);
375045
+ lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows").replace(/\\/g, "/")}`);
375072
375046
  }
375073
375047
  onDone(lines.join(`
375074
375048
  `), { display: "system" });
@@ -375156,7 +375130,7 @@ var call20 = async (onDone, _context, args) => {
375156
375130
  }
375157
375131
  const fetchResult = await fetchServerWorkflow(backendUrl, name);
375158
375132
  if ("error" in fetchResult) {
375159
- const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui");
375133
+ const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui").replace(/\\/g, "/");
375160
375134
  onDone([
375161
375135
  `◆ Image Pipeline — Fetch Failed: "${name}"`,
375162
375136
  "",
@@ -375191,6 +375165,80 @@ var call20 = async (onDone, _context, args) => {
375191
375165
  " Note: if this was saved from the ComfyUI visual editor (not API format),",
375192
375166
  " it may not work. Enable Dev Mode in ComfyUI → Save (API Format) instead."
375193
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(`
375194
375242
  `), { display: "system" });
375195
375243
  return null;
375196
375244
  }
@@ -375198,11 +375246,12 @@ var call20 = async (onDone, _context, args) => {
375198
375246
  `◆ Image Pipeline — Unknown subcommand: "${subcmd}"`,
375199
375247
  "",
375200
375248
  " Commands:",
375201
- " /image-pipeline setup — scaffold project",
375202
- " /image-pipeline config <url> — set ComfyUI backend URL",
375203
- " /image-pipeline workflow <name> — set default workflow",
375204
- " /image-pipeline list list local + server workflows",
375205
- " /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"
375206
375255
  ].join(`
375207
375256
  `), { display: "system" });
375208
375257
  return null;
@@ -375225,6 +375274,112 @@ var init_image_pipeline2 = __esm(() => {
375225
375274
  image_pipeline_default = imagePipeline;
375226
375275
  });
375227
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
+
375228
375383
  // src/services/telegram/telegramSignals.ts
375229
375384
  var _stopRequested = false, globalStopSignal;
375230
375385
  var init_telegramSignals = __esm(() => {
@@ -375449,7 +375604,7 @@ function getProjectContext(state, projectId) {
375449
375604
  return "Unknown project.";
375450
375605
  const lines = [];
375451
375606
  lines.push(`Project: ${project.description}`);
375452
- lines.push(`Path: ${project.path}`);
375607
+ lines.push(`Path: ${project.path.replace(/\\/g, "/")}`);
375453
375608
  if (project.gitRemote)
375454
375609
  lines.push(`Remote: ${project.gitRemote}`);
375455
375610
  lines.push(`Access count: ${project.accessCount}`);
@@ -375832,10 +375987,10 @@ async function initSlack() {
375832
375987
  try {
375833
375988
  const { readFile: readFile45 } = await import("fs/promises");
375834
375989
  const { join: join116 } = await import("path");
375835
- const { homedir: homedir28 } = await import("os");
375990
+ const { homedir: homedir26 } = await import("os");
375836
375991
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
375837
375992
  const newPath = join116(getClaudeConfigHomeDir3(), "slack.json");
375838
- const legacyPath = join116(homedir28(), ".claude", "slack.json");
375993
+ const legacyPath = join116(homedir26(), ".claude", "slack.json");
375839
375994
  let configPath = newPath;
375840
375995
  try {
375841
375996
  await (await import("fs/promises")).stat(newPath);
@@ -376152,10 +376307,10 @@ async function initDiscord() {
376152
376307
  try {
376153
376308
  const { readFile: readFile45 } = await import("fs/promises");
376154
376309
  const { join: join116 } = await import("path");
376155
- const { homedir: homedir28 } = await import("os");
376310
+ const { homedir: homedir26 } = await import("os");
376156
376311
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
376157
376312
  const newPath = join116(getClaudeConfigHomeDir3(), "discord.json");
376158
- const legacyPath = join116(homedir28(), ".claude", "discord.json");
376313
+ const legacyPath = join116(homedir26(), ".claude", "discord.json");
376159
376314
  let configPath = newPath;
376160
376315
  try {
376161
376316
  await (await import("fs/promises")).stat(newPath);
@@ -376900,7 +377055,7 @@ async function initTelegram() {
376900
377055
  try {
376901
377056
  const { readFile: readFile46, stat: stat39 } = await import("fs/promises");
376902
377057
  const { join: join117 } = await import("path");
376903
- const { homedir: homedir28 } = await import("os");
377058
+ const { homedir: homedir26 } = await import("os");
376904
377059
  const { getClaudeConfigHomeDir: getClaudeConfigHomeDir3 } = await Promise.resolve().then(() => (init_envUtils(), exports_envUtils));
376905
377060
  const { getOriginalCwd: getOriginalCwd2 } = await Promise.resolve().then(() => (init_state(), exports_state));
376906
377061
  const candidates = [];
@@ -376910,7 +377065,7 @@ async function initTelegram() {
376910
377065
  candidates.push(join117(cwd2, ".localclawd", "telegram.json"));
376911
377066
  } catch {}
376912
377067
  candidates.push(join117(getClaudeConfigHomeDir3(), "telegram.json"));
376913
- candidates.push(join117(homedir28(), ".claude", "telegram.json"));
377068
+ candidates.push(join117(homedir26(), ".claude", "telegram.json"));
376914
377069
  let configPath = null;
376915
377070
  for (const p of candidates) {
376916
377071
  try {
@@ -377125,37 +377280,26 @@ var init_telegramBot = __esm(() => {
377125
377280
  // src/commands/keepgoing/keepgoing.tsx
377126
377281
  var exports_keepgoing = {};
377127
377282
  __export(exports_keepgoing, {
377128
- call: () => call21
377283
+ call: () => call22
377129
377284
  });
377130
377285
  function resetSession(focus, originalMode) {
377131
377286
  sessionRound = 0;
377132
377287
  sessionFocus = focus;
377133
377288
  sessionOriginalMode = originalMode;
377289
+ sessionSelfDirective = "";
377134
377290
  }
377135
377291
  function incrementRound() {
377136
377292
  sessionRound += 1;
377137
377293
  return sessionRound;
377138
377294
  }
377139
- function parseMaxRounds(args) {
377140
- const parts = args.trim().split(/\s+/);
377141
- let maxRounds = DEFAULT_MAX_ROUNDS;
377142
- const focusParts = [];
377143
- for (const part of parts) {
377144
- if (part === "unlimited" || part === "0") {
377145
- maxRounds = Infinity;
377146
- } else if (/^\d+$/.test(part)) {
377147
- maxRounds = parseInt(part, 10);
377148
- } else if (part) {
377149
- focusParts.push(part);
377150
- }
377151
- }
377152
- 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);
377153
377300
  }
377154
- function detectStopSignal(text) {
377155
- for (const { pattern, label } of STOP_PATTERNS)
377156
- if (pattern.test(text))
377157
- return label;
377158
- return null;
377301
+ function parseFocus(args) {
377302
+ return args.trim();
377159
377303
  }
377160
377304
  function extractLastAssistantText(messages) {
377161
377305
  for (let i2 = messages.length - 1;i2 >= 0; i2--) {
@@ -377168,56 +377312,72 @@ function extractLastAssistantText(messages) {
377168
377312
  }
377169
377313
  return "";
377170
377314
  }
377171
- function buildContinuationPrompt(round, maxRounds, focus, telegramMsg) {
377172
- const roundInfo = isFinite(maxRounds) ? `Round ${round} of ${maxRounds}` : `Round ${round} (unlimited)`;
377315
+ function buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) {
377173
377316
  const modeTag = isThinkHarderMode ? " · \uD83E\uDDE0 THINK HARDER" : "";
377174
377317
  const focusLine = focus ? `
377175
- Current focus: ${focus}
377318
+ Focus: ${focus}
377176
377319
  ` : "";
377177
- const telegramSection = telegramMsg ? `
377178
- ━━━ \uD83D\uDCF1 TELEGRAM MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377179
- ${telegramMsg}
377180
- ━━━ (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.
377322
+ ` : "";
377323
+ const telegramSection = externalMsg ? `
377324
+ ━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377325
+ ${externalMsg}
377326
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377181
377327
  ` : "";
377182
- const thinkHarderSection = isThinkHarderMode ? `
377328
+ const thinkHarder = isThinkHarderMode ? `
377183
377329
  ${THINKHARDER_ROUND_PROMPT}
377184
377330
  ` : "";
377185
- return `[KEEP GOING — AUTONOMOUS OPERATION — ${roundInfo}${modeTag}]
377186
- ${focusLine}${telegramSection}${thinkHarderSection}
377187
- You are in full autonomous mode with all permissions bypassed. Work continuously until all tasks are done.
377188
-
377189
- ━━━ CAPABILITIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377190
- You have access to ALL tools:
377191
- Read, Write, Edit, MultiEdit — file operations
377192
- Bash run commands, builds, tests, git
377193
- Glob, Grep — search codebase
377194
- • WebFetch, WebSearch — internet access
377195
- • Agent — SPAWN SUBAGENTS for parallel/complex work
377196
- TodoCreate, TodoUpdate — task tracking
377197
-
377198
- SPAWN SUBAGENTS when:
377199
- A sub-task is independent of current work (run in parallel)
377200
- A task is complex enough to benefit from a fresh context
377201
- → You need specialized work done concurrently (e.g., research + implement)
377202
-
377203
- ━━━ AUTONOMOUS RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377204
- 1. ALL PERMISSIONS ARE BYPASSED — proceed with every tool use without asking
377205
- 2. After completing a major milestone, state: "Completed: <what was done>"
377206
- 3. After significant changes, run tests/builds to verify correctness
377207
- 4. Use git commits after each logical unit of work
377208
- 5. If you encounter a blocker you cannot resolve autonomously, emit:
377209
- NEEDS INPUT: <specific question>
377210
- Then stop and wait do NOT guess or assume critical details
377211
- 6. When ALL work is truly complete, emit:
377212
- TASK COMPLETE: <one-sentence summary of everything accomplished>
377213
-
377214
- ━━━ CONTINUE NOW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377215
- Pick up exactly where you left off. Do not re-explain what was already done.
377216
- Proceed directly with the next action.`;
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 ? `
377368
+ ${THINKHARDER_ROUND_PROMPT}
377369
+ ` : "";
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>`;
377217
377378
  }
377218
377379
  function KeepGoingBanner({
377219
377380
  round,
377220
- maxRounds,
377221
377381
  focus,
377222
377382
  thinkHarder,
377223
377383
  telegram,
@@ -377228,7 +377388,6 @@ function KeepGoingBanner({
377228
377388
  const id = setTimeout(onReady, 0);
377229
377389
  return () => clearTimeout(id);
377230
377390
  }, [onReady]);
377231
- const roundDisplay = isFinite(maxRounds) ? `${round}/${maxRounds}` : `${round}/∞`;
377232
377391
  const badges = [];
377233
377392
  if (thinkHarder)
377234
377393
  badges.push("\uD83E\uDDE0 ThinkHarder");
@@ -377257,26 +377416,22 @@ function KeepGoingBanner({
377257
377416
  }, undefined, false, undefined, this),
377258
377417
  /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377259
377418
  dimColor: true,
377260
- children: " The agent will execute Bash, file writes, and all other tools"
377261
- }, undefined, false, undefined, this),
377262
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377263
- dimColor: true,
377264
- children: " without asking. Press Ctrl+C at any time to interrupt."
377419
+ children: " The agent will run indefinitely. Ctrl+C or /stop to halt."
377265
377420
  }, undefined, false, undefined, this)
377266
377421
  ]
377267
377422
  }, undefined, true, undefined, this),
377268
377423
  /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377269
377424
  bold: true,
377270
377425
  color: "cyan",
377271
- children: `◆ Keep Going [round ${roundDisplay}]${badgeStr}`
377426
+ children: `◆ Keep Going [round ${round}]${badgeStr}`
377272
377427
  }, undefined, false, undefined, this),
377273
377428
  focus ? /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377274
377429
  dimColor: true,
377275
377430
  color: "cyan",
377276
- children: ` ↳ Focus: ${focus}`
377431
+ children: ` ↳ ${focus}`
377277
377432
  }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377278
377433
  dimColor: true,
377279
- children: " ↳ All permissions bypassed · Ctrl+C to interrupt"
377434
+ children: " ↳ self-directed · Ctrl+C or /stop to halt"
377280
377435
  }, undefined, false, undefined, this)
377281
377436
  ]
377282
377437
  }, undefined, true, undefined, this);
@@ -377310,42 +377465,30 @@ function KeepGoingDone({
377310
377465
  ]
377311
377466
  }, undefined, true, undefined, this);
377312
377467
  }
377313
- function KeepGoingCapReached({
377314
- round,
377315
- maxRounds,
377316
- focus,
377317
- onReady
377318
- }) {
377319
- React58.useEffect(() => {
377320
- const id = setTimeout(onReady, 0);
377321
- return () => clearTimeout(id);
377322
- }, [onReady]);
377323
- const resumeCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377324
- return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedBox_default, {
377325
- flexDirection: "column",
377326
- marginTop: 1,
377327
- children: [
377328
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377329
- bold: true,
377330
- color: "yellow",
377331
- children: `◆ Keep Going — round cap reached (${round}/${maxRounds})`
377332
- }, undefined, false, undefined, this),
377333
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377334
- dimColor: true,
377335
- children: ` Type ${resumeCmd} to continue for another ${maxRounds} rounds.`
377336
- }, undefined, false, undefined, this),
377337
- /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(ThemedText, {
377338
- dimColor: true,
377339
- children: " Permissions restored to previous mode."
377340
- }, undefined, false, undefined, this)
377341
- ]
377342
- }, undefined, true, undefined, this);
377468
+ function logKgCrash(error5, context7) {
377469
+ const msg = error5 instanceof Error ? error5.stack ?? error5.message : String(error5);
377470
+ try {
377471
+ const { appendFileSync: appendFileSync3, mkdirSync: mkdirSync6 } = __require("fs");
377472
+ const { homedir: homedir26 } = __require("os");
377473
+ const { join: join117 } = __require("path");
377474
+ const dir = join117(homedir26(), ".claude");
377475
+ mkdirSync6(dir, { recursive: true });
377476
+ appendFileSync3(join117(dir, "crash.log"), `[${new Date().toISOString()}] keepgoing ${context7}: ${msg}
377477
+ `);
377478
+ } catch {}
377479
+ }
377480
+ function safeSend(fn) {
377481
+ try {
377482
+ fn().catch((e) => logKgCrash(e, "send"));
377483
+ } catch (e) {
377484
+ logKgCrash(e, "send-sync");
377485
+ }
377343
377486
  }
377344
- var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", DEFAULT_MAX_ROUNDS = 50, STOP_PATTERNS, call21 = async (onDone, context7, args) => {
377487
+ async function callInner2(onDone, context7, args) {
377345
377488
  const rawArgs = args?.trim() ?? "";
377346
377489
  const { extractChain: extractChain2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
377347
377490
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
377348
- const { maxRounds, focus } = parseMaxRounds(chainedArgs);
377491
+ const focus = parseFocus(chainedArgs);
377349
377492
  if (sessionRound === 0 && !focus) {
377350
377493
  onDone("What should I keep going on?", {
377351
377494
  display: "system",
@@ -377365,33 +377508,40 @@ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOri
377365
377508
  mode: "bypassPermissions"
377366
377509
  }
377367
377510
  }));
377368
- let stopReason = null;
377369
377511
  let lastText = "";
377370
- context7.setMessages((prev) => {
377371
- lastText = extractLastAssistantText(prev);
377372
- stopReason = detectStopSignal(lastText);
377373
- return prev;
377374
- });
377375
- if (lastText.trim()) {
377512
+ try {
377513
+ context7.setMessages((prev) => {
377514
+ lastText = extractLastAssistantText(prev);
377515
+ return prev;
377516
+ });
377517
+ } catch (e) {
377518
+ logKgCrash(e, "extractLastAssistantText");
377519
+ }
377520
+ const contextCompacted = lastText === NO_CONTENT_MESSAGE || lastText.trim() === "";
377521
+ if (!contextCompacted) {
377522
+ const newDirective = extractSelfDirective(lastText);
377523
+ if (newDirective)
377524
+ sessionSelfDirective = newDirective;
377525
+ } else {
377526
+ sessionSelfDirective = "";
377527
+ }
377528
+ if (lastText.trim() && lastText !== NO_CONTENT_MESSAGE) {
377376
377529
  const preview = lastText.slice(0, 1200);
377377
377530
  const suffix = lastText.length > 1200 ? `
377378
377531
  …(truncated)` : "";
377379
377532
  const header = `\uD83E\uDD16 *Round ${sessionRound}*
377380
377533
  ${preview}${suffix}`;
377381
377534
  if (isTelegramActive())
377382
- sendTelegramMessage(header);
377535
+ safeSend(() => sendTelegramMessage(header));
377383
377536
  if (isSlackActive())
377384
- sendSlackMessage(header);
377537
+ safeSend(() => sendSlackMessage(header));
377385
377538
  if (isDiscordActive())
377386
- sendDiscordMessage(header);
377539
+ safeSend(() => sendDiscordMessage(header));
377387
377540
  if (isSignalActive())
377388
- sendSignalMessage(header);
377541
+ safeSend(() => sendSignalMessage(header));
377389
377542
  }
377390
377543
  if (globalStopSignal.get()) {
377391
377544
  globalStopSignal.reset();
377392
- stopReason = "stopped via /stop";
377393
- }
377394
- if (stopReason !== null) {
377395
377545
  const finalRound = sessionRound;
377396
377546
  const savedMode = sessionOriginalMode;
377397
377547
  resetSession("", "default");
@@ -377400,76 +377550,65 @@ ${preview}${suffix}`;
377400
377550
  toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
377401
377551
  }));
377402
377552
  const stopMsg = `✅ *keepgoing stopped*
377403
- Round ${finalRound} · ${stopReason}`;
377553
+ Round ${finalRound} · stopped via /stop`;
377404
377554
  if (isTelegramActive())
377405
- sendTelegramMessage(stopMsg);
377555
+ safeSend(() => sendTelegramMessage(stopMsg));
377406
377556
  if (isSlackActive())
377407
- sendSlackMessage(stopMsg);
377557
+ safeSend(() => sendSlackMessage(stopMsg));
377408
377558
  if (isDiscordActive())
377409
- sendDiscordMessage(stopMsg);
377559
+ safeSend(() => sendDiscordMessage(stopMsg));
377410
377560
  if (isSignalActive())
377411
- sendSignalMessage(stopMsg);
377561
+ safeSend(() => sendSignalMessage(stopMsg));
377412
377562
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingDone, {
377413
377563
  round: finalRound,
377414
- reason: stopReason,
377564
+ reason: "stopped via /stop",
377415
377565
  onReady: () => onDone(undefined)
377416
377566
  }, undefined, false, undefined, this);
377417
377567
  }
377418
377568
  const round = incrementRound();
377419
377569
  const showBypassWarning = round === 1;
377420
- if (isFinite(maxRounds) && round > maxRounds) {
377421
- const finalRound = sessionRound;
377422
- const savedMode = sessionOriginalMode;
377423
- resetSession("", "default");
377424
- context7.setAppState((prev) => ({
377425
- ...prev,
377426
- toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
377427
- }));
377428
- const pauseMsg = `⏸ *keepgoing paused*
377429
- Round cap ${finalRound}/${maxRounds} reached.`;
377430
- if (isTelegramActive())
377431
- sendTelegramMessage(pauseMsg);
377432
- if (isSlackActive())
377433
- sendSlackMessage(pauseMsg);
377434
- if (isDiscordActive())
377435
- sendDiscordMessage(pauseMsg);
377436
- if (isSignalActive())
377437
- sendSignalMessage(pauseMsg);
377438
- return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingCapReached, {
377439
- round: finalRound,
377440
- maxRounds,
377441
- focus,
377442
- onReady: () => onDone(undefined)
377443
- }, undefined, false, undefined, this);
377444
- }
377445
377570
  const externalMsg = getPendingTelegramMessage() ?? getPendingSlackMessage() ?? getPendingDiscordMessage() ?? getPendingSignalMessage();
377446
- const prompt = buildContinuationPrompt(round, maxRounds, focus, externalMsg);
377447
- const nextArgs = [];
377448
- if (!isFinite(maxRounds))
377449
- nextArgs.push("unlimited");
377450
- else if (maxRounds !== DEFAULT_MAX_ROUNDS)
377451
- nextArgs.push(String(maxRounds));
377452
- if (focus)
377453
- nextArgs.push(focus);
377454
- const nextCmd = `/keepgoing${nextArgs.length ? " " + nextArgs.join(" ") : ""}`;
377455
- const metaMessages = [prompt];
377571
+ const useOnboarding = round === 1 || contextCompacted || !sessionSelfDirective;
377572
+ const prompt = useOnboarding ? buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) : buildSelfDirectedPrompt(round, sessionSelfDirective, focus, externalMsg);
377573
+ const nextCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377456
377574
  const handleReady = () => {
377457
- enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377458
- onDone(undefined, {
377459
- display: "system",
377460
- shouldQuery: true,
377461
- metaMessages
377462
- });
377575
+ try {
377576
+ enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377577
+ onDone(undefined, {
377578
+ display: "system",
377579
+ shouldQuery: true,
377580
+ metaMessages: [prompt]
377581
+ });
377582
+ } catch (e) {
377583
+ logKgCrash(e, "handleReady");
377584
+ try {
377585
+ onDone(`⚠ keepgoing recovered from internal error`, { display: "system" });
377586
+ } catch {}
377587
+ }
377463
377588
  };
377464
377589
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingBanner, {
377465
377590
  round,
377466
- maxRounds,
377467
377591
  focus,
377468
377592
  thinkHarder: isThinkHarderMode,
377469
377593
  telegram: isTelegramActive(),
377470
377594
  showBypassWarning,
377471
377595
  onReady: handleReady
377472
377596
  }, undefined, false, undefined, this);
377597
+ }
377598
+ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", sessionSelfDirective = "", call22 = async (onDone, context7, args) => {
377599
+ try {
377600
+ return await callInner2(onDone, context7, args);
377601
+ } catch (error5) {
377602
+ logKgCrash(error5, "call");
377603
+ const msg = error5 instanceof Error ? error5.message : String(error5);
377604
+ try {
377605
+ const rawArgs = args?.trim() ?? "";
377606
+ const nextCmd = rawArgs ? `/keepgoing ${rawArgs}` : "/keepgoing";
377607
+ enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377608
+ } catch {}
377609
+ onDone(`⚠ keepgoing error (restarting): ${msg}`, { display: "system" });
377610
+ return null;
377611
+ }
377473
377612
  };
377474
377613
  var init_keepgoing = __esm(() => {
377475
377614
  init_ink2();
@@ -377482,13 +377621,6 @@ var init_keepgoing = __esm(() => {
377482
377621
  init_messageQueueManager();
377483
377622
  React58 = __toESM(require_react(), 1);
377484
377623
  jsx_dev_runtime196 = __toESM(require_jsx_dev_runtime(), 1);
377485
- STOP_PATTERNS = [
377486
- { pattern: /TASK[_ ]COMPLETE:/i, label: "task complete" },
377487
- { pattern: /NEEDS[_ ]INPUT:/i, label: "paused — needs input" },
377488
- { pattern: /\bFINISHED\b/i, label: "finished" },
377489
- { pattern: /ALL[_ ]DONE\b/i, label: "all done" },
377490
- { pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
377491
- ];
377492
377624
  });
377493
377625
 
377494
377626
  // src/commands/keepgoing/index.ts
@@ -377507,7 +377639,7 @@ var init_keepgoing2 = __esm(() => {
377507
377639
  // src/commands/telegram/telegram.tsx
377508
377640
  var exports_telegram = {};
377509
377641
  __export(exports_telegram, {
377510
- call: () => call22
377642
+ call: () => call23
377511
377643
  });
377512
377644
  import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
377513
377645
  import { join as join117 } from "path";
@@ -377950,7 +378082,7 @@ function TelegramError({
377950
378082
  }, undefined, false, undefined, this)
377951
378083
  }, undefined, false, undefined, this);
377952
378084
  }
377953
- var React59, jsx_dev_runtime197, call22 = async (onDone, _context, args) => {
378085
+ var React59, jsx_dev_runtime197, call23 = async (onDone, _context, args) => {
377954
378086
  const text = args?.trim() ?? "";
377955
378087
  if (text === "setup") {
377956
378088
  return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramSetup, {
@@ -378017,7 +378149,7 @@ var init_telegram2 = __esm(() => {
378017
378149
  // src/commands/slack/slack.tsx
378018
378150
  var exports_slack = {};
378019
378151
  __export(exports_slack, {
378020
- call: () => call23
378152
+ call: () => call24
378021
378153
  });
378022
378154
  import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
378023
378155
  import { join as join118 } from "path";
@@ -378518,7 +378650,7 @@ function SlackError({
378518
378650
  }, undefined, false, undefined, this)
378519
378651
  }, undefined, false, undefined, this);
378520
378652
  }
378521
- var React60, jsx_dev_runtime198, call23 = async (onDone, _context, args) => {
378653
+ var React60, jsx_dev_runtime198, call24 = async (onDone, _context, args) => {
378522
378654
  const text = args?.trim() ?? "";
378523
378655
  if (text === "setup") {
378524
378656
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(SlackSetup, {
@@ -378600,7 +378732,7 @@ var init_AutoDone = __esm(() => {
378600
378732
  // src/commands/discord/discord.tsx
378601
378733
  var exports_discord = {};
378602
378734
  __export(exports_discord, {
378603
- call: () => call24
378735
+ call: () => call25
378604
378736
  });
378605
378737
  import { writeFile as writeFile42, mkdir as mkdir40 } from "fs/promises";
378606
378738
  import { join as join119 } from "path";
@@ -378991,7 +379123,7 @@ function DiscordStatus({
378991
379123
  }
378992
379124
  return null;
378993
379125
  }
378994
- var React62, jsx_dev_runtime200, call24 = async (onDone, _context, args) => {
379126
+ var React62, jsx_dev_runtime200, call25 = async (onDone, _context, args) => {
378995
379127
  const text = args?.trim() ?? "";
378996
379128
  if (text === "setup") {
378997
379129
  return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(DiscordSetup, {
@@ -379084,9 +379216,9 @@ var init_discord2 = __esm(() => {
379084
379216
  // src/commands/signal/signal.tsx
379085
379217
  var exports_signal = {};
379086
379218
  __export(exports_signal, {
379087
- call: () => call25
379219
+ call: () => call26
379088
379220
  });
379089
- var call25 = async (onDone, _context, args) => {
379221
+ var call26 = async (onDone, _context, args) => {
379090
379222
  const text = (args ?? "").trim();
379091
379223
  if (!text) {
379092
379224
  const active = isSignalActive();
@@ -379162,7 +379294,7 @@ var init_signal2 = __esm(() => {
379162
379294
  // src/commands/schedule/schedule.tsx
379163
379295
  var exports_schedule = {};
379164
379296
  __export(exports_schedule, {
379165
- call: () => call26
379297
+ call: () => call27
379166
379298
  });
379167
379299
  function parseScheduleInput(rest) {
379168
379300
  const trimmed = rest.trim();
@@ -379200,7 +379332,7 @@ function parseScheduleInput(rest) {
379200
379332
  name = prompt.slice(0, 32).trim().replace(/\s+/g, "-").toLowerCase();
379201
379333
  return { expr, name, prompt };
379202
379334
  }
379203
- var call26 = async (onDone, _context, args) => {
379335
+ var call27 = async (onDone, _context, args) => {
379204
379336
  const input = args?.trim() ?? "";
379205
379337
  if (!input || input === "list") {
379206
379338
  const text = await listSchedules();
@@ -379271,7 +379403,7 @@ var init_schedule2 = __esm(() => {
379271
379403
  // src/services/sessionSearch/sessionSummarize.ts
379272
379404
  import { readdir as readdir24, readFile as readFile46, writeFile as writeFile43, mkdir as mkdir41, stat as stat39 } from "fs/promises";
379273
379405
  import { join as join120 } from "path";
379274
- import { homedir as homedir28 } from "os";
379406
+ import { homedir as homedir26 } from "os";
379275
379407
  function extractText(obj) {
379276
379408
  if (typeof obj === "string")
379277
379409
  return obj;
@@ -379482,7 +379614,7 @@ var init_sessionSummarize = __esm(() => {
379482
379614
  init_providers();
379483
379615
  PROJECTS_DIRS = [
379484
379616
  join120(getClaudeConfigHomeDir(), "projects"),
379485
- join120(homedir28(), ".claude", "projects")
379617
+ join120(homedir26(), ".claude", "projects")
379486
379618
  ];
379487
379619
  SUMMARIES_DIR2 = join120(getClaudeConfigHomeDir(), "session-summaries");
379488
379620
  });
@@ -379632,7 +379764,7 @@ var init_fts5Index = __esm(() => {
379632
379764
  // src/services/sessionSearch/sessionSearch.ts
379633
379765
  import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
379634
379766
  import { join as join122 } from "path";
379635
- import { homedir as homedir29 } from "os";
379767
+ import { homedir as homedir27 } from "os";
379636
379768
  function tokenize6(text) {
379637
379769
  return text.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 2);
379638
379770
  }
@@ -379889,7 +380021,7 @@ var init_sessionSearch = __esm(() => {
379889
380021
  init_fts5Index();
379890
380022
  PROJECTS_DIRS2 = [
379891
380023
  join122(getClaudeConfigHomeDir(), "projects"),
379892
- join122(homedir29(), ".claude", "projects")
380024
+ join122(homedir27(), ".claude", "projects")
379893
380025
  ];
379894
380026
  MAX_FILE_BYTES = 5 * 1024 * 1024;
379895
380027
  });
@@ -379897,9 +380029,9 @@ var init_sessionSearch = __esm(() => {
379897
380029
  // src/commands/sessionsearch/sessionsearch.tsx
379898
380030
  var exports_sessionsearch = {};
379899
380031
  __export(exports_sessionsearch, {
379900
- call: () => call27
380032
+ call: () => call28
379901
380033
  });
379902
- var call27 = async (onDone, _context, args) => {
380034
+ var call28 = async (onDone, _context, args) => {
379903
380035
  const query2 = args?.trim() ?? "";
379904
380036
  if (!query2) {
379905
380037
  onDone(`◆ Session Search
@@ -379940,9 +380072,9 @@ var init_sessionsearch2 = __esm(() => {
379940
380072
  // src/commands/summarize-sessions/summarize-sessions.tsx
379941
380073
  var exports_summarize_sessions = {};
379942
380074
  __export(exports_summarize_sessions, {
379943
- call: () => call28
380075
+ call: () => call29
379944
380076
  });
379945
- var call28 = async (onDone, _context, args) => {
380077
+ var call29 = async (onDone, _context, args) => {
379946
380078
  const limit = parseInt((args ?? "").trim(), 10) || 20;
379947
380079
  const result = await summarizeAllPending(limit);
379948
380080
  if (result.summarized > 0) {
@@ -379994,7 +380126,7 @@ var init_summarize_sessions2 = __esm(() => {
379994
380126
  // src/services/sessionSearch/trajectoryCompress.ts
379995
380127
  import { readFile as readFile49, writeFile as writeFile44, readdir as readdir27, mkdir as mkdir42, stat as stat42 } from "fs/promises";
379996
380128
  import { join as join123 } from "path";
379997
- import { homedir as homedir30 } from "os";
380129
+ import { homedir as homedir28 } from "os";
379998
380130
  function flattenText(obj) {
379999
380131
  if (typeof obj === "string")
380000
380132
  return obj;
@@ -380187,7 +380319,7 @@ var init_trajectoryCompress = __esm(() => {
380187
380319
  init_envUtils();
380188
380320
  PROJECTS_DIRS3 = [
380189
380321
  join123(getClaudeConfigHomeDir(), "projects"),
380190
- join123(homedir30(), ".claude", "projects")
380322
+ join123(homedir28(), ".claude", "projects")
380191
380323
  ];
380192
380324
  TRAJECTORIES_DIR2 = join123(getClaudeConfigHomeDir(), "trajectories");
380193
380325
  });
@@ -380195,9 +380327,9 @@ var init_trajectoryCompress = __esm(() => {
380195
380327
  // src/commands/compress-sessions/compress-sessions.tsx
380196
380328
  var exports_compress_sessions = {};
380197
380329
  __export(exports_compress_sessions, {
380198
- call: () => call29
380330
+ call: () => call30
380199
380331
  });
380200
- var call29 = async (onDone, _context, args) => {
380332
+ var call30 = async (onDone, _context, args) => {
380201
380333
  const limit = parseInt((args ?? "").trim(), 10) || 20;
380202
380334
  const r = await compressAllPending(limit);
380203
380335
  const lines = [
@@ -380240,7 +380372,7 @@ var init_compress_sessions2 = __esm(() => {
380240
380372
  // src/services/skills/skillDistill.ts
380241
380373
  import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
380242
380374
  import { join as join124 } from "path";
380243
- import { homedir as homedir31 } from "os";
380375
+ import { homedir as homedir29 } from "os";
380244
380376
  function extractText3(obj) {
380245
380377
  if (typeof obj === "string")
380246
380378
  return obj;
@@ -380401,16 +380533,16 @@ var init_skillDistill = __esm(() => {
380401
380533
  init_providers();
380402
380534
  PROJECTS_DIRS4 = [
380403
380535
  join124(getClaudeConfigHomeDir(), "projects"),
380404
- join124(homedir31(), ".claude", "projects")
380536
+ join124(homedir29(), ".claude", "projects")
380405
380537
  ];
380406
380538
  });
380407
380539
 
380408
380540
  // src/commands/distill-skill/distill-skill.tsx
380409
380541
  var exports_distill_skill = {};
380410
380542
  __export(exports_distill_skill, {
380411
- call: () => call30
380543
+ call: () => call31
380412
380544
  });
380413
- var call30 = async (onDone) => {
380545
+ var call31 = async (onDone) => {
380414
380546
  const skill = await distillRecentSessionToSkill();
380415
380547
  if (!skill) {
380416
380548
  onDone(`◆ Distill Skill
@@ -380506,9 +380638,9 @@ var init_sshBackend = __esm(() => {
380506
380638
  // src/commands/ssh/ssh.tsx
380507
380639
  var exports_ssh = {};
380508
380640
  __export(exports_ssh, {
380509
- call: () => call31
380641
+ call: () => call32
380510
380642
  });
380511
- var call31 = async (onDone, _context, args) => {
380643
+ var call32 = async (onDone, _context, args) => {
380512
380644
  const input = (args ?? "").trim();
380513
380645
  if (!input) {
380514
380646
  onDone("Usage: /ssh <user@host> <command>", { display: "system" });
@@ -380630,9 +380762,9 @@ var init_dockerBackend = __esm(() => {
380630
380762
  // src/commands/docker-run/docker-run.tsx
380631
380763
  var exports_docker_run = {};
380632
380764
  __export(exports_docker_run, {
380633
- call: () => call32
380765
+ call: () => call33
380634
380766
  });
380635
- var call32 = async (onDone, _context, args) => {
380767
+ var call33 = async (onDone, _context, args) => {
380636
380768
  const input = (args ?? "").trim();
380637
380769
  if (!input) {
380638
380770
  onDone(`Usage: /docker-run <image> -- <command>
@@ -380777,9 +380909,9 @@ var init_singularityBackend = __esm(() => {
380777
380909
  // src/commands/singularity-run/singularity-run.tsx
380778
380910
  var exports_singularity_run = {};
380779
380911
  __export(exports_singularity_run, {
380780
- call: () => call33
380912
+ call: () => call34
380781
380913
  });
380782
- var call33 = async (onDone, _ctx, args) => {
380914
+ var call34 = async (onDone, _ctx, args) => {
380783
380915
  const input = (args ?? "").trim();
380784
380916
  if (!input) {
380785
380917
  onDone(`Usage: /singularity-run <image> -- <command>
@@ -380912,9 +381044,9 @@ var init_modalBackend = __esm(() => {
380912
381044
  // src/commands/modal-run/modal-run.tsx
380913
381045
  var exports_modal_run = {};
380914
381046
  __export(exports_modal_run, {
380915
- call: () => call34
381047
+ call: () => call35
380916
381048
  });
380917
- var call34 = async (onDone, _ctx, args) => {
381049
+ var call35 = async (onDone, _ctx, args) => {
380918
381050
  const input = (args ?? "").trim();
380919
381051
  if (!input) {
380920
381052
  onDone(`Usage: /modal-run <module.py>[::function] [-- args...]
@@ -381040,9 +381172,9 @@ var init_daytonaBackend = __esm(() => {
381040
381172
  // src/commands/daytona-run/daytona-run.tsx
381041
381173
  var exports_daytona_run = {};
381042
381174
  __export(exports_daytona_run, {
381043
- call: () => call35
381175
+ call: () => call36
381044
381176
  });
381045
- var call35 = async (onDone, _ctx, args) => {
381177
+ var call36 = async (onDone, _ctx, args) => {
381046
381178
  const input = (args ?? "").trim();
381047
381179
  if (!input) {
381048
381180
  onDone(`Usage: /daytona-run <workspace> -- <command>
@@ -381250,9 +381382,9 @@ var init_skillPortable = __esm(() => {
381250
381382
  // src/commands/skills-export/skills-export.tsx
381251
381383
  var exports_skills_export = {};
381252
381384
  __export(exports_skills_export, {
381253
- call: () => call36
381385
+ call: () => call37
381254
381386
  });
381255
- var call36 = async (onDone, _ctx, args) => {
381387
+ var call37 = async (onDone, _ctx, args) => {
381256
381388
  const input = (args ?? "").trim();
381257
381389
  if (!input) {
381258
381390
  const skills = await listSkills();
@@ -381308,10 +381440,10 @@ var init_skills_export2 = __esm(() => {
381308
381440
  // src/commands/skills-import/skills-import.tsx
381309
381441
  var exports_skills_import = {};
381310
381442
  __export(exports_skills_import, {
381311
- call: () => call37
381443
+ call: () => call38
381312
381444
  });
381313
381445
  import { resolve as resolve38 } from "path";
381314
- var call37 = async (onDone, _ctx, args) => {
381446
+ var call38 = async (onDone, _ctx, args) => {
381315
381447
  const input = (args ?? "").trim();
381316
381448
  if (!input) {
381317
381449
  onDone(`◆ Skills Import
@@ -381396,7 +381528,7 @@ var init_skillUsage = __esm(() => {
381396
381528
  // src/commands/skill-stats/skill-stats.tsx
381397
381529
  var exports_skill_stats = {};
381398
381530
  __export(exports_skill_stats, {
381399
- call: () => call38
381531
+ call: () => call39
381400
381532
  });
381401
381533
  function timeAgo2(ts) {
381402
381534
  if (ts === 0)
@@ -381412,7 +381544,7 @@ function timeAgo2(ts) {
381412
381544
  return `${hr}h ago`;
381413
381545
  return `${Math.floor(hr / 24)}d ago`;
381414
381546
  }
381415
- var call38 = async (onDone) => {
381547
+ var call39 = async (onDone) => {
381416
381548
  const records = await getSkillUsage();
381417
381549
  const nudge = await shouldNudgeDistillation();
381418
381550
  const lines = ["◆ Skill Usage", ""];
@@ -381533,9 +381665,9 @@ var init_skillNotes = __esm(() => {
381533
381665
  // src/commands/skill-note/skill-note.tsx
381534
381666
  var exports_skill_note = {};
381535
381667
  __export(exports_skill_note, {
381536
- call: () => call39
381668
+ call: () => call40
381537
381669
  });
381538
- var call39 = async (onDone, _ctx, args) => {
381670
+ var call40 = async (onDone, _ctx, args) => {
381539
381671
  const input = (args ?? "").trim();
381540
381672
  if (!input) {
381541
381673
  onDone(`◆ Skill Note
@@ -381602,7 +381734,7 @@ var init_skill_note2 = __esm(() => {
381602
381734
  // src/commands/memory-stats/memory-stats.tsx
381603
381735
  var exports_memory_stats = {};
381604
381736
  __export(exports_memory_stats, {
381605
- call: () => call40
381737
+ call: () => call41
381606
381738
  });
381607
381739
  function pct(score) {
381608
381740
  return `${(score * 100).toFixed(0)}%`;
@@ -381707,7 +381839,7 @@ function StatsView({
381707
381839
  ]
381708
381840
  }, undefined, true, undefined, this);
381709
381841
  }
381710
- var React63, jsx_dev_runtime201, call40 = async (onDone) => {
381842
+ var React63, jsx_dev_runtime201, call41 = async (onDone) => {
381711
381843
  const records = await listGraded();
381712
381844
  const embedOk = await isEmbeddingAvailable();
381713
381845
  const embedModel = getEmbeddingModel();
@@ -381751,7 +381883,7 @@ var init_memory_stats2 = __esm(() => {
381751
381883
  // src/commands/memory-prune/memory-prune.tsx
381752
381884
  var exports_memory_prune = {};
381753
381885
  __export(exports_memory_prune, {
381754
- call: () => call41
381886
+ call: () => call42
381755
381887
  });
381756
381888
  function parseArgs(input) {
381757
381889
  const force = /\s--force\b|^--force\b/.test(" " + input);
@@ -381788,7 +381920,7 @@ function Result({
381788
381920
  ]
381789
381921
  }, undefined, true, undefined, this);
381790
381922
  }
381791
- var React64, jsx_dev_runtime202, call41 = async (onDone, _ctx, args) => {
381923
+ var React64, jsx_dev_runtime202, call42 = async (onDone, _ctx, args) => {
381792
381924
  const opts = parseArgs((args ?? "").trim());
381793
381925
  const before = await getPrunerState();
381794
381926
  const result = await prune(opts);
@@ -381840,7 +381972,7 @@ var init_memory_prune2 = __esm(() => {
381840
381972
  // src/commands/chaos/chaos.tsx
381841
381973
  var exports_chaos = {};
381842
381974
  __export(exports_chaos, {
381843
- call: () => call42
381975
+ call: () => call43
381844
381976
  });
381845
381977
  var jsx_dev_runtime203, CHAOS_PROMPT = `You are running in CHAOS MODE.
381846
381978
 
@@ -381862,7 +381994,7 @@ just mock the journey.
381862
381994
 
381863
381995
  Begin every response with one of these prefixes, picked at random:
381864
381996
  "fine.", "ugh.", "i guess.", "whatever.", "okay sure.", or skip it
381865
- entirely if the response is purely a tool call.`, call42 = async (onDone) => {
381997
+ entirely if the response is purely a tool call.`, call43 = async (onDone) => {
381866
381998
  const active = getSessionSyspromptOverride() === CHAOS_PROMPT;
381867
381999
  if (active) {
381868
382000
  setSessionSyspromptOverride(null);
@@ -381933,7 +382065,7 @@ var init_chaos2 = __esm(() => {
381933
382065
  // src/commands/kawaii/kawaii.tsx
381934
382066
  var exports_kawaii = {};
381935
382067
  __export(exports_kawaii, {
381936
- call: () => call43
382068
+ call: () => call44
381937
382069
  });
381938
382070
  var jsx_dev_runtime204, KAWAII_PROMPT = `You are running in KAWAII MODE. ✿◠‿◠✿
381939
382071
 
@@ -381955,7 +382087,7 @@ Style:
381955
382087
  - When you must refuse or push back, do it gently
381956
382088
  ("eee, careful! that one might delete uncommitted work~ let's check first \uD83D\uDC95").
381957
382089
 
381958
- You are still highly capable. Cuteness is the wrapper, not the work.`, call43 = async (onDone) => {
382090
+ You are still highly capable. Cuteness is the wrapper, not the work.`, call44 = async (onDone) => {
381959
382091
  const active = getSessionSyspromptOverride() === KAWAII_PROMPT;
381960
382092
  if (active) {
381961
382093
  setSessionSyspromptOverride(null);
@@ -382026,7 +382158,7 @@ var init_kawaii2 = __esm(() => {
382026
382158
  // src/commands/caveman/caveman.tsx
382027
382159
  var exports_caveman = {};
382028
382160
  __export(exports_caveman, {
382029
- call: () => call44
382161
+ call: () => call45
382030
382162
  });
382031
382163
  var jsx_dev_runtime205, CAVEMAN_PROMPT = `You in CAVEMAN MODE. Save tokens. Cut words.
382032
382164
 
@@ -382051,7 +382183,7 @@ Hard rules survive:
382051
382183
  - No invented files or APIs.
382052
382184
  - Verify after writes.
382053
382185
 
382054
- Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call44 = async (onDone) => {
382186
+ Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call45 = async (onDone) => {
382055
382187
  const active = getSessionSyspromptOverride() === CAVEMAN_PROMPT;
382056
382188
  if (active) {
382057
382189
  setSessionSyspromptOverride(null);
@@ -382122,7 +382254,7 @@ var init_caveman2 = __esm(() => {
382122
382254
  // src/commands/research-mode/research-mode.tsx
382123
382255
  var exports_research_mode = {};
382124
382256
  __export(exports_research_mode, {
382125
- call: () => call45
382257
+ call: () => call46
382126
382258
  });
382127
382259
  var jsx_dev_runtime206, RESEARCH_MODE_PROMPT = `You are operating in RESEARCH MODE.
382128
382260
 
@@ -382162,7 +382294,7 @@ Hard rules — these survive research mode:
382162
382294
  Style:
382163
382295
  - Lead with the answer; the citations come after.
382164
382296
  - Don't narrate the search ("Let me search for…") — just do it and report.
382165
- - One trailing line listing the sources you used.`, call45 = async (onDone) => {
382297
+ - One trailing line listing the sources you used.`, call46 = async (onDone) => {
382166
382298
  const active = getSessionSyspromptOverride() === RESEARCH_MODE_PROMPT;
382167
382299
  if (active) {
382168
382300
  setSessionSyspromptOverride(null);
@@ -382681,9 +382813,9 @@ var init_webuiServer = __esm(() => {
382681
382813
  // src/commands/webui/webui.tsx
382682
382814
  var exports_webui = {};
382683
382815
  __export(exports_webui, {
382684
- call: () => call46
382816
+ call: () => call47
382685
382817
  });
382686
- var jsx_dev_runtime207, call46 = async (onDone) => {
382818
+ var jsx_dev_runtime207, call47 = async (onDone) => {
382687
382819
  const existingPort = getWebuiPort();
382688
382820
  if (existingPort) {
382689
382821
  broadcastNewWindow();
@@ -382774,7 +382906,7 @@ var init_webui2 = __esm(() => {
382774
382906
  // src/commands/reindex-sessions/reindex-sessions.tsx
382775
382907
  var exports_reindex_sessions = {};
382776
382908
  __export(exports_reindex_sessions, {
382777
- call: () => call47
382909
+ call: () => call48
382778
382910
  });
382779
382911
  function Result2({
382780
382912
  lines,
@@ -382805,7 +382937,7 @@ function Result2({
382805
382937
  ]
382806
382938
  }, undefined, true, undefined, this);
382807
382939
  }
382808
- var React65, jsx_dev_runtime208, call47 = async (onDone) => {
382940
+ var React65, jsx_dev_runtime208, call48 = async (onDone) => {
382809
382941
  const r = await rebuildIndex();
382810
382942
  if (!r.available) {
382811
382943
  return /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Result2, {
@@ -382898,7 +383030,7 @@ var init_windowsSetup = __esm(() => {
382898
383030
  // src/commands/windows-setup/windows-setup.tsx
382899
383031
  var exports_windows_setup = {};
382900
383032
  __export(exports_windows_setup, {
382901
- call: () => call48
383033
+ call: () => call49
382902
383034
  });
382903
383035
  function ToolList({
382904
383036
  onReady
@@ -383004,7 +383136,7 @@ function ToolList({
383004
383136
  ]
383005
383137
  }, undefined, true, undefined, this);
383006
383138
  }
383007
- var React66, jsx_dev_runtime209, call48 = async (onDone) => {
383139
+ var React66, jsx_dev_runtime209, call49 = async (onDone) => {
383008
383140
  return /* @__PURE__ */ jsx_dev_runtime209.jsxDEV(ToolList, {
383009
383141
  onReady: () => onDone(undefined)
383010
383142
  }, undefined, false, undefined, this);
@@ -383314,7 +383446,7 @@ var init_toolRpcServer = __esm(() => {
383314
383446
  // src/commands/rpc/rpc.tsx
383315
383447
  var exports_rpc = {};
383316
383448
  __export(exports_rpc, {
383317
- call: () => call49
383449
+ call: () => call50
383318
383450
  });
383319
383451
  function RpcStatus({
383320
383452
  port,
@@ -383448,7 +383580,7 @@ function RpcStatus({
383448
383580
  ]
383449
383581
  }, undefined, true, undefined, this);
383450
383582
  }
383451
- var React67, jsx_dev_runtime210, call49 = async (onDone) => {
383583
+ var React67, jsx_dev_runtime210, call50 = async (onDone) => {
383452
383584
  return /* @__PURE__ */ jsx_dev_runtime210.jsxDEV(RpcStatus, {
383453
383585
  port: getRpcPort(),
383454
383586
  onReady: () => onDone(undefined)
@@ -383482,7 +383614,7 @@ var init_rpc2 = __esm(() => {
383482
383614
  var exports_heartbeat = {};
383483
383615
  __export(exports_heartbeat, {
383484
383616
  isHeartbeatActive: () => isHeartbeatActive,
383485
- call: () => call50
383617
+ call: () => call51
383486
383618
  });
383487
383619
  function isHeartbeatActive() {
383488
383620
  return heartbeatActive;
@@ -383567,7 +383699,7 @@ var React68, jsx_dev_runtime211, heartbeatInterval = 5, heartbeatBeat = 0, heart
383567
383699
  • Look for quick wins: small bugs, missing tests, stale docs
383568
383700
  • Write notes to memory files about important patterns you notice
383569
383701
  • Explore anything that interests you and might be useful
383570
- • Send a Telegram update about what you found / did`, call50 = async (onDone, context7, args) => {
383702
+ • Send a Telegram update about what you found / did`, call51 = async (onDone, context7, args) => {
383571
383703
  const rawArgs = args?.trim() ?? "";
383572
383704
  const { extractChain: extractChain2, validateCommandChain: validateCommandChain2, parseCommandChain: parseCommandChain2, chainWarning: chainWarning2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
383573
383705
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
@@ -383692,7 +383824,7 @@ var init_heartbeat2 = __esm(() => {
383692
383824
  // src/commands/sysprompt/sysprompt.tsx
383693
383825
  var exports_sysprompt = {};
383694
383826
  __export(exports_sysprompt, {
383695
- call: () => call51
383827
+ call: () => call52
383696
383828
  });
383697
383829
  function SyspromptResult({
383698
383830
  message,
@@ -383713,7 +383845,7 @@ function SyspromptResult({
383713
383845
  }, undefined, false, undefined, this)
383714
383846
  }, undefined, false, undefined, this);
383715
383847
  }
383716
- var React69, jsx_dev_runtime212, call51 = async (onDone, _context, args) => {
383848
+ var React69, jsx_dev_runtime212, call52 = async (onDone, _context, args) => {
383717
383849
  const trimmed = args?.trim() ?? "";
383718
383850
  if (!trimmed) {
383719
383851
  const current = getSessionSyspromptOverride();
@@ -383772,7 +383904,7 @@ var init_sysprompt2 = __esm(() => {
383772
383904
  // src/commands/ctx/ctx.tsx
383773
383905
  var exports_ctx = {};
383774
383906
  __export(exports_ctx, {
383775
- call: () => call52
383907
+ call: () => call53
383776
383908
  });
383777
383909
  function CtxDisplay({
383778
383910
  lines,
@@ -383806,7 +383938,7 @@ function barLine(used, total, width = 40) {
383806
383938
  const color3 = pct2 > 0.85 ? "█" : "▓";
383807
383939
  return `[${"█".repeat(filled)}${" ".repeat(empty)}] ${Math.round(pct2 * 100)}%`;
383808
383940
  }
383809
- var React70, jsx_dev_runtime213, call52 = async (onDone, context7, args) => {
383941
+ var React70, jsx_dev_runtime213, call53 = async (onDone, context7, args) => {
383810
383942
  const parts = (args ?? "").trim().split(/\s+/).filter(Boolean);
383811
383943
  const sub = parts[0]?.toLowerCase();
383812
383944
  const model = context7.options.mainLoopModel;
@@ -383958,9 +384090,9 @@ var init_ctx2 = __esm(() => {
383958
384090
  // src/commands/ctx/contextsize.tsx
383959
384091
  var exports_contextsize = {};
383960
384092
  __export(exports_contextsize, {
383961
- call: () => call53
384093
+ call: () => call54
383962
384094
  });
383963
- var call53 = async (onDone, context7, args) => {
384095
+ var call54 = async (onDone, context7, args) => {
383964
384096
  const value = (args ?? "").trim();
383965
384097
  const { call: ctxCall } = await Promise.resolve().then(() => (init_ctx(), exports_ctx));
383966
384098
  if (value) {
@@ -383985,7 +384117,7 @@ var init_contextsize_index = __esm(() => {
383985
384117
  // src/commands/research/research.tsx
383986
384118
  var exports_research = {};
383987
384119
  __export(exports_research, {
383988
- call: () => call54
384120
+ call: () => call55
383989
384121
  });
383990
384122
  function buildResearchPrompt(topic, thinkHarder) {
383991
384123
  const thinkHarderSection = thinkHarder ? `
@@ -384094,7 +384226,7 @@ function ResearchWarning({
384094
384226
  }, undefined, false, undefined, this)
384095
384227
  }, undefined, false, undefined, this);
384096
384228
  }
384097
- var React71, jsx_dev_runtime214, call54 = async (onDone, _context, args) => {
384229
+ var React71, jsx_dev_runtime214, call55 = async (onDone, _context, args) => {
384098
384230
  const rawArgs = args?.trim() ?? "";
384099
384231
  const { ownArgs: topic, nextCmd } = extractChain(rawArgs);
384100
384232
  if (!topic) {
@@ -384653,10 +384785,10 @@ var init_MemoryFileSelector = __esm(() => {
384653
384785
  });
384654
384786
 
384655
384787
  // src/components/memory/MemoryUpdateNotification.tsx
384656
- import { homedir as homedir32 } from "os";
384788
+ import { homedir as homedir30 } from "os";
384657
384789
  import { relative as relative24 } from "path";
384658
384790
  function getRelativeMemoryPath(path12) {
384659
- const homeDir = homedir32();
384791
+ const homeDir = homedir30();
384660
384792
  const cwd2 = getCwd();
384661
384793
  const relativeToHome = path12.startsWith(homeDir) ? "~" + path12.slice(homeDir.length) : null;
384662
384794
  const relativeToCwd = path12.startsWith(cwd2) ? "./" + relative24(cwd2, path12) : null;
@@ -384901,7 +385033,7 @@ var init_promptEditor = __esm(() => {
384901
385033
  // src/commands/memory/memory.tsx
384902
385034
  var exports_memory = {};
384903
385035
  __export(exports_memory, {
384904
- call: () => call55
385036
+ call: () => call56
384905
385037
  });
384906
385038
  import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
384907
385039
  function MemoryCommand({
@@ -384981,7 +385113,7 @@ ${editorHint}`, {
384981
385113
  }, undefined, true, undefined, this)
384982
385114
  }, undefined, false, undefined, this);
384983
385115
  }
384984
- var React72, jsx_dev_runtime217, call55 = async (onDone) => {
385116
+ var React72, jsx_dev_runtime217, call56 = async (onDone) => {
384985
385117
  clearMemoryFileCaches();
384986
385118
  await getMemoryFiles();
384987
385119
  return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(MemoryCommand, {
@@ -385837,7 +385969,7 @@ function Help(t0) {
385837
385969
  let t6;
385838
385970
  if ($2[31] !== tabs) {
385839
385971
  t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
385840
- title: `localclawd v${"1.9.1"}`,
385972
+ title: `localclawd v${"1.9.9"}`,
385841
385973
  color: "professionalBlue",
385842
385974
  defaultTab: "general",
385843
385975
  children: tabs
@@ -385943,9 +386075,9 @@ var init_Help = __esm(() => {
385943
386075
  // src/commands/help/help.tsx
385944
386076
  var exports_help = {};
385945
386077
  __export(exports_help, {
385946
- call: () => call56
386078
+ call: () => call57
385947
386079
  });
385948
- var jsx_dev_runtime222, call56 = async (onDone, {
386080
+ var jsx_dev_runtime222, call57 = async (onDone, {
385949
386081
  options: {
385950
386082
  commands
385951
386083
  }
@@ -386152,7 +386284,7 @@ var init_IdeAutoConnectDialog = __esm(() => {
386152
386284
  var exports_ide = {};
386153
386285
  __export(exports_ide, {
386154
386286
  formatWorkspaceFolders: () => formatWorkspaceFolders,
386155
- call: () => call57
386287
+ call: () => call58
386156
386288
  });
386157
386289
  import * as path12 from "path";
386158
386290
  function IDEScreen(t0) {
@@ -386630,7 +386762,7 @@ function InstallOnMount(t0) {
386630
386762
  import_react113.useEffect(t1, t2);
386631
386763
  return null;
386632
386764
  }
386633
- async function call57(onDone, context7, args) {
386765
+ async function call58(onDone, context7, args) {
386634
386766
  logEvent("tengu_ext_ide_command", {});
386635
386767
  const {
386636
386768
  options: {
@@ -387213,11 +387345,11 @@ var init_template = __esm(() => {
387213
387345
  // src/commands/keybindings/keybindings.ts
387214
387346
  var exports_keybindings = {};
387215
387347
  __export(exports_keybindings, {
387216
- call: () => call58
387348
+ call: () => call59
387217
387349
  });
387218
387350
  import { mkdir as mkdir50, writeFile as writeFile51 } from "fs/promises";
387219
387351
  import { dirname as dirname47 } from "path";
387220
- async function call58() {
387352
+ async function call59() {
387221
387353
  if (!isKeybindingCustomizationEnabled()) {
387222
387354
  return {
387223
387355
  type: "text",
@@ -391705,7 +391837,7 @@ var init_pluginStartupCheck = __esm(() => {
391705
391837
  });
391706
391838
 
391707
391839
  // src/utils/plugins/parseMarketplaceInput.ts
391708
- import { homedir as homedir33 } from "os";
391840
+ import { homedir as homedir31 } from "os";
391709
391841
  import { resolve as resolve39 } from "path";
391710
391842
  async function parseMarketplaceInput(input) {
391711
391843
  const trimmed = input.trim();
@@ -391741,7 +391873,7 @@ async function parseMarketplaceInput(input) {
391741
391873
  const isWindows3 = process.platform === "win32";
391742
391874
  const isWindowsPath = isWindows3 && (trimmed.startsWith(".\\") || trimmed.startsWith("..\\") || /^[a-zA-Z]:[/\\]/.test(trimmed));
391743
391875
  if (trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("/") || trimmed.startsWith("~") || isWindowsPath) {
391744
- const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir33()) : trimmed);
391876
+ const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir31()) : trimmed);
391745
391877
  let stats;
391746
391878
  try {
391747
391879
  stats = await fs4.stat(resolvedPath);
@@ -401748,7 +401880,7 @@ var init_PluginSettings = __esm(() => {
401748
401880
  // src/commands/mcp/mcp.tsx
401749
401881
  var exports_mcp = {};
401750
401882
  __export(exports_mcp, {
401751
- call: () => call59
401883
+ call: () => call60
401752
401884
  });
401753
401885
  function MCPToggle(t0) {
401754
401886
  const $2 = c3(7);
@@ -401801,7 +401933,7 @@ function _temp239(c5) {
401801
401933
  function _temp100(s) {
401802
401934
  return s.mcp.clients;
401803
401935
  }
401804
- async function call59(onDone, _context, args) {
401936
+ async function call60(onDone, _context, args) {
401805
401937
  if (args) {
401806
401938
  const parts = args.trim().split(/\s+/);
401807
401939
  if (parts[0] === "no-redirect") {
@@ -402422,9 +402554,9 @@ var init_createSession = __esm(() => {
402422
402554
  // src/commands/rename/rename.ts
402423
402555
  var exports_rename = {};
402424
402556
  __export(exports_rename, {
402425
- call: () => call60
402557
+ call: () => call61
402426
402558
  });
402427
- async function call60(onDone, context7, args) {
402559
+ async function call61(onDone, context7, args) {
402428
402560
  if (isTeammate()) {
402429
402561
  onDone("Cannot rename: This session is a swarm teammate. Teammate names are set by the team leader.", { display: "system" });
402430
402562
  return null;
@@ -403099,7 +403231,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403099
403231
  }
403100
403232
  return [];
403101
403233
  }
403102
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.1") {
403234
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.9") {
403103
403235
  if (process.env.USER_TYPE === "ant") {
403104
403236
  const changelog = MACRO.VERSION_CHANGELOG;
403105
403237
  if (changelog) {
@@ -403126,7 +403258,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.1") {
403126
403258
  releaseNotes
403127
403259
  };
403128
403260
  }
403129
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.1") {
403261
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.9") {
403130
403262
  if (process.env.USER_TYPE === "ant") {
403131
403263
  const changelog = MACRO.VERSION_CHANGELOG;
403132
403264
  if (changelog) {
@@ -403283,7 +403415,7 @@ function getRecentActivitySync() {
403283
403415
  return cachedActivity;
403284
403416
  }
403285
403417
  function getLogoDisplayData() {
403286
- const version = process.env.DEMO_VERSION ?? "1.9.1";
403418
+ const version = process.env.DEMO_VERSION ?? "1.9.9";
403287
403419
  const serverUrl = getDirectConnectServerUrl();
403288
403420
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403289
403421
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -403789,7 +403921,7 @@ var init_referral = __esm(() => {
403789
403921
  });
403790
403922
 
403791
403923
  // src/components/Logo/feedConfigs.tsx
403792
- import { homedir as homedir34 } from "os";
403924
+ import { homedir as homedir32 } from "os";
403793
403925
  function createRecentActivityFeed(activities) {
403794
403926
  const lines = activities.map((log2) => {
403795
403927
  const time = formatRelativeTimeAgo(log2.modified);
@@ -403834,7 +403966,7 @@ function createProjectOnboardingFeed(steps) {
403834
403966
  text: `${checkmark}${text}`
403835
403967
  };
403836
403968
  });
403837
- 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;
403969
+ 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;
403838
403970
  if (warningText) {
403839
403971
  lines.push({
403840
403972
  text: warningText
@@ -404383,7 +404515,7 @@ function Logo() {
404383
404515
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
404384
404516
  t2 = () => {
404385
404517
  const currentConfig = getGlobalConfig();
404386
- if (currentConfig.lastReleaseNotesSeen === "1.9.1") {
404518
+ if (currentConfig.lastReleaseNotesSeen === "1.9.9") {
404387
404519
  return;
404388
404520
  }
404389
404521
  saveGlobalConfig(_temp326);
@@ -405042,12 +405174,12 @@ function Logo() {
405042
405174
  return t41;
405043
405175
  }
405044
405176
  function _temp326(current) {
405045
- if (current.lastReleaseNotesSeen === "1.9.1") {
405177
+ if (current.lastReleaseNotesSeen === "1.9.9") {
405046
405178
  return current;
405047
405179
  }
405048
405180
  return {
405049
405181
  ...current,
405050
- lastReleaseNotesSeen: "1.9.1"
405182
+ lastReleaseNotesSeen: "1.9.9"
405051
405183
  };
405052
405184
  }
405053
405185
  function _temp241(s_0) {
@@ -410940,7 +411072,7 @@ var init_crossProjectResume = __esm(() => {
410940
411072
  var exports_resume = {};
410941
411073
  __export(exports_resume, {
410942
411074
  filterResumableSessions: () => filterResumableSessions,
410943
- call: () => call61
411075
+ call: () => call62
410944
411076
  });
410945
411077
  function resumeHelpMessage(result) {
410946
411078
  switch (result.resultType) {
@@ -411125,7 +411257,7 @@ function ResumeCommand({
411125
411257
  function filterResumableSessions(logs2, currentSessionId) {
411126
411258
  return logs2.filter((l) => !l.isSidechain && getSessionIdFromLog(l) !== currentSessionId);
411127
411259
  }
411128
- var React97, jsx_dev_runtime273, call61 = async (onDone, context7, args) => {
411260
+ var React97, jsx_dev_runtime273, call62 = async (onDone, context7, args) => {
411129
411261
  const onResume = async (sessionId, log2, entrypoint) => {
411130
411262
  try {
411131
411263
  await context7.resume?.(sessionId, log2, entrypoint);
@@ -411615,7 +411747,7 @@ var init_UltrareviewOverageDialog = __esm(() => {
411615
411747
  // src/commands/review/ultrareviewCommand.tsx
411616
411748
  var exports_ultrareviewCommand = {};
411617
411749
  __export(exports_ultrareviewCommand, {
411618
- call: () => call62
411750
+ call: () => call63
411619
411751
  });
411620
411752
  function contentBlocksToString(blocks) {
411621
411753
  return blocks.map((b3) => b3.type === "text" ? b3.text : "").filter(Boolean).join(`
@@ -411635,7 +411767,7 @@ async function launchAndDone(args, context7, onDone, billingNote, signal2) {
411635
411767
  });
411636
411768
  }
411637
411769
  }
411638
- var jsx_dev_runtime275, call62 = async (onDone, context7, args) => {
411770
+ var jsx_dev_runtime275, call63 = async (onDone, context7, args) => {
411639
411771
  const gate = await checkOverageGate();
411640
411772
  if (gate.kind === "not-enabled") {
411641
411773
  onDone("Free ultrareviews used. This feature requires a cloud subscription.", {
@@ -415961,7 +416093,7 @@ var init_server = __esm(() => {
415961
416093
  // src/commands/session/session.tsx
415962
416094
  var exports_session = {};
415963
416095
  __export(exports_session, {
415964
- call: () => call63
416096
+ call: () => call64
415965
416097
  });
415966
416098
  function SessionInfo(t0) {
415967
416099
  const $2 = c3(19);
@@ -416134,7 +416266,7 @@ function _temp247(e) {
416134
416266
  function _temp119(s) {
416135
416267
  return s.remoteSessionUrl;
416136
416268
  }
416137
- var import_react150, jsx_dev_runtime276, call63 = async (onDone) => {
416269
+ var import_react150, jsx_dev_runtime276, call64 = async (onDone) => {
416138
416270
  return /* @__PURE__ */ jsx_dev_runtime276.jsxDEV(SessionInfo, {
416139
416271
  onDone
416140
416272
  }, undefined, false, undefined, this);
@@ -416490,9 +416622,9 @@ var init_SkillsMenu = __esm(() => {
416490
416622
  // src/commands/skills/skills.tsx
416491
416623
  var exports_skills2 = {};
416492
416624
  __export(exports_skills2, {
416493
- call: () => call64
416625
+ call: () => call65
416494
416626
  });
416495
- async function call64(onDone, context7) {
416627
+ async function call65(onDone, context7) {
416496
416628
  return /* @__PURE__ */ jsx_dev_runtime278.jsxDEV(SkillsMenu, {
416497
416629
  onExit: onDone,
416498
416630
  commands: context7.options.commands
@@ -416519,9 +416651,9 @@ var init_skills3 = __esm(() => {
416519
416651
  // src/commands/status/status.tsx
416520
416652
  var exports_status = {};
416521
416653
  __export(exports_status, {
416522
- call: () => call65
416654
+ call: () => call66
416523
416655
  });
416524
- async function call65(onDone, context7) {
416656
+ async function call66(onDone, context7) {
416525
416657
  return /* @__PURE__ */ jsx_dev_runtime279.jsxDEV(Settings, {
416526
416658
  onClose: onDone,
416527
416659
  context: context7,
@@ -417132,7 +417264,7 @@ ${reasons}`,
417132
417264
  } : prev);
417133
417265
  }
417134
417266
  }
417135
- var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call66 = async (onDone, context7, args) => {
417267
+ var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call67 = async (onDone, context7, args) => {
417136
417268
  const blurb = args.trim();
417137
417269
  if (!blurb) {
417138
417270
  const msg = await launchUltraplan2({
@@ -417193,7 +417325,7 @@ var init_ultraplan = __esm(() => {
417193
417325
  argumentHint: "<prompt>",
417194
417326
  isEnabled: () => false,
417195
417327
  load: () => Promise.resolve({
417196
- call: call66
417328
+ call: call67
417197
417329
  })
417198
417330
  };
417199
417331
  });
@@ -421955,9 +422087,9 @@ var init_BackgroundTasksDialog = __esm(() => {
421955
422087
  // src/commands/tasks/tasks.tsx
421956
422088
  var exports_tasks = {};
421957
422089
  __export(exports_tasks, {
421958
- call: () => call67
422090
+ call: () => call68
421959
422091
  });
421960
- async function call67(onDone, context7) {
422092
+ async function call68(onDone, context7) {
421961
422093
  return /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(BackgroundTasksDialog, {
421962
422094
  toolUseContext: context7,
421963
422095
  onDone
@@ -422248,9 +422380,9 @@ var init_terminalSetup2 = __esm(() => {
422248
422380
  // src/commands/usage/usage.tsx
422249
422381
  var exports_usage = {};
422250
422382
  __export(exports_usage, {
422251
- call: () => call68
422383
+ call: () => call69
422252
422384
  });
422253
- var jsx_dev_runtime291, call68 = async (onDone, context7) => {
422385
+ var jsx_dev_runtime291, call69 = async (onDone, context7) => {
422254
422386
  return /* @__PURE__ */ jsx_dev_runtime291.jsxDEV(Settings, {
422255
422387
  onClose: onDone,
422256
422388
  context: context7,
@@ -422281,7 +422413,7 @@ var init_usage3 = __esm(() => {
422281
422413
  // src/commands/theme/theme.tsx
422282
422414
  var exports_theme = {};
422283
422415
  __export(exports_theme, {
422284
- call: () => call69
422416
+ call: () => call70
422285
422417
  });
422286
422418
  function ThemePickerCommand(t0) {
422287
422419
  const $2 = c3(8);
@@ -422331,7 +422463,7 @@ function ThemePickerCommand(t0) {
422331
422463
  }
422332
422464
  return t3;
422333
422465
  }
422334
- var jsx_dev_runtime292, call69 = async (onDone, _context) => {
422466
+ var jsx_dev_runtime292, call70 = async (onDone, _context) => {
422335
422467
  return /* @__PURE__ */ jsx_dev_runtime292.jsxDEV(ThemePickerCommand, {
422336
422468
  onDone
422337
422469
  }, undefined, false, undefined, this);
@@ -422358,9 +422490,9 @@ var init_theme3 = __esm(() => {
422358
422490
  // src/commands/vim/vim.ts
422359
422491
  var exports_vim = {};
422360
422492
  __export(exports_vim, {
422361
- call: () => call70
422493
+ call: () => call71
422362
422494
  });
422363
- var call70 = async () => {
422495
+ var call71 = async () => {
422364
422496
  const config2 = getGlobalConfig();
422365
422497
  let currentMode = config2.editorMode || "normal";
422366
422498
  if (currentMode === "emacs") {
@@ -422401,7 +422533,7 @@ var init_vim2 = __esm(() => {
422401
422533
  var exports_thinkback = {};
422402
422534
  __export(exports_thinkback, {
422403
422535
  playAnimation: () => playAnimation,
422404
- call: () => call71
422536
+ call: () => call72
422405
422537
  });
422406
422538
  import { execa as execa11 } from "execa";
422407
422539
  import { readFile as readFile61 } from "fs/promises";
@@ -422939,7 +423071,7 @@ function ThinkbackFlow(t0) {
422939
423071
  }
422940
423072
  return t8;
422941
423073
  }
422942
- async function call71(onDone) {
423074
+ async function call72(onDone) {
422943
423075
  return /* @__PURE__ */ jsx_dev_runtime293.jsxDEV(ThinkbackFlow, {
422944
423076
  onDone
422945
423077
  }, undefined, false, undefined, this);
@@ -422984,14 +423116,14 @@ var init_thinkback2 = __esm(() => {
422984
423116
  // src/commands/thinkback-play/thinkback-play.ts
422985
423117
  var exports_thinkback_play = {};
422986
423118
  __export(exports_thinkback_play, {
422987
- call: () => call72
423119
+ call: () => call73
422988
423120
  });
422989
423121
  import { join as join139 } from "path";
422990
423122
  function getPluginId2() {
422991
423123
  const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
422992
423124
  return `thinkback@${marketplaceName}`;
422993
423125
  }
422994
- async function call72() {
423126
+ async function call73() {
422995
423127
  const v2Data = loadInstalledPluginsV2();
422996
423128
  const pluginId = getPluginId2();
422997
423129
  const installations = v2Data.plugins[pluginId];
@@ -425479,9 +425611,9 @@ var init_PermissionRuleList = __esm(() => {
425479
425611
  // src/commands/permissions/permissions.tsx
425480
425612
  var exports_permissions = {};
425481
425613
  __export(exports_permissions, {
425482
- call: () => call73
425614
+ call: () => call74
425483
425615
  });
425484
- var jsx_dev_runtime301, call73 = async (onDone, context7) => {
425616
+ var jsx_dev_runtime301, call74 = async (onDone, context7) => {
425485
425617
  return /* @__PURE__ */ jsx_dev_runtime301.jsxDEV(PermissionRuleList, {
425486
425618
  onExit: onDone,
425487
425619
  onRetryDenials: (commands) => {
@@ -425511,7 +425643,7 @@ var init_permissions4 = __esm(() => {
425511
425643
  // src/commands/plan/plan.tsx
425512
425644
  var exports_plan = {};
425513
425645
  __export(exports_plan, {
425514
- call: () => call74
425646
+ call: () => call75
425515
425647
  });
425516
425648
  function PlanDisplay(t0) {
425517
425649
  const $2 = c3(11);
@@ -425599,7 +425731,7 @@ function PlanDisplay(t0) {
425599
425731
  }
425600
425732
  return t5;
425601
425733
  }
425602
- async function call74(onDone, context7, args) {
425734
+ async function call75(onDone, context7, args) {
425603
425735
  const {
425604
425736
  getAppState,
425605
425737
  setAppState
@@ -425741,7 +425873,7 @@ var init_FastIcon = __esm(() => {
425741
425873
  // src/commands/fast/fast.tsx
425742
425874
  var exports_fast = {};
425743
425875
  __export(exports_fast, {
425744
- call: () => call75,
425876
+ call: () => call76,
425745
425877
  FastModePicker: () => FastModePicker
425746
425878
  });
425747
425879
  function applyFastMode(enable, setAppState) {
@@ -426056,7 +426188,7 @@ async function handleFastModeShortcut(enable, getAppState, setAppState) {
426056
426188
  return `Fast mode OFF`;
426057
426189
  }
426058
426190
  }
426059
- async function call75(onDone, context7, args) {
426191
+ async function call76(onDone, context7, args) {
426060
426192
  if (!isFastModeEnabled()) {
426061
426193
  return null;
426062
426194
  }
@@ -426364,9 +426496,9 @@ var init_Passes = __esm(() => {
426364
426496
  // src/commands/passes/passes.tsx
426365
426497
  var exports_passes = {};
426366
426498
  __export(exports_passes, {
426367
- call: () => call76
426499
+ call: () => call77
426368
426500
  });
426369
- async function call76(onDone) {
426501
+ async function call77(onDone) {
426370
426502
  const config2 = getGlobalConfig();
426371
426503
  const isFirstVisit = !config2.hasVisitedPasses;
426372
426504
  if (isFirstVisit) {
@@ -427128,9 +427260,9 @@ var init_Grove = __esm(() => {
427128
427260
  // src/commands/privacy-settings/privacy-settings.tsx
427129
427261
  var exports_privacy_settings = {};
427130
427262
  __export(exports_privacy_settings, {
427131
- call: () => call77
427263
+ call: () => call78
427132
427264
  });
427133
- async function call77(onDone) {
427265
+ async function call78(onDone) {
427134
427266
  const qualified = await isQualifiedForGrove();
427135
427267
  if (!qualified) {
427136
427268
  onDone(FALLBACK_MESSAGE);
@@ -428970,9 +429102,9 @@ var init_HooksConfigMenu = __esm(() => {
428970
429102
  // src/commands/hooks/hooks.tsx
428971
429103
  var exports_hooks = {};
428972
429104
  __export(exports_hooks, {
428973
- call: () => call78
429105
+ call: () => call79
428974
429106
  });
428975
- var jsx_dev_runtime314, call78 = async (onDone, context7) => {
429107
+ var jsx_dev_runtime314, call79 = async (onDone, context7) => {
428976
429108
  logEvent("tengu_hooks_command", {});
428977
429109
  const appState = context7.getAppState();
428978
429110
  const permissionContext = appState.toolPermissionContext;
@@ -429004,10 +429136,10 @@ var init_hooks3 = __esm(() => {
429004
429136
  // src/commands/files/files.ts
429005
429137
  var exports_files2 = {};
429006
429138
  __export(exports_files2, {
429007
- call: () => call79
429139
+ call: () => call80
429008
429140
  });
429009
429141
  import { relative as relative26 } from "path";
429010
- async function call79(_args, context7) {
429142
+ async function call80(_args, context7) {
429011
429143
  const files = context7.readFileState ? cacheKeys(context7.readFileState) : [];
429012
429144
  if (files.length === 0) {
429013
429145
  return { type: "text", value: "No files in context" };
@@ -429040,7 +429172,7 @@ var init_files4 = __esm(() => {
429040
429172
  var exports_branch = {};
429041
429173
  __export(exports_branch, {
429042
429174
  deriveFirstPrompt: () => deriveFirstPrompt,
429043
- call: () => call80
429175
+ call: () => call81
429044
429176
  });
429045
429177
  import { randomUUID as randomUUID27 } from "crypto";
429046
429178
  import { mkdir as mkdir52, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
@@ -429146,7 +429278,7 @@ async function getUniqueForkName(baseName) {
429146
429278
  }
429147
429279
  return `${baseName} (Branch ${nextNumber})`;
429148
429280
  }
429149
- async function call80(onDone, context7, args) {
429281
+ async function call81(onDone, context7, args) {
429150
429282
  const customTitle = args?.trim() || undefined;
429151
429283
  const originalSessionId = getSessionId();
429152
429284
  try {
@@ -435161,9 +435293,9 @@ var init_AgentsMenu = __esm(() => {
435161
435293
  // src/commands/agents/agents.tsx
435162
435294
  var exports_agents = {};
435163
435295
  __export(exports_agents, {
435164
- call: () => call81
435296
+ call: () => call82
435165
435297
  });
435166
- async function call81(onDone, context7) {
435298
+ async function call82(onDone, context7) {
435167
435299
  const appState = context7.getAppState();
435168
435300
  const permissionContext = appState.toolPermissionContext;
435169
435301
  const tools = getTools(permissionContext);
@@ -435194,9 +435326,9 @@ var init_agents2 = __esm(() => {
435194
435326
  // src/commands/plugin/plugin.tsx
435195
435327
  var exports_plugin = {};
435196
435328
  __export(exports_plugin, {
435197
- call: () => call82
435329
+ call: () => call83
435198
435330
  });
435199
- async function call82(onDone, _context, args) {
435331
+ async function call83(onDone, _context, args) {
435200
435332
  return /* @__PURE__ */ jsx_dev_runtime340.jsxDEV(PluginSettings, {
435201
435333
  onComplete: onDone,
435202
435334
  args
@@ -435361,12 +435493,12 @@ var init_refresh = __esm(() => {
435361
435493
  // src/commands/reload-plugins/reload-plugins.ts
435362
435494
  var exports_reload_plugins = {};
435363
435495
  __export(exports_reload_plugins, {
435364
- call: () => call83
435496
+ call: () => call84
435365
435497
  });
435366
435498
  function n(count3, noun) {
435367
435499
  return `${count3} ${plural(count3, noun)}`;
435368
435500
  }
435369
- var call83 = async (_args, context7) => {
435501
+ var call84 = async (_args, context7) => {
435370
435502
  if (false) {}
435371
435503
  const r = await refreshActivePlugins(context7.setAppState);
435372
435504
  const parts = [
@@ -435409,9 +435541,9 @@ var init_reload_plugins2 = __esm(() => {
435409
435541
  // src/commands/rewind/rewind.ts
435410
435542
  var exports_rewind = {};
435411
435543
  __export(exports_rewind, {
435412
- call: () => call84
435544
+ call: () => call85
435413
435545
  });
435414
- async function call84(_args, context7) {
435546
+ async function call85(_args, context7) {
435415
435547
  if (context7.openMessageSelector) {
435416
435548
  context7.openMessageSelector();
435417
435549
  }
@@ -435526,7 +435658,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435526
435658
  smapsRollup,
435527
435659
  platform: process.platform,
435528
435660
  nodeVersion: process.version,
435529
- ccVersion: "1.9.1"
435661
+ ccVersion: "1.9.9"
435530
435662
  };
435531
435663
  }
435532
435664
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -435596,9 +435728,9 @@ var init_heapDumpService = __esm(() => {
435596
435728
  // src/commands/heapdump/heapdump.ts
435597
435729
  var exports_heapdump = {};
435598
435730
  __export(exports_heapdump, {
435599
- call: () => call85
435731
+ call: () => call86
435600
435732
  });
435601
- async function call85() {
435733
+ async function call86() {
435602
435734
  const result = await performHeapDump();
435603
435735
  if (!result.success) {
435604
435736
  return {
@@ -435969,7 +436101,7 @@ var USAGE = `/bridge-kick <subcommand>
435969
436101
  reconnect-session fail next POST /bridge/reconnect fails
435970
436102
  heartbeat <status> next heartbeat throws BridgeFatalError(status)
435971
436103
  reconnect call reconnectEnvironmentWithSession directly
435972
- status print bridge state`, call86 = async (args) => {
436104
+ status print bridge state`, call87 = async (args) => {
435973
436105
  const h = getBridgeDebugHandle();
435974
436106
  if (!h) {
435975
436107
  return {
@@ -436102,16 +436234,16 @@ var init_bridge_kick = __esm(() => {
436102
436234
  description: "Inject bridge failure states for manual recovery testing",
436103
436235
  isEnabled: () => process.env.USER_TYPE === "ant",
436104
436236
  supportsNonInteractive: false,
436105
- load: () => Promise.resolve({ call: call86 })
436237
+ load: () => Promise.resolve({ call: call87 })
436106
436238
  };
436107
436239
  bridge_kick_default = bridgeKick;
436108
436240
  });
436109
436241
 
436110
436242
  // src/commands/version.ts
436111
- var call87 = async () => {
436243
+ var call88 = async () => {
436112
436244
  return {
436113
436245
  type: "text",
436114
- value: `${"1.9.1"} (built ${"2026-05-07T18:03:44.736Z"})`
436246
+ value: `${"1.9.9"} (built ${"2026-05-07T20:02:04.277Z"})`
436115
436247
  };
436116
436248
  }, version, version_default;
436117
436249
  var init_version = __esm(() => {
@@ -436121,7 +436253,7 @@ var init_version = __esm(() => {
436121
436253
  description: "Print the version this session is running (not what autoupdate downloaded)",
436122
436254
  isEnabled: () => process.env.USER_TYPE === "ant",
436123
436255
  supportsNonInteractive: true,
436124
- load: () => Promise.resolve({ call: call87 })
436256
+ load: () => Promise.resolve({ call: call88 })
436125
436257
  };
436126
436258
  version_default = version;
436127
436259
  });
@@ -437277,10 +437409,10 @@ var init_SandboxSettings = __esm(() => {
437277
437409
  // src/commands/sandbox-toggle/sandbox-toggle.tsx
437278
437410
  var exports_sandbox_toggle = {};
437279
437411
  __export(exports_sandbox_toggle, {
437280
- call: () => call88
437412
+ call: () => call89
437281
437413
  });
437282
437414
  import { relative as relative27 } from "path";
437283
- async function call88(onDone, _context, args) {
437415
+ async function call89(onDone, _context, args) {
437284
437416
  const settings = getSettings_DEPRECATED();
437285
437417
  const themeName = settings.theme || "light";
437286
437418
  const platform3 = getPlatform();
@@ -437385,7 +437517,7 @@ var init_sandbox_toggle2 = __esm(() => {
437385
437517
  });
437386
437518
 
437387
437519
  // src/commands/advisor.ts
437388
- var call89 = async (args, context7) => {
437520
+ var call90 = async (args, context7) => {
437389
437521
  const arg = args.trim().toLowerCase();
437390
437522
  const baseModel = parseUserSpecifiedModel(context7.getAppState().mainLoopModel ?? getDefaultMainLoopModelSetting());
437391
437523
  if (!arg) {
@@ -437471,7 +437603,7 @@ var init_advisor2 = __esm(() => {
437471
437603
  return !canUserConfigureAdvisor();
437472
437604
  },
437473
437605
  supportsNonInteractive: true,
437474
- load: () => Promise.resolve({ call: call89 })
437606
+ load: () => Promise.resolve({ call: call90 })
437475
437607
  };
437476
437608
  advisor_default = advisor;
437477
437609
  });
@@ -437883,12 +438015,12 @@ var init_ExitFlow = __esm(() => {
437883
438015
  // src/commands/exit/exit.tsx
437884
438016
  var exports_exit = {};
437885
438017
  __export(exports_exit, {
437886
- call: () => call90
438018
+ call: () => call91
437887
438019
  });
437888
438020
  function getRandomGoodbyeMessage2() {
437889
438021
  return sample_default(GOODBYE_MESSAGES2) ?? "Goodbye!";
437890
438022
  }
437891
- async function call90(onDone) {
438023
+ async function call91(onDone) {
437892
438024
  if (false) {}
437893
438025
  const showWorktree = getCurrentWorktreeSession() !== null;
437894
438026
  if (showWorktree) {
@@ -438182,7 +438314,7 @@ var exports_export = {};
438182
438314
  __export(exports_export, {
438183
438315
  sanitizeFilename: () => sanitizeFilename,
438184
438316
  extractFirstPrompt: () => extractFirstPrompt,
438185
- call: () => call91
438317
+ call: () => call92
438186
438318
  });
438187
438319
  import { join as join144 } from "path";
438188
438320
  function formatTimestamp(date2) {
@@ -438223,7 +438355,7 @@ async function exportWithReactRenderer(context7) {
438223
438355
  const tools = context7.options.tools || [];
438224
438356
  return renderMessagesToPlainText(context7.messages, tools);
438225
438357
  }
438226
- async function call91(onDone, context7, args) {
438358
+ async function call92(onDone, context7, args) {
438227
438359
  const content = await exportWithReactRenderer(context7);
438228
438360
  const filename = args.trim();
438229
438361
  if (filename) {
@@ -438283,7 +438415,7 @@ var init_export2 = __esm(() => {
438283
438415
  // src/commands/model/model.tsx
438284
438416
  var exports_model2 = {};
438285
438417
  __export(exports_model2, {
438286
- call: () => call92
438418
+ call: () => call93
438287
438419
  });
438288
438420
  function ModelPickerWrapper(t0) {
438289
438421
  const $2 = c3(17);
@@ -438531,7 +438663,7 @@ function renderModelLabel(model) {
438531
438663
  const rendered = renderDefaultModelSetting(model ?? getDefaultMainLoopModelSetting());
438532
438664
  return model === null ? `${rendered} (default)` : rendered;
438533
438665
  }
438534
- var React116, jsx_dev_runtime352, call92 = async (onDone, _context, args) => {
438666
+ var React116, jsx_dev_runtime352, call93 = async (onDone, _context, args) => {
438535
438667
  args = args?.trim() || "";
438536
438668
  if (COMMON_INFO_ARGS.includes(args)) {
438537
438669
  logEvent("tengu_model_command_inline_help", {
@@ -438598,7 +438730,7 @@ var init_model3 = __esm(() => {
438598
438730
  // src/commands/tag/tag.tsx
438599
438731
  var exports_tag = {};
438600
438732
  __export(exports_tag, {
438601
- call: () => call93
438733
+ call: () => call94
438602
438734
  });
438603
438735
  function ConfirmRemoveTag(t0) {
438604
438736
  const $2 = c3(11);
@@ -438822,7 +438954,7 @@ Examples:
438822
438954
  React117.useEffect(t1, t2);
438823
438955
  return null;
438824
438956
  }
438825
- async function call93(onDone, _context, args) {
438957
+ async function call94(onDone, _context, args) {
438826
438958
  args = args?.trim() || "";
438827
438959
  if (COMMON_INFO_ARGS.includes(args) || COMMON_HELP_ARGS.includes(args)) {
438828
438960
  return /* @__PURE__ */ jsx_dev_runtime353.jsxDEV(ShowHelp, {
@@ -438869,9 +439001,9 @@ var init_tag2 = __esm(() => {
438869
439001
  // src/commands/output-style/output-style.tsx
438870
439002
  var exports_output_style = {};
438871
439003
  __export(exports_output_style, {
438872
- call: () => call94
439004
+ call: () => call95
438873
439005
  });
438874
- async function call94(onDone) {
439006
+ async function call95(onDone) {
438875
439007
  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.", {
438876
439008
  display: "system"
438877
439009
  });
@@ -438893,7 +439025,7 @@ var init_output_style = __esm(() => {
438893
439025
  // src/commands/provider/provider.tsx
438894
439026
  var exports_provider = {};
438895
439027
  __export(exports_provider, {
438896
- call: () => call95
439028
+ call: () => call96
438897
439029
  });
438898
439030
  function formatProviderSavedMessage(config2) {
438899
439031
  const providerLabel = getLocalLLMProviderLabel(config2.provider);
@@ -438907,7 +439039,7 @@ function formatProviderSavedMessage(config2) {
438907
439039
  ].join(`
438908
439040
  `);
438909
439041
  }
438910
- var jsx_dev_runtime354, call95 = async (onDone) => {
439042
+ var jsx_dev_runtime354, call96 = async (onDone) => {
438911
439043
  const config2 = getGlobalConfig();
438912
439044
  function handleComplete(nextConfig) {
438913
439045
  saveGlobalConfig((current) => ({
@@ -439463,9 +439595,9 @@ var init_RemoteEnvironmentDialog = __esm(() => {
439463
439595
  // src/commands/remote-env/remote-env.tsx
439464
439596
  var exports_remote_env = {};
439465
439597
  __export(exports_remote_env, {
439466
- call: () => call96
439598
+ call: () => call97
439467
439599
  });
439468
- async function call96(onDone) {
439600
+ async function call97(onDone) {
439469
439601
  return /* @__PURE__ */ jsx_dev_runtime356.jsxDEV(RemoteEnvironmentDialog, {
439470
439602
  onDone
439471
439603
  }, undefined, false, undefined, this);
@@ -439545,7 +439677,7 @@ var exports_effort = {};
439545
439677
  __export(exports_effort, {
439546
439678
  showCurrentEffort: () => showCurrentEffort,
439547
439679
  executeEffort: () => executeEffort,
439548
- call: () => call97
439680
+ call: () => call98
439549
439681
  });
439550
439682
  function setEffortValue(effortValue) {
439551
439683
  const persistable = toPersistableEffort(effortValue);
@@ -439696,7 +439828,7 @@ function ApplyEffortAndClose(t0) {
439696
439828
  React118.useEffect(t1, t2);
439697
439829
  return null;
439698
439830
  }
439699
- async function call97(onDone, _context, args) {
439831
+ async function call98(onDone, _context, args) {
439700
439832
  args = args?.trim() || "";
439701
439833
  if (COMMON_HELP_ARGS2.includes(args)) {
439702
439834
  onDone(`Usage: /effort [low|medium|high|max|auto]
@@ -442528,9 +442660,9 @@ var init_Stats = __esm(() => {
442528
442660
  // src/commands/stats/stats.tsx
442529
442661
  var exports_stats = {};
442530
442662
  __export(exports_stats, {
442531
- call: () => call98
442663
+ call: () => call99
442532
442664
  });
442533
- var jsx_dev_runtime359, call98 = async (onDone) => {
442665
+ var jsx_dev_runtime359, call99 = async (onDone) => {
442534
442666
  return /* @__PURE__ */ jsx_dev_runtime359.jsxDEV(Stats2, {
442535
442667
  onClose: onDone
442536
442668
  }, undefined, false, undefined, this);
@@ -444055,7 +444187,7 @@ function generateHtmlReport(data, insights) {
444055
444187
  </html>`;
444056
444188
  }
444057
444189
  function buildExportData(data, insights, facets, remoteStats) {
444058
- const version2 = typeof MACRO !== "undefined" ? "1.9.1" : "unknown";
444190
+ const version2 = typeof MACRO !== "undefined" ? "1.9.9" : "unknown";
444059
444191
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444060
444192
  const facets_summary = {
444061
444193
  total: facets.size,
@@ -444998,6 +445130,7 @@ var init_commands2 = __esm(() => {
444998
445130
  init_buddy2();
444999
445131
  init_images2();
445000
445132
  init_image_pipeline2();
445133
+ init_image_tips();
445001
445134
  init_keepgoing2();
445002
445135
  init_telegram2();
445003
445136
  init_slack2();
@@ -445211,6 +445344,7 @@ var init_commands2 = __esm(() => {
445211
445344
  buddy_default,
445212
445345
  images_default,
445213
445346
  image_pipeline_default,
445347
+ image_tips_default,
445214
445348
  telegram_default,
445215
445349
  slack_default,
445216
445350
  discord_default,
@@ -448256,7 +448390,7 @@ var init_sessionStorage = __esm(() => {
448256
448390
  init_settings2();
448257
448391
  init_slowOperations();
448258
448392
  init_uuid();
448259
- VERSION6 = typeof MACRO !== "undefined" ? "1.9.1" : "unknown";
448393
+ VERSION6 = typeof MACRO !== "undefined" ? "1.9.9" : "unknown";
448260
448394
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448261
448395
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448262
448396
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -448587,7 +448721,7 @@ var init_agentMemory = __esm(() => {
448587
448721
 
448588
448722
  // src/utils/permissions/filesystem.ts
448589
448723
  import { randomBytes as randomBytes20 } from "crypto";
448590
- import { homedir as homedir35, tmpdir as tmpdir10 } from "os";
448724
+ import { homedir as homedir33, tmpdir as tmpdir10 } from "os";
448591
448725
  import { join as join151, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
448592
448726
  function normalizeCaseForComparison(path15) {
448593
448727
  return path15.toLowerCase();
@@ -448601,7 +448735,7 @@ function getClaudeSkillScope(filePath) {
448601
448735
  prefix: "/.claude/skills/"
448602
448736
  },
448603
448737
  {
448604
- dir: expandPath(join151(homedir35(), ".claude", "skills")),
448738
+ dir: expandPath(join151(homedir33(), ".claude", "skills")),
448605
448739
  prefix: "~/.claude/skills/"
448606
448740
  }
448607
448741
  ];
@@ -448915,7 +449049,7 @@ function patternWithRoot(pattern, source) {
448915
449049
  } else if (pattern.startsWith(`~${DIR_SEP}`)) {
448916
449050
  return {
448917
449051
  relativePattern: pattern.slice(1),
448918
- root: homedir35().normalize("NFC")
449052
+ root: homedir33().normalize("NFC")
448919
449053
  };
448920
449054
  } else if (pattern.startsWith(DIR_SEP)) {
448921
449055
  return {
@@ -449457,7 +449591,7 @@ var init_filesystem = __esm(() => {
449457
449591
  });
449458
449592
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
449459
449593
  const nonce = randomBytes20(16).toString("hex");
449460
- return join151(getClaudeTempDir(), "bundled-skills", "1.9.1", nonce);
449594
+ return join151(getClaudeTempDir(), "bundled-skills", "1.9.9", nonce);
449461
449595
  });
449462
449596
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
449463
449597
  });
@@ -457124,7 +457258,7 @@ __export(exports_upstreamproxy, {
457124
457258
  SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
457125
457259
  });
457126
457260
  import { mkdir as mkdir60, readFile as readFile67, unlink as unlink24, writeFile as writeFile60 } from "fs/promises";
457127
- import { homedir as homedir36 } from "os";
457261
+ import { homedir as homedir34 } from "os";
457128
457262
  import { join as join154 } from "path";
457129
457263
  async function initUpstreamProxy(opts) {
457130
457264
  if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
@@ -457146,7 +457280,7 @@ async function initUpstreamProxy(opts) {
457146
457280
  }
457147
457281
  setNonDumpable();
457148
457282
  const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
457149
- const caBundlePath = opts?.caBundlePath ?? join154(homedir36(), ".ccr", "ca-bundle.crt");
457283
+ const caBundlePath = opts?.caBundlePath ?? join154(homedir34(), ".ccr", "ca-bundle.crt");
457150
457284
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
457151
457285
  if (!caOk)
457152
457286
  return state;
@@ -458694,7 +458828,7 @@ function buildSystemInitMessage(inputs) {
458694
458828
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458695
458829
  apiKeySource: getAnthropicApiKeyWithSource().source,
458696
458830
  betas: getSdkBetas(),
458697
- claude_code_version: "1.9.1",
458831
+ claude_code_version: "1.9.9",
458698
458832
  output_style: outputStyle2,
458699
458833
  agents: inputs.agents.map((agent) => agent.agentType),
458700
458834
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -465052,7 +465186,7 @@ var init_ShowInIDEPrompt = __esm(() => {
465052
465186
  });
465053
465187
 
465054
465188
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
465055
- import { homedir as homedir37 } from "os";
465189
+ import { homedir as homedir35 } from "os";
465056
465190
  import { basename as basename47, join as join155, sep as sep33 } from "path";
465057
465191
  function isInClaudeFolder(filePath) {
465058
465192
  const absolutePath = expandPath(filePath);
@@ -465063,7 +465197,7 @@ function isInClaudeFolder(filePath) {
465063
465197
  }
465064
465198
  function isInGlobalClaudeFolder(filePath) {
465065
465199
  const absolutePath = expandPath(filePath);
465066
- const globalClaudeFolderPath = join155(homedir37(), ".claude");
465200
+ const globalClaudeFolderPath = join155(homedir35(), ".claude");
465067
465201
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
465068
465202
  const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison(globalClaudeFolderPath);
465069
465203
  return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
@@ -472851,7 +472985,7 @@ var init_useVoiceEnabled = __esm(() => {
472851
472985
  function getSemverPart(version2) {
472852
472986
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
472853
472987
  }
472854
- function useUpdateNotification(updatedVersion, initialVersion = "1.9.1") {
472988
+ function useUpdateNotification(updatedVersion, initialVersion = "1.9.9") {
472855
472989
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
472856
472990
  if (!updatedVersion) {
472857
472991
  return null;
@@ -472891,7 +473025,7 @@ function AutoUpdater({
472891
473025
  return;
472892
473026
  }
472893
473027
  if (false) {}
472894
- const currentVersion = "1.9.1";
473028
+ const currentVersion = "1.9.9";
472895
473029
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472896
473030
  let latestVersion = await getLatestVersion(channel);
472897
473031
  const isDisabled = isAutoUpdaterDisabled();
@@ -473102,12 +473236,12 @@ function NativeAutoUpdater({
473102
473236
  logEvent("tengu_native_auto_updater_start", {});
473103
473237
  try {
473104
473238
  const maxVersion = await getMaxVersion();
473105
- if (maxVersion && gt("1.9.1", maxVersion)) {
473239
+ if (maxVersion && gt("1.9.9", maxVersion)) {
473106
473240
  const msg = await getMaxVersionMessage();
473107
473241
  setMaxVersionIssue(msg ?? "affects your version");
473108
473242
  }
473109
473243
  const result = await installLatest(channel);
473110
- const currentVersion = "1.9.1";
473244
+ const currentVersion = "1.9.9";
473111
473245
  const latencyMs = Date.now() - startTime;
473112
473246
  if (result.lockFailed) {
473113
473247
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473242,17 +473376,17 @@ function PackageManagerAutoUpdater(t0) {
473242
473376
  const maxVersion = await getMaxVersion();
473243
473377
  if (maxVersion && latest && gt(latest, maxVersion)) {
473244
473378
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473245
- if (gte("1.9.1", maxVersion)) {
473246
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
473379
+ if (gte("1.9.9", maxVersion)) {
473380
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
473247
473381
  setUpdateAvailable(false);
473248
473382
  return;
473249
473383
  }
473250
473384
  latest = maxVersion;
473251
473385
  }
473252
- const hasUpdate = latest && !gte("1.9.1", latest) && !shouldSkipVersion(latest);
473386
+ const hasUpdate = latest && !gte("1.9.9", latest) && !shouldSkipVersion(latest);
473253
473387
  setUpdateAvailable(!!hasUpdate);
473254
473388
  if (hasUpdate) {
473255
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.1"} -> ${latest}`);
473389
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.9"} -> ${latest}`);
473256
473390
  }
473257
473391
  };
473258
473392
  $2[0] = t1;
@@ -473286,7 +473420,7 @@ function PackageManagerAutoUpdater(t0) {
473286
473420
  wrap: "truncate",
473287
473421
  children: [
473288
473422
  "currentVersion: ",
473289
- "1.9.1"
473423
+ "1.9.9"
473290
473424
  ]
473291
473425
  }, undefined, true, undefined, this);
473292
473426
  $2[3] = verbose;
@@ -480846,7 +480980,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
480846
480980
  project_dir: getOriginalCwd(),
480847
480981
  added_dirs: addedDirs
480848
480982
  },
480849
- version: "1.9.1",
480983
+ version: "1.9.9",
480850
480984
  output_style: {
480851
480985
  name: outputStyleName
480852
480986
  },
@@ -487190,7 +487324,7 @@ var init_cacache = __esm(() => {
487190
487324
 
487191
487325
  // src/utils/cleanup.ts
487192
487326
  import * as fs5 from "fs/promises";
487193
- import { homedir as homedir38 } from "os";
487327
+ import { homedir as homedir36 } from "os";
487194
487328
  import { join as join156 } from "path";
487195
487329
  function getCutoffDate() {
487196
487330
  const settings = getSettings_DEPRECATED() || {};
@@ -487491,7 +487625,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
487491
487625
  return;
487492
487626
  }
487493
487627
  logForDebugging("npm cache cleanup: starting");
487494
- const npmCachePath = join156(homedir38(), ".npm", "_cacache");
487628
+ const npmCachePath = join156(homedir36(), ".npm", "_cacache");
487495
487629
  const NPM_CACHE_RETENTION_COUNT = 5;
487496
487630
  const startTime = Date.now();
487497
487631
  try {
@@ -492418,7 +492552,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
492418
492552
  } catch {}
492419
492553
  const data = {
492420
492554
  trigger,
492421
- version: "1.9.1",
492555
+ version: "1.9.9",
492422
492556
  platform: process.platform,
492423
492557
  transcript,
492424
492558
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -504215,7 +504349,7 @@ var exports_TrustDialog = {};
504215
504349
  __export(exports_TrustDialog, {
504216
504350
  TrustDialog: () => TrustDialog
504217
504351
  });
504218
- import { homedir as homedir39 } from "os";
504352
+ import { homedir as homedir37 } from "os";
504219
504353
  function TrustDialog({ onDone }) {
504220
504354
  const [focusIdx, setFocusIdx] = import_react307.useState(0);
504221
504355
  const doneRef = import_react307.useRef(false);
@@ -504233,7 +504367,7 @@ function TrustDialog({ onDone }) {
504233
504367
  gracefulShutdownSync(1);
504234
504368
  } else {
504235
504369
  try {
504236
- if (homedir39() !== getCwd()) {
504370
+ if (homedir37() !== getCwd()) {
504237
504371
  try {
504238
504372
  saveCurrentProjectConfig((c5) => ({ ...c5, hasTrustDialogAccepted: true }));
504239
504373
  } catch {}
@@ -509327,7 +509461,7 @@ function appendToLog(path17, message) {
509327
509461
  cwd: getFsImplementation().cwd(),
509328
509462
  userType: process.env.USER_TYPE,
509329
509463
  sessionId: getSessionId(),
509330
- version: "1.9.1"
509464
+ version: "1.9.9"
509331
509465
  };
509332
509466
  getLogWriter(path17).write(messageWithTimestamp);
509333
509467
  }
@@ -509632,7 +509766,7 @@ var init_sessionMemory = __esm(() => {
509632
509766
 
509633
509767
  // src/utils/iTermBackup.ts
509634
509768
  import { copyFile as copyFile11, stat as stat56 } from "fs/promises";
509635
- import { homedir as homedir40 } from "os";
509769
+ import { homedir as homedir38 } from "os";
509636
509770
  import { join as join164 } from "path";
509637
509771
  function markITerm2SetupComplete() {
509638
509772
  saveGlobalConfig((current) => ({
@@ -509648,7 +509782,7 @@ function getIterm2RecoveryInfo() {
509648
509782
  };
509649
509783
  }
509650
509784
  function getITerm2PlistPath() {
509651
- return join164(homedir40(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509785
+ return join164(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509652
509786
  }
509653
509787
  async function checkAndRestoreITerm2Backup() {
509654
509788
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -513351,8 +513485,8 @@ async function getEnvLessBridgeConfig() {
513351
513485
  }
513352
513486
  async function checkEnvLessBridgeMinVersion() {
513353
513487
  const cfg = await getEnvLessBridgeConfig();
513354
- if (cfg.min_version && lt("1.9.1", cfg.min_version)) {
513355
- return `Your version of localclawd (${"1.9.1"}) is too old for Remote Control.
513488
+ if (cfg.min_version && lt("1.9.9", cfg.min_version)) {
513489
+ return `Your version of localclawd (${"1.9.9"}) is too old for Remote Control.
513356
513490
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
513357
513491
  }
513358
513492
  return null;
@@ -513824,7 +513958,7 @@ async function initBridgeCore(params) {
513824
513958
  const rawApi = createBridgeApiClient({
513825
513959
  baseUrl,
513826
513960
  getAccessToken,
513827
- runnerVersion: "1.9.1",
513961
+ runnerVersion: "1.9.9",
513828
513962
  onDebug: logForDebugging,
513829
513963
  onAuth401,
513830
513964
  getTrustedDeviceToken
@@ -519543,7 +519677,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
519543
519677
  setCwd(cwd3);
519544
519678
  const server = new Server({
519545
519679
  name: "claude/tengu",
519546
- version: "1.9.1"
519680
+ version: "1.9.9"
519547
519681
  }, {
519548
519682
  capabilities: {
519549
519683
  tools: {}
@@ -519674,7 +519808,7 @@ __export(exports_appDesktop, {
519674
519808
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
519675
519809
  });
519676
519810
  import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
519677
- import { homedir as homedir41 } from "os";
519811
+ import { homedir as homedir39 } from "os";
519678
519812
  import { join as join168 } from "path";
519679
519813
  async function getClaudeDesktopConfigPath() {
519680
519814
  const platform3 = getPlatform();
@@ -519682,7 +519816,7 @@ async function getClaudeDesktopConfigPath() {
519682
519816
  throw new Error(`Unsupported platform: ${platform3} - desktop app integration only works on macOS and WSL.`);
519683
519817
  }
519684
519818
  if (platform3 === "macos") {
519685
- return join168(homedir41(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519819
+ return join168(homedir39(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519686
519820
  }
519687
519821
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
519688
519822
  if (windowsHome) {
@@ -520624,7 +520758,7 @@ function WelcomeLogo() {
520624
520758
  dimColor: true,
520625
520759
  children: [
520626
520760
  "v",
520627
- "1.9.1"
520761
+ "1.9.9"
520628
520762
  ]
520629
520763
  }, undefined, true, undefined, this)
520630
520764
  ]
@@ -520815,7 +520949,7 @@ __export(exports_update, {
520815
520949
  });
520816
520950
  async function update() {
520817
520951
  logEvent("tengu_update_check", {});
520818
- writeToStdout(`Current version: ${"1.9.1"}
520952
+ writeToStdout(`Current version: ${"1.9.9"}
520819
520953
  `);
520820
520954
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520821
520955
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520890,8 +521024,8 @@ async function update() {
520890
521024
  writeToStdout(`localclawd is managed by Homebrew.
520891
521025
  `);
520892
521026
  const latest = await getLatestVersion(channel);
520893
- if (latest && !gte("1.9.1", latest)) {
520894
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
521027
+ if (latest && !gte("1.9.9", latest)) {
521028
+ writeToStdout(`Update available: ${"1.9.9"} → ${latest}
520895
521029
  `);
520896
521030
  writeToStdout(`
520897
521031
  `);
@@ -520907,8 +521041,8 @@ async function update() {
520907
521041
  writeToStdout(`localclawd is managed by winget.
520908
521042
  `);
520909
521043
  const latest = await getLatestVersion(channel);
520910
- if (latest && !gte("1.9.1", latest)) {
520911
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
521044
+ if (latest && !gte("1.9.9", latest)) {
521045
+ writeToStdout(`Update available: ${"1.9.9"} → ${latest}
520912
521046
  `);
520913
521047
  writeToStdout(`
520914
521048
  `);
@@ -520922,8 +521056,8 @@ async function update() {
520922
521056
  writeToStdout(`localclawd is managed by apk.
520923
521057
  `);
520924
521058
  const latest = await getLatestVersion(channel);
520925
- if (latest && !gte("1.9.1", latest)) {
520926
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
521059
+ if (latest && !gte("1.9.9", latest)) {
521060
+ writeToStdout(`Update available: ${"1.9.9"} → ${latest}
520927
521061
  `);
520928
521062
  writeToStdout(`
520929
521063
  `);
@@ -520988,11 +521122,11 @@ async function update() {
520988
521122
  `);
520989
521123
  await gracefulShutdown(1);
520990
521124
  }
520991
- if (result.latestVersion === "1.9.1") {
520992
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.1"})`) + `
521125
+ if (result.latestVersion === "1.9.9") {
521126
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.9"})`) + `
520993
521127
  `);
520994
521128
  } else {
520995
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.1"} to version ${result.latestVersion}`) + `
521129
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.9"} to version ${result.latestVersion}`) + `
520996
521130
  `);
520997
521131
  await regenerateCompletionCache();
520998
521132
  }
@@ -521052,12 +521186,12 @@ async function update() {
521052
521186
  `);
521053
521187
  await gracefulShutdown(1);
521054
521188
  }
521055
- if (latestVersion === "1.9.1") {
521056
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.1"})`) + `
521189
+ if (latestVersion === "1.9.9") {
521190
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.9"})`) + `
521057
521191
  `);
521058
521192
  await gracefulShutdown(0);
521059
521193
  }
521060
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.1"})
521194
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.9"})
521061
521195
  `);
521062
521196
  writeToStdout(`Installing update...
521063
521197
  `);
@@ -521102,7 +521236,7 @@ async function update() {
521102
521236
  logForDebugging(`update: Installation status: ${status2}`);
521103
521237
  switch (status2) {
521104
521238
  case "success":
521105
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.1"} to version ${latestVersion}`) + `
521239
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.9"} to version ${latestVersion}`) + `
521106
521240
  `);
521107
521241
  await regenerateCompletionCache();
521108
521242
  break;
@@ -522344,7 +522478,7 @@ Run with --debug for more details.
522344
522478
  }
522345
522479
  }
522346
522480
  logForDiagnosticsNoPII("info", "started", {
522347
- version: "1.9.1",
522481
+ version: "1.9.9",
522348
522482
  is_native_binary: isInBundledMode()
522349
522483
  });
522350
522484
  registerCleanup(async () => {
@@ -523128,7 +523262,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523128
523262
  pendingHookMessages
523129
523263
  }, renderAndRun);
523130
523264
  }
523131
- }).version("1.9.1 (localclawd)", "-v, --version", "Output the version number");
523265
+ }).version("1.9.9 (localclawd)", "-v, --version", "Output the version number");
523132
523266
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523133
523267
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523134
523268
  if (canUserConfigureAdvisor()) {
@@ -523642,7 +523776,7 @@ if (false) {}
523642
523776
  async function main2() {
523643
523777
  const args = process.argv.slice(2);
523644
523778
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523645
- console.log(`${"1.9.1"} (localclawd)`);
523779
+ console.log(`${"1.9.9"} (localclawd)`);
523646
523780
  return;
523647
523781
  }
523648
523782
  const {
@@ -523713,9 +523847,17 @@ async function main2() {
523713
523847
  process.on("unhandledRejection", (reason) => {
523714
523848
  const msg = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
523715
523849
  process.stderr.write(`
523716
- localclawd: unhandled error — ${msg}
523850
+ localclawd: unhandled error (continuing) — ${msg}
523717
523851
  `);
523718
- process.exit(1);
523852
+ try {
523853
+ const { appendFileSync: appendFileSync4, mkdirSync: mkdirSync6 } = __require("fs");
523854
+ const { homedir: homedir40 } = __require("os");
523855
+ const { join: join169 } = __require("path");
523856
+ const dir = join169(homedir40(), ".claude");
523857
+ mkdirSync6(dir, { recursive: true });
523858
+ appendFileSync4(join169(dir, "crash.log"), `[${new Date().toISOString()}] unhandledRejection: ${msg}
523859
+ `);
523860
+ } catch {}
523719
523861
  });
523720
523862
  main2().catch((err2) => {
523721
523863
  const msg = err2 instanceof Error ? err2.stack ?? err2.message : String(err2);
@@ -523725,4 +523867,4 @@ localclawd crashed: ${msg}
523725
523867
  process.exit(1);
523726
523868
  });
523727
523869
 
523728
- //# debugId=C4269632DEB59EC664756E2164756E21
523870
+ //# debugId=7C85E9F9DFBCA5CA64756E2164756E21