localclawd 2.3.0 → 2.3.1

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 +165 -78
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -87646,7 +87646,7 @@ var init_isEqual = __esm(() => {
87646
87646
 
87647
87647
  // src/utils/userAgent.ts
87648
87648
  function getClaudeCodeUserAgent() {
87649
- return `claude-code/${"2.3.0"}`;
87649
+ return `claude-code/${"2.3.1"}`;
87650
87650
  }
87651
87651
 
87652
87652
  // src/utils/workloadContext.ts
@@ -87668,7 +87668,7 @@ function getUserAgent() {
87668
87668
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
87669
87669
  const workload = getWorkload();
87670
87670
  const workloadSuffix = workload ? `, workload/${workload}` : "";
87671
- return `claude-cli/${"2.3.0"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87671
+ return `claude-cli/${"2.3.1"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87672
87672
  }
87673
87673
  function getMCPUserAgent() {
87674
87674
  const parts = [];
@@ -87682,7 +87682,7 @@ function getMCPUserAgent() {
87682
87682
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
87683
87683
  }
87684
87684
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
87685
- return `claude-code/${"2.3.0"}${suffix}`;
87685
+ return `claude-code/${"2.3.1"}${suffix}`;
87686
87686
  }
87687
87687
  function getWebFetchUserAgent() {
87688
87688
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -130780,7 +130780,7 @@ function getAttributionHeader(fingerprint) {
130780
130780
  if (!isAttributionHeaderEnabled()) {
130781
130781
  return "";
130782
130782
  }
130783
- const version = `${"2.3.0"}.${fingerprint}`;
130783
+ const version = `${"2.3.1"}.${fingerprint}`;
130784
130784
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
130785
130785
  const cch = "";
130786
130786
  const workload = getWorkload();
@@ -146967,7 +146967,7 @@ var init_metadata = __esm(() => {
146967
146967
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
146968
146968
  WHITESPACE_REGEX = /\s+/;
146969
146969
  getVersionBase = memoize_default(() => {
146970
- const match = "2.3.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
146970
+ const match = "2.3.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
146971
146971
  return match ? match[0] : undefined;
146972
146972
  });
146973
146973
  buildEnvContext = memoize_default(async () => {
@@ -147007,9 +147007,9 @@ var init_metadata = __esm(() => {
147007
147007
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
147008
147008
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
147009
147009
  isClaudeAiAuth: isClaudeAISubscriber(),
147010
- version: "2.3.0",
147010
+ version: "2.3.1",
147011
147011
  versionBase: getVersionBase(),
147012
- buildTime: "2026-05-10T17:25:06.612Z",
147012
+ buildTime: "2026-05-10T18:34:55.265Z",
147013
147013
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
147014
147014
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
147015
147015
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -172830,6 +172830,80 @@ ${text}`);
172830
172830
 
172831
172831
  ` + full.slice(full.length - maxChars);
172832
172832
  }
172833
+ async function tryDirectLocalCompact({
172834
+ messages,
172835
+ summaryRequest,
172836
+ context: context4,
172837
+ preCompactTokenCount
172838
+ }) {
172839
+ const baseUrl = getLocalLLMBaseUrl();
172840
+ const model = getLocalLLMModel() ?? context4.options.mainLoopModel;
172841
+ const apiKey = getLocalLLMApiKey();
172842
+ if (!baseUrl || !model)
172843
+ return null;
172844
+ const contextTokens = getContextWindowForModel(model, []);
172845
+ const charBudget = Math.max(4000, Math.floor(contextTokens * 0.5 * 3.5));
172846
+ const serialized = serializeMessagesForCleanRoom(messages, charBudget);
172847
+ if (!serialized.trim())
172848
+ return null;
172849
+ const promptContent = summaryRequest.message.content;
172850
+ const compactPromptText = typeof promptContent === "string" ? promptContent : Array.isArray(promptContent) ? promptContent.filter((b3) => b3.type === "text").map((b3) => b3.text).join(`
172851
+ `) : "";
172852
+ const userText = `<conversation>
172853
+ ${serialized}
172854
+ </conversation>
172855
+
172856
+ ${compactPromptText}`;
172857
+ const timeoutMs = parseInt(process.env.COMPACT_TIMEOUT_MS || "", 10) || 5 * 60000;
172858
+ const timeoutController = new AbortController;
172859
+ const timer = setTimeout(() => timeoutController.abort(new Error("compact timeout")), timeoutMs);
172860
+ const onAbort = () => timeoutController.abort(context4.abortController.signal.reason);
172861
+ context4.abortController.signal.addEventListener("abort", onAbort, { once: true });
172862
+ try {
172863
+ const url2 = `${baseUrl.replace(/\/$/, "")}/chat/completions`;
172864
+ const res = await fetch(url2, {
172865
+ method: "POST",
172866
+ headers: {
172867
+ "Content-Type": "application/json",
172868
+ ...apiKey ? { Authorization: `Bearer ${apiKey}` } : {}
172869
+ },
172870
+ body: JSON.stringify({
172871
+ model,
172872
+ messages: [
172873
+ { role: "system", content: "You are a helpful assistant that summarizes conversations." },
172874
+ { role: "user", content: userText }
172875
+ ],
172876
+ max_tokens: COMPACT_MAX_OUTPUT_TOKENS,
172877
+ temperature: 0.2,
172878
+ stream: false
172879
+ }),
172880
+ signal: timeoutController.signal
172881
+ });
172882
+ if (!res.ok) {
172883
+ logForDebugging(`compact direct-local: HTTP ${res.status}`, { level: "warn" });
172884
+ return null;
172885
+ }
172886
+ const data = await res.json();
172887
+ const text = data.choices?.[0]?.message?.content?.trim();
172888
+ if (!text)
172889
+ return null;
172890
+ logForDebugging(`compact direct-local: success (pre=${preCompactTokenCount} out=${data.usage?.completion_tokens ?? 0})`);
172891
+ const usage = {
172892
+ input_tokens: data.usage?.prompt_tokens ?? 0,
172893
+ output_tokens: data.usage?.completion_tokens ?? 0,
172894
+ cache_creation_input_tokens: 0,
172895
+ cache_read_input_tokens: 0
172896
+ };
172897
+ return createAssistantMessage({ content: text, usage });
172898
+ } catch (e) {
172899
+ const reason = e?.name === "AbortError" ? "aborted/timeout" : String(e);
172900
+ logForDebugging(`compact direct-local: ${reason}`, { level: "warn" });
172901
+ return null;
172902
+ } finally {
172903
+ clearTimeout(timer);
172904
+ context4.abortController.signal.removeEventListener("abort", onAbort);
172905
+ }
172906
+ }
172833
172907
  async function tryCleanRoomCompactSummary({
172834
172908
  messages,
172835
172909
  summaryRequest,
@@ -172910,6 +172984,18 @@ async function streamCompactSummary({
172910
172984
  statusSetter?.("compacting");
172911
172985
  }, 30000, context4.setSDKStatus) : undefined;
172912
172986
  try {
172987
+ const directResp = await tryDirectLocalCompact({
172988
+ messages,
172989
+ summaryRequest,
172990
+ context: context4,
172991
+ preCompactTokenCount
172992
+ });
172993
+ if (directResp) {
172994
+ const directText = getAssistantMessageText(directResp);
172995
+ if (directText && !directResp.isApiErrorMessage && !directText.startsWith(PROMPT_TOO_LONG_ERROR_MESSAGE)) {
172996
+ return directResp;
172997
+ }
172998
+ }
172913
172999
  const cleanRoomFirst = await tryCleanRoomCompactSummary({
172914
173000
  messages,
172915
173001
  summaryRequest,
@@ -173218,6 +173304,7 @@ var init_compact = __esm(() => {
173218
173304
  init_forkedAgent();
173219
173305
  init_hooks5();
173220
173306
  init_log2();
173307
+ init_providers();
173221
173308
  init_types4();
173222
173309
  init_messages3();
173223
173310
  init_path2();
@@ -179551,7 +179638,7 @@ function getTelemetryAttributes() {
179551
179638
  attributes["session.id"] = sessionId;
179552
179639
  }
179553
179640
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
179554
- attributes["app.version"] = "2.3.0";
179641
+ attributes["app.version"] = "2.3.1";
179555
179642
  }
179556
179643
  const oauthAccount = getOauthAccountInfo();
179557
179644
  if (oauthAccount) {
@@ -241839,7 +241926,7 @@ function getInstallationEnv() {
241839
241926
  return;
241840
241927
  }
241841
241928
  function getClaudeCodeVersion() {
241842
- return "2.3.0";
241929
+ return "2.3.1";
241843
241930
  }
241844
241931
  async function getInstalledVSCodeExtensionVersion(command) {
241845
241932
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247113,7 +247200,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247113
247200
  const client4 = new Client({
247114
247201
  name: "localclawd",
247115
247202
  title: "localclawd",
247116
- version: "2.3.0",
247203
+ version: "2.3.1",
247117
247204
  description: "local-first AI coding tool",
247118
247205
  websiteUrl: PRODUCT_URL
247119
247206
  }, {
@@ -247455,7 +247542,7 @@ var init_client9 = __esm(() => {
247455
247542
  const client4 = new Client({
247456
247543
  name: "localclawd",
247457
247544
  title: "localclawd",
247458
- version: "2.3.0",
247545
+ version: "2.3.1",
247459
247546
  description: "local-first AI coding tool",
247460
247547
  websiteUrl: PRODUCT_URL
247461
247548
  }, {
@@ -261854,7 +261941,7 @@ function computeFingerprint(messageText, version) {
261854
261941
  }
261855
261942
  function computeFingerprintFromMessages(messages) {
261856
261943
  const firstMessageText = extractFirstMessageText(messages);
261857
- return computeFingerprint(firstMessageText, "2.3.0");
261944
+ return computeFingerprint(firstMessageText, "2.3.1");
261858
261945
  }
261859
261946
  var FINGERPRINT_SALT = "59cf53e54c78";
261860
261947
  var init_fingerprint = () => {};
@@ -261896,7 +261983,7 @@ async function sideQuery(opts) {
261896
261983
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
261897
261984
  }
261898
261985
  const messageText = extractFirstUserMessageText(messages);
261899
- const fingerprint = computeFingerprint(messageText, "2.3.0");
261986
+ const fingerprint = computeFingerprint(messageText, "2.3.1");
261900
261987
  const attributionHeader = getAttributionHeader(fingerprint);
261901
261988
  const systemBlocks = [
261902
261989
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -282648,7 +282735,7 @@ var init_user = __esm(() => {
282648
282735
  deviceId,
282649
282736
  sessionId: getSessionId(),
282650
282737
  email: getEmail(),
282651
- appVersion: "2.3.0",
282738
+ appVersion: "2.3.1",
282652
282739
  platform: getHostPlatformForAnalytics(),
282653
282740
  organizationUuid,
282654
282741
  accountUuid,
@@ -283713,7 +283800,7 @@ async function initializeBetaTracing(resource) {
283713
283800
  });
283714
283801
  logs.setGlobalLoggerProvider(loggerProvider);
283715
283802
  setLoggerProvider(loggerProvider);
283716
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.3.0");
283803
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.3.1");
283717
283804
  setEventLogger(eventLogger);
283718
283805
  process.on("beforeExit", async () => {
283719
283806
  await loggerProvider?.forceFlush();
@@ -283753,7 +283840,7 @@ async function initializeTelemetry() {
283753
283840
  const platform2 = getPlatform();
283754
283841
  const baseAttributes = {
283755
283842
  [ATTR_SERVICE_NAME4]: "claude-code",
283756
- [ATTR_SERVICE_VERSION4]: "2.3.0"
283843
+ [ATTR_SERVICE_VERSION4]: "2.3.1"
283757
283844
  };
283758
283845
  if (platform2 === "wsl") {
283759
283846
  const wslVersion = getWslVersion();
@@ -283798,7 +283885,7 @@ async function initializeTelemetry() {
283798
283885
  } catch {}
283799
283886
  };
283800
283887
  registerCleanup(shutdownTelemetry2);
283801
- return meterProvider2.getMeter("com.anthropic.claude_code", "2.3.0");
283888
+ return meterProvider2.getMeter("com.anthropic.claude_code", "2.3.1");
283802
283889
  }
283803
283890
  const meterProvider = new MeterProvider4({
283804
283891
  resource,
@@ -283818,7 +283905,7 @@ async function initializeTelemetry() {
283818
283905
  });
283819
283906
  logs.setGlobalLoggerProvider(loggerProvider);
283820
283907
  setLoggerProvider(loggerProvider);
283821
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.3.0");
283908
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.3.1");
283822
283909
  setEventLogger(eventLogger);
283823
283910
  logForDebugging("[3P telemetry] Event logger set successfully");
283824
283911
  process.on("beforeExit", async () => {
@@ -283880,7 +283967,7 @@ Current timeout: ${timeoutMs}ms
283880
283967
  }
283881
283968
  };
283882
283969
  registerCleanup(shutdownTelemetry);
283883
- return meterProvider.getMeter("com.anthropic.claude_code", "2.3.0");
283970
+ return meterProvider.getMeter("com.anthropic.claude_code", "2.3.1");
283884
283971
  }
283885
283972
  async function flushTelemetry() {
283886
283973
  const meterProvider = getMeterProvider();
@@ -285070,7 +285157,7 @@ function detectLinuxGlobPatternWarnings() {
285070
285157
  }
285071
285158
  async function getDoctorDiagnostic() {
285072
285159
  const installationType = await getCurrentInstallationType();
285073
- const version = typeof MACRO !== "undefined" ? "2.3.0" : "unknown";
285160
+ const version = typeof MACRO !== "undefined" ? "2.3.1" : "unknown";
285074
285161
  const installationPath = await getInstallationPath();
285075
285162
  const invokedBinary = getInvokedBinary();
285076
285163
  const multipleInstallations = await detectMultipleInstallations();
@@ -286011,8 +286098,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286011
286098
  const maxVersion = await getMaxVersion();
286012
286099
  if (maxVersion && gt(version, maxVersion)) {
286013
286100
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286014
- if (gte("2.3.0", maxVersion)) {
286015
- logForDebugging(`Native installer: current version ${"2.3.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
286101
+ if (gte("2.3.1", maxVersion)) {
286102
+ logForDebugging(`Native installer: current version ${"2.3.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
286016
286103
  logEvent("tengu_native_update_skipped_max_version", {
286017
286104
  latency_ms: Date.now() - startTime,
286018
286105
  max_version: maxVersion,
@@ -286023,7 +286110,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286023
286110
  version = maxVersion;
286024
286111
  }
286025
286112
  }
286026
- if (!forceReinstall && version === "2.3.0" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286113
+ if (!forceReinstall && version === "2.3.1" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286027
286114
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286028
286115
  logEvent("tengu_native_update_complete", {
286029
286116
  latency_ms: Date.now() - startTime,
@@ -332298,7 +332385,7 @@ function getAnthropicEnvMetadata() {
332298
332385
  function getBuildAgeMinutes() {
332299
332386
  if (false)
332300
332387
  ;
332301
- const buildTime = new Date("2026-05-10T17:25:06.612Z").getTime();
332388
+ const buildTime = new Date("2026-05-10T18:34:55.265Z").getTime();
332302
332389
  if (isNaN(buildTime))
332303
332390
  return;
332304
332391
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -360327,7 +360414,7 @@ function Feedback({
360327
360414
  platform: env3.platform,
360328
360415
  gitRepo: envInfo.isGit,
360329
360416
  terminal: env3.terminal,
360330
- version: "2.3.0",
360417
+ version: "2.3.1",
360331
360418
  transcript: normalizeMessagesForAPI(messages),
360332
360419
  errors: sanitizedErrors,
360333
360420
  lastApiRequest: getLastAPIRequest(),
@@ -360519,7 +360606,7 @@ function Feedback({
360519
360606
  ", ",
360520
360607
  env3.terminal,
360521
360608
  ", v",
360522
- "2.3.0"
360609
+ "2.3.1"
360523
360610
  ]
360524
360611
  }, undefined, true, undefined, this)
360525
360612
  ]
@@ -360625,7 +360712,7 @@ ${sanitizedDescription}
360625
360712
  ` + `**Environment Info**
360626
360713
  ` + `- Platform: ${env3.platform}
360627
360714
  ` + `- Terminal: ${env3.terminal}
360628
- ` + `- Version: ${"2.3.0"}
360715
+ ` + `- Version: ${"2.3.1"}
360629
360716
  ` + `- Feedback ID: ${feedbackId}
360630
360717
  ` + `
360631
360718
  **Errors**
@@ -363234,7 +363321,7 @@ function buildPrimarySection() {
363234
363321
  }, undefined, false, undefined, this);
363235
363322
  return [{
363236
363323
  label: "Version",
363237
- value: "2.3.0"
363324
+ value: "2.3.1"
363238
363325
  }, {
363239
363326
  label: "Session name",
363240
363327
  value: nameValue
@@ -367915,7 +368002,7 @@ function Config({
367915
368002
  }
367916
368003
  }, undefined, false, undefined, this)
367917
368004
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
367918
- currentVersion: "2.3.0",
368005
+ currentVersion: "2.3.1",
367919
368006
  onChoice: (choice) => {
367920
368007
  setShowSubmenu(null);
367921
368008
  setTabsHidden(false);
@@ -367927,7 +368014,7 @@ function Config({
367927
368014
  autoUpdatesChannel: "stable"
367928
368015
  };
367929
368016
  if (choice === "stay") {
367930
- newSettings.minimumVersion = "2.3.0";
368017
+ newSettings.minimumVersion = "2.3.1";
367931
368018
  }
367932
368019
  updateSettingsForSource("userSettings", newSettings);
367933
368020
  setSettingsData((prev_27) => ({
@@ -385446,7 +385533,7 @@ function Help(t0) {
385446
385533
  let t6;
385447
385534
  if ($2[31] !== tabs) {
385448
385535
  t6 = /* @__PURE__ */ jsx_dev_runtime218.jsxDEV(Tabs, {
385449
- title: `localclawd v${"2.3.0"}`,
385536
+ title: `localclawd v${"2.3.1"}`,
385450
385537
  color: "professionalBlue",
385451
385538
  defaultTab: "general",
385452
385539
  children: tabs
@@ -402708,7 +402795,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
402708
402795
  }
402709
402796
  return [];
402710
402797
  }
402711
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.3.0") {
402798
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.3.1") {
402712
402799
  if (process.env.USER_TYPE === "ant") {
402713
402800
  const changelog = MACRO.VERSION_CHANGELOG;
402714
402801
  if (changelog) {
@@ -402735,7 +402822,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.3.0") {
402735
402822
  releaseNotes
402736
402823
  };
402737
402824
  }
402738
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "2.3.0") {
402825
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "2.3.1") {
402739
402826
  if (process.env.USER_TYPE === "ant") {
402740
402827
  const changelog = MACRO.VERSION_CHANGELOG;
402741
402828
  if (changelog) {
@@ -402892,7 +402979,7 @@ function getRecentActivitySync() {
402892
402979
  return cachedActivity;
402893
402980
  }
402894
402981
  function getLogoDisplayData() {
402895
- const version = process.env.DEMO_VERSION ?? "2.3.0";
402982
+ const version = process.env.DEMO_VERSION ?? "2.3.1";
402896
402983
  const serverUrl = getDirectConnectServerUrl();
402897
402984
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
402898
402985
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -403992,7 +404079,7 @@ function Logo() {
403992
404079
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
403993
404080
  t2 = () => {
403994
404081
  const currentConfig = getGlobalConfig();
403995
- if (currentConfig.lastReleaseNotesSeen === "2.3.0") {
404082
+ if (currentConfig.lastReleaseNotesSeen === "2.3.1") {
403996
404083
  return;
403997
404084
  }
403998
404085
  saveGlobalConfig(_temp325);
@@ -404651,12 +404738,12 @@ function Logo() {
404651
404738
  return t41;
404652
404739
  }
404653
404740
  function _temp325(current) {
404654
- if (current.lastReleaseNotesSeen === "2.3.0") {
404741
+ if (current.lastReleaseNotesSeen === "2.3.1") {
404655
404742
  return current;
404656
404743
  }
404657
404744
  return {
404658
404745
  ...current,
404659
- lastReleaseNotesSeen: "2.3.0"
404746
+ lastReleaseNotesSeen: "2.3.1"
404660
404747
  };
404661
404748
  }
404662
404749
  function _temp240(s_0) {
@@ -435115,7 +435202,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435115
435202
  smapsRollup,
435116
435203
  platform: process.platform,
435117
435204
  nodeVersion: process.version,
435118
- ccVersion: "2.3.0"
435205
+ ccVersion: "2.3.1"
435119
435206
  };
435120
435207
  }
435121
435208
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -435700,7 +435787,7 @@ var init_bridge_kick = __esm(() => {
435700
435787
  var call86 = async () => {
435701
435788
  return {
435702
435789
  type: "text",
435703
- value: `${"2.3.0"} (built ${"2026-05-10T17:25:06.612Z"})`
435790
+ value: `${"2.3.1"} (built ${"2026-05-10T18:34:55.265Z"})`
435704
435791
  };
435705
435792
  }, version, version_default;
435706
435793
  var init_version = __esm(() => {
@@ -443644,7 +443731,7 @@ function generateHtmlReport(data, insights) {
443644
443731
  </html>`;
443645
443732
  }
443646
443733
  function buildExportData(data, insights, facets, remoteStats) {
443647
- const version2 = typeof MACRO !== "undefined" ? "2.3.0" : "unknown";
443734
+ const version2 = typeof MACRO !== "undefined" ? "2.3.1" : "unknown";
443648
443735
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
443649
443736
  const facets_summary = {
443650
443737
  total: facets.size,
@@ -447843,7 +447930,7 @@ var init_sessionStorage = __esm(() => {
447843
447930
  init_settings2();
447844
447931
  init_slowOperations();
447845
447932
  init_uuid();
447846
- VERSION6 = typeof MACRO !== "undefined" ? "2.3.0" : "unknown";
447933
+ VERSION6 = typeof MACRO !== "undefined" ? "2.3.1" : "unknown";
447847
447934
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
447848
447935
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
447849
447936
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -448974,7 +449061,7 @@ var init_filesystem = __esm(() => {
448974
449061
  });
448975
449062
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
448976
449063
  const nonce = randomBytes20(16).toString("hex");
448977
- return join154(getClaudeTempDir(), "bundled-skills", "2.3.0", nonce);
449064
+ return join154(getClaudeTempDir(), "bundled-skills", "2.3.1", nonce);
448978
449065
  });
448979
449066
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
448980
449067
  });
@@ -458211,7 +458298,7 @@ function buildSystemInitMessage(inputs) {
458211
458298
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458212
458299
  apiKeySource: getAnthropicApiKeyWithSource().source,
458213
458300
  betas: getSdkBetas(),
458214
- claude_code_version: "2.3.0",
458301
+ claude_code_version: "2.3.1",
458215
458302
  output_style: outputStyle2,
458216
458303
  agents: inputs.agents.map((agent) => agent.agentType),
458217
458304
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -472368,7 +472455,7 @@ var init_useVoiceEnabled = __esm(() => {
472368
472455
  function getSemverPart(version2) {
472369
472456
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
472370
472457
  }
472371
- function useUpdateNotification(updatedVersion, initialVersion = "2.3.0") {
472458
+ function useUpdateNotification(updatedVersion, initialVersion = "2.3.1") {
472372
472459
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
472373
472460
  if (!updatedVersion) {
472374
472461
  return null;
@@ -472408,7 +472495,7 @@ function AutoUpdater({
472408
472495
  return;
472409
472496
  }
472410
472497
  if (false) {}
472411
- const currentVersion = "2.3.0";
472498
+ const currentVersion = "2.3.1";
472412
472499
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472413
472500
  let latestVersion = await getLatestVersion(channel);
472414
472501
  const isDisabled = isAutoUpdaterDisabled();
@@ -472619,12 +472706,12 @@ function NativeAutoUpdater({
472619
472706
  logEvent("tengu_native_auto_updater_start", {});
472620
472707
  try {
472621
472708
  const maxVersion = await getMaxVersion();
472622
- if (maxVersion && gt("2.3.0", maxVersion)) {
472709
+ if (maxVersion && gt("2.3.1", maxVersion)) {
472623
472710
  const msg = await getMaxVersionMessage();
472624
472711
  setMaxVersionIssue(msg ?? "affects your version");
472625
472712
  }
472626
472713
  const result = await installLatest(channel);
472627
- const currentVersion = "2.3.0";
472714
+ const currentVersion = "2.3.1";
472628
472715
  const latencyMs = Date.now() - startTime;
472629
472716
  if (result.lockFailed) {
472630
472717
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -472759,17 +472846,17 @@ function PackageManagerAutoUpdater(t0) {
472759
472846
  const maxVersion = await getMaxVersion();
472760
472847
  if (maxVersion && latest && gt(latest, maxVersion)) {
472761
472848
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
472762
- if (gte("2.3.0", maxVersion)) {
472763
- logForDebugging(`PackageManagerAutoUpdater: current version ${"2.3.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
472849
+ if (gte("2.3.1", maxVersion)) {
472850
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"2.3.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
472764
472851
  setUpdateAvailable(false);
472765
472852
  return;
472766
472853
  }
472767
472854
  latest = maxVersion;
472768
472855
  }
472769
- const hasUpdate = latest && !gte("2.3.0", latest) && !shouldSkipVersion(latest);
472856
+ const hasUpdate = latest && !gte("2.3.1", latest) && !shouldSkipVersion(latest);
472770
472857
  setUpdateAvailable(!!hasUpdate);
472771
472858
  if (hasUpdate) {
472772
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"2.3.0"} -> ${latest}`);
472859
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"2.3.1"} -> ${latest}`);
472773
472860
  }
472774
472861
  };
472775
472862
  $2[0] = t1;
@@ -472803,7 +472890,7 @@ function PackageManagerAutoUpdater(t0) {
472803
472890
  wrap: "truncate",
472804
472891
  children: [
472805
472892
  "currentVersion: ",
472806
- "2.3.0"
472893
+ "2.3.1"
472807
472894
  ]
472808
472895
  }, undefined, true, undefined, this);
472809
472896
  $2[3] = verbose;
@@ -480363,7 +480450,7 @@ function buildStatusLineCommandInput(permissionMode, exceedsHalfContext, setting
480363
480450
  project_dir: getOriginalCwd(),
480364
480451
  added_dirs: addedDirs
480365
480452
  },
480366
- version: "2.3.0",
480453
+ version: "2.3.1",
480367
480454
  output_style: {
480368
480455
  name: outputStyleName
480369
480456
  },
@@ -491935,7 +492022,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
491935
492022
  } catch {}
491936
492023
  const data = {
491937
492024
  trigger,
491938
- version: "2.3.0",
492025
+ version: "2.3.1",
491939
492026
  platform: process.platform,
491940
492027
  transcript,
491941
492028
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -508908,7 +508995,7 @@ function appendToLog(path17, message) {
508908
508995
  cwd: getFsImplementation().cwd(),
508909
508996
  userType: process.env.USER_TYPE,
508910
508997
  sessionId: getSessionId(),
508911
- version: "2.3.0"
508998
+ version: "2.3.1"
508912
508999
  };
508913
509000
  getLogWriter(path17).write(messageWithTimestamp);
508914
509001
  }
@@ -512707,8 +512794,8 @@ async function getEnvLessBridgeConfig() {
512707
512794
  }
512708
512795
  async function checkEnvLessBridgeMinVersion() {
512709
512796
  const cfg = await getEnvLessBridgeConfig();
512710
- if (cfg.min_version && lt("2.3.0", cfg.min_version)) {
512711
- return `Your version of localclawd (${"2.3.0"}) is too old for Remote Control.
512797
+ if (cfg.min_version && lt("2.3.1", cfg.min_version)) {
512798
+ return `Your version of localclawd (${"2.3.1"}) is too old for Remote Control.
512712
512799
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
512713
512800
  }
512714
512801
  return null;
@@ -513180,7 +513267,7 @@ async function initBridgeCore(params) {
513180
513267
  const rawApi = createBridgeApiClient({
513181
513268
  baseUrl,
513182
513269
  getAccessToken,
513183
- runnerVersion: "2.3.0",
513270
+ runnerVersion: "2.3.1",
513184
513271
  onDebug: logForDebugging,
513185
513272
  onAuth401,
513186
513273
  getTrustedDeviceToken
@@ -518899,7 +518986,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
518899
518986
  setCwd(cwd3);
518900
518987
  const server = new Server({
518901
518988
  name: "claude/tengu",
518902
- version: "2.3.0"
518989
+ version: "2.3.1"
518903
518990
  }, {
518904
518991
  capabilities: {
518905
518992
  tools: {}
@@ -519980,7 +520067,7 @@ function WelcomeLogo() {
519980
520067
  dimColor: true,
519981
520068
  children: [
519982
520069
  "v",
519983
- "2.3.0"
520070
+ "2.3.1"
519984
520071
  ]
519985
520072
  }, undefined, true, undefined, this)
519986
520073
  ]
@@ -520171,7 +520258,7 @@ __export(exports_update, {
520171
520258
  });
520172
520259
  async function update() {
520173
520260
  logEvent("tengu_update_check", {});
520174
- writeToStdout(`Current version: ${"2.3.0"}
520261
+ writeToStdout(`Current version: ${"2.3.1"}
520175
520262
  `);
520176
520263
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520177
520264
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520246,8 +520333,8 @@ async function update() {
520246
520333
  writeToStdout(`localclawd is managed by Homebrew.
520247
520334
  `);
520248
520335
  const latest = await getLatestVersion(channel);
520249
- if (latest && !gte("2.3.0", latest)) {
520250
- writeToStdout(`Update available: ${"2.3.0"} → ${latest}
520336
+ if (latest && !gte("2.3.1", latest)) {
520337
+ writeToStdout(`Update available: ${"2.3.1"} → ${latest}
520251
520338
  `);
520252
520339
  writeToStdout(`
520253
520340
  `);
@@ -520263,8 +520350,8 @@ async function update() {
520263
520350
  writeToStdout(`localclawd is managed by winget.
520264
520351
  `);
520265
520352
  const latest = await getLatestVersion(channel);
520266
- if (latest && !gte("2.3.0", latest)) {
520267
- writeToStdout(`Update available: ${"2.3.0"} → ${latest}
520353
+ if (latest && !gte("2.3.1", latest)) {
520354
+ writeToStdout(`Update available: ${"2.3.1"} → ${latest}
520268
520355
  `);
520269
520356
  writeToStdout(`
520270
520357
  `);
@@ -520278,8 +520365,8 @@ async function update() {
520278
520365
  writeToStdout(`localclawd is managed by apk.
520279
520366
  `);
520280
520367
  const latest = await getLatestVersion(channel);
520281
- if (latest && !gte("2.3.0", latest)) {
520282
- writeToStdout(`Update available: ${"2.3.0"} → ${latest}
520368
+ if (latest && !gte("2.3.1", latest)) {
520369
+ writeToStdout(`Update available: ${"2.3.1"} → ${latest}
520283
520370
  `);
520284
520371
  writeToStdout(`
520285
520372
  `);
@@ -520344,11 +520431,11 @@ async function update() {
520344
520431
  `);
520345
520432
  await gracefulShutdown(1);
520346
520433
  }
520347
- if (result.latestVersion === "2.3.0") {
520348
- writeToStdout(source_default.green(`localclawd is up to date (${"2.3.0"})`) + `
520434
+ if (result.latestVersion === "2.3.1") {
520435
+ writeToStdout(source_default.green(`localclawd is up to date (${"2.3.1"})`) + `
520349
520436
  `);
520350
520437
  } else {
520351
- writeToStdout(source_default.green(`Successfully updated from ${"2.3.0"} to version ${result.latestVersion}`) + `
520438
+ writeToStdout(source_default.green(`Successfully updated from ${"2.3.1"} to version ${result.latestVersion}`) + `
520352
520439
  `);
520353
520440
  await regenerateCompletionCache();
520354
520441
  }
@@ -520408,12 +520495,12 @@ async function update() {
520408
520495
  `);
520409
520496
  await gracefulShutdown(1);
520410
520497
  }
520411
- if (latestVersion === "2.3.0") {
520412
- writeToStdout(source_default.green(`localclawd is up to date (${"2.3.0"})`) + `
520498
+ if (latestVersion === "2.3.1") {
520499
+ writeToStdout(source_default.green(`localclawd is up to date (${"2.3.1"})`) + `
520413
520500
  `);
520414
520501
  await gracefulShutdown(0);
520415
520502
  }
520416
- writeToStdout(`New version available: ${latestVersion} (current: ${"2.3.0"})
520503
+ writeToStdout(`New version available: ${latestVersion} (current: ${"2.3.1"})
520417
520504
  `);
520418
520505
  writeToStdout(`Installing update...
520419
520506
  `);
@@ -520458,7 +520545,7 @@ async function update() {
520458
520545
  logForDebugging(`update: Installation status: ${status2}`);
520459
520546
  switch (status2) {
520460
520547
  case "success":
520461
- writeToStdout(source_default.green(`Successfully updated from ${"2.3.0"} to version ${latestVersion}`) + `
520548
+ writeToStdout(source_default.green(`Successfully updated from ${"2.3.1"} to version ${latestVersion}`) + `
520462
520549
  `);
520463
520550
  await regenerateCompletionCache();
520464
520551
  break;
@@ -521700,7 +521787,7 @@ Run with --debug for more details.
521700
521787
  }
521701
521788
  }
521702
521789
  logForDiagnosticsNoPII("info", "started", {
521703
- version: "2.3.0",
521790
+ version: "2.3.1",
521704
521791
  is_native_binary: isInBundledMode()
521705
521792
  });
521706
521793
  registerCleanup(async () => {
@@ -522484,7 +522571,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522484
522571
  pendingHookMessages
522485
522572
  }, renderAndRun);
522486
522573
  }
522487
- }).version("2.3.0 (localclawd)", "-v, --version", "Output the version number");
522574
+ }).version("2.3.1 (localclawd)", "-v, --version", "Output the version number");
522488
522575
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
522489
522576
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
522490
522577
  if (canUserConfigureAdvisor()) {
@@ -522998,7 +523085,7 @@ if (false) {}
522998
523085
  async function main2() {
522999
523086
  const args = process.argv.slice(2);
523000
523087
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523001
- console.log(`${"2.3.0"} (localclawd)`);
523088
+ console.log(`${"2.3.1"} (localclawd)`);
523002
523089
  return;
523003
523090
  }
523004
523091
  const {
@@ -523089,4 +523176,4 @@ localclawd crashed: ${msg}
523089
523176
  process.exit(1);
523090
523177
  });
523091
523178
 
523092
- //# debugId=9066A3790DFA1A3F64756E2164756E21
523179
+ //# debugId=33D2CC954FB1725C64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",