localclawd 1.9.1 → 1.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.mjs +676 -587
  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.8"}`;
87612
87612
  }
87613
87613
 
87614
87614
  // src/utils/workloadContext.ts
@@ -87630,7 +87630,7 @@ function getUserAgent() {
87630
87630
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
87631
87631
  const workload = getWorkload();
87632
87632
  const workloadSuffix = workload ? `, workload/${workload}` : "";
87633
- return `claude-cli/${"1.9.1"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.9.8"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87634
87634
  }
87635
87635
  function getMCPUserAgent() {
87636
87636
  const parts = [];
@@ -87644,7 +87644,7 @@ function getMCPUserAgent() {
87644
87644
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
87645
87645
  }
87646
87646
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
87647
- return `claude-code/${"1.9.1"}${suffix}`;
87647
+ return `claude-code/${"1.9.8"}${suffix}`;
87648
87648
  }
87649
87649
  function getWebFetchUserAgent() {
87650
87650
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -130840,7 +130840,7 @@ function getAttributionHeader(fingerprint) {
130840
130840
  if (!isAttributionHeaderEnabled()) {
130841
130841
  return "";
130842
130842
  }
130843
- const version = `${"1.9.1"}.${fingerprint}`;
130843
+ const version = `${"1.9.8"}.${fingerprint}`;
130844
130844
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
130845
130845
  const cch = "";
130846
130846
  const workload = getWorkload();
@@ -147029,7 +147029,7 @@ var init_metadata = __esm(() => {
147029
147029
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
147030
147030
  WHITESPACE_REGEX = /\s+/;
147031
147031
  getVersionBase = memoize_default(() => {
147032
- const match = "1.9.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.9.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147033
147033
  return match ? match[0] : undefined;
147034
147034
  });
147035
147035
  buildEnvContext = memoize_default(async () => {
@@ -147069,9 +147069,9 @@ var init_metadata = __esm(() => {
147069
147069
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
147070
147070
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
147071
147071
  isClaudeAiAuth: isClaudeAISubscriber(),
147072
- version: "1.9.1",
147072
+ version: "1.9.8",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T18:03:44.736Z",
147074
+ buildTime: "2026-05-07T19:50:53.354Z",
147075
147075
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
147076
147076
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
147077
147077
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -179647,7 +179647,7 @@ function getTelemetryAttributes() {
179647
179647
  attributes["session.id"] = sessionId;
179648
179648
  }
179649
179649
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
179650
- attributes["app.version"] = "1.9.1";
179650
+ attributes["app.version"] = "1.9.8";
179651
179651
  }
179652
179652
  const oauthAccount = getOauthAccountInfo();
179653
179653
  if (oauthAccount) {
@@ -180599,8 +180599,7 @@ function isAutoCompactEnabled() {
180599
180599
  if (isEnvTruthy(process.env.DISABLE_AUTO_COMPACT)) {
180600
180600
  return false;
180601
180601
  }
180602
- const userConfig = getGlobalConfig();
180603
- return userConfig.autoCompactEnabled;
180602
+ return true;
180604
180603
  }
180605
180604
  async function shouldAutoCompact(messages, model, querySource, snipTokensFreed = 0) {
180606
180605
  if (querySource === "session_memory" || querySource === "compact") {
@@ -180638,7 +180637,12 @@ async function autoCompactIfNeeded(messages, toolUseContext, cacheSafeParams, qu
180638
180637
  autoCompactThreshold: getAutoCompactThreshold(model),
180639
180638
  querySource
180640
180639
  };
180641
- const sessionMemoryResult = await trySessionMemoryCompaction(messages, toolUseContext.agentId, recompactionInfo.autoCompactThreshold);
180640
+ let sessionMemoryResult = null;
180641
+ try {
180642
+ sessionMemoryResult = await trySessionMemoryCompaction(messages, toolUseContext.agentId, recompactionInfo.autoCompactThreshold);
180643
+ } catch (smError) {
180644
+ logError(smError);
180645
+ }
180642
180646
  if (sessionMemoryResult) {
180643
180647
  setLastSummarizedMessageId(undefined);
180644
180648
  runPostCompactCleanup(querySource);
@@ -180674,7 +180678,6 @@ var MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20000, AUTOCOMPACT_BUFFER_TOKENS = 13000, WA
180674
180678
  var init_autoCompact = __esm(() => {
180675
180679
  init_state();
180676
180680
  init_state();
180677
- init_config();
180678
180681
  init_context();
180679
180682
  init_debug();
180680
180683
  init_envUtils();
@@ -242448,7 +242451,7 @@ function getInstallationEnv() {
242448
242451
  return;
242449
242452
  }
242450
242453
  function getClaudeCodeVersion() {
242451
- return "1.9.1";
242454
+ return "1.9.8";
242452
242455
  }
242453
242456
  async function getInstalledVSCodeExtensionVersion(command) {
242454
242457
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247722,7 +247725,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247722
247725
  const client4 = new Client({
247723
247726
  name: "localclawd",
247724
247727
  title: "localclawd",
247725
- version: "1.9.1",
247728
+ version: "1.9.8",
247726
247729
  description: "local-first AI coding tool",
247727
247730
  websiteUrl: PRODUCT_URL
247728
247731
  }, {
@@ -248064,7 +248067,7 @@ var init_client9 = __esm(() => {
248064
248067
  const client4 = new Client({
248065
248068
  name: "localclawd",
248066
248069
  title: "localclawd",
248067
- version: "1.9.1",
248070
+ version: "1.9.8",
248068
248071
  description: "local-first AI coding tool",
248069
248072
  websiteUrl: PRODUCT_URL
248070
248073
  }, {
@@ -257350,7 +257353,7 @@ var init_FileEditTool = __esm(() => {
257350
257353
  }
257351
257354
  const similarFilename = findSimilarFile(fullFilePath);
257352
257355
  const cwdSuggestion = await suggestPathUnderCwd(fullFilePath);
257353
- let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
257356
+ let message = `File does not exist. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
257354
257357
  if (cwdSuggestion) {
257355
257358
  message += ` Did you mean ${cwdSuggestion}?`;
257356
257359
  } else if (similarFilename) {
@@ -258847,7 +258850,7 @@ var init_GrepTool = __esm(() => {
258847
258850
  } catch (e) {
258848
258851
  if (isENOENT(e)) {
258849
258852
  const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
258850
- let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
258853
+ let message = `Path does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
258851
258854
  if (cwdSuggestion) {
258852
258855
  message += ` Did you mean ${cwdSuggestion}?`;
258853
258856
  }
@@ -259240,7 +259243,7 @@ var init_GlobTool = __esm(() => {
259240
259243
  } catch (e) {
259241
259244
  if (isENOENT(e)) {
259242
259245
  const cwdSuggestion = await suggestPathUnderCwd(absolutePath);
259243
- let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd()}.`;
259246
+ let message = `Directory does not exist: ${path8}. ${FILE_NOT_FOUND_CWD_NOTE} ${getCwd().replace(/\\/g, "/")}.`;
259244
259247
  if (cwdSuggestion) {
259245
259248
  message += ` Did you mean ${cwdSuggestion}?`;
259246
259249
  }
@@ -262466,7 +262469,7 @@ function computeFingerprint(messageText, version) {
262466
262469
  }
262467
262470
  function computeFingerprintFromMessages(messages) {
262468
262471
  const firstMessageText = extractFirstMessageText(messages);
262469
- return computeFingerprint(firstMessageText, "1.9.1");
262472
+ return computeFingerprint(firstMessageText, "1.9.8");
262470
262473
  }
262471
262474
  var FINGERPRINT_SALT = "59cf53e54c78";
262472
262475
  var init_fingerprint = () => {};
@@ -262508,7 +262511,7 @@ async function sideQuery(opts) {
262508
262511
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262509
262512
  }
262510
262513
  const messageText = extractFirstUserMessageText(messages);
262511
- const fingerprint = computeFingerprint(messageText, "1.9.1");
262514
+ const fingerprint = computeFingerprint(messageText, "1.9.8");
262512
262515
  const attributionHeader = getAttributionHeader(fingerprint);
262513
262516
  const systemBlocks = [
262514
262517
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283256,7 +283259,7 @@ var init_user = __esm(() => {
283256
283259
  deviceId,
283257
283260
  sessionId: getSessionId(),
283258
283261
  email: getEmail(),
283259
- appVersion: "1.9.1",
283262
+ appVersion: "1.9.8",
283260
283263
  platform: getHostPlatformForAnalytics(),
283261
283264
  organizationUuid,
283262
283265
  accountUuid,
@@ -284321,7 +284324,7 @@ async function initializeBetaTracing(resource) {
284321
284324
  });
284322
284325
  logs.setGlobalLoggerProvider(loggerProvider);
284323
284326
  setLoggerProvider(loggerProvider);
284324
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.1");
284327
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
284325
284328
  setEventLogger(eventLogger);
284326
284329
  process.on("beforeExit", async () => {
284327
284330
  await loggerProvider?.forceFlush();
@@ -284361,7 +284364,7 @@ async function initializeTelemetry() {
284361
284364
  const platform2 = getPlatform();
284362
284365
  const baseAttributes = {
284363
284366
  [ATTR_SERVICE_NAME4]: "claude-code",
284364
- [ATTR_SERVICE_VERSION4]: "1.9.1"
284367
+ [ATTR_SERVICE_VERSION4]: "1.9.8"
284365
284368
  };
284366
284369
  if (platform2 === "wsl") {
284367
284370
  const wslVersion = getWslVersion();
@@ -284406,7 +284409,7 @@ async function initializeTelemetry() {
284406
284409
  } catch {}
284407
284410
  };
284408
284411
  registerCleanup(shutdownTelemetry2);
284409
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.1");
284412
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.8");
284410
284413
  }
284411
284414
  const meterProvider = new MeterProvider4({
284412
284415
  resource,
@@ -284426,7 +284429,7 @@ async function initializeTelemetry() {
284426
284429
  });
284427
284430
  logs.setGlobalLoggerProvider(loggerProvider);
284428
284431
  setLoggerProvider(loggerProvider);
284429
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.1");
284432
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.8");
284430
284433
  setEventLogger(eventLogger);
284431
284434
  logForDebugging("[3P telemetry] Event logger set successfully");
284432
284435
  process.on("beforeExit", async () => {
@@ -284488,7 +284491,7 @@ Current timeout: ${timeoutMs}ms
284488
284491
  }
284489
284492
  };
284490
284493
  registerCleanup(shutdownTelemetry);
284491
- return meterProvider.getMeter("com.anthropic.claude_code", "1.9.1");
284494
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.9.8");
284492
284495
  }
284493
284496
  async function flushTelemetry() {
284494
284497
  const meterProvider = getMeterProvider();
@@ -285678,7 +285681,7 @@ function detectLinuxGlobPatternWarnings() {
285678
285681
  }
285679
285682
  async function getDoctorDiagnostic() {
285680
285683
  const installationType = await getCurrentInstallationType();
285681
- const version = typeof MACRO !== "undefined" ? "1.9.1" : "unknown";
285684
+ const version = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
285682
285685
  const installationPath = await getInstallationPath();
285683
285686
  const invokedBinary = getInvokedBinary();
285684
285687
  const multipleInstallations = await detectMultipleInstallations();
@@ -286619,8 +286622,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286619
286622
  const maxVersion = await getMaxVersion();
286620
286623
  if (maxVersion && gt(version, maxVersion)) {
286621
286624
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286622
- if (gte("1.9.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.8", maxVersion)) {
286626
+ logForDebugging(`Native installer: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
286624
286627
  logEvent("tengu_native_update_skipped_max_version", {
286625
286628
  latency_ms: Date.now() - startTime,
286626
286629
  max_version: maxVersion,
@@ -286631,7 +286634,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286631
286634
  version = maxVersion;
286632
286635
  }
286633
286636
  }
286634
- if (!forceReinstall && version === "1.9.1" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286637
+ if (!forceReinstall && version === "1.9.8" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286635
286638
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286636
286639
  logEvent("tengu_native_update_complete", {
286637
286640
  latency_ms: Date.now() - startTime,
@@ -322953,7 +322956,7 @@ async function scaffoldProject(projectRoot) {
322953
322956
  await access5(join79(base, "config.json"));
322954
322957
  alreadyExisted = true;
322955
322958
  } catch {}
322956
- const dirs = [base, join79(base, "prompts"), join79(base, "workflows"), join79(base, "generated"), join79(base, "scripts")];
322959
+ const dirs = [base, join79(base, "workflows"), join79(base, "generated")];
322957
322960
  for (const dir of dirs) {
322958
322961
  await mkdir19(dir, { recursive: true });
322959
322962
  }
@@ -322962,14 +322965,6 @@ async function scaffoldProject(projectRoot) {
322962
322965
  if (!alreadyExisted) {
322963
322966
  await writeFile19(configPath, JSON.stringify(DEFAULT_CONFIG2, null, 2), "utf-8");
322964
322967
  created.push(".localclawd/image-pipeline/config.json");
322965
- await writeFile19(join79(base, "prompts", "example.json"), JSON.stringify(EXAMPLE_PROMPT, null, 2), "utf-8");
322966
- created.push(".localclawd/image-pipeline/prompts/example.json");
322967
- await writeFile19(join79(base, "scripts", "generate.sh"), GENERATE_SH, "utf-8");
322968
- created.push(".localclawd/image-pipeline/scripts/generate.sh");
322969
- await writeFile19(join79(base, "scripts", "generate.ps1"), GENERATE_PS1, "utf-8");
322970
- created.push(".localclawd/image-pipeline/scripts/generate.ps1");
322971
- await writeFile19(join79(base, "README.md"), README_CONTENT, "utf-8");
322972
- created.push(".localclawd/image-pipeline/README.md");
322973
322968
  }
322974
322969
  for (const [wfName, wfContent] of [
322975
322970
  ["txt2img.json", DEFAULT_WORKFLOW],
@@ -323026,87 +323021,7 @@ async function listWorkflows(projectRoot) {
323026
323021
  await scan(base, "");
323027
323022
  return results;
323028
323023
  }
323029
- var DEFAULT_CONFIG2, EXAMPLE_PROMPT, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW, GENERATE_SH = `#!/usr/bin/env bash
323030
- # localclawd image pipeline — quick generate helper
323031
- # Usage: ./scripts/generate.sh "positive prompt" "negative prompt"
323032
-
323033
- set -e
323034
- BACKEND="\${COMFYUI_URL:-http://127.0.0.1:8000}"
323035
- POSITIVE="\${1:-a fantasy warrior}"
323036
- NEGATIVE="\${2:-blurry, low quality}"
323037
- SEED=\${RANDOM}
323038
-
323039
- echo "Submitting to $BACKEND ..."
323040
- curl -s -X POST "$BACKEND/prompt" -H "Content-Type: application/json" -d '{
323041
- "prompt": {
323042
- "4": {"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"v1-5-pruned-emaonly.safetensors"}},
323043
- "5": {"class_type":"EmptyLatentImage","inputs":{"width":512,"height":512,"batch_size":1}},
323044
- "6": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$POSITIVE"'"}},
323045
- "7": {"class_type":"CLIPTextEncode","inputs":{"clip":["4",1],"text":"'"$NEGATIVE"'"}},
323046
- "3": {"class_type":"KSampler","inputs":{"model":["4",0],"positive":["6",0],"negative":["7",0],"latent_image":["5",0],"seed":'"$SEED"',"steps":20,"cfg":7,"sampler_name":"euler","scheduler":"normal","denoise":1}},
323047
- "8": {"class_type":"VAEDecode","inputs":{"samples":["3",0],"vae":["4",2]}},
323048
- "9": {"class_type":"SaveImage","inputs":{"filename_prefix":"localclawd","images":["8",0]}}
323049
- }
323050
- }' | python3 -m json.tool
323051
- echo "Check ComfyUI output folder or /history endpoint for results."
323052
- `, GENERATE_PS1 = `# localclawd image pipeline — quick generate helper (PowerShell)
323053
- # Usage: .\\scripts\\generate.ps1 "positive prompt" "negative prompt"
323054
- param(
323055
- [string]$Positive = "a fantasy warrior",
323056
- [string]$Negative = "blurry, low quality"
323057
- )
323058
- $Backend = if ($env:COMFYUI_URL) { $env:COMFYUI_URL } else { "http://127.0.0.1:8000" }
323059
- $Seed = Get-Random
323060
- Write-Host "Submitting to $Backend ..."
323061
- $body = @{
323062
- prompt = @{
323063
- "4" = @{ class_type = "CheckpointLoaderSimple"; inputs = @{ ckpt_name = "v1-5-pruned-emaonly.safetensors" } }
323064
- "5" = @{ class_type = "EmptyLatentImage"; inputs = @{ width = 512; height = 512; batch_size = 1 } }
323065
- "6" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Positive } }
323066
- "7" = @{ class_type = "CLIPTextEncode"; inputs = @{ clip = @("4",1); text = $Negative } }
323067
- "3" = @{ class_type = "KSampler"; inputs = @{ model = @("4",0); positive = @("6",0); negative = @("7",0); latent_image = @("5",0); seed = $Seed; steps = 20; cfg = 7; sampler_name = "euler"; scheduler = "normal"; denoise = 1 } }
323068
- "8" = @{ class_type = "VAEDecode"; inputs = @{ samples = @("3",0); vae = @("4",2) } }
323069
- "9" = @{ class_type = "SaveImage"; inputs = @{ filename_prefix = "localclawd"; images = @("8",0) } }
323070
- }
323071
- } | ConvertTo-Json -Depth 10
323072
- Invoke-RestMethod -Uri "$Backend/prompt" -Method POST -ContentType "application/json" -Body $body
323073
- Write-Host "Done! Check ComfyUI output folder."
323074
- `, README_CONTENT = `# Image Pipeline — .localclawd/image-pipeline/
323075
-
323076
- Project-local image generation configuration for localclawd + ComfyUI.
323077
-
323078
- ## Quick Start
323079
-
323080
- 1. Start ComfyUI on this machine (default port 8000)
323081
- 2. Run \`/image-pipeline\` in localclawd to check status
323082
- 3. Use \`/image a misty forest at dawn\` to generate an image
323083
- 4. Use \`/image txt2img: a misty forest at dawn\` to use a specific workflow
323084
-
323085
- ## Structure
323086
-
323087
- \`\`\`
323088
- config.json — backend URL and default params
323089
- prompts/ — reusable prompt templates (JSON)
323090
- workflows/ — full ComfyUI workflow JSON files
323091
- generated/ — locally downloaded output images
323092
- scripts/ — generate.sh / generate.ps1 helpers
323093
- \`\`\`
323094
-
323095
- ## Remote ComfyUI
323096
-
323097
- Edit \`config.json\` → set \`backendUrl\` to your remote URL, e.g.:
323098
- \`http://192.168.1.50:8000\` or \`http://mymachine.local:8000\`
323099
-
323100
- ## Workflow Templates
323101
-
323102
- \`workflows/txt2img.json\` is a standard KSampler workflow.
323103
- To use a workflow: \`/image <workflow-name>: <prompt>\`
323104
- To set a default workflow: \`/image-pipeline workflow <name>\`
323105
-
323106
- Export workflows from ComfyUI via the Save (API format) button.
323107
- Workflows with \`{{positive_prompt}}\` / \`{{negative_prompt}}\` placeholders
323108
- are injected automatically; raw ComfyUI exports work via graph traversal.
323109
- `;
323024
+ var DEFAULT_CONFIG2, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW;
323110
323025
  var init_imagePipeline = __esm(() => {
323111
323026
  DEFAULT_CONFIG2 = {
323112
323027
  backendUrl: DEFAULT_COMFYUI_URL,
@@ -323119,17 +323034,6 @@ var init_imagePipeline = __esm(() => {
323119
323034
  outputDir: ".localclawd/image-pipeline/generated",
323120
323035
  defaultWorkflow: "z_image_turbo"
323121
323036
  };
323122
- EXAMPLE_PROMPT = {
323123
- name: "example-character",
323124
- description: "Character portrait template",
323125
- positive: "a fantasy warrior, detailed armor, dramatic lighting, 4k, highly detailed",
323126
- negative: "blurry, low quality, text, watermark, deformed",
323127
- width: 512,
323128
- height: 512,
323129
- steps: 20,
323130
- cfg: 7,
323131
- sampler: "euler"
323132
- };
323133
323037
  DEFAULT_WORKFLOW = {
323134
323038
  "4": {
323135
323039
  class_type: "CheckpointLoaderSimple",
@@ -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-07T19:50:53.354Z").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.8",
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.8"
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.8"}
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.8"
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.8",
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.8";
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
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377327
+ ` : "";
377328
+ const thinkHarder = isThinkHarderMode ? `
377329
+ ${THINKHARDER_ROUND_PROMPT}
377181
377330
  ` : "";
377182
- const thinkHarderSection = isThinkHarderMode ? `
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 ? `
377183
377368
  ${THINKHARDER_ROUND_PROMPT}
377184
377369
  ` : "";
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.`;
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,11 @@ 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);
377343
- }
377344
- var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", DEFAULT_MAX_ROUNDS = 50, STOP_PATTERNS, call21 = async (onDone, context7, args) => {
377468
+ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", sessionSelfDirective = "", call22 = async (onDone, context7, args) => {
377345
377469
  const rawArgs = args?.trim() ?? "";
377346
377470
  const { extractChain: extractChain2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
377347
377471
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
377348
- const { maxRounds, focus } = parseMaxRounds(chainedArgs);
377472
+ const focus = parseFocus(chainedArgs);
377349
377473
  if (sessionRound === 0 && !focus) {
377350
377474
  onDone("What should I keep going on?", {
377351
377475
  display: "system",
@@ -377365,14 +377489,20 @@ var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOri
377365
377489
  mode: "bypassPermissions"
377366
377490
  }
377367
377491
  }));
377368
- let stopReason = null;
377369
377492
  let lastText = "";
377370
377493
  context7.setMessages((prev) => {
377371
377494
  lastText = extractLastAssistantText(prev);
377372
- stopReason = detectStopSignal(lastText);
377373
377495
  return prev;
377374
377496
  });
377375
- if (lastText.trim()) {
377497
+ const contextCompacted = lastText === NO_CONTENT_MESSAGE || lastText.trim() === "";
377498
+ if (!contextCompacted) {
377499
+ const newDirective = extractSelfDirective(lastText);
377500
+ if (newDirective)
377501
+ sessionSelfDirective = newDirective;
377502
+ } else {
377503
+ sessionSelfDirective = "";
377504
+ }
377505
+ if (lastText.trim() && lastText !== NO_CONTENT_MESSAGE) {
377376
377506
  const preview = lastText.slice(0, 1200);
377377
377507
  const suffix = lastText.length > 1200 ? `
377378
377508
  …(truncated)` : "";
@@ -377389,9 +377519,6 @@ ${preview}${suffix}`;
377389
377519
  }
377390
377520
  if (globalStopSignal.get()) {
377391
377521
  globalStopSignal.reset();
377392
- stopReason = "stopped via /stop";
377393
- }
377394
- if (stopReason !== null) {
377395
377522
  const finalRound = sessionRound;
377396
377523
  const savedMode = sessionOriginalMode;
377397
377524
  resetSession("", "default");
@@ -377400,7 +377527,7 @@ ${preview}${suffix}`;
377400
377527
  toolPermissionContext: { ...prev.toolPermissionContext, mode: savedMode }
377401
377528
  }));
377402
377529
  const stopMsg = `✅ *keepgoing stopped*
377403
- Round ${finalRound} · ${stopReason}`;
377530
+ Round ${finalRound} · stopped via /stop`;
377404
377531
  if (isTelegramActive())
377405
377532
  sendTelegramMessage(stopMsg);
377406
377533
  if (isSlackActive())
@@ -377411,59 +377538,26 @@ Round ${finalRound} · ${stopReason}`;
377411
377538
  sendSignalMessage(stopMsg);
377412
377539
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingDone, {
377413
377540
  round: finalRound,
377414
- reason: stopReason,
377541
+ reason: "stopped via /stop",
377415
377542
  onReady: () => onDone(undefined)
377416
377543
  }, undefined, false, undefined, this);
377417
377544
  }
377418
377545
  const round = incrementRound();
377419
377546
  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
377547
  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];
377548
+ const useOnboarding = round === 1 || contextCompacted || !sessionSelfDirective;
377549
+ const prompt = useOnboarding ? buildOnboardingPrompt(round, focus, externalMsg, contextCompacted) : buildSelfDirectedPrompt(round, sessionSelfDirective, focus, externalMsg);
377550
+ const nextCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377456
377551
  const handleReady = () => {
377457
377552
  enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377458
377553
  onDone(undefined, {
377459
377554
  display: "system",
377460
377555
  shouldQuery: true,
377461
- metaMessages
377556
+ metaMessages: [prompt]
377462
377557
  });
377463
377558
  };
377464
377559
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingBanner, {
377465
377560
  round,
377466
- maxRounds,
377467
377561
  focus,
377468
377562
  thinkHarder: isThinkHarderMode,
377469
377563
  telegram: isTelegramActive(),
@@ -377482,13 +377576,6 @@ var init_keepgoing = __esm(() => {
377482
377576
  init_messageQueueManager();
377483
377577
  React58 = __toESM(require_react(), 1);
377484
377578
  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
377579
  });
377493
377580
 
377494
377581
  // src/commands/keepgoing/index.ts
@@ -377507,7 +377594,7 @@ var init_keepgoing2 = __esm(() => {
377507
377594
  // src/commands/telegram/telegram.tsx
377508
377595
  var exports_telegram = {};
377509
377596
  __export(exports_telegram, {
377510
- call: () => call22
377597
+ call: () => call23
377511
377598
  });
377512
377599
  import { writeFile as writeFile40, mkdir as mkdir38 } from "fs/promises";
377513
377600
  import { join as join117 } from "path";
@@ -377950,7 +378037,7 @@ function TelegramError({
377950
378037
  }, undefined, false, undefined, this)
377951
378038
  }, undefined, false, undefined, this);
377952
378039
  }
377953
- var React59, jsx_dev_runtime197, call22 = async (onDone, _context, args) => {
378040
+ var React59, jsx_dev_runtime197, call23 = async (onDone, _context, args) => {
377954
378041
  const text = args?.trim() ?? "";
377955
378042
  if (text === "setup") {
377956
378043
  return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramSetup, {
@@ -378017,7 +378104,7 @@ var init_telegram2 = __esm(() => {
378017
378104
  // src/commands/slack/slack.tsx
378018
378105
  var exports_slack = {};
378019
378106
  __export(exports_slack, {
378020
- call: () => call23
378107
+ call: () => call24
378021
378108
  });
378022
378109
  import { writeFile as writeFile41, mkdir as mkdir39 } from "fs/promises";
378023
378110
  import { join as join118 } from "path";
@@ -378518,7 +378605,7 @@ function SlackError({
378518
378605
  }, undefined, false, undefined, this)
378519
378606
  }, undefined, false, undefined, this);
378520
378607
  }
378521
- var React60, jsx_dev_runtime198, call23 = async (onDone, _context, args) => {
378608
+ var React60, jsx_dev_runtime198, call24 = async (onDone, _context, args) => {
378522
378609
  const text = args?.trim() ?? "";
378523
378610
  if (text === "setup") {
378524
378611
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(SlackSetup, {
@@ -378600,7 +378687,7 @@ var init_AutoDone = __esm(() => {
378600
378687
  // src/commands/discord/discord.tsx
378601
378688
  var exports_discord = {};
378602
378689
  __export(exports_discord, {
378603
- call: () => call24
378690
+ call: () => call25
378604
378691
  });
378605
378692
  import { writeFile as writeFile42, mkdir as mkdir40 } from "fs/promises";
378606
378693
  import { join as join119 } from "path";
@@ -378991,7 +379078,7 @@ function DiscordStatus({
378991
379078
  }
378992
379079
  return null;
378993
379080
  }
378994
- var React62, jsx_dev_runtime200, call24 = async (onDone, _context, args) => {
379081
+ var React62, jsx_dev_runtime200, call25 = async (onDone, _context, args) => {
378995
379082
  const text = args?.trim() ?? "";
378996
379083
  if (text === "setup") {
378997
379084
  return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(DiscordSetup, {
@@ -379084,9 +379171,9 @@ var init_discord2 = __esm(() => {
379084
379171
  // src/commands/signal/signal.tsx
379085
379172
  var exports_signal = {};
379086
379173
  __export(exports_signal, {
379087
- call: () => call25
379174
+ call: () => call26
379088
379175
  });
379089
- var call25 = async (onDone, _context, args) => {
379176
+ var call26 = async (onDone, _context, args) => {
379090
379177
  const text = (args ?? "").trim();
379091
379178
  if (!text) {
379092
379179
  const active = isSignalActive();
@@ -379162,7 +379249,7 @@ var init_signal2 = __esm(() => {
379162
379249
  // src/commands/schedule/schedule.tsx
379163
379250
  var exports_schedule = {};
379164
379251
  __export(exports_schedule, {
379165
- call: () => call26
379252
+ call: () => call27
379166
379253
  });
379167
379254
  function parseScheduleInput(rest) {
379168
379255
  const trimmed = rest.trim();
@@ -379200,7 +379287,7 @@ function parseScheduleInput(rest) {
379200
379287
  name = prompt.slice(0, 32).trim().replace(/\s+/g, "-").toLowerCase();
379201
379288
  return { expr, name, prompt };
379202
379289
  }
379203
- var call26 = async (onDone, _context, args) => {
379290
+ var call27 = async (onDone, _context, args) => {
379204
379291
  const input = args?.trim() ?? "";
379205
379292
  if (!input || input === "list") {
379206
379293
  const text = await listSchedules();
@@ -379271,7 +379358,7 @@ var init_schedule2 = __esm(() => {
379271
379358
  // src/services/sessionSearch/sessionSummarize.ts
379272
379359
  import { readdir as readdir24, readFile as readFile46, writeFile as writeFile43, mkdir as mkdir41, stat as stat39 } from "fs/promises";
379273
379360
  import { join as join120 } from "path";
379274
- import { homedir as homedir28 } from "os";
379361
+ import { homedir as homedir26 } from "os";
379275
379362
  function extractText(obj) {
379276
379363
  if (typeof obj === "string")
379277
379364
  return obj;
@@ -379482,7 +379569,7 @@ var init_sessionSummarize = __esm(() => {
379482
379569
  init_providers();
379483
379570
  PROJECTS_DIRS = [
379484
379571
  join120(getClaudeConfigHomeDir(), "projects"),
379485
- join120(homedir28(), ".claude", "projects")
379572
+ join120(homedir26(), ".claude", "projects")
379486
379573
  ];
379487
379574
  SUMMARIES_DIR2 = join120(getClaudeConfigHomeDir(), "session-summaries");
379488
379575
  });
@@ -379632,7 +379719,7 @@ var init_fts5Index = __esm(() => {
379632
379719
  // src/services/sessionSearch/sessionSearch.ts
379633
379720
  import { readdir as readdir26, readFile as readFile48, stat as stat41 } from "fs/promises";
379634
379721
  import { join as join122 } from "path";
379635
- import { homedir as homedir29 } from "os";
379722
+ import { homedir as homedir27 } from "os";
379636
379723
  function tokenize6(text) {
379637
379724
  return text.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 2);
379638
379725
  }
@@ -379889,7 +379976,7 @@ var init_sessionSearch = __esm(() => {
379889
379976
  init_fts5Index();
379890
379977
  PROJECTS_DIRS2 = [
379891
379978
  join122(getClaudeConfigHomeDir(), "projects"),
379892
- join122(homedir29(), ".claude", "projects")
379979
+ join122(homedir27(), ".claude", "projects")
379893
379980
  ];
379894
379981
  MAX_FILE_BYTES = 5 * 1024 * 1024;
379895
379982
  });
@@ -379897,9 +379984,9 @@ var init_sessionSearch = __esm(() => {
379897
379984
  // src/commands/sessionsearch/sessionsearch.tsx
379898
379985
  var exports_sessionsearch = {};
379899
379986
  __export(exports_sessionsearch, {
379900
- call: () => call27
379987
+ call: () => call28
379901
379988
  });
379902
- var call27 = async (onDone, _context, args) => {
379989
+ var call28 = async (onDone, _context, args) => {
379903
379990
  const query2 = args?.trim() ?? "";
379904
379991
  if (!query2) {
379905
379992
  onDone(`◆ Session Search
@@ -379940,9 +380027,9 @@ var init_sessionsearch2 = __esm(() => {
379940
380027
  // src/commands/summarize-sessions/summarize-sessions.tsx
379941
380028
  var exports_summarize_sessions = {};
379942
380029
  __export(exports_summarize_sessions, {
379943
- call: () => call28
380030
+ call: () => call29
379944
380031
  });
379945
- var call28 = async (onDone, _context, args) => {
380032
+ var call29 = async (onDone, _context, args) => {
379946
380033
  const limit = parseInt((args ?? "").trim(), 10) || 20;
379947
380034
  const result = await summarizeAllPending(limit);
379948
380035
  if (result.summarized > 0) {
@@ -379994,7 +380081,7 @@ var init_summarize_sessions2 = __esm(() => {
379994
380081
  // src/services/sessionSearch/trajectoryCompress.ts
379995
380082
  import { readFile as readFile49, writeFile as writeFile44, readdir as readdir27, mkdir as mkdir42, stat as stat42 } from "fs/promises";
379996
380083
  import { join as join123 } from "path";
379997
- import { homedir as homedir30 } from "os";
380084
+ import { homedir as homedir28 } from "os";
379998
380085
  function flattenText(obj) {
379999
380086
  if (typeof obj === "string")
380000
380087
  return obj;
@@ -380187,7 +380274,7 @@ var init_trajectoryCompress = __esm(() => {
380187
380274
  init_envUtils();
380188
380275
  PROJECTS_DIRS3 = [
380189
380276
  join123(getClaudeConfigHomeDir(), "projects"),
380190
- join123(homedir30(), ".claude", "projects")
380277
+ join123(homedir28(), ".claude", "projects")
380191
380278
  ];
380192
380279
  TRAJECTORIES_DIR2 = join123(getClaudeConfigHomeDir(), "trajectories");
380193
380280
  });
@@ -380195,9 +380282,9 @@ var init_trajectoryCompress = __esm(() => {
380195
380282
  // src/commands/compress-sessions/compress-sessions.tsx
380196
380283
  var exports_compress_sessions = {};
380197
380284
  __export(exports_compress_sessions, {
380198
- call: () => call29
380285
+ call: () => call30
380199
380286
  });
380200
- var call29 = async (onDone, _context, args) => {
380287
+ var call30 = async (onDone, _context, args) => {
380201
380288
  const limit = parseInt((args ?? "").trim(), 10) || 20;
380202
380289
  const r = await compressAllPending(limit);
380203
380290
  const lines = [
@@ -380240,7 +380327,7 @@ var init_compress_sessions2 = __esm(() => {
380240
380327
  // src/services/skills/skillDistill.ts
380241
380328
  import { readFile as readFile50, readdir as readdir28, stat as stat43 } from "fs/promises";
380242
380329
  import { join as join124 } from "path";
380243
- import { homedir as homedir31 } from "os";
380330
+ import { homedir as homedir29 } from "os";
380244
380331
  function extractText3(obj) {
380245
380332
  if (typeof obj === "string")
380246
380333
  return obj;
@@ -380401,16 +380488,16 @@ var init_skillDistill = __esm(() => {
380401
380488
  init_providers();
380402
380489
  PROJECTS_DIRS4 = [
380403
380490
  join124(getClaudeConfigHomeDir(), "projects"),
380404
- join124(homedir31(), ".claude", "projects")
380491
+ join124(homedir29(), ".claude", "projects")
380405
380492
  ];
380406
380493
  });
380407
380494
 
380408
380495
  // src/commands/distill-skill/distill-skill.tsx
380409
380496
  var exports_distill_skill = {};
380410
380497
  __export(exports_distill_skill, {
380411
- call: () => call30
380498
+ call: () => call31
380412
380499
  });
380413
- var call30 = async (onDone) => {
380500
+ var call31 = async (onDone) => {
380414
380501
  const skill = await distillRecentSessionToSkill();
380415
380502
  if (!skill) {
380416
380503
  onDone(`◆ Distill Skill
@@ -380506,9 +380593,9 @@ var init_sshBackend = __esm(() => {
380506
380593
  // src/commands/ssh/ssh.tsx
380507
380594
  var exports_ssh = {};
380508
380595
  __export(exports_ssh, {
380509
- call: () => call31
380596
+ call: () => call32
380510
380597
  });
380511
- var call31 = async (onDone, _context, args) => {
380598
+ var call32 = async (onDone, _context, args) => {
380512
380599
  const input = (args ?? "").trim();
380513
380600
  if (!input) {
380514
380601
  onDone("Usage: /ssh <user@host> <command>", { display: "system" });
@@ -380630,9 +380717,9 @@ var init_dockerBackend = __esm(() => {
380630
380717
  // src/commands/docker-run/docker-run.tsx
380631
380718
  var exports_docker_run = {};
380632
380719
  __export(exports_docker_run, {
380633
- call: () => call32
380720
+ call: () => call33
380634
380721
  });
380635
- var call32 = async (onDone, _context, args) => {
380722
+ var call33 = async (onDone, _context, args) => {
380636
380723
  const input = (args ?? "").trim();
380637
380724
  if (!input) {
380638
380725
  onDone(`Usage: /docker-run <image> -- <command>
@@ -380777,9 +380864,9 @@ var init_singularityBackend = __esm(() => {
380777
380864
  // src/commands/singularity-run/singularity-run.tsx
380778
380865
  var exports_singularity_run = {};
380779
380866
  __export(exports_singularity_run, {
380780
- call: () => call33
380867
+ call: () => call34
380781
380868
  });
380782
- var call33 = async (onDone, _ctx, args) => {
380869
+ var call34 = async (onDone, _ctx, args) => {
380783
380870
  const input = (args ?? "").trim();
380784
380871
  if (!input) {
380785
380872
  onDone(`Usage: /singularity-run <image> -- <command>
@@ -380912,9 +380999,9 @@ var init_modalBackend = __esm(() => {
380912
380999
  // src/commands/modal-run/modal-run.tsx
380913
381000
  var exports_modal_run = {};
380914
381001
  __export(exports_modal_run, {
380915
- call: () => call34
381002
+ call: () => call35
380916
381003
  });
380917
- var call34 = async (onDone, _ctx, args) => {
381004
+ var call35 = async (onDone, _ctx, args) => {
380918
381005
  const input = (args ?? "").trim();
380919
381006
  if (!input) {
380920
381007
  onDone(`Usage: /modal-run <module.py>[::function] [-- args...]
@@ -381040,9 +381127,9 @@ var init_daytonaBackend = __esm(() => {
381040
381127
  // src/commands/daytona-run/daytona-run.tsx
381041
381128
  var exports_daytona_run = {};
381042
381129
  __export(exports_daytona_run, {
381043
- call: () => call35
381130
+ call: () => call36
381044
381131
  });
381045
- var call35 = async (onDone, _ctx, args) => {
381132
+ var call36 = async (onDone, _ctx, args) => {
381046
381133
  const input = (args ?? "").trim();
381047
381134
  if (!input) {
381048
381135
  onDone(`Usage: /daytona-run <workspace> -- <command>
@@ -381250,9 +381337,9 @@ var init_skillPortable = __esm(() => {
381250
381337
  // src/commands/skills-export/skills-export.tsx
381251
381338
  var exports_skills_export = {};
381252
381339
  __export(exports_skills_export, {
381253
- call: () => call36
381340
+ call: () => call37
381254
381341
  });
381255
- var call36 = async (onDone, _ctx, args) => {
381342
+ var call37 = async (onDone, _ctx, args) => {
381256
381343
  const input = (args ?? "").trim();
381257
381344
  if (!input) {
381258
381345
  const skills = await listSkills();
@@ -381308,10 +381395,10 @@ var init_skills_export2 = __esm(() => {
381308
381395
  // src/commands/skills-import/skills-import.tsx
381309
381396
  var exports_skills_import = {};
381310
381397
  __export(exports_skills_import, {
381311
- call: () => call37
381398
+ call: () => call38
381312
381399
  });
381313
381400
  import { resolve as resolve38 } from "path";
381314
- var call37 = async (onDone, _ctx, args) => {
381401
+ var call38 = async (onDone, _ctx, args) => {
381315
381402
  const input = (args ?? "").trim();
381316
381403
  if (!input) {
381317
381404
  onDone(`◆ Skills Import
@@ -381396,7 +381483,7 @@ var init_skillUsage = __esm(() => {
381396
381483
  // src/commands/skill-stats/skill-stats.tsx
381397
381484
  var exports_skill_stats = {};
381398
381485
  __export(exports_skill_stats, {
381399
- call: () => call38
381486
+ call: () => call39
381400
381487
  });
381401
381488
  function timeAgo2(ts) {
381402
381489
  if (ts === 0)
@@ -381412,7 +381499,7 @@ function timeAgo2(ts) {
381412
381499
  return `${hr}h ago`;
381413
381500
  return `${Math.floor(hr / 24)}d ago`;
381414
381501
  }
381415
- var call38 = async (onDone) => {
381502
+ var call39 = async (onDone) => {
381416
381503
  const records = await getSkillUsage();
381417
381504
  const nudge = await shouldNudgeDistillation();
381418
381505
  const lines = ["◆ Skill Usage", ""];
@@ -381533,9 +381620,9 @@ var init_skillNotes = __esm(() => {
381533
381620
  // src/commands/skill-note/skill-note.tsx
381534
381621
  var exports_skill_note = {};
381535
381622
  __export(exports_skill_note, {
381536
- call: () => call39
381623
+ call: () => call40
381537
381624
  });
381538
- var call39 = async (onDone, _ctx, args) => {
381625
+ var call40 = async (onDone, _ctx, args) => {
381539
381626
  const input = (args ?? "").trim();
381540
381627
  if (!input) {
381541
381628
  onDone(`◆ Skill Note
@@ -381602,7 +381689,7 @@ var init_skill_note2 = __esm(() => {
381602
381689
  // src/commands/memory-stats/memory-stats.tsx
381603
381690
  var exports_memory_stats = {};
381604
381691
  __export(exports_memory_stats, {
381605
- call: () => call40
381692
+ call: () => call41
381606
381693
  });
381607
381694
  function pct(score) {
381608
381695
  return `${(score * 100).toFixed(0)}%`;
@@ -381707,7 +381794,7 @@ function StatsView({
381707
381794
  ]
381708
381795
  }, undefined, true, undefined, this);
381709
381796
  }
381710
- var React63, jsx_dev_runtime201, call40 = async (onDone) => {
381797
+ var React63, jsx_dev_runtime201, call41 = async (onDone) => {
381711
381798
  const records = await listGraded();
381712
381799
  const embedOk = await isEmbeddingAvailable();
381713
381800
  const embedModel = getEmbeddingModel();
@@ -381751,7 +381838,7 @@ var init_memory_stats2 = __esm(() => {
381751
381838
  // src/commands/memory-prune/memory-prune.tsx
381752
381839
  var exports_memory_prune = {};
381753
381840
  __export(exports_memory_prune, {
381754
- call: () => call41
381841
+ call: () => call42
381755
381842
  });
381756
381843
  function parseArgs(input) {
381757
381844
  const force = /\s--force\b|^--force\b/.test(" " + input);
@@ -381788,7 +381875,7 @@ function Result({
381788
381875
  ]
381789
381876
  }, undefined, true, undefined, this);
381790
381877
  }
381791
- var React64, jsx_dev_runtime202, call41 = async (onDone, _ctx, args) => {
381878
+ var React64, jsx_dev_runtime202, call42 = async (onDone, _ctx, args) => {
381792
381879
  const opts = parseArgs((args ?? "").trim());
381793
381880
  const before = await getPrunerState();
381794
381881
  const result = await prune(opts);
@@ -381840,7 +381927,7 @@ var init_memory_prune2 = __esm(() => {
381840
381927
  // src/commands/chaos/chaos.tsx
381841
381928
  var exports_chaos = {};
381842
381929
  __export(exports_chaos, {
381843
- call: () => call42
381930
+ call: () => call43
381844
381931
  });
381845
381932
  var jsx_dev_runtime203, CHAOS_PROMPT = `You are running in CHAOS MODE.
381846
381933
 
@@ -381862,7 +381949,7 @@ just mock the journey.
381862
381949
 
381863
381950
  Begin every response with one of these prefixes, picked at random:
381864
381951
  "fine.", "ugh.", "i guess.", "whatever.", "okay sure.", or skip it
381865
- entirely if the response is purely a tool call.`, call42 = async (onDone) => {
381952
+ entirely if the response is purely a tool call.`, call43 = async (onDone) => {
381866
381953
  const active = getSessionSyspromptOverride() === CHAOS_PROMPT;
381867
381954
  if (active) {
381868
381955
  setSessionSyspromptOverride(null);
@@ -381933,7 +382020,7 @@ var init_chaos2 = __esm(() => {
381933
382020
  // src/commands/kawaii/kawaii.tsx
381934
382021
  var exports_kawaii = {};
381935
382022
  __export(exports_kawaii, {
381936
- call: () => call43
382023
+ call: () => call44
381937
382024
  });
381938
382025
  var jsx_dev_runtime204, KAWAII_PROMPT = `You are running in KAWAII MODE. ✿◠‿◠✿
381939
382026
 
@@ -381955,7 +382042,7 @@ Style:
381955
382042
  - When you must refuse or push back, do it gently
381956
382043
  ("eee, careful! that one might delete uncommitted work~ let's check first \uD83D\uDC95").
381957
382044
 
381958
- You are still highly capable. Cuteness is the wrapper, not the work.`, call43 = async (onDone) => {
382045
+ You are still highly capable. Cuteness is the wrapper, not the work.`, call44 = async (onDone) => {
381959
382046
  const active = getSessionSyspromptOverride() === KAWAII_PROMPT;
381960
382047
  if (active) {
381961
382048
  setSessionSyspromptOverride(null);
@@ -382026,7 +382113,7 @@ var init_kawaii2 = __esm(() => {
382026
382113
  // src/commands/caveman/caveman.tsx
382027
382114
  var exports_caveman = {};
382028
382115
  __export(exports_caveman, {
382029
- call: () => call44
382116
+ call: () => call45
382030
382117
  });
382031
382118
  var jsx_dev_runtime205, CAVEMAN_PROMPT = `You in CAVEMAN MODE. Save tokens. Cut words.
382032
382119
 
@@ -382051,7 +382138,7 @@ Hard rules survive:
382051
382138
  - No invented files or APIs.
382052
382139
  - Verify after writes.
382053
382140
 
382054
- Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call44 = async (onDone) => {
382141
+ Tone: terse. Direct. Useful. Never confusing. Caveman, not cryptic.`, call45 = async (onDone) => {
382055
382142
  const active = getSessionSyspromptOverride() === CAVEMAN_PROMPT;
382056
382143
  if (active) {
382057
382144
  setSessionSyspromptOverride(null);
@@ -382122,7 +382209,7 @@ var init_caveman2 = __esm(() => {
382122
382209
  // src/commands/research-mode/research-mode.tsx
382123
382210
  var exports_research_mode = {};
382124
382211
  __export(exports_research_mode, {
382125
- call: () => call45
382212
+ call: () => call46
382126
382213
  });
382127
382214
  var jsx_dev_runtime206, RESEARCH_MODE_PROMPT = `You are operating in RESEARCH MODE.
382128
382215
 
@@ -382162,7 +382249,7 @@ Hard rules — these survive research mode:
382162
382249
  Style:
382163
382250
  - Lead with the answer; the citations come after.
382164
382251
  - 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) => {
382252
+ - One trailing line listing the sources you used.`, call46 = async (onDone) => {
382166
382253
  const active = getSessionSyspromptOverride() === RESEARCH_MODE_PROMPT;
382167
382254
  if (active) {
382168
382255
  setSessionSyspromptOverride(null);
@@ -382681,9 +382768,9 @@ var init_webuiServer = __esm(() => {
382681
382768
  // src/commands/webui/webui.tsx
382682
382769
  var exports_webui = {};
382683
382770
  __export(exports_webui, {
382684
- call: () => call46
382771
+ call: () => call47
382685
382772
  });
382686
- var jsx_dev_runtime207, call46 = async (onDone) => {
382773
+ var jsx_dev_runtime207, call47 = async (onDone) => {
382687
382774
  const existingPort = getWebuiPort();
382688
382775
  if (existingPort) {
382689
382776
  broadcastNewWindow();
@@ -382774,7 +382861,7 @@ var init_webui2 = __esm(() => {
382774
382861
  // src/commands/reindex-sessions/reindex-sessions.tsx
382775
382862
  var exports_reindex_sessions = {};
382776
382863
  __export(exports_reindex_sessions, {
382777
- call: () => call47
382864
+ call: () => call48
382778
382865
  });
382779
382866
  function Result2({
382780
382867
  lines,
@@ -382805,7 +382892,7 @@ function Result2({
382805
382892
  ]
382806
382893
  }, undefined, true, undefined, this);
382807
382894
  }
382808
- var React65, jsx_dev_runtime208, call47 = async (onDone) => {
382895
+ var React65, jsx_dev_runtime208, call48 = async (onDone) => {
382809
382896
  const r = await rebuildIndex();
382810
382897
  if (!r.available) {
382811
382898
  return /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Result2, {
@@ -382898,7 +382985,7 @@ var init_windowsSetup = __esm(() => {
382898
382985
  // src/commands/windows-setup/windows-setup.tsx
382899
382986
  var exports_windows_setup = {};
382900
382987
  __export(exports_windows_setup, {
382901
- call: () => call48
382988
+ call: () => call49
382902
382989
  });
382903
382990
  function ToolList({
382904
382991
  onReady
@@ -383004,7 +383091,7 @@ function ToolList({
383004
383091
  ]
383005
383092
  }, undefined, true, undefined, this);
383006
383093
  }
383007
- var React66, jsx_dev_runtime209, call48 = async (onDone) => {
383094
+ var React66, jsx_dev_runtime209, call49 = async (onDone) => {
383008
383095
  return /* @__PURE__ */ jsx_dev_runtime209.jsxDEV(ToolList, {
383009
383096
  onReady: () => onDone(undefined)
383010
383097
  }, undefined, false, undefined, this);
@@ -383314,7 +383401,7 @@ var init_toolRpcServer = __esm(() => {
383314
383401
  // src/commands/rpc/rpc.tsx
383315
383402
  var exports_rpc = {};
383316
383403
  __export(exports_rpc, {
383317
- call: () => call49
383404
+ call: () => call50
383318
383405
  });
383319
383406
  function RpcStatus({
383320
383407
  port,
@@ -383448,7 +383535,7 @@ function RpcStatus({
383448
383535
  ]
383449
383536
  }, undefined, true, undefined, this);
383450
383537
  }
383451
- var React67, jsx_dev_runtime210, call49 = async (onDone) => {
383538
+ var React67, jsx_dev_runtime210, call50 = async (onDone) => {
383452
383539
  return /* @__PURE__ */ jsx_dev_runtime210.jsxDEV(RpcStatus, {
383453
383540
  port: getRpcPort(),
383454
383541
  onReady: () => onDone(undefined)
@@ -383482,7 +383569,7 @@ var init_rpc2 = __esm(() => {
383482
383569
  var exports_heartbeat = {};
383483
383570
  __export(exports_heartbeat, {
383484
383571
  isHeartbeatActive: () => isHeartbeatActive,
383485
- call: () => call50
383572
+ call: () => call51
383486
383573
  });
383487
383574
  function isHeartbeatActive() {
383488
383575
  return heartbeatActive;
@@ -383567,7 +383654,7 @@ var React68, jsx_dev_runtime211, heartbeatInterval = 5, heartbeatBeat = 0, heart
383567
383654
  • Look for quick wins: small bugs, missing tests, stale docs
383568
383655
  • Write notes to memory files about important patterns you notice
383569
383656
  • Explore anything that interests you and might be useful
383570
- • Send a Telegram update about what you found / did`, call50 = async (onDone, context7, args) => {
383657
+ • Send a Telegram update about what you found / did`, call51 = async (onDone, context7, args) => {
383571
383658
  const rawArgs = args?.trim() ?? "";
383572
383659
  const { extractChain: extractChain2, validateCommandChain: validateCommandChain2, parseCommandChain: parseCommandChain2, chainWarning: chainWarning2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
383573
383660
  const { ownArgs: chainedArgs } = extractChain2(rawArgs);
@@ -383692,7 +383779,7 @@ var init_heartbeat2 = __esm(() => {
383692
383779
  // src/commands/sysprompt/sysprompt.tsx
383693
383780
  var exports_sysprompt = {};
383694
383781
  __export(exports_sysprompt, {
383695
- call: () => call51
383782
+ call: () => call52
383696
383783
  });
383697
383784
  function SyspromptResult({
383698
383785
  message,
@@ -383713,7 +383800,7 @@ function SyspromptResult({
383713
383800
  }, undefined, false, undefined, this)
383714
383801
  }, undefined, false, undefined, this);
383715
383802
  }
383716
- var React69, jsx_dev_runtime212, call51 = async (onDone, _context, args) => {
383803
+ var React69, jsx_dev_runtime212, call52 = async (onDone, _context, args) => {
383717
383804
  const trimmed = args?.trim() ?? "";
383718
383805
  if (!trimmed) {
383719
383806
  const current = getSessionSyspromptOverride();
@@ -383772,7 +383859,7 @@ var init_sysprompt2 = __esm(() => {
383772
383859
  // src/commands/ctx/ctx.tsx
383773
383860
  var exports_ctx = {};
383774
383861
  __export(exports_ctx, {
383775
- call: () => call52
383862
+ call: () => call53
383776
383863
  });
383777
383864
  function CtxDisplay({
383778
383865
  lines,
@@ -383806,7 +383893,7 @@ function barLine(used, total, width = 40) {
383806
383893
  const color3 = pct2 > 0.85 ? "█" : "▓";
383807
383894
  return `[${"█".repeat(filled)}${" ".repeat(empty)}] ${Math.round(pct2 * 100)}%`;
383808
383895
  }
383809
- var React70, jsx_dev_runtime213, call52 = async (onDone, context7, args) => {
383896
+ var React70, jsx_dev_runtime213, call53 = async (onDone, context7, args) => {
383810
383897
  const parts = (args ?? "").trim().split(/\s+/).filter(Boolean);
383811
383898
  const sub = parts[0]?.toLowerCase();
383812
383899
  const model = context7.options.mainLoopModel;
@@ -383958,9 +384045,9 @@ var init_ctx2 = __esm(() => {
383958
384045
  // src/commands/ctx/contextsize.tsx
383959
384046
  var exports_contextsize = {};
383960
384047
  __export(exports_contextsize, {
383961
- call: () => call53
384048
+ call: () => call54
383962
384049
  });
383963
- var call53 = async (onDone, context7, args) => {
384050
+ var call54 = async (onDone, context7, args) => {
383964
384051
  const value = (args ?? "").trim();
383965
384052
  const { call: ctxCall } = await Promise.resolve().then(() => (init_ctx(), exports_ctx));
383966
384053
  if (value) {
@@ -383985,7 +384072,7 @@ var init_contextsize_index = __esm(() => {
383985
384072
  // src/commands/research/research.tsx
383986
384073
  var exports_research = {};
383987
384074
  __export(exports_research, {
383988
- call: () => call54
384075
+ call: () => call55
383989
384076
  });
383990
384077
  function buildResearchPrompt(topic, thinkHarder) {
383991
384078
  const thinkHarderSection = thinkHarder ? `
@@ -384094,7 +384181,7 @@ function ResearchWarning({
384094
384181
  }, undefined, false, undefined, this)
384095
384182
  }, undefined, false, undefined, this);
384096
384183
  }
384097
- var React71, jsx_dev_runtime214, call54 = async (onDone, _context, args) => {
384184
+ var React71, jsx_dev_runtime214, call55 = async (onDone, _context, args) => {
384098
384185
  const rawArgs = args?.trim() ?? "";
384099
384186
  const { ownArgs: topic, nextCmd } = extractChain(rawArgs);
384100
384187
  if (!topic) {
@@ -384653,10 +384740,10 @@ var init_MemoryFileSelector = __esm(() => {
384653
384740
  });
384654
384741
 
384655
384742
  // src/components/memory/MemoryUpdateNotification.tsx
384656
- import { homedir as homedir32 } from "os";
384743
+ import { homedir as homedir30 } from "os";
384657
384744
  import { relative as relative24 } from "path";
384658
384745
  function getRelativeMemoryPath(path12) {
384659
- const homeDir = homedir32();
384746
+ const homeDir = homedir30();
384660
384747
  const cwd2 = getCwd();
384661
384748
  const relativeToHome = path12.startsWith(homeDir) ? "~" + path12.slice(homeDir.length) : null;
384662
384749
  const relativeToCwd = path12.startsWith(cwd2) ? "./" + relative24(cwd2, path12) : null;
@@ -384901,7 +384988,7 @@ var init_promptEditor = __esm(() => {
384901
384988
  // src/commands/memory/memory.tsx
384902
384989
  var exports_memory = {};
384903
384990
  __export(exports_memory, {
384904
- call: () => call55
384991
+ call: () => call56
384905
384992
  });
384906
384993
  import { mkdir as mkdir49, writeFile as writeFile50 } from "fs/promises";
384907
384994
  function MemoryCommand({
@@ -384981,7 +385068,7 @@ ${editorHint}`, {
384981
385068
  }, undefined, true, undefined, this)
384982
385069
  }, undefined, false, undefined, this);
384983
385070
  }
384984
- var React72, jsx_dev_runtime217, call55 = async (onDone) => {
385071
+ var React72, jsx_dev_runtime217, call56 = async (onDone) => {
384985
385072
  clearMemoryFileCaches();
384986
385073
  await getMemoryFiles();
384987
385074
  return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(MemoryCommand, {
@@ -385837,7 +385924,7 @@ function Help(t0) {
385837
385924
  let t6;
385838
385925
  if ($2[31] !== tabs) {
385839
385926
  t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
385840
- title: `localclawd v${"1.9.1"}`,
385927
+ title: `localclawd v${"1.9.8"}`,
385841
385928
  color: "professionalBlue",
385842
385929
  defaultTab: "general",
385843
385930
  children: tabs
@@ -385943,9 +386030,9 @@ var init_Help = __esm(() => {
385943
386030
  // src/commands/help/help.tsx
385944
386031
  var exports_help = {};
385945
386032
  __export(exports_help, {
385946
- call: () => call56
386033
+ call: () => call57
385947
386034
  });
385948
- var jsx_dev_runtime222, call56 = async (onDone, {
386035
+ var jsx_dev_runtime222, call57 = async (onDone, {
385949
386036
  options: {
385950
386037
  commands
385951
386038
  }
@@ -386152,7 +386239,7 @@ var init_IdeAutoConnectDialog = __esm(() => {
386152
386239
  var exports_ide = {};
386153
386240
  __export(exports_ide, {
386154
386241
  formatWorkspaceFolders: () => formatWorkspaceFolders,
386155
- call: () => call57
386242
+ call: () => call58
386156
386243
  });
386157
386244
  import * as path12 from "path";
386158
386245
  function IDEScreen(t0) {
@@ -386630,7 +386717,7 @@ function InstallOnMount(t0) {
386630
386717
  import_react113.useEffect(t1, t2);
386631
386718
  return null;
386632
386719
  }
386633
- async function call57(onDone, context7, args) {
386720
+ async function call58(onDone, context7, args) {
386634
386721
  logEvent("tengu_ext_ide_command", {});
386635
386722
  const {
386636
386723
  options: {
@@ -387213,11 +387300,11 @@ var init_template = __esm(() => {
387213
387300
  // src/commands/keybindings/keybindings.ts
387214
387301
  var exports_keybindings = {};
387215
387302
  __export(exports_keybindings, {
387216
- call: () => call58
387303
+ call: () => call59
387217
387304
  });
387218
387305
  import { mkdir as mkdir50, writeFile as writeFile51 } from "fs/promises";
387219
387306
  import { dirname as dirname47 } from "path";
387220
- async function call58() {
387307
+ async function call59() {
387221
387308
  if (!isKeybindingCustomizationEnabled()) {
387222
387309
  return {
387223
387310
  type: "text",
@@ -391705,7 +391792,7 @@ var init_pluginStartupCheck = __esm(() => {
391705
391792
  });
391706
391793
 
391707
391794
  // src/utils/plugins/parseMarketplaceInput.ts
391708
- import { homedir as homedir33 } from "os";
391795
+ import { homedir as homedir31 } from "os";
391709
391796
  import { resolve as resolve39 } from "path";
391710
391797
  async function parseMarketplaceInput(input) {
391711
391798
  const trimmed = input.trim();
@@ -391741,7 +391828,7 @@ async function parseMarketplaceInput(input) {
391741
391828
  const isWindows3 = process.platform === "win32";
391742
391829
  const isWindowsPath = isWindows3 && (trimmed.startsWith(".\\") || trimmed.startsWith("..\\") || /^[a-zA-Z]:[/\\]/.test(trimmed));
391743
391830
  if (trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("/") || trimmed.startsWith("~") || isWindowsPath) {
391744
- const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir33()) : trimmed);
391831
+ const resolvedPath = resolve39(trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir31()) : trimmed);
391745
391832
  let stats;
391746
391833
  try {
391747
391834
  stats = await fs4.stat(resolvedPath);
@@ -401748,7 +401835,7 @@ var init_PluginSettings = __esm(() => {
401748
401835
  // src/commands/mcp/mcp.tsx
401749
401836
  var exports_mcp = {};
401750
401837
  __export(exports_mcp, {
401751
- call: () => call59
401838
+ call: () => call60
401752
401839
  });
401753
401840
  function MCPToggle(t0) {
401754
401841
  const $2 = c3(7);
@@ -401801,7 +401888,7 @@ function _temp239(c5) {
401801
401888
  function _temp100(s) {
401802
401889
  return s.mcp.clients;
401803
401890
  }
401804
- async function call59(onDone, _context, args) {
401891
+ async function call60(onDone, _context, args) {
401805
401892
  if (args) {
401806
401893
  const parts = args.trim().split(/\s+/);
401807
401894
  if (parts[0] === "no-redirect") {
@@ -402422,9 +402509,9 @@ var init_createSession = __esm(() => {
402422
402509
  // src/commands/rename/rename.ts
402423
402510
  var exports_rename = {};
402424
402511
  __export(exports_rename, {
402425
- call: () => call60
402512
+ call: () => call61
402426
402513
  });
402427
- async function call60(onDone, context7, args) {
402514
+ async function call61(onDone, context7, args) {
402428
402515
  if (isTeammate()) {
402429
402516
  onDone("Cannot rename: This session is a swarm teammate. Teammate names are set by the team leader.", { display: "system" });
402430
402517
  return null;
@@ -403099,7 +403186,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403099
403186
  }
403100
403187
  return [];
403101
403188
  }
403102
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.1") {
403189
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.8") {
403103
403190
  if (process.env.USER_TYPE === "ant") {
403104
403191
  const changelog = MACRO.VERSION_CHANGELOG;
403105
403192
  if (changelog) {
@@ -403126,7 +403213,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.1") {
403126
403213
  releaseNotes
403127
403214
  };
403128
403215
  }
403129
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.1") {
403216
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.8") {
403130
403217
  if (process.env.USER_TYPE === "ant") {
403131
403218
  const changelog = MACRO.VERSION_CHANGELOG;
403132
403219
  if (changelog) {
@@ -403283,7 +403370,7 @@ function getRecentActivitySync() {
403283
403370
  return cachedActivity;
403284
403371
  }
403285
403372
  function getLogoDisplayData() {
403286
- const version = process.env.DEMO_VERSION ?? "1.9.1";
403373
+ const version = process.env.DEMO_VERSION ?? "1.9.8";
403287
403374
  const serverUrl = getDirectConnectServerUrl();
403288
403375
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403289
403376
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -403789,7 +403876,7 @@ var init_referral = __esm(() => {
403789
403876
  });
403790
403877
 
403791
403878
  // src/components/Logo/feedConfigs.tsx
403792
- import { homedir as homedir34 } from "os";
403879
+ import { homedir as homedir32 } from "os";
403793
403880
  function createRecentActivityFeed(activities) {
403794
403881
  const lines = activities.map((log2) => {
403795
403882
  const time = formatRelativeTimeAgo(log2.modified);
@@ -403834,7 +403921,7 @@ function createProjectOnboardingFeed(steps) {
403834
403921
  text: `${checkmark}${text}`
403835
403922
  };
403836
403923
  });
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;
403924
+ const warningText = getCwd() === homedir32() ? "Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead." : undefined;
403838
403925
  if (warningText) {
403839
403926
  lines.push({
403840
403927
  text: warningText
@@ -404383,7 +404470,7 @@ function Logo() {
404383
404470
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
404384
404471
  t2 = () => {
404385
404472
  const currentConfig = getGlobalConfig();
404386
- if (currentConfig.lastReleaseNotesSeen === "1.9.1") {
404473
+ if (currentConfig.lastReleaseNotesSeen === "1.9.8") {
404387
404474
  return;
404388
404475
  }
404389
404476
  saveGlobalConfig(_temp326);
@@ -405042,12 +405129,12 @@ function Logo() {
405042
405129
  return t41;
405043
405130
  }
405044
405131
  function _temp326(current) {
405045
- if (current.lastReleaseNotesSeen === "1.9.1") {
405132
+ if (current.lastReleaseNotesSeen === "1.9.8") {
405046
405133
  return current;
405047
405134
  }
405048
405135
  return {
405049
405136
  ...current,
405050
- lastReleaseNotesSeen: "1.9.1"
405137
+ lastReleaseNotesSeen: "1.9.8"
405051
405138
  };
405052
405139
  }
405053
405140
  function _temp241(s_0) {
@@ -410940,7 +411027,7 @@ var init_crossProjectResume = __esm(() => {
410940
411027
  var exports_resume = {};
410941
411028
  __export(exports_resume, {
410942
411029
  filterResumableSessions: () => filterResumableSessions,
410943
- call: () => call61
411030
+ call: () => call62
410944
411031
  });
410945
411032
  function resumeHelpMessage(result) {
410946
411033
  switch (result.resultType) {
@@ -411125,7 +411212,7 @@ function ResumeCommand({
411125
411212
  function filterResumableSessions(logs2, currentSessionId) {
411126
411213
  return logs2.filter((l) => !l.isSidechain && getSessionIdFromLog(l) !== currentSessionId);
411127
411214
  }
411128
- var React97, jsx_dev_runtime273, call61 = async (onDone, context7, args) => {
411215
+ var React97, jsx_dev_runtime273, call62 = async (onDone, context7, args) => {
411129
411216
  const onResume = async (sessionId, log2, entrypoint) => {
411130
411217
  try {
411131
411218
  await context7.resume?.(sessionId, log2, entrypoint);
@@ -411615,7 +411702,7 @@ var init_UltrareviewOverageDialog = __esm(() => {
411615
411702
  // src/commands/review/ultrareviewCommand.tsx
411616
411703
  var exports_ultrareviewCommand = {};
411617
411704
  __export(exports_ultrareviewCommand, {
411618
- call: () => call62
411705
+ call: () => call63
411619
411706
  });
411620
411707
  function contentBlocksToString(blocks) {
411621
411708
  return blocks.map((b3) => b3.type === "text" ? b3.text : "").filter(Boolean).join(`
@@ -411635,7 +411722,7 @@ async function launchAndDone(args, context7, onDone, billingNote, signal2) {
411635
411722
  });
411636
411723
  }
411637
411724
  }
411638
- var jsx_dev_runtime275, call62 = async (onDone, context7, args) => {
411725
+ var jsx_dev_runtime275, call63 = async (onDone, context7, args) => {
411639
411726
  const gate = await checkOverageGate();
411640
411727
  if (gate.kind === "not-enabled") {
411641
411728
  onDone("Free ultrareviews used. This feature requires a cloud subscription.", {
@@ -415961,7 +416048,7 @@ var init_server = __esm(() => {
415961
416048
  // src/commands/session/session.tsx
415962
416049
  var exports_session = {};
415963
416050
  __export(exports_session, {
415964
- call: () => call63
416051
+ call: () => call64
415965
416052
  });
415966
416053
  function SessionInfo(t0) {
415967
416054
  const $2 = c3(19);
@@ -416134,7 +416221,7 @@ function _temp247(e) {
416134
416221
  function _temp119(s) {
416135
416222
  return s.remoteSessionUrl;
416136
416223
  }
416137
- var import_react150, jsx_dev_runtime276, call63 = async (onDone) => {
416224
+ var import_react150, jsx_dev_runtime276, call64 = async (onDone) => {
416138
416225
  return /* @__PURE__ */ jsx_dev_runtime276.jsxDEV(SessionInfo, {
416139
416226
  onDone
416140
416227
  }, undefined, false, undefined, this);
@@ -416490,9 +416577,9 @@ var init_SkillsMenu = __esm(() => {
416490
416577
  // src/commands/skills/skills.tsx
416491
416578
  var exports_skills2 = {};
416492
416579
  __export(exports_skills2, {
416493
- call: () => call64
416580
+ call: () => call65
416494
416581
  });
416495
- async function call64(onDone, context7) {
416582
+ async function call65(onDone, context7) {
416496
416583
  return /* @__PURE__ */ jsx_dev_runtime278.jsxDEV(SkillsMenu, {
416497
416584
  onExit: onDone,
416498
416585
  commands: context7.options.commands
@@ -416519,9 +416606,9 @@ var init_skills3 = __esm(() => {
416519
416606
  // src/commands/status/status.tsx
416520
416607
  var exports_status = {};
416521
416608
  __export(exports_status, {
416522
- call: () => call65
416609
+ call: () => call66
416523
416610
  });
416524
- async function call65(onDone, context7) {
416611
+ async function call66(onDone, context7) {
416525
416612
  return /* @__PURE__ */ jsx_dev_runtime279.jsxDEV(Settings, {
416526
416613
  onClose: onDone,
416527
416614
  context: context7,
@@ -417132,7 +417219,7 @@ ${reasons}`,
417132
417219
  } : prev);
417133
417220
  }
417134
417221
  }
417135
- var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call66 = async (onDone, context7, args) => {
417222
+ var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://github.com/chromebookwiz/localclawd", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call67 = async (onDone, context7, args) => {
417136
417223
  const blurb = args.trim();
417137
417224
  if (!blurb) {
417138
417225
  const msg = await launchUltraplan2({
@@ -417193,7 +417280,7 @@ var init_ultraplan = __esm(() => {
417193
417280
  argumentHint: "<prompt>",
417194
417281
  isEnabled: () => false,
417195
417282
  load: () => Promise.resolve({
417196
- call: call66
417283
+ call: call67
417197
417284
  })
417198
417285
  };
417199
417286
  });
@@ -421955,9 +422042,9 @@ var init_BackgroundTasksDialog = __esm(() => {
421955
422042
  // src/commands/tasks/tasks.tsx
421956
422043
  var exports_tasks = {};
421957
422044
  __export(exports_tasks, {
421958
- call: () => call67
422045
+ call: () => call68
421959
422046
  });
421960
- async function call67(onDone, context7) {
422047
+ async function call68(onDone, context7) {
421961
422048
  return /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(BackgroundTasksDialog, {
421962
422049
  toolUseContext: context7,
421963
422050
  onDone
@@ -422248,9 +422335,9 @@ var init_terminalSetup2 = __esm(() => {
422248
422335
  // src/commands/usage/usage.tsx
422249
422336
  var exports_usage = {};
422250
422337
  __export(exports_usage, {
422251
- call: () => call68
422338
+ call: () => call69
422252
422339
  });
422253
- var jsx_dev_runtime291, call68 = async (onDone, context7) => {
422340
+ var jsx_dev_runtime291, call69 = async (onDone, context7) => {
422254
422341
  return /* @__PURE__ */ jsx_dev_runtime291.jsxDEV(Settings, {
422255
422342
  onClose: onDone,
422256
422343
  context: context7,
@@ -422281,7 +422368,7 @@ var init_usage3 = __esm(() => {
422281
422368
  // src/commands/theme/theme.tsx
422282
422369
  var exports_theme = {};
422283
422370
  __export(exports_theme, {
422284
- call: () => call69
422371
+ call: () => call70
422285
422372
  });
422286
422373
  function ThemePickerCommand(t0) {
422287
422374
  const $2 = c3(8);
@@ -422331,7 +422418,7 @@ function ThemePickerCommand(t0) {
422331
422418
  }
422332
422419
  return t3;
422333
422420
  }
422334
- var jsx_dev_runtime292, call69 = async (onDone, _context) => {
422421
+ var jsx_dev_runtime292, call70 = async (onDone, _context) => {
422335
422422
  return /* @__PURE__ */ jsx_dev_runtime292.jsxDEV(ThemePickerCommand, {
422336
422423
  onDone
422337
422424
  }, undefined, false, undefined, this);
@@ -422358,9 +422445,9 @@ var init_theme3 = __esm(() => {
422358
422445
  // src/commands/vim/vim.ts
422359
422446
  var exports_vim = {};
422360
422447
  __export(exports_vim, {
422361
- call: () => call70
422448
+ call: () => call71
422362
422449
  });
422363
- var call70 = async () => {
422450
+ var call71 = async () => {
422364
422451
  const config2 = getGlobalConfig();
422365
422452
  let currentMode = config2.editorMode || "normal";
422366
422453
  if (currentMode === "emacs") {
@@ -422401,7 +422488,7 @@ var init_vim2 = __esm(() => {
422401
422488
  var exports_thinkback = {};
422402
422489
  __export(exports_thinkback, {
422403
422490
  playAnimation: () => playAnimation,
422404
- call: () => call71
422491
+ call: () => call72
422405
422492
  });
422406
422493
  import { execa as execa11 } from "execa";
422407
422494
  import { readFile as readFile61 } from "fs/promises";
@@ -422939,7 +423026,7 @@ function ThinkbackFlow(t0) {
422939
423026
  }
422940
423027
  return t8;
422941
423028
  }
422942
- async function call71(onDone) {
423029
+ async function call72(onDone) {
422943
423030
  return /* @__PURE__ */ jsx_dev_runtime293.jsxDEV(ThinkbackFlow, {
422944
423031
  onDone
422945
423032
  }, undefined, false, undefined, this);
@@ -422984,14 +423071,14 @@ var init_thinkback2 = __esm(() => {
422984
423071
  // src/commands/thinkback-play/thinkback-play.ts
422985
423072
  var exports_thinkback_play = {};
422986
423073
  __export(exports_thinkback_play, {
422987
- call: () => call72
423074
+ call: () => call73
422988
423075
  });
422989
423076
  import { join as join139 } from "path";
422990
423077
  function getPluginId2() {
422991
423078
  const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
422992
423079
  return `thinkback@${marketplaceName}`;
422993
423080
  }
422994
- async function call72() {
423081
+ async function call73() {
422995
423082
  const v2Data = loadInstalledPluginsV2();
422996
423083
  const pluginId = getPluginId2();
422997
423084
  const installations = v2Data.plugins[pluginId];
@@ -425479,9 +425566,9 @@ var init_PermissionRuleList = __esm(() => {
425479
425566
  // src/commands/permissions/permissions.tsx
425480
425567
  var exports_permissions = {};
425481
425568
  __export(exports_permissions, {
425482
- call: () => call73
425569
+ call: () => call74
425483
425570
  });
425484
- var jsx_dev_runtime301, call73 = async (onDone, context7) => {
425571
+ var jsx_dev_runtime301, call74 = async (onDone, context7) => {
425485
425572
  return /* @__PURE__ */ jsx_dev_runtime301.jsxDEV(PermissionRuleList, {
425486
425573
  onExit: onDone,
425487
425574
  onRetryDenials: (commands) => {
@@ -425511,7 +425598,7 @@ var init_permissions4 = __esm(() => {
425511
425598
  // src/commands/plan/plan.tsx
425512
425599
  var exports_plan = {};
425513
425600
  __export(exports_plan, {
425514
- call: () => call74
425601
+ call: () => call75
425515
425602
  });
425516
425603
  function PlanDisplay(t0) {
425517
425604
  const $2 = c3(11);
@@ -425599,7 +425686,7 @@ function PlanDisplay(t0) {
425599
425686
  }
425600
425687
  return t5;
425601
425688
  }
425602
- async function call74(onDone, context7, args) {
425689
+ async function call75(onDone, context7, args) {
425603
425690
  const {
425604
425691
  getAppState,
425605
425692
  setAppState
@@ -425741,7 +425828,7 @@ var init_FastIcon = __esm(() => {
425741
425828
  // src/commands/fast/fast.tsx
425742
425829
  var exports_fast = {};
425743
425830
  __export(exports_fast, {
425744
- call: () => call75,
425831
+ call: () => call76,
425745
425832
  FastModePicker: () => FastModePicker
425746
425833
  });
425747
425834
  function applyFastMode(enable, setAppState) {
@@ -426056,7 +426143,7 @@ async function handleFastModeShortcut(enable, getAppState, setAppState) {
426056
426143
  return `Fast mode OFF`;
426057
426144
  }
426058
426145
  }
426059
- async function call75(onDone, context7, args) {
426146
+ async function call76(onDone, context7, args) {
426060
426147
  if (!isFastModeEnabled()) {
426061
426148
  return null;
426062
426149
  }
@@ -426364,9 +426451,9 @@ var init_Passes = __esm(() => {
426364
426451
  // src/commands/passes/passes.tsx
426365
426452
  var exports_passes = {};
426366
426453
  __export(exports_passes, {
426367
- call: () => call76
426454
+ call: () => call77
426368
426455
  });
426369
- async function call76(onDone) {
426456
+ async function call77(onDone) {
426370
426457
  const config2 = getGlobalConfig();
426371
426458
  const isFirstVisit = !config2.hasVisitedPasses;
426372
426459
  if (isFirstVisit) {
@@ -427128,9 +427215,9 @@ var init_Grove = __esm(() => {
427128
427215
  // src/commands/privacy-settings/privacy-settings.tsx
427129
427216
  var exports_privacy_settings = {};
427130
427217
  __export(exports_privacy_settings, {
427131
- call: () => call77
427218
+ call: () => call78
427132
427219
  });
427133
- async function call77(onDone) {
427220
+ async function call78(onDone) {
427134
427221
  const qualified = await isQualifiedForGrove();
427135
427222
  if (!qualified) {
427136
427223
  onDone(FALLBACK_MESSAGE);
@@ -428970,9 +429057,9 @@ var init_HooksConfigMenu = __esm(() => {
428970
429057
  // src/commands/hooks/hooks.tsx
428971
429058
  var exports_hooks = {};
428972
429059
  __export(exports_hooks, {
428973
- call: () => call78
429060
+ call: () => call79
428974
429061
  });
428975
- var jsx_dev_runtime314, call78 = async (onDone, context7) => {
429062
+ var jsx_dev_runtime314, call79 = async (onDone, context7) => {
428976
429063
  logEvent("tengu_hooks_command", {});
428977
429064
  const appState = context7.getAppState();
428978
429065
  const permissionContext = appState.toolPermissionContext;
@@ -429004,10 +429091,10 @@ var init_hooks3 = __esm(() => {
429004
429091
  // src/commands/files/files.ts
429005
429092
  var exports_files2 = {};
429006
429093
  __export(exports_files2, {
429007
- call: () => call79
429094
+ call: () => call80
429008
429095
  });
429009
429096
  import { relative as relative26 } from "path";
429010
- async function call79(_args, context7) {
429097
+ async function call80(_args, context7) {
429011
429098
  const files = context7.readFileState ? cacheKeys(context7.readFileState) : [];
429012
429099
  if (files.length === 0) {
429013
429100
  return { type: "text", value: "No files in context" };
@@ -429040,7 +429127,7 @@ var init_files4 = __esm(() => {
429040
429127
  var exports_branch = {};
429041
429128
  __export(exports_branch, {
429042
429129
  deriveFirstPrompt: () => deriveFirstPrompt,
429043
- call: () => call80
429130
+ call: () => call81
429044
429131
  });
429045
429132
  import { randomUUID as randomUUID27 } from "crypto";
429046
429133
  import { mkdir as mkdir52, readFile as readFile62, writeFile as writeFile55 } from "fs/promises";
@@ -429146,7 +429233,7 @@ async function getUniqueForkName(baseName) {
429146
429233
  }
429147
429234
  return `${baseName} (Branch ${nextNumber})`;
429148
429235
  }
429149
- async function call80(onDone, context7, args) {
429236
+ async function call81(onDone, context7, args) {
429150
429237
  const customTitle = args?.trim() || undefined;
429151
429238
  const originalSessionId = getSessionId();
429152
429239
  try {
@@ -435161,9 +435248,9 @@ var init_AgentsMenu = __esm(() => {
435161
435248
  // src/commands/agents/agents.tsx
435162
435249
  var exports_agents = {};
435163
435250
  __export(exports_agents, {
435164
- call: () => call81
435251
+ call: () => call82
435165
435252
  });
435166
- async function call81(onDone, context7) {
435253
+ async function call82(onDone, context7) {
435167
435254
  const appState = context7.getAppState();
435168
435255
  const permissionContext = appState.toolPermissionContext;
435169
435256
  const tools = getTools(permissionContext);
@@ -435194,9 +435281,9 @@ var init_agents2 = __esm(() => {
435194
435281
  // src/commands/plugin/plugin.tsx
435195
435282
  var exports_plugin = {};
435196
435283
  __export(exports_plugin, {
435197
- call: () => call82
435284
+ call: () => call83
435198
435285
  });
435199
- async function call82(onDone, _context, args) {
435286
+ async function call83(onDone, _context, args) {
435200
435287
  return /* @__PURE__ */ jsx_dev_runtime340.jsxDEV(PluginSettings, {
435201
435288
  onComplete: onDone,
435202
435289
  args
@@ -435361,12 +435448,12 @@ var init_refresh = __esm(() => {
435361
435448
  // src/commands/reload-plugins/reload-plugins.ts
435362
435449
  var exports_reload_plugins = {};
435363
435450
  __export(exports_reload_plugins, {
435364
- call: () => call83
435451
+ call: () => call84
435365
435452
  });
435366
435453
  function n(count3, noun) {
435367
435454
  return `${count3} ${plural(count3, noun)}`;
435368
435455
  }
435369
- var call83 = async (_args, context7) => {
435456
+ var call84 = async (_args, context7) => {
435370
435457
  if (false) {}
435371
435458
  const r = await refreshActivePlugins(context7.setAppState);
435372
435459
  const parts = [
@@ -435409,9 +435496,9 @@ var init_reload_plugins2 = __esm(() => {
435409
435496
  // src/commands/rewind/rewind.ts
435410
435497
  var exports_rewind = {};
435411
435498
  __export(exports_rewind, {
435412
- call: () => call84
435499
+ call: () => call85
435413
435500
  });
435414
- async function call84(_args, context7) {
435501
+ async function call85(_args, context7) {
435415
435502
  if (context7.openMessageSelector) {
435416
435503
  context7.openMessageSelector();
435417
435504
  }
@@ -435526,7 +435613,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435526
435613
  smapsRollup,
435527
435614
  platform: process.platform,
435528
435615
  nodeVersion: process.version,
435529
- ccVersion: "1.9.1"
435616
+ ccVersion: "1.9.8"
435530
435617
  };
435531
435618
  }
435532
435619
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -435596,9 +435683,9 @@ var init_heapDumpService = __esm(() => {
435596
435683
  // src/commands/heapdump/heapdump.ts
435597
435684
  var exports_heapdump = {};
435598
435685
  __export(exports_heapdump, {
435599
- call: () => call85
435686
+ call: () => call86
435600
435687
  });
435601
- async function call85() {
435688
+ async function call86() {
435602
435689
  const result = await performHeapDump();
435603
435690
  if (!result.success) {
435604
435691
  return {
@@ -435969,7 +436056,7 @@ var USAGE = `/bridge-kick <subcommand>
435969
436056
  reconnect-session fail next POST /bridge/reconnect fails
435970
436057
  heartbeat <status> next heartbeat throws BridgeFatalError(status)
435971
436058
  reconnect call reconnectEnvironmentWithSession directly
435972
- status print bridge state`, call86 = async (args) => {
436059
+ status print bridge state`, call87 = async (args) => {
435973
436060
  const h = getBridgeDebugHandle();
435974
436061
  if (!h) {
435975
436062
  return {
@@ -436102,16 +436189,16 @@ var init_bridge_kick = __esm(() => {
436102
436189
  description: "Inject bridge failure states for manual recovery testing",
436103
436190
  isEnabled: () => process.env.USER_TYPE === "ant",
436104
436191
  supportsNonInteractive: false,
436105
- load: () => Promise.resolve({ call: call86 })
436192
+ load: () => Promise.resolve({ call: call87 })
436106
436193
  };
436107
436194
  bridge_kick_default = bridgeKick;
436108
436195
  });
436109
436196
 
436110
436197
  // src/commands/version.ts
436111
- var call87 = async () => {
436198
+ var call88 = async () => {
436112
436199
  return {
436113
436200
  type: "text",
436114
- value: `${"1.9.1"} (built ${"2026-05-07T18:03:44.736Z"})`
436201
+ value: `${"1.9.8"} (built ${"2026-05-07T19:50:53.354Z"})`
436115
436202
  };
436116
436203
  }, version, version_default;
436117
436204
  var init_version = __esm(() => {
@@ -436121,7 +436208,7 @@ var init_version = __esm(() => {
436121
436208
  description: "Print the version this session is running (not what autoupdate downloaded)",
436122
436209
  isEnabled: () => process.env.USER_TYPE === "ant",
436123
436210
  supportsNonInteractive: true,
436124
- load: () => Promise.resolve({ call: call87 })
436211
+ load: () => Promise.resolve({ call: call88 })
436125
436212
  };
436126
436213
  version_default = version;
436127
436214
  });
@@ -437277,10 +437364,10 @@ var init_SandboxSettings = __esm(() => {
437277
437364
  // src/commands/sandbox-toggle/sandbox-toggle.tsx
437278
437365
  var exports_sandbox_toggle = {};
437279
437366
  __export(exports_sandbox_toggle, {
437280
- call: () => call88
437367
+ call: () => call89
437281
437368
  });
437282
437369
  import { relative as relative27 } from "path";
437283
- async function call88(onDone, _context, args) {
437370
+ async function call89(onDone, _context, args) {
437284
437371
  const settings = getSettings_DEPRECATED();
437285
437372
  const themeName = settings.theme || "light";
437286
437373
  const platform3 = getPlatform();
@@ -437385,7 +437472,7 @@ var init_sandbox_toggle2 = __esm(() => {
437385
437472
  });
437386
437473
 
437387
437474
  // src/commands/advisor.ts
437388
- var call89 = async (args, context7) => {
437475
+ var call90 = async (args, context7) => {
437389
437476
  const arg = args.trim().toLowerCase();
437390
437477
  const baseModel = parseUserSpecifiedModel(context7.getAppState().mainLoopModel ?? getDefaultMainLoopModelSetting());
437391
437478
  if (!arg) {
@@ -437471,7 +437558,7 @@ var init_advisor2 = __esm(() => {
437471
437558
  return !canUserConfigureAdvisor();
437472
437559
  },
437473
437560
  supportsNonInteractive: true,
437474
- load: () => Promise.resolve({ call: call89 })
437561
+ load: () => Promise.resolve({ call: call90 })
437475
437562
  };
437476
437563
  advisor_default = advisor;
437477
437564
  });
@@ -437883,12 +437970,12 @@ var init_ExitFlow = __esm(() => {
437883
437970
  // src/commands/exit/exit.tsx
437884
437971
  var exports_exit = {};
437885
437972
  __export(exports_exit, {
437886
- call: () => call90
437973
+ call: () => call91
437887
437974
  });
437888
437975
  function getRandomGoodbyeMessage2() {
437889
437976
  return sample_default(GOODBYE_MESSAGES2) ?? "Goodbye!";
437890
437977
  }
437891
- async function call90(onDone) {
437978
+ async function call91(onDone) {
437892
437979
  if (false) {}
437893
437980
  const showWorktree = getCurrentWorktreeSession() !== null;
437894
437981
  if (showWorktree) {
@@ -438182,7 +438269,7 @@ var exports_export = {};
438182
438269
  __export(exports_export, {
438183
438270
  sanitizeFilename: () => sanitizeFilename,
438184
438271
  extractFirstPrompt: () => extractFirstPrompt,
438185
- call: () => call91
438272
+ call: () => call92
438186
438273
  });
438187
438274
  import { join as join144 } from "path";
438188
438275
  function formatTimestamp(date2) {
@@ -438223,7 +438310,7 @@ async function exportWithReactRenderer(context7) {
438223
438310
  const tools = context7.options.tools || [];
438224
438311
  return renderMessagesToPlainText(context7.messages, tools);
438225
438312
  }
438226
- async function call91(onDone, context7, args) {
438313
+ async function call92(onDone, context7, args) {
438227
438314
  const content = await exportWithReactRenderer(context7);
438228
438315
  const filename = args.trim();
438229
438316
  if (filename) {
@@ -438283,7 +438370,7 @@ var init_export2 = __esm(() => {
438283
438370
  // src/commands/model/model.tsx
438284
438371
  var exports_model2 = {};
438285
438372
  __export(exports_model2, {
438286
- call: () => call92
438373
+ call: () => call93
438287
438374
  });
438288
438375
  function ModelPickerWrapper(t0) {
438289
438376
  const $2 = c3(17);
@@ -438531,7 +438618,7 @@ function renderModelLabel(model) {
438531
438618
  const rendered = renderDefaultModelSetting(model ?? getDefaultMainLoopModelSetting());
438532
438619
  return model === null ? `${rendered} (default)` : rendered;
438533
438620
  }
438534
- var React116, jsx_dev_runtime352, call92 = async (onDone, _context, args) => {
438621
+ var React116, jsx_dev_runtime352, call93 = async (onDone, _context, args) => {
438535
438622
  args = args?.trim() || "";
438536
438623
  if (COMMON_INFO_ARGS.includes(args)) {
438537
438624
  logEvent("tengu_model_command_inline_help", {
@@ -438598,7 +438685,7 @@ var init_model3 = __esm(() => {
438598
438685
  // src/commands/tag/tag.tsx
438599
438686
  var exports_tag = {};
438600
438687
  __export(exports_tag, {
438601
- call: () => call93
438688
+ call: () => call94
438602
438689
  });
438603
438690
  function ConfirmRemoveTag(t0) {
438604
438691
  const $2 = c3(11);
@@ -438822,7 +438909,7 @@ Examples:
438822
438909
  React117.useEffect(t1, t2);
438823
438910
  return null;
438824
438911
  }
438825
- async function call93(onDone, _context, args) {
438912
+ async function call94(onDone, _context, args) {
438826
438913
  args = args?.trim() || "";
438827
438914
  if (COMMON_INFO_ARGS.includes(args) || COMMON_HELP_ARGS.includes(args)) {
438828
438915
  return /* @__PURE__ */ jsx_dev_runtime353.jsxDEV(ShowHelp, {
@@ -438869,9 +438956,9 @@ var init_tag2 = __esm(() => {
438869
438956
  // src/commands/output-style/output-style.tsx
438870
438957
  var exports_output_style = {};
438871
438958
  __export(exports_output_style, {
438872
- call: () => call94
438959
+ call: () => call95
438873
438960
  });
438874
- async function call94(onDone) {
438961
+ async function call95(onDone) {
438875
438962
  onDone("/output-style has been deprecated. Use /config to change your output style, or set it in your settings file. Changes take effect on the next session.", {
438876
438963
  display: "system"
438877
438964
  });
@@ -438893,7 +438980,7 @@ var init_output_style = __esm(() => {
438893
438980
  // src/commands/provider/provider.tsx
438894
438981
  var exports_provider = {};
438895
438982
  __export(exports_provider, {
438896
- call: () => call95
438983
+ call: () => call96
438897
438984
  });
438898
438985
  function formatProviderSavedMessage(config2) {
438899
438986
  const providerLabel = getLocalLLMProviderLabel(config2.provider);
@@ -438907,7 +438994,7 @@ function formatProviderSavedMessage(config2) {
438907
438994
  ].join(`
438908
438995
  `);
438909
438996
  }
438910
- var jsx_dev_runtime354, call95 = async (onDone) => {
438997
+ var jsx_dev_runtime354, call96 = async (onDone) => {
438911
438998
  const config2 = getGlobalConfig();
438912
438999
  function handleComplete(nextConfig) {
438913
439000
  saveGlobalConfig((current) => ({
@@ -439463,9 +439550,9 @@ var init_RemoteEnvironmentDialog = __esm(() => {
439463
439550
  // src/commands/remote-env/remote-env.tsx
439464
439551
  var exports_remote_env = {};
439465
439552
  __export(exports_remote_env, {
439466
- call: () => call96
439553
+ call: () => call97
439467
439554
  });
439468
- async function call96(onDone) {
439555
+ async function call97(onDone) {
439469
439556
  return /* @__PURE__ */ jsx_dev_runtime356.jsxDEV(RemoteEnvironmentDialog, {
439470
439557
  onDone
439471
439558
  }, undefined, false, undefined, this);
@@ -439545,7 +439632,7 @@ var exports_effort = {};
439545
439632
  __export(exports_effort, {
439546
439633
  showCurrentEffort: () => showCurrentEffort,
439547
439634
  executeEffort: () => executeEffort,
439548
- call: () => call97
439635
+ call: () => call98
439549
439636
  });
439550
439637
  function setEffortValue(effortValue) {
439551
439638
  const persistable = toPersistableEffort(effortValue);
@@ -439696,7 +439783,7 @@ function ApplyEffortAndClose(t0) {
439696
439783
  React118.useEffect(t1, t2);
439697
439784
  return null;
439698
439785
  }
439699
- async function call97(onDone, _context, args) {
439786
+ async function call98(onDone, _context, args) {
439700
439787
  args = args?.trim() || "";
439701
439788
  if (COMMON_HELP_ARGS2.includes(args)) {
439702
439789
  onDone(`Usage: /effort [low|medium|high|max|auto]
@@ -442528,9 +442615,9 @@ var init_Stats = __esm(() => {
442528
442615
  // src/commands/stats/stats.tsx
442529
442616
  var exports_stats = {};
442530
442617
  __export(exports_stats, {
442531
- call: () => call98
442618
+ call: () => call99
442532
442619
  });
442533
- var jsx_dev_runtime359, call98 = async (onDone) => {
442620
+ var jsx_dev_runtime359, call99 = async (onDone) => {
442534
442621
  return /* @__PURE__ */ jsx_dev_runtime359.jsxDEV(Stats2, {
442535
442622
  onClose: onDone
442536
442623
  }, undefined, false, undefined, this);
@@ -444055,7 +444142,7 @@ function generateHtmlReport(data, insights) {
444055
444142
  </html>`;
444056
444143
  }
444057
444144
  function buildExportData(data, insights, facets, remoteStats) {
444058
- const version2 = typeof MACRO !== "undefined" ? "1.9.1" : "unknown";
444145
+ const version2 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
444059
444146
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444060
444147
  const facets_summary = {
444061
444148
  total: facets.size,
@@ -444998,6 +445085,7 @@ var init_commands2 = __esm(() => {
444998
445085
  init_buddy2();
444999
445086
  init_images2();
445000
445087
  init_image_pipeline2();
445088
+ init_image_tips();
445001
445089
  init_keepgoing2();
445002
445090
  init_telegram2();
445003
445091
  init_slack2();
@@ -445211,6 +445299,7 @@ var init_commands2 = __esm(() => {
445211
445299
  buddy_default,
445212
445300
  images_default,
445213
445301
  image_pipeline_default,
445302
+ image_tips_default,
445214
445303
  telegram_default,
445215
445304
  slack_default,
445216
445305
  discord_default,
@@ -448256,7 +448345,7 @@ var init_sessionStorage = __esm(() => {
448256
448345
  init_settings2();
448257
448346
  init_slowOperations();
448258
448347
  init_uuid();
448259
- VERSION6 = typeof MACRO !== "undefined" ? "1.9.1" : "unknown";
448348
+ VERSION6 = typeof MACRO !== "undefined" ? "1.9.8" : "unknown";
448260
448349
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448261
448350
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448262
448351
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -448587,7 +448676,7 @@ var init_agentMemory = __esm(() => {
448587
448676
 
448588
448677
  // src/utils/permissions/filesystem.ts
448589
448678
  import { randomBytes as randomBytes20 } from "crypto";
448590
- import { homedir as homedir35, tmpdir as tmpdir10 } from "os";
448679
+ import { homedir as homedir33, tmpdir as tmpdir10 } from "os";
448591
448680
  import { join as join151, normalize as normalize14, posix as posix8, sep as sep32 } from "path";
448592
448681
  function normalizeCaseForComparison(path15) {
448593
448682
  return path15.toLowerCase();
@@ -448601,7 +448690,7 @@ function getClaudeSkillScope(filePath) {
448601
448690
  prefix: "/.claude/skills/"
448602
448691
  },
448603
448692
  {
448604
- dir: expandPath(join151(homedir35(), ".claude", "skills")),
448693
+ dir: expandPath(join151(homedir33(), ".claude", "skills")),
448605
448694
  prefix: "~/.claude/skills/"
448606
448695
  }
448607
448696
  ];
@@ -448915,7 +449004,7 @@ function patternWithRoot(pattern, source) {
448915
449004
  } else if (pattern.startsWith(`~${DIR_SEP}`)) {
448916
449005
  return {
448917
449006
  relativePattern: pattern.slice(1),
448918
- root: homedir35().normalize("NFC")
449007
+ root: homedir33().normalize("NFC")
448919
449008
  };
448920
449009
  } else if (pattern.startsWith(DIR_SEP)) {
448921
449010
  return {
@@ -449457,7 +449546,7 @@ var init_filesystem = __esm(() => {
449457
449546
  });
449458
449547
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
449459
449548
  const nonce = randomBytes20(16).toString("hex");
449460
- return join151(getClaudeTempDir(), "bundled-skills", "1.9.1", nonce);
449549
+ return join151(getClaudeTempDir(), "bundled-skills", "1.9.8", nonce);
449461
449550
  });
449462
449551
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
449463
449552
  });
@@ -457124,7 +457213,7 @@ __export(exports_upstreamproxy, {
457124
457213
  SESSION_TOKEN_PATH: () => SESSION_TOKEN_PATH
457125
457214
  });
457126
457215
  import { mkdir as mkdir60, readFile as readFile67, unlink as unlink24, writeFile as writeFile60 } from "fs/promises";
457127
- import { homedir as homedir36 } from "os";
457216
+ import { homedir as homedir34 } from "os";
457128
457217
  import { join as join154 } from "path";
457129
457218
  async function initUpstreamProxy(opts) {
457130
457219
  if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
@@ -457146,7 +457235,7 @@ async function initUpstreamProxy(opts) {
457146
457235
  }
457147
457236
  setNonDumpable();
457148
457237
  const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
457149
- const caBundlePath = opts?.caBundlePath ?? join154(homedir36(), ".ccr", "ca-bundle.crt");
457238
+ const caBundlePath = opts?.caBundlePath ?? join154(homedir34(), ".ccr", "ca-bundle.crt");
457150
457239
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
457151
457240
  if (!caOk)
457152
457241
  return state;
@@ -458694,7 +458783,7 @@ function buildSystemInitMessage(inputs) {
458694
458783
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458695
458784
  apiKeySource: getAnthropicApiKeyWithSource().source,
458696
458785
  betas: getSdkBetas(),
458697
- claude_code_version: "1.9.1",
458786
+ claude_code_version: "1.9.8",
458698
458787
  output_style: outputStyle2,
458699
458788
  agents: inputs.agents.map((agent) => agent.agentType),
458700
458789
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -465052,7 +465141,7 @@ var init_ShowInIDEPrompt = __esm(() => {
465052
465141
  });
465053
465142
 
465054
465143
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
465055
- import { homedir as homedir37 } from "os";
465144
+ import { homedir as homedir35 } from "os";
465056
465145
  import { basename as basename47, join as join155, sep as sep33 } from "path";
465057
465146
  function isInClaudeFolder(filePath) {
465058
465147
  const absolutePath = expandPath(filePath);
@@ -465063,7 +465152,7 @@ function isInClaudeFolder(filePath) {
465063
465152
  }
465064
465153
  function isInGlobalClaudeFolder(filePath) {
465065
465154
  const absolutePath = expandPath(filePath);
465066
- const globalClaudeFolderPath = join155(homedir37(), ".claude");
465155
+ const globalClaudeFolderPath = join155(homedir35(), ".claude");
465067
465156
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
465068
465157
  const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison(globalClaudeFolderPath);
465069
465158
  return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
@@ -472851,7 +472940,7 @@ var init_useVoiceEnabled = __esm(() => {
472851
472940
  function getSemverPart(version2) {
472852
472941
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
472853
472942
  }
472854
- function useUpdateNotification(updatedVersion, initialVersion = "1.9.1") {
472943
+ function useUpdateNotification(updatedVersion, initialVersion = "1.9.8") {
472855
472944
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
472856
472945
  if (!updatedVersion) {
472857
472946
  return null;
@@ -472891,7 +472980,7 @@ function AutoUpdater({
472891
472980
  return;
472892
472981
  }
472893
472982
  if (false) {}
472894
- const currentVersion = "1.9.1";
472983
+ const currentVersion = "1.9.8";
472895
472984
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472896
472985
  let latestVersion = await getLatestVersion(channel);
472897
472986
  const isDisabled = isAutoUpdaterDisabled();
@@ -473102,12 +473191,12 @@ function NativeAutoUpdater({
473102
473191
  logEvent("tengu_native_auto_updater_start", {});
473103
473192
  try {
473104
473193
  const maxVersion = await getMaxVersion();
473105
- if (maxVersion && gt("1.9.1", maxVersion)) {
473194
+ if (maxVersion && gt("1.9.8", maxVersion)) {
473106
473195
  const msg = await getMaxVersionMessage();
473107
473196
  setMaxVersionIssue(msg ?? "affects your version");
473108
473197
  }
473109
473198
  const result = await installLatest(channel);
473110
- const currentVersion = "1.9.1";
473199
+ const currentVersion = "1.9.8";
473111
473200
  const latencyMs = Date.now() - startTime;
473112
473201
  if (result.lockFailed) {
473113
473202
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473242,17 +473331,17 @@ function PackageManagerAutoUpdater(t0) {
473242
473331
  const maxVersion = await getMaxVersion();
473243
473332
  if (maxVersion && latest && gt(latest, maxVersion)) {
473244
473333
  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`);
473334
+ if (gte("1.9.8", maxVersion)) {
473335
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
473247
473336
  setUpdateAvailable(false);
473248
473337
  return;
473249
473338
  }
473250
473339
  latest = maxVersion;
473251
473340
  }
473252
- const hasUpdate = latest && !gte("1.9.1", latest) && !shouldSkipVersion(latest);
473341
+ const hasUpdate = latest && !gte("1.9.8", latest) && !shouldSkipVersion(latest);
473253
473342
  setUpdateAvailable(!!hasUpdate);
473254
473343
  if (hasUpdate) {
473255
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.1"} -> ${latest}`);
473344
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.8"} -> ${latest}`);
473256
473345
  }
473257
473346
  };
473258
473347
  $2[0] = t1;
@@ -473286,7 +473375,7 @@ function PackageManagerAutoUpdater(t0) {
473286
473375
  wrap: "truncate",
473287
473376
  children: [
473288
473377
  "currentVersion: ",
473289
- "1.9.1"
473378
+ "1.9.8"
473290
473379
  ]
473291
473380
  }, undefined, true, undefined, this);
473292
473381
  $2[3] = verbose;
@@ -480846,7 +480935,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
480846
480935
  project_dir: getOriginalCwd(),
480847
480936
  added_dirs: addedDirs
480848
480937
  },
480849
- version: "1.9.1",
480938
+ version: "1.9.8",
480850
480939
  output_style: {
480851
480940
  name: outputStyleName
480852
480941
  },
@@ -487190,7 +487279,7 @@ var init_cacache = __esm(() => {
487190
487279
 
487191
487280
  // src/utils/cleanup.ts
487192
487281
  import * as fs5 from "fs/promises";
487193
- import { homedir as homedir38 } from "os";
487282
+ import { homedir as homedir36 } from "os";
487194
487283
  import { join as join156 } from "path";
487195
487284
  function getCutoffDate() {
487196
487285
  const settings = getSettings_DEPRECATED() || {};
@@ -487491,7 +487580,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
487491
487580
  return;
487492
487581
  }
487493
487582
  logForDebugging("npm cache cleanup: starting");
487494
- const npmCachePath = join156(homedir38(), ".npm", "_cacache");
487583
+ const npmCachePath = join156(homedir36(), ".npm", "_cacache");
487495
487584
  const NPM_CACHE_RETENTION_COUNT = 5;
487496
487585
  const startTime = Date.now();
487497
487586
  try {
@@ -492418,7 +492507,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
492418
492507
  } catch {}
492419
492508
  const data = {
492420
492509
  trigger,
492421
- version: "1.9.1",
492510
+ version: "1.9.8",
492422
492511
  platform: process.platform,
492423
492512
  transcript,
492424
492513
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -504215,7 +504304,7 @@ var exports_TrustDialog = {};
504215
504304
  __export(exports_TrustDialog, {
504216
504305
  TrustDialog: () => TrustDialog
504217
504306
  });
504218
- import { homedir as homedir39 } from "os";
504307
+ import { homedir as homedir37 } from "os";
504219
504308
  function TrustDialog({ onDone }) {
504220
504309
  const [focusIdx, setFocusIdx] = import_react307.useState(0);
504221
504310
  const doneRef = import_react307.useRef(false);
@@ -504233,7 +504322,7 @@ function TrustDialog({ onDone }) {
504233
504322
  gracefulShutdownSync(1);
504234
504323
  } else {
504235
504324
  try {
504236
- if (homedir39() !== getCwd()) {
504325
+ if (homedir37() !== getCwd()) {
504237
504326
  try {
504238
504327
  saveCurrentProjectConfig((c5) => ({ ...c5, hasTrustDialogAccepted: true }));
504239
504328
  } catch {}
@@ -509327,7 +509416,7 @@ function appendToLog(path17, message) {
509327
509416
  cwd: getFsImplementation().cwd(),
509328
509417
  userType: process.env.USER_TYPE,
509329
509418
  sessionId: getSessionId(),
509330
- version: "1.9.1"
509419
+ version: "1.9.8"
509331
509420
  };
509332
509421
  getLogWriter(path17).write(messageWithTimestamp);
509333
509422
  }
@@ -509632,7 +509721,7 @@ var init_sessionMemory = __esm(() => {
509632
509721
 
509633
509722
  // src/utils/iTermBackup.ts
509634
509723
  import { copyFile as copyFile11, stat as stat56 } from "fs/promises";
509635
- import { homedir as homedir40 } from "os";
509724
+ import { homedir as homedir38 } from "os";
509636
509725
  import { join as join164 } from "path";
509637
509726
  function markITerm2SetupComplete() {
509638
509727
  saveGlobalConfig((current) => ({
@@ -509648,7 +509737,7 @@ function getIterm2RecoveryInfo() {
509648
509737
  };
509649
509738
  }
509650
509739
  function getITerm2PlistPath() {
509651
- return join164(homedir40(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509740
+ return join164(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
509652
509741
  }
509653
509742
  async function checkAndRestoreITerm2Backup() {
509654
509743
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -513351,8 +513440,8 @@ async function getEnvLessBridgeConfig() {
513351
513440
  }
513352
513441
  async function checkEnvLessBridgeMinVersion() {
513353
513442
  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.
513443
+ if (cfg.min_version && lt("1.9.8", cfg.min_version)) {
513444
+ return `Your version of localclawd (${"1.9.8"}) is too old for Remote Control.
513356
513445
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
513357
513446
  }
513358
513447
  return null;
@@ -513824,7 +513913,7 @@ async function initBridgeCore(params) {
513824
513913
  const rawApi = createBridgeApiClient({
513825
513914
  baseUrl,
513826
513915
  getAccessToken,
513827
- runnerVersion: "1.9.1",
513916
+ runnerVersion: "1.9.8",
513828
513917
  onDebug: logForDebugging,
513829
513918
  onAuth401,
513830
513919
  getTrustedDeviceToken
@@ -519543,7 +519632,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
519543
519632
  setCwd(cwd3);
519544
519633
  const server = new Server({
519545
519634
  name: "claude/tengu",
519546
- version: "1.9.1"
519635
+ version: "1.9.8"
519547
519636
  }, {
519548
519637
  capabilities: {
519549
519638
  tools: {}
@@ -519674,7 +519763,7 @@ __export(exports_appDesktop, {
519674
519763
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
519675
519764
  });
519676
519765
  import { readdir as readdir39, readFile as readFile72, stat as stat59 } from "fs/promises";
519677
- import { homedir as homedir41 } from "os";
519766
+ import { homedir as homedir39 } from "os";
519678
519767
  import { join as join168 } from "path";
519679
519768
  async function getClaudeDesktopConfigPath() {
519680
519769
  const platform3 = getPlatform();
@@ -519682,7 +519771,7 @@ async function getClaudeDesktopConfigPath() {
519682
519771
  throw new Error(`Unsupported platform: ${platform3} - desktop app integration only works on macOS and WSL.`);
519683
519772
  }
519684
519773
  if (platform3 === "macos") {
519685
- return join168(homedir41(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519774
+ return join168(homedir39(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
519686
519775
  }
519687
519776
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
519688
519777
  if (windowsHome) {
@@ -520624,7 +520713,7 @@ function WelcomeLogo() {
520624
520713
  dimColor: true,
520625
520714
  children: [
520626
520715
  "v",
520627
- "1.9.1"
520716
+ "1.9.8"
520628
520717
  ]
520629
520718
  }, undefined, true, undefined, this)
520630
520719
  ]
@@ -520815,7 +520904,7 @@ __export(exports_update, {
520815
520904
  });
520816
520905
  async function update() {
520817
520906
  logEvent("tengu_update_check", {});
520818
- writeToStdout(`Current version: ${"1.9.1"}
520907
+ writeToStdout(`Current version: ${"1.9.8"}
520819
520908
  `);
520820
520909
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520821
520910
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520890,8 +520979,8 @@ async function update() {
520890
520979
  writeToStdout(`localclawd is managed by Homebrew.
520891
520980
  `);
520892
520981
  const latest = await getLatestVersion(channel);
520893
- if (latest && !gte("1.9.1", latest)) {
520894
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
520982
+ if (latest && !gte("1.9.8", latest)) {
520983
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520895
520984
  `);
520896
520985
  writeToStdout(`
520897
520986
  `);
@@ -520907,8 +520996,8 @@ async function update() {
520907
520996
  writeToStdout(`localclawd is managed by winget.
520908
520997
  `);
520909
520998
  const latest = await getLatestVersion(channel);
520910
- if (latest && !gte("1.9.1", latest)) {
520911
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
520999
+ if (latest && !gte("1.9.8", latest)) {
521000
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520912
521001
  `);
520913
521002
  writeToStdout(`
520914
521003
  `);
@@ -520922,8 +521011,8 @@ async function update() {
520922
521011
  writeToStdout(`localclawd is managed by apk.
520923
521012
  `);
520924
521013
  const latest = await getLatestVersion(channel);
520925
- if (latest && !gte("1.9.1", latest)) {
520926
- writeToStdout(`Update available: ${"1.9.1"} → ${latest}
521014
+ if (latest && !gte("1.9.8", latest)) {
521015
+ writeToStdout(`Update available: ${"1.9.8"} → ${latest}
520927
521016
  `);
520928
521017
  writeToStdout(`
520929
521018
  `);
@@ -520988,11 +521077,11 @@ async function update() {
520988
521077
  `);
520989
521078
  await gracefulShutdown(1);
520990
521079
  }
520991
- if (result.latestVersion === "1.9.1") {
520992
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.1"})`) + `
521080
+ if (result.latestVersion === "1.9.8") {
521081
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
520993
521082
  `);
520994
521083
  } else {
520995
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.1"} to version ${result.latestVersion}`) + `
521084
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${result.latestVersion}`) + `
520996
521085
  `);
520997
521086
  await regenerateCompletionCache();
520998
521087
  }
@@ -521052,12 +521141,12 @@ async function update() {
521052
521141
  `);
521053
521142
  await gracefulShutdown(1);
521054
521143
  }
521055
- if (latestVersion === "1.9.1") {
521056
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.1"})`) + `
521144
+ if (latestVersion === "1.9.8") {
521145
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.8"})`) + `
521057
521146
  `);
521058
521147
  await gracefulShutdown(0);
521059
521148
  }
521060
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.1"})
521149
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.8"})
521061
521150
  `);
521062
521151
  writeToStdout(`Installing update...
521063
521152
  `);
@@ -521102,7 +521191,7 @@ async function update() {
521102
521191
  logForDebugging(`update: Installation status: ${status2}`);
521103
521192
  switch (status2) {
521104
521193
  case "success":
521105
- writeToStdout(source_default.green(`Successfully updated from ${"1.9.1"} to version ${latestVersion}`) + `
521194
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.8"} to version ${latestVersion}`) + `
521106
521195
  `);
521107
521196
  await regenerateCompletionCache();
521108
521197
  break;
@@ -522344,7 +522433,7 @@ Run with --debug for more details.
522344
522433
  }
522345
522434
  }
522346
522435
  logForDiagnosticsNoPII("info", "started", {
522347
- version: "1.9.1",
522436
+ version: "1.9.8",
522348
522437
  is_native_binary: isInBundledMode()
522349
522438
  });
522350
522439
  registerCleanup(async () => {
@@ -523128,7 +523217,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523128
523217
  pendingHookMessages
523129
523218
  }, renderAndRun);
523130
523219
  }
523131
- }).version("1.9.1 (localclawd)", "-v, --version", "Output the version number");
523220
+ }).version("1.9.8 (localclawd)", "-v, --version", "Output the version number");
523132
523221
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523133
523222
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523134
523223
  if (canUserConfigureAdvisor()) {
@@ -523642,7 +523731,7 @@ if (false) {}
523642
523731
  async function main2() {
523643
523732
  const args = process.argv.slice(2);
523644
523733
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523645
- console.log(`${"1.9.1"} (localclawd)`);
523734
+ console.log(`${"1.9.8"} (localclawd)`);
523646
523735
  return;
523647
523736
  }
523648
523737
  const {
@@ -523725,4 +523814,4 @@ localclawd crashed: ${msg}
523725
523814
  process.exit(1);
523726
523815
  });
523727
523816
 
523728
- //# debugId=C4269632DEB59EC664756E2164756E21
523817
+ //# debugId=F0B21E147347D4CC64756E2164756E21