localclawd 2.0.3 → 2.0.4

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 +118 -94
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -87608,7 +87608,7 @@ var init_isEqual = __esm(() => {
87608
87608
 
87609
87609
  // src/utils/userAgent.ts
87610
87610
  function getClaudeCodeUserAgent() {
87611
- return `claude-code/${"2.0.3"}`;
87611
+ return `claude-code/${"2.0.4"}`;
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/${"2.0.3"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"2.0.4"} (${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/${"2.0.3"}${suffix}`;
87647
+ return `claude-code/${"2.0.4"}${suffix}`;
87648
87648
  }
87649
87649
  function getWebFetchUserAgent() {
87650
87650
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -130844,7 +130844,7 @@ function getAttributionHeader(fingerprint) {
130844
130844
  if (!isAttributionHeaderEnabled()) {
130845
130845
  return "";
130846
130846
  }
130847
- const version = `${"2.0.3"}.${fingerprint}`;
130847
+ const version = `${"2.0.4"}.${fingerprint}`;
130848
130848
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
130849
130849
  const cch = "";
130850
130850
  const workload = getWorkload();
@@ -147033,7 +147033,7 @@ var init_metadata = __esm(() => {
147033
147033
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
147034
147034
  WHITESPACE_REGEX = /\s+/;
147035
147035
  getVersionBase = memoize_default(() => {
147036
- const match = "2.0.3".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147036
+ const match = "2.0.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147037
147037
  return match ? match[0] : undefined;
147038
147038
  });
147039
147039
  buildEnvContext = memoize_default(async () => {
@@ -147073,9 +147073,9 @@ var init_metadata = __esm(() => {
147073
147073
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
147074
147074
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
147075
147075
  isClaudeAiAuth: isClaudeAISubscriber(),
147076
- version: "2.0.3",
147076
+ version: "2.0.4",
147077
147077
  versionBase: getVersionBase(),
147078
- buildTime: "2026-05-07T20:44:36.123Z",
147078
+ buildTime: "2026-05-07T20:55:16.820Z",
147079
147079
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
147080
147080
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
147081
147081
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -179651,7 +179651,7 @@ function getTelemetryAttributes() {
179651
179651
  attributes["session.id"] = sessionId;
179652
179652
  }
179653
179653
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
179654
- attributes["app.version"] = "2.0.3";
179654
+ attributes["app.version"] = "2.0.4";
179655
179655
  }
179656
179656
  const oauthAccount = getOauthAccountInfo();
179657
179657
  if (oauthAccount) {
@@ -242455,7 +242455,7 @@ function getInstallationEnv() {
242455
242455
  return;
242456
242456
  }
242457
242457
  function getClaudeCodeVersion() {
242458
- return "2.0.3";
242458
+ return "2.0.4";
242459
242459
  }
242460
242460
  async function getInstalledVSCodeExtensionVersion(command) {
242461
242461
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247729,7 +247729,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247729
247729
  const client4 = new Client({
247730
247730
  name: "localclawd",
247731
247731
  title: "localclawd",
247732
- version: "2.0.3",
247732
+ version: "2.0.4",
247733
247733
  description: "local-first AI coding tool",
247734
247734
  websiteUrl: PRODUCT_URL
247735
247735
  }, {
@@ -248071,7 +248071,7 @@ var init_client9 = __esm(() => {
248071
248071
  const client4 = new Client({
248072
248072
  name: "localclawd",
248073
248073
  title: "localclawd",
248074
- version: "2.0.3",
248074
+ version: "2.0.4",
248075
248075
  description: "local-first AI coding tool",
248076
248076
  websiteUrl: PRODUCT_URL
248077
248077
  }, {
@@ -262473,7 +262473,7 @@ function computeFingerprint(messageText, version) {
262473
262473
  }
262474
262474
  function computeFingerprintFromMessages(messages) {
262475
262475
  const firstMessageText = extractFirstMessageText(messages);
262476
- return computeFingerprint(firstMessageText, "2.0.3");
262476
+ return computeFingerprint(firstMessageText, "2.0.4");
262477
262477
  }
262478
262478
  var FINGERPRINT_SALT = "59cf53e54c78";
262479
262479
  var init_fingerprint = () => {};
@@ -262515,7 +262515,7 @@ async function sideQuery(opts) {
262515
262515
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262516
262516
  }
262517
262517
  const messageText = extractFirstUserMessageText(messages);
262518
- const fingerprint = computeFingerprint(messageText, "2.0.3");
262518
+ const fingerprint = computeFingerprint(messageText, "2.0.4");
262519
262519
  const attributionHeader = getAttributionHeader(fingerprint);
262520
262520
  const systemBlocks = [
262521
262521
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283263,7 +283263,7 @@ var init_user = __esm(() => {
283263
283263
  deviceId,
283264
283264
  sessionId: getSessionId(),
283265
283265
  email: getEmail(),
283266
- appVersion: "2.0.3",
283266
+ appVersion: "2.0.4",
283267
283267
  platform: getHostPlatformForAnalytics(),
283268
283268
  organizationUuid,
283269
283269
  accountUuid,
@@ -284328,7 +284328,7 @@ async function initializeBetaTracing(resource) {
284328
284328
  });
284329
284329
  logs.setGlobalLoggerProvider(loggerProvider);
284330
284330
  setLoggerProvider(loggerProvider);
284331
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.3");
284331
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.4");
284332
284332
  setEventLogger(eventLogger);
284333
284333
  process.on("beforeExit", async () => {
284334
284334
  await loggerProvider?.forceFlush();
@@ -284368,7 +284368,7 @@ async function initializeTelemetry() {
284368
284368
  const platform2 = getPlatform();
284369
284369
  const baseAttributes = {
284370
284370
  [ATTR_SERVICE_NAME4]: "claude-code",
284371
- [ATTR_SERVICE_VERSION4]: "2.0.3"
284371
+ [ATTR_SERVICE_VERSION4]: "2.0.4"
284372
284372
  };
284373
284373
  if (platform2 === "wsl") {
284374
284374
  const wslVersion = getWslVersion();
@@ -284413,7 +284413,7 @@ async function initializeTelemetry() {
284413
284413
  } catch {}
284414
284414
  };
284415
284415
  registerCleanup(shutdownTelemetry2);
284416
- return meterProvider2.getMeter("com.anthropic.claude_code", "2.0.3");
284416
+ return meterProvider2.getMeter("com.anthropic.claude_code", "2.0.4");
284417
284417
  }
284418
284418
  const meterProvider = new MeterProvider4({
284419
284419
  resource,
@@ -284433,7 +284433,7 @@ async function initializeTelemetry() {
284433
284433
  });
284434
284434
  logs.setGlobalLoggerProvider(loggerProvider);
284435
284435
  setLoggerProvider(loggerProvider);
284436
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.3");
284436
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.4");
284437
284437
  setEventLogger(eventLogger);
284438
284438
  logForDebugging("[3P telemetry] Event logger set successfully");
284439
284439
  process.on("beforeExit", async () => {
@@ -284495,7 +284495,7 @@ Current timeout: ${timeoutMs}ms
284495
284495
  }
284496
284496
  };
284497
284497
  registerCleanup(shutdownTelemetry);
284498
- return meterProvider.getMeter("com.anthropic.claude_code", "2.0.3");
284498
+ return meterProvider.getMeter("com.anthropic.claude_code", "2.0.4");
284499
284499
  }
284500
284500
  async function flushTelemetry() {
284501
284501
  const meterProvider = getMeterProvider();
@@ -285685,7 +285685,7 @@ function detectLinuxGlobPatternWarnings() {
285685
285685
  }
285686
285686
  async function getDoctorDiagnostic() {
285687
285687
  const installationType = await getCurrentInstallationType();
285688
- const version = typeof MACRO !== "undefined" ? "2.0.3" : "unknown";
285688
+ const version = typeof MACRO !== "undefined" ? "2.0.4" : "unknown";
285689
285689
  const installationPath = await getInstallationPath();
285690
285690
  const invokedBinary = getInvokedBinary();
285691
285691
  const multipleInstallations = await detectMultipleInstallations();
@@ -286626,8 +286626,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286626
286626
  const maxVersion = await getMaxVersion();
286627
286627
  if (maxVersion && gt(version, maxVersion)) {
286628
286628
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286629
- if (gte("2.0.3", maxVersion)) {
286630
- logForDebugging(`Native installer: current version ${"2.0.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
286629
+ if (gte("2.0.4", maxVersion)) {
286630
+ logForDebugging(`Native installer: current version ${"2.0.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
286631
286631
  logEvent("tengu_native_update_skipped_max_version", {
286632
286632
  latency_ms: Date.now() - startTime,
286633
286633
  max_version: maxVersion,
@@ -286638,7 +286638,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286638
286638
  version = maxVersion;
286639
286639
  }
286640
286640
  }
286641
- if (!forceReinstall && version === "2.0.3" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286641
+ if (!forceReinstall && version === "2.0.4" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286642
286642
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286643
286643
  logEvent("tengu_native_update_complete", {
286644
286644
  latency_ms: Date.now() - startTime,
@@ -323140,12 +323140,17 @@ REVIEW AND REPROMPT PROTOCOL:
323140
323140
  5. After final approval: move the image to the user's desired location if specified, then report the saved path.
323141
323141
 
323142
323142
  FIXING ARTIFACTS:
323143
- - Corner / edge artifacts → cfg is too high for this model. Flow models (z_image_turbo, AuraFlow, Lumina2): cfg MUST be 1. Retry with cfg=1.
323143
+ - Corner / edge artifacts → cfg is wrong. Flow models (z_image_turbo, AuraFlow, Lumina2)
323144
+ have cfg=1 built into the workflow — do NOT pass cfg when using these. If you did, retry
323145
+ without cfg. For the built-in txt2img (SD 1.5) workflow, cfg=7 is correct.
323144
323146
  - Ring or halo artefacts → steps too high. Try steps=4 for turbo workflows.
323145
323147
  - Blurry result → steps too low or wrong sampler. Increase steps by +4.
323146
323148
  - Washed-out / grey → VAE mismatch. Try a different workflow.
323147
323149
  - Size-related artefacts → dimensions must be multiples of 64. Flow models need 1024×1024.
323148
- Pass overrides via the tool parameters: steps, cfg, width, height, model.
323150
+
323151
+ IMPORTANT: For named workflows (anything except the built-in fallback), cfg is NOT
323152
+ adjustable — the workflow controls it. Only pass width, height, steps, model overrides.
323153
+ Never pass cfg for z_image_turbo, AuraFlow, or Lumina2 workflows.
323149
323154
 
323150
323155
  Use this tool when the user asks you to generate, create, or render an image.`;
323151
323156
 
@@ -323244,8 +323249,7 @@ async function callInner(input, abortController) {
323244
323249
  ...input.model && { model: input.model },
323245
323250
  ...input.width && { width: input.width },
323246
323251
  ...input.height && { height: input.height },
323247
- ...input.steps && { steps: input.steps },
323248
- ...input.cfg && { cfg: input.cfg }
323252
+ ...input.steps && { steps: input.steps }
323249
323253
  };
323250
323254
  const workflow = injectPrompt(workflowBase ?? DEFAULT_WORKFLOW, input.prompt, negativePrompt, injectParams);
323251
323255
  let queued;
@@ -331877,7 +331881,7 @@ function getAnthropicEnvMetadata() {
331877
331881
  function getBuildAgeMinutes() {
331878
331882
  if (false)
331879
331883
  ;
331880
- const buildTime = new Date("2026-05-07T20:44:36.123Z").getTime();
331884
+ const buildTime = new Date("2026-05-07T20:55:16.820Z").getTime();
331881
331885
  if (isNaN(buildTime))
331882
331886
  return;
331883
331887
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -360709,7 +360713,7 @@ function Feedback({
360709
360713
  platform: env3.platform,
360710
360714
  gitRepo: envInfo.isGit,
360711
360715
  terminal: env3.terminal,
360712
- version: "2.0.3",
360716
+ version: "2.0.4",
360713
360717
  transcript: normalizeMessagesForAPI(messages),
360714
360718
  errors: sanitizedErrors,
360715
360719
  lastApiRequest: getLastAPIRequest(),
@@ -360901,7 +360905,7 @@ function Feedback({
360901
360905
  ", ",
360902
360906
  env3.terminal,
360903
360907
  ", v",
360904
- "2.0.3"
360908
+ "2.0.4"
360905
360909
  ]
360906
360910
  }, undefined, true, undefined, this)
360907
360911
  ]
@@ -361007,7 +361011,7 @@ ${sanitizedDescription}
361007
361011
  ` + `**Environment Info**
361008
361012
  ` + `- Platform: ${env3.platform}
361009
361013
  ` + `- Terminal: ${env3.terminal}
361010
- ` + `- Version: ${"2.0.3"}
361014
+ ` + `- Version: ${"2.0.4"}
361011
361015
  ` + `- Feedback ID: ${feedbackId}
361012
361016
  ` + `
361013
361017
  **Errors**
@@ -363635,7 +363639,7 @@ function buildPrimarySection() {
363635
363639
  }, undefined, false, undefined, this);
363636
363640
  return [{
363637
363641
  label: "Version",
363638
- value: "2.0.3"
363642
+ value: "2.0.4"
363639
363643
  }, {
363640
363644
  label: "Session name",
363641
363645
  value: nameValue
@@ -368316,7 +368320,7 @@ function Config({
368316
368320
  }
368317
368321
  }, undefined, false, undefined, this)
368318
368322
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368319
- currentVersion: "2.0.3",
368323
+ currentVersion: "2.0.4",
368320
368324
  onChoice: (choice) => {
368321
368325
  setShowSubmenu(null);
368322
368326
  setTabsHidden(false);
@@ -368328,7 +368332,7 @@ function Config({
368328
368332
  autoUpdatesChannel: "stable"
368329
368333
  };
368330
368334
  if (choice === "stay") {
368331
- newSettings.minimumVersion = "2.0.3";
368335
+ newSettings.minimumVersion = "2.0.4";
368332
368336
  }
368333
368337
  updateSettingsForSource("userSettings", newSettings);
368334
368338
  setSettingsData((prev_27) => ({
@@ -374698,6 +374702,11 @@ function parseFlags(text) {
374698
374702
  extract("model", (v2) => {
374699
374703
  result.model = v2;
374700
374704
  });
374705
+ s = s.replace(/--size\s+(\d+)[xX×](\d+)/i, (_2, w2, h) => {
374706
+ result.width = parseInt(w2, 10);
374707
+ result.height = parseInt(h, 10);
374708
+ return "";
374709
+ });
374701
374710
  s = s.replace(/--negative\s+"([^"]+)"/i, (_2, v2) => {
374702
374711
  result.negative = v2;
374703
374712
  return "";
@@ -374724,17 +374733,19 @@ var call19 = async (onDone, _context, args) => {
374724
374733
  " Workflow: /image <name>: [flags] <prompt>",
374725
374734
  "",
374726
374735
  " Flags (override per-request):",
374727
- " --steps N sampling steps",
374728
- " --cfg N — guidance scale",
374736
+ " --size WxH width × height shorthand (e.g. --size 1024x1024)",
374729
374737
  " --width N — image width in pixels",
374730
374738
  " --height N — image height in pixels",
374739
+ " --steps N — sampling steps",
374740
+ " --cfg N — guidance scale (use 1 for flow models)",
374731
374741
  " --seed N — fixed seed for reproducibility",
374732
374742
  " --model NAME — checkpoint filename",
374733
374743
  "",
374734
374744
  " Examples:",
374735
374745
  " /image a misty forest at dawn, cinematic lighting",
374736
- " /image --width 1024 --height 1024 a detailed portrait",
374737
- " /image txt2img: --steps 30 an elderly scholar by candlelight",
374746
+ " /image --size 1024x1024 a detailed portrait",
374747
+ " /image --size 512x768 --steps 30 an elderly scholar by candlelight",
374748
+ " /image txt2img: --width 768 --height 512 rolling hills at sunset",
374738
374749
  "",
374739
374750
  ` Default workflow: ${defaultWf}`
374740
374751
  ];
@@ -374820,8 +374831,7 @@ var call19 = async (onDone, _context, args) => {
374820
374831
  ...flags.model ? { model: flags.model } : {},
374821
374832
  ...flags.width ? { width: flags.width } : {},
374822
374833
  ...flags.height ? { height: flags.height } : {},
374823
- ...flags.steps ? { steps: flags.steps } : {},
374824
- ...flags.cfg ? { cfg: flags.cfg } : {}
374834
+ ...flags.steps ? { steps: flags.steps } : {}
374825
374835
  };
374826
374836
  const finalWorkflow = injectPrompt(workflow, promptText, negative, injectParams);
374827
374837
  let queued;
@@ -377335,10 +377345,23 @@ function incrementRound() {
377335
377345
  return sessionRound;
377336
377346
  }
377337
377347
  function extractSelfDirective(text) {
377338
- const match = text.match(/\*{0,2}NEXT:\*{0,2}\s*(.+?)(?=\n\n|\n(?:[A-Z*─━]|\d+\.)|\s*$)/s);
377339
- if (!match)
377340
- return "";
377341
- return match[1].replace(/\s+/g, " ").trim().slice(0, 600);
377348
+ const lines = text.split(`
377349
+ `);
377350
+ for (let i2 = lines.length - 1;i2 >= 0; i2--) {
377351
+ const line = lines[i2].trim();
377352
+ const m2 = line.match(/^\*{0,2}NEXT:\*{0,2}\s*(.+)/i);
377353
+ if (!m2)
377354
+ continue;
377355
+ let directive = m2[1].trim();
377356
+ for (let j2 = i2 + 1;j2 < lines.length && j2 < i2 + 5; j2++) {
377357
+ const next = lines[j2].trim();
377358
+ if (!next || /^(SUMMARY:|NEXT:|\*{0,2}[A-Z]{2})/i.test(next))
377359
+ break;
377360
+ directive += " " + next;
377361
+ }
377362
+ return directive.replace(/\s+/g, " ").trim().slice(0, 600);
377363
+ }
377364
+ return "";
377342
377365
  }
377343
377366
  function parseFocus(args) {
377344
377367
  return args.trim();
@@ -377615,11 +377638,12 @@ Round ${finalRound} · stopped via /stop`;
377615
377638
  const nextCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
377616
377639
  const handleReady = () => {
377617
377640
  try {
377618
- enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
377619
377641
  onDone(undefined, {
377620
377642
  display: "system",
377621
377643
  shouldQuery: true,
377622
- metaMessages: [prompt]
377644
+ metaMessages: [prompt],
377645
+ nextInput: nextCmd,
377646
+ submitNextInput: true
377623
377647
  });
377624
377648
  } catch (e) {
377625
377649
  logKgCrash(e, "handleReady");
@@ -386079,7 +386103,7 @@ function Help(t0) {
386079
386103
  let t6;
386080
386104
  if ($2[31] !== tabs) {
386081
386105
  t6 = /* @__PURE__ */ jsx_dev_runtime222.jsxDEV(Tabs, {
386082
- title: `localclawd v${"2.0.3"}`,
386106
+ title: `localclawd v${"2.0.4"}`,
386083
386107
  color: "professionalBlue",
386084
386108
  defaultTab: "general",
386085
386109
  children: tabs
@@ -403341,7 +403365,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403341
403365
  }
403342
403366
  return [];
403343
403367
  }
403344
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.0.3") {
403368
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.0.4") {
403345
403369
  if (process.env.USER_TYPE === "ant") {
403346
403370
  const changelog = MACRO.VERSION_CHANGELOG;
403347
403371
  if (changelog) {
@@ -403368,7 +403392,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.0.3") {
403368
403392
  releaseNotes
403369
403393
  };
403370
403394
  }
403371
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "2.0.3") {
403395
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "2.0.4") {
403372
403396
  if (process.env.USER_TYPE === "ant") {
403373
403397
  const changelog = MACRO.VERSION_CHANGELOG;
403374
403398
  if (changelog) {
@@ -403525,7 +403549,7 @@ function getRecentActivitySync() {
403525
403549
  return cachedActivity;
403526
403550
  }
403527
403551
  function getLogoDisplayData() {
403528
- const version = process.env.DEMO_VERSION ?? "2.0.3";
403552
+ const version = process.env.DEMO_VERSION ?? "2.0.4";
403529
403553
  const serverUrl = getDirectConnectServerUrl();
403530
403554
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403531
403555
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -404625,7 +404649,7 @@ function Logo() {
404625
404649
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
404626
404650
  t2 = () => {
404627
404651
  const currentConfig = getGlobalConfig();
404628
- if (currentConfig.lastReleaseNotesSeen === "2.0.3") {
404652
+ if (currentConfig.lastReleaseNotesSeen === "2.0.4") {
404629
404653
  return;
404630
404654
  }
404631
404655
  saveGlobalConfig(_temp326);
@@ -405284,12 +405308,12 @@ function Logo() {
405284
405308
  return t41;
405285
405309
  }
405286
405310
  function _temp326(current) {
405287
- if (current.lastReleaseNotesSeen === "2.0.3") {
405311
+ if (current.lastReleaseNotesSeen === "2.0.4") {
405288
405312
  return current;
405289
405313
  }
405290
405314
  return {
405291
405315
  ...current,
405292
- lastReleaseNotesSeen: "2.0.3"
405316
+ lastReleaseNotesSeen: "2.0.4"
405293
405317
  };
405294
405318
  }
405295
405319
  function _temp241(s_0) {
@@ -435768,7 +435792,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435768
435792
  smapsRollup,
435769
435793
  platform: process.platform,
435770
435794
  nodeVersion: process.version,
435771
- ccVersion: "2.0.3"
435795
+ ccVersion: "2.0.4"
435772
435796
  };
435773
435797
  }
435774
435798
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -436353,7 +436377,7 @@ var init_bridge_kick = __esm(() => {
436353
436377
  var call88 = async () => {
436354
436378
  return {
436355
436379
  type: "text",
436356
- value: `${"2.0.3"} (built ${"2026-05-07T20:44:36.123Z"})`
436380
+ value: `${"2.0.4"} (built ${"2026-05-07T20:55:16.820Z"})`
436357
436381
  };
436358
436382
  }, version, version_default;
436359
436383
  var init_version = __esm(() => {
@@ -444297,7 +444321,7 @@ function generateHtmlReport(data, insights) {
444297
444321
  </html>`;
444298
444322
  }
444299
444323
  function buildExportData(data, insights, facets, remoteStats) {
444300
- const version2 = typeof MACRO !== "undefined" ? "2.0.3" : "unknown";
444324
+ const version2 = typeof MACRO !== "undefined" ? "2.0.4" : "unknown";
444301
444325
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
444302
444326
  const facets_summary = {
444303
444327
  total: facets.size,
@@ -448500,7 +448524,7 @@ var init_sessionStorage = __esm(() => {
448500
448524
  init_settings2();
448501
448525
  init_slowOperations();
448502
448526
  init_uuid();
448503
- VERSION6 = typeof MACRO !== "undefined" ? "2.0.3" : "unknown";
448527
+ VERSION6 = typeof MACRO !== "undefined" ? "2.0.4" : "unknown";
448504
448528
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448505
448529
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448506
448530
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -449701,7 +449725,7 @@ var init_filesystem = __esm(() => {
449701
449725
  });
449702
449726
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
449703
449727
  const nonce = randomBytes20(16).toString("hex");
449704
- return join151(getClaudeTempDir(), "bundled-skills", "2.0.3", nonce);
449728
+ return join151(getClaudeTempDir(), "bundled-skills", "2.0.4", nonce);
449705
449729
  });
449706
449730
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
449707
449731
  });
@@ -458938,7 +458962,7 @@ function buildSystemInitMessage(inputs) {
458938
458962
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458939
458963
  apiKeySource: getAnthropicApiKeyWithSource().source,
458940
458964
  betas: getSdkBetas(),
458941
- claude_code_version: "2.0.3",
458965
+ claude_code_version: "2.0.4",
458942
458966
  output_style: outputStyle2,
458943
458967
  agents: inputs.agents.map((agent) => agent.agentType),
458944
458968
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -473095,7 +473119,7 @@ var init_useVoiceEnabled = __esm(() => {
473095
473119
  function getSemverPart(version2) {
473096
473120
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
473097
473121
  }
473098
- function useUpdateNotification(updatedVersion, initialVersion = "2.0.3") {
473122
+ function useUpdateNotification(updatedVersion, initialVersion = "2.0.4") {
473099
473123
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
473100
473124
  if (!updatedVersion) {
473101
473125
  return null;
@@ -473135,7 +473159,7 @@ function AutoUpdater({
473135
473159
  return;
473136
473160
  }
473137
473161
  if (false) {}
473138
- const currentVersion = "2.0.3";
473162
+ const currentVersion = "2.0.4";
473139
473163
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
473140
473164
  let latestVersion = await getLatestVersion(channel);
473141
473165
  const isDisabled = isAutoUpdaterDisabled();
@@ -473346,12 +473370,12 @@ function NativeAutoUpdater({
473346
473370
  logEvent("tengu_native_auto_updater_start", {});
473347
473371
  try {
473348
473372
  const maxVersion = await getMaxVersion();
473349
- if (maxVersion && gt("2.0.3", maxVersion)) {
473373
+ if (maxVersion && gt("2.0.4", maxVersion)) {
473350
473374
  const msg = await getMaxVersionMessage();
473351
473375
  setMaxVersionIssue(msg ?? "affects your version");
473352
473376
  }
473353
473377
  const result = await installLatest(channel);
473354
- const currentVersion = "2.0.3";
473378
+ const currentVersion = "2.0.4";
473355
473379
  const latencyMs = Date.now() - startTime;
473356
473380
  if (result.lockFailed) {
473357
473381
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473486,17 +473510,17 @@ function PackageManagerAutoUpdater(t0) {
473486
473510
  const maxVersion = await getMaxVersion();
473487
473511
  if (maxVersion && latest && gt(latest, maxVersion)) {
473488
473512
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473489
- if (gte("2.0.3", maxVersion)) {
473490
- logForDebugging(`PackageManagerAutoUpdater: current version ${"2.0.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
473513
+ if (gte("2.0.4", maxVersion)) {
473514
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"2.0.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
473491
473515
  setUpdateAvailable(false);
473492
473516
  return;
473493
473517
  }
473494
473518
  latest = maxVersion;
473495
473519
  }
473496
- const hasUpdate = latest && !gte("2.0.3", latest) && !shouldSkipVersion(latest);
473520
+ const hasUpdate = latest && !gte("2.0.4", latest) && !shouldSkipVersion(latest);
473497
473521
  setUpdateAvailable(!!hasUpdate);
473498
473522
  if (hasUpdate) {
473499
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"2.0.3"} -> ${latest}`);
473523
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"2.0.4"} -> ${latest}`);
473500
473524
  }
473501
473525
  };
473502
473526
  $2[0] = t1;
@@ -473530,7 +473554,7 @@ function PackageManagerAutoUpdater(t0) {
473530
473554
  wrap: "truncate",
473531
473555
  children: [
473532
473556
  "currentVersion: ",
473533
- "2.0.3"
473557
+ "2.0.4"
473534
473558
  ]
473535
473559
  }, undefined, true, undefined, this);
473536
473560
  $2[3] = verbose;
@@ -481090,7 +481114,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
481090
481114
  project_dir: getOriginalCwd(),
481091
481115
  added_dirs: addedDirs
481092
481116
  },
481093
- version: "2.0.3",
481117
+ version: "2.0.4",
481094
481118
  output_style: {
481095
481119
  name: outputStyleName
481096
481120
  },
@@ -492662,7 +492686,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
492662
492686
  } catch {}
492663
492687
  const data = {
492664
492688
  trigger,
492665
- version: "2.0.3",
492689
+ version: "2.0.4",
492666
492690
  platform: process.platform,
492667
492691
  transcript,
492668
492692
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -509571,7 +509595,7 @@ function appendToLog(path17, message) {
509571
509595
  cwd: getFsImplementation().cwd(),
509572
509596
  userType: process.env.USER_TYPE,
509573
509597
  sessionId: getSessionId(),
509574
- version: "2.0.3"
509598
+ version: "2.0.4"
509575
509599
  };
509576
509600
  getLogWriter(path17).write(messageWithTimestamp);
509577
509601
  }
@@ -513601,8 +513625,8 @@ async function getEnvLessBridgeConfig() {
513601
513625
  }
513602
513626
  async function checkEnvLessBridgeMinVersion() {
513603
513627
  const cfg = await getEnvLessBridgeConfig();
513604
- if (cfg.min_version && lt("2.0.3", cfg.min_version)) {
513605
- return `Your version of localclawd (${"2.0.3"}) is too old for Remote Control.
513628
+ if (cfg.min_version && lt("2.0.4", cfg.min_version)) {
513629
+ return `Your version of localclawd (${"2.0.4"}) is too old for Remote Control.
513606
513630
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
513607
513631
  }
513608
513632
  return null;
@@ -514074,7 +514098,7 @@ async function initBridgeCore(params) {
514074
514098
  const rawApi = createBridgeApiClient({
514075
514099
  baseUrl,
514076
514100
  getAccessToken,
514077
- runnerVersion: "2.0.3",
514101
+ runnerVersion: "2.0.4",
514078
514102
  onDebug: logForDebugging,
514079
514103
  onAuth401,
514080
514104
  getTrustedDeviceToken
@@ -519793,7 +519817,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
519793
519817
  setCwd(cwd3);
519794
519818
  const server = new Server({
519795
519819
  name: "claude/tengu",
519796
- version: "2.0.3"
519820
+ version: "2.0.4"
519797
519821
  }, {
519798
519822
  capabilities: {
519799
519823
  tools: {}
@@ -520874,7 +520898,7 @@ function WelcomeLogo() {
520874
520898
  dimColor: true,
520875
520899
  children: [
520876
520900
  "v",
520877
- "2.0.3"
520901
+ "2.0.4"
520878
520902
  ]
520879
520903
  }, undefined, true, undefined, this)
520880
520904
  ]
@@ -521065,7 +521089,7 @@ __export(exports_update, {
521065
521089
  });
521066
521090
  async function update() {
521067
521091
  logEvent("tengu_update_check", {});
521068
- writeToStdout(`Current version: ${"2.0.3"}
521092
+ writeToStdout(`Current version: ${"2.0.4"}
521069
521093
  `);
521070
521094
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
521071
521095
  writeToStdout(`Checking for updates to ${channel} version...
@@ -521140,8 +521164,8 @@ async function update() {
521140
521164
  writeToStdout(`localclawd is managed by Homebrew.
521141
521165
  `);
521142
521166
  const latest = await getLatestVersion(channel);
521143
- if (latest && !gte("2.0.3", latest)) {
521144
- writeToStdout(`Update available: ${"2.0.3"} → ${latest}
521167
+ if (latest && !gte("2.0.4", latest)) {
521168
+ writeToStdout(`Update available: ${"2.0.4"} → ${latest}
521145
521169
  `);
521146
521170
  writeToStdout(`
521147
521171
  `);
@@ -521157,8 +521181,8 @@ async function update() {
521157
521181
  writeToStdout(`localclawd is managed by winget.
521158
521182
  `);
521159
521183
  const latest = await getLatestVersion(channel);
521160
- if (latest && !gte("2.0.3", latest)) {
521161
- writeToStdout(`Update available: ${"2.0.3"} → ${latest}
521184
+ if (latest && !gte("2.0.4", latest)) {
521185
+ writeToStdout(`Update available: ${"2.0.4"} → ${latest}
521162
521186
  `);
521163
521187
  writeToStdout(`
521164
521188
  `);
@@ -521172,8 +521196,8 @@ async function update() {
521172
521196
  writeToStdout(`localclawd is managed by apk.
521173
521197
  `);
521174
521198
  const latest = await getLatestVersion(channel);
521175
- if (latest && !gte("2.0.3", latest)) {
521176
- writeToStdout(`Update available: ${"2.0.3"} → ${latest}
521199
+ if (latest && !gte("2.0.4", latest)) {
521200
+ writeToStdout(`Update available: ${"2.0.4"} → ${latest}
521177
521201
  `);
521178
521202
  writeToStdout(`
521179
521203
  `);
@@ -521238,11 +521262,11 @@ async function update() {
521238
521262
  `);
521239
521263
  await gracefulShutdown(1);
521240
521264
  }
521241
- if (result.latestVersion === "2.0.3") {
521242
- writeToStdout(source_default.green(`localclawd is up to date (${"2.0.3"})`) + `
521265
+ if (result.latestVersion === "2.0.4") {
521266
+ writeToStdout(source_default.green(`localclawd is up to date (${"2.0.4"})`) + `
521243
521267
  `);
521244
521268
  } else {
521245
- writeToStdout(source_default.green(`Successfully updated from ${"2.0.3"} to version ${result.latestVersion}`) + `
521269
+ writeToStdout(source_default.green(`Successfully updated from ${"2.0.4"} to version ${result.latestVersion}`) + `
521246
521270
  `);
521247
521271
  await regenerateCompletionCache();
521248
521272
  }
@@ -521302,12 +521326,12 @@ async function update() {
521302
521326
  `);
521303
521327
  await gracefulShutdown(1);
521304
521328
  }
521305
- if (latestVersion === "2.0.3") {
521306
- writeToStdout(source_default.green(`localclawd is up to date (${"2.0.3"})`) + `
521329
+ if (latestVersion === "2.0.4") {
521330
+ writeToStdout(source_default.green(`localclawd is up to date (${"2.0.4"})`) + `
521307
521331
  `);
521308
521332
  await gracefulShutdown(0);
521309
521333
  }
521310
- writeToStdout(`New version available: ${latestVersion} (current: ${"2.0.3"})
521334
+ writeToStdout(`New version available: ${latestVersion} (current: ${"2.0.4"})
521311
521335
  `);
521312
521336
  writeToStdout(`Installing update...
521313
521337
  `);
@@ -521352,7 +521376,7 @@ async function update() {
521352
521376
  logForDebugging(`update: Installation status: ${status2}`);
521353
521377
  switch (status2) {
521354
521378
  case "success":
521355
- writeToStdout(source_default.green(`Successfully updated from ${"2.0.3"} to version ${latestVersion}`) + `
521379
+ writeToStdout(source_default.green(`Successfully updated from ${"2.0.4"} to version ${latestVersion}`) + `
521356
521380
  `);
521357
521381
  await regenerateCompletionCache();
521358
521382
  break;
@@ -522594,7 +522618,7 @@ Run with --debug for more details.
522594
522618
  }
522595
522619
  }
522596
522620
  logForDiagnosticsNoPII("info", "started", {
522597
- version: "2.0.3",
522621
+ version: "2.0.4",
522598
522622
  is_native_binary: isInBundledMode()
522599
522623
  });
522600
522624
  registerCleanup(async () => {
@@ -523378,7 +523402,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523378
523402
  pendingHookMessages
523379
523403
  }, renderAndRun);
523380
523404
  }
523381
- }).version("2.0.3 (localclawd)", "-v, --version", "Output the version number");
523405
+ }).version("2.0.4 (localclawd)", "-v, --version", "Output the version number");
523382
523406
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523383
523407
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523384
523408
  if (canUserConfigureAdvisor()) {
@@ -523892,7 +523916,7 @@ if (false) {}
523892
523916
  async function main2() {
523893
523917
  const args = process.argv.slice(2);
523894
523918
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523895
- console.log(`${"2.0.3"} (localclawd)`);
523919
+ console.log(`${"2.0.4"} (localclawd)`);
523896
523920
  return;
523897
523921
  }
523898
523922
  const {
@@ -523983,4 +524007,4 @@ localclawd crashed: ${msg}
523983
524007
  process.exit(1);
523984
524008
  });
523985
524009
 
523986
- //# debugId=9305EC93AC4DF83C64756E2164756E21
524010
+ //# debugId=CE6A3CED1FD1D7D464756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",