localclawd 1.1.13 → 1.1.15

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 (3) hide show
  1. package/README.md +18 -9
  2. package/dist/cli.mjs +207 -169
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -133,9 +133,9 @@ The bootstrap scripts expect release assets to follow the native installer platf
133
133
 
134
134
  ### Backend setup after install
135
135
 
136
- localclawd accepts native environment variable names. Legacy `CLAUDE_CODE_*` names are still accepted as compatibility aliases, but new setups should prefer `LOCALCLAWD_*`.
136
+ localclawd requires no account or login. Run `localclawd` and use `/setup` to configure your local backend, or set environment variables before launching.
137
137
 
138
- Most users should configure the backend during first-run onboarding or later in `/config`. Environment variables still work when you want non-interactive setup, shell-specific overrides, or CI automation.
138
+ localclawd accepts native environment variable names. Legacy `CLAUDE_CODE_*` names are still accepted as compatibility aliases, but new setups should prefer `LOCALCLAWD_*`.
139
139
 
140
140
  For vLLM:
141
141
 
@@ -165,17 +165,26 @@ Then run:
165
165
  localclawd
166
166
  ```
167
167
 
168
+ ## No account required
169
+
170
+ localclawd does not require any account, login, or subscription. Connect it to a local model (vLLM, Ollama) or any OpenAI-compatible endpoint and start coding immediately. Use `/setup` at any time to configure or change your backend.
171
+
172
+ If you want to use the Anthropic API directly, set `ANTHROPIC_API_KEY` in your environment — no login flow needed.
173
+
168
174
  ## Release status
169
175
 
170
- `v1.0.5` is live on npm. Install globally with `npm install -g localclawd` or run without installing with `npx localclawd`. Native multi-platform binaries can be added later without changing the install surface.
176
+ `v1.1.15` is live on npm. Install globally with `npm install -g localclawd` or run without installing with `npx localclawd`.
171
177
 
172
178
  **Changelog**
173
- - `1.0.5` — Geometric algebra lattice (Cl(n,0) multivectors, FCA concept lattice, rotor temporal decay, IDF attention); /keepgoing upgraded to ultimate persistent mode with subagent support, 7 stop-signal patterns, unlimited rounds, round counter; /thinkharder enforces 4-phase DRAFT→CRITIQUE→REFINE→VERIFY pipeline per change.
174
- - `1.0.4` — Fix `util is not defined` crash permanently by externalizing zod from the Bun bundle; add `/buddy`, `/thinkharder`, `/thinknormal` commands; fix `/keepgoing` autonomous loop; indigo/violet color scheme finalized.
175
- - `1.0.3` — Fix `util3 is not defined` crash from zod v4 bundled inside `@modelcontextprotocol/sdk`; pin all deps to current versions; zod v3 forced globally via overrides+resolutions.
176
- - `1.0.2` — Fix zod v4 bundler crash (`_uppercase2 is not defined`); pin zod to `^3`; version string now reflects package.json correctly.
177
- - `1.0.1` — Fix npm bin entry; add `/keepgoing` command; lattice memory scoring; branding cleanup.
178
- - `1.0.0` — Initial source-first release.
179
+ - `1.1.15` — Full branding cleanup (no Anthropic/Claude references in UI); global crash handler shows errors instead of silent exit; auth commands hidden (use env vars or /setup); all startup errors surfaced with actionable messages.
180
+ - `1.1.14` — Error handling for all startup awaits; clean build artifacts before rebuild to prevent stale cache issues.
181
+ - `1.1.13` — Go straight to dashboard on launch; /setup for configuration; fix all stuck menus; useRef guards everywhere.
182
+ - `1.1.12` — Fix onboarding blank screen; no stuck menus; VSCode Enter handling.
183
+ - `1.1.11` — Ctrl+C everywhere; clean command list; lint fixes.
184
+ - `1.1.10` — Fix Enter key on VSCode/ConPTY.
185
+ - `1.0.5` — Geometric algebra lattice; /keepgoing upgraded with subagent support; /thinkharder 4-phase pipeline.
186
+ - `1.0.4` — Fix `util is not defined` crash; add `/buddy`, `/thinkharder`, `/thinknormal`; fix `/keepgoing`.
187
+ - `1.0.0` — Initial release.
179
188
 
180
189
  External native update metadata is now expected under `release-manifests/`, the main verification workflow lives in `.github/workflows/ci.yml`, and the native asset publication workflow lives in `.github/workflows/publish-release-assets.yml`. See `docs/release.md` for the expected asset set and publish sequence.
181
190
 
package/dist/cli.mjs CHANGED
@@ -89227,7 +89227,7 @@ var init_isEqual = __esm(() => {
89227
89227
 
89228
89228
  // src/utils/userAgent.ts
89229
89229
  function getClaudeCodeUserAgent() {
89230
- return `claude-code/${"1.1.13"}`;
89230
+ return `claude-code/${"1.1.15"}`;
89231
89231
  }
89232
89232
 
89233
89233
  // src/utils/workloadContext.ts
@@ -89249,7 +89249,7 @@ function getUserAgent() {
89249
89249
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
89250
89250
  const workload = getWorkload();
89251
89251
  const workloadSuffix = workload ? `, workload/${workload}` : "";
89252
- return `claude-cli/${"1.1.13"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89252
+ return `claude-cli/${"1.1.15"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89253
89253
  }
89254
89254
  function getMCPUserAgent() {
89255
89255
  const parts = [];
@@ -89263,7 +89263,7 @@ function getMCPUserAgent() {
89263
89263
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
89264
89264
  }
89265
89265
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
89266
- return `claude-code/${"1.1.13"}${suffix}`;
89266
+ return `claude-code/${"1.1.15"}${suffix}`;
89267
89267
  }
89268
89268
  function getWebFetchUserAgent() {
89269
89269
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -99172,7 +99172,7 @@ function getAttributionHeader(fingerprint) {
99172
99172
  if (!isAttributionHeaderEnabled()) {
99173
99173
  return "";
99174
99174
  }
99175
- const version = `${"1.1.13"}.${fingerprint}`;
99175
+ const version = `${"1.1.15"}.${fingerprint}`;
99176
99176
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
99177
99177
  const cch = "";
99178
99178
  const workload = getWorkload();
@@ -132719,7 +132719,7 @@ var init_metadata = __esm(() => {
132719
132719
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
132720
132720
  WHITESPACE_REGEX = /\s+/;
132721
132721
  getVersionBase = memoize_default(() => {
132722
- const match = "1.1.13".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132722
+ const match = "1.1.15".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132723
132723
  return match ? match[0] : undefined;
132724
132724
  });
132725
132725
  buildEnvContext = memoize_default(async () => {
@@ -132759,9 +132759,9 @@ var init_metadata = __esm(() => {
132759
132759
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
132760
132760
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
132761
132761
  isClaudeAiAuth: isClaudeAISubscriber(),
132762
- version: "1.1.13",
132762
+ version: "1.1.15",
132763
132763
  versionBase: getVersionBase(),
132764
- buildTime: "2026-04-07T18:09:59.417Z",
132764
+ buildTime: "2026-04-08T22:42:21.973Z",
132765
132765
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
132766
132766
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
132767
132767
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -197348,7 +197348,7 @@ function getTelemetryAttributes() {
197348
197348
  attributes["session.id"] = sessionId;
197349
197349
  }
197350
197350
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
197351
- attributes["app.version"] = "1.1.13";
197351
+ attributes["app.version"] = "1.1.15";
197352
197352
  }
197353
197353
  const oauthAccount = getOauthAccountInfo();
197354
197354
  if (oauthAccount) {
@@ -200182,7 +200182,7 @@ function getWarningUpsellText(rateLimitType) {
200182
200182
  return null;
200183
200183
  }
200184
200184
  if (subscriptionType === "pro" || subscriptionType === "max") {
200185
- return "/upgrade to keep using Claude Code";
200185
+ return "/upgrade to keep using localclawd";
200186
200186
  }
200187
200187
  }
200188
200188
  if (rateLimitType === "overage") {
@@ -229409,7 +229409,7 @@ function getInstallationEnv() {
229409
229409
  return;
229410
229410
  }
229411
229411
  function getClaudeCodeVersion() {
229412
- return "1.1.13";
229412
+ return "1.1.15";
229413
229413
  }
229414
229414
  async function getInstalledVSCodeExtensionVersion(command) {
229415
229415
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -235011,7 +235011,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
235011
235011
  const client4 = new Client({
235012
235012
  name: "claude-code",
235013
235013
  title: "Claude Code",
235014
- version: "1.1.13",
235014
+ version: "1.1.15",
235015
235015
  description: "Anthropic's agentic coding tool",
235016
235016
  websiteUrl: PRODUCT_URL
235017
235017
  }, {
@@ -235364,7 +235364,7 @@ var init_client9 = __esm(() => {
235364
235364
  const client4 = new Client({
235365
235365
  name: "claude-code",
235366
235366
  title: "Claude Code",
235367
- version: "1.1.13",
235367
+ version: "1.1.15",
235368
235368
  description: "Anthropic's agentic coding tool",
235369
235369
  websiteUrl: PRODUCT_URL
235370
235370
  }, {
@@ -257637,7 +257637,7 @@ function ManagedSettingsSecurityDialog(t0) {
257637
257637
  label: "Yes, I trust these settings",
257638
257638
  value: "accept"
257639
257639
  }, {
257640
- label: "No, exit Claude Code",
257640
+ label: "No, exit localclawd",
257641
257641
  value: "exit"
257642
257642
  }];
257643
257643
  $2[11] = t15;
@@ -258555,7 +258555,7 @@ var init_user = __esm(() => {
258555
258555
  deviceId,
258556
258556
  sessionId: getSessionId(),
258557
258557
  email: getEmail(),
258558
- appVersion: "1.1.13",
258558
+ appVersion: "1.1.15",
258559
258559
  platform: getHostPlatformForAnalytics(),
258560
258560
  organizationUuid,
258561
258561
  accountUuid,
@@ -259879,7 +259879,7 @@ async function initializeBetaTracing(resource) {
259879
259879
  });
259880
259880
  logs.setGlobalLoggerProvider(loggerProvider);
259881
259881
  setLoggerProvider(loggerProvider);
259882
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.13");
259882
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.15");
259883
259883
  setEventLogger(eventLogger);
259884
259884
  process.on("beforeExit", async () => {
259885
259885
  await loggerProvider?.forceFlush();
@@ -259919,7 +259919,7 @@ async function initializeTelemetry() {
259919
259919
  const platform3 = getPlatform();
259920
259920
  const baseAttributes = {
259921
259921
  [ATTR_SERVICE_NAME5]: "claude-code",
259922
- [ATTR_SERVICE_VERSION5]: "1.1.13"
259922
+ [ATTR_SERVICE_VERSION5]: "1.1.15"
259923
259923
  };
259924
259924
  if (platform3 === "wsl") {
259925
259925
  const wslVersion = getWslVersion();
@@ -259964,7 +259964,7 @@ async function initializeTelemetry() {
259964
259964
  } catch {}
259965
259965
  };
259966
259966
  registerCleanup(shutdownTelemetry2);
259967
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.13");
259967
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.15");
259968
259968
  }
259969
259969
  const meterProvider = new MeterProvider5({
259970
259970
  resource,
@@ -259984,7 +259984,7 @@ async function initializeTelemetry() {
259984
259984
  });
259985
259985
  logs.setGlobalLoggerProvider(loggerProvider);
259986
259986
  setLoggerProvider(loggerProvider);
259987
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.13");
259987
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.15");
259988
259988
  setEventLogger(eventLogger);
259989
259989
  logForDebugging("[3P telemetry] Event logger set successfully");
259990
259990
  process.on("beforeExit", async () => {
@@ -260046,7 +260046,7 @@ Current timeout: ${timeoutMs}ms
260046
260046
  }
260047
260047
  };
260048
260048
  registerCleanup(shutdownTelemetry);
260049
- return meterProvider.getMeter("com.anthropic.claude_code", "1.1.13");
260049
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.1.15");
260050
260050
  }
260051
260051
  async function flushTelemetry() {
260052
260052
  const meterProvider = getMeterProvider();
@@ -260211,7 +260211,7 @@ async function call3() {
260211
260211
  clearOnboarding: true
260212
260212
  });
260213
260213
  const message = /* @__PURE__ */ jsx_dev_runtime102.jsxDEV(ThemedText, {
260214
- children: "Successfully logged out from your Anthropic account."
260214
+ children: "Successfully signed out."
260215
260215
  }, undefined, false, undefined, this);
260216
260216
  setTimeout(() => {
260217
260217
  gracefulShutdownSync(0, "logout");
@@ -261269,7 +261269,7 @@ function detectLinuxGlobPatternWarnings() {
261269
261269
  }
261270
261270
  async function getDoctorDiagnostic() {
261271
261271
  const installationType = await getCurrentInstallationType();
261272
- const version = typeof MACRO !== "undefined" ? "1.1.13" : "unknown";
261272
+ const version = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
261273
261273
  const installationPath = await getInstallationPath();
261274
261274
  const invokedBinary = getInvokedBinary();
261275
261275
  const multipleInstallations = await detectMultipleInstallations();
@@ -262210,8 +262210,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262210
262210
  const maxVersion = await getMaxVersion();
262211
262211
  if (maxVersion && gt(version, maxVersion)) {
262212
262212
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
262213
- if (gte("1.1.13", maxVersion)) {
262214
- logForDebugging(`Native installer: current version ${"1.1.13"} is already at or above maxVersion ${maxVersion}, skipping update`);
262213
+ if (gte("1.1.15", maxVersion)) {
262214
+ logForDebugging(`Native installer: current version ${"1.1.15"} is already at or above maxVersion ${maxVersion}, skipping update`);
262215
262215
  logEvent("tengu_native_update_skipped_max_version", {
262216
262216
  latency_ms: Date.now() - startTime,
262217
262217
  max_version: maxVersion,
@@ -262222,7 +262222,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262222
262222
  version = maxVersion;
262223
262223
  }
262224
262224
  }
262225
- if (!forceReinstall && version === "1.1.13" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262225
+ if (!forceReinstall && version === "1.1.15" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262226
262226
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
262227
262227
  logEvent("tengu_native_update_complete", {
262228
262228
  latency_ms: Date.now() - startTime,
@@ -271233,11 +271233,11 @@ function TeleportError(t0) {
271233
271233
  children: [
271234
271234
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
271235
271235
  dimColor: true,
271236
- children: "Teleport requires a Claude.ai account."
271236
+ children: "Teleport requires an account."
271237
271237
  }, undefined, false, undefined, this),
271238
271238
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
271239
271239
  dimColor: true,
271240
- children: "Your Claude Pro/Max subscription will be used by Claude Code."
271240
+ children: "Your subscription will be used by localclawd."
271241
271241
  }, undefined, false, undefined, this)
271242
271242
  ]
271243
271243
  }, undefined, true, undefined, this);
@@ -271248,13 +271248,13 @@ function TeleportError(t0) {
271248
271248
  let t10;
271249
271249
  if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
271250
271250
  t10 = /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Dialog, {
271251
- title: "Log in to Claude",
271251
+ title: "Log in",
271252
271252
  onCancel,
271253
271253
  children: [
271254
271254
  t9,
271255
271255
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Select, {
271256
271256
  options: [{
271257
- label: "Login with Claude account",
271257
+ label: "Log in",
271258
271258
  value: "login"
271259
271259
  }, {
271260
271260
  label: "Exit",
@@ -334442,7 +334442,7 @@ function getAnthropicEnvMetadata() {
334442
334442
  function getBuildAgeMinutes() {
334443
334443
  if (false)
334444
334444
  ;
334445
- const buildTime = new Date("2026-04-07T18:09:59.417Z").getTime();
334445
+ const buildTime = new Date("2026-04-08T22:42:21.973Z").getTime();
334446
334446
  if (isNaN(buildTime))
334447
334447
  return;
334448
334448
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -358508,7 +358508,7 @@ function Feedback({
358508
358508
  platform: env4.platform,
358509
358509
  gitRepo: envInfo.isGit,
358510
358510
  terminal: env4.terminal,
358511
- version: "1.1.13",
358511
+ version: "1.1.15",
358512
358512
  transcript: normalizeMessagesForAPI(messages),
358513
358513
  errors: sanitizedErrors,
358514
358514
  lastApiRequest: getLastAPIRequest(),
@@ -358700,7 +358700,7 @@ function Feedback({
358700
358700
  ", ",
358701
358701
  env4.terminal,
358702
358702
  ", v",
358703
- "1.1.13"
358703
+ "1.1.15"
358704
358704
  ]
358705
358705
  }, undefined, true, undefined, this)
358706
358706
  ]
@@ -358806,7 +358806,7 @@ ${sanitizedDescription}
358806
358806
  ` + `**Environment Info**
358807
358807
  ` + `- Platform: ${env4.platform}
358808
358808
  ` + `- Terminal: ${env4.terminal}
358809
- ` + `- Version: ${"1.1.13"}
358809
+ ` + `- Version: ${"1.1.15"}
358810
358810
  ` + `- Feedback ID: ${feedbackId}
358811
358811
  ` + `
358812
358812
  **Errors**
@@ -361055,12 +361055,12 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361055
361055
  setState("checking");
361056
361056
  const installStatus = await getDesktopInstallStatus();
361057
361057
  if (installStatus.status === "not-installed") {
361058
- setDownloadMessage("Claude Desktop is not installed.");
361058
+ setDownloadMessage("Desktop app is not installed.");
361059
361059
  setState("prompt-download");
361060
361060
  return;
361061
361061
  }
361062
361062
  if (installStatus.status === "version-too-old") {
361063
- setDownloadMessage(`Claude Desktop needs to be updated (found v${installStatus.version}, need v1.1.2396+).`);
361063
+ setDownloadMessage(`localclawd desktop needs to be updated (found v${installStatus.version}, need v1.1.2396+).`);
361064
361064
  setState("prompt-download");
361065
361065
  return;
361066
361066
  }
@@ -361069,7 +361069,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361069
361069
  setState("opening");
361070
361070
  const result = await openCurrentSessionInDesktop();
361071
361071
  if (!result.success) {
361072
- setError(result.error ?? "Failed to open Claude Desktop");
361072
+ setError(result.error ?? "Failed to open desktop app");
361073
361073
  setState("error");
361074
361074
  return;
361075
361075
  }
@@ -361172,10 +361172,10 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361172
361172
  let t4;
361173
361173
  if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
361174
361174
  t4 = {
361175
- checking: "Checking for Claude Desktop…",
361175
+ checking: "Checking for localclawd desktop…",
361176
361176
  flushing: "Saving session…",
361177
- opening: "Opening Claude Desktop…",
361178
- success: "Opening in Claude Desktop…"
361177
+ opening: "Opening localclawd desktop…",
361178
+ success: "Opening in localclawd desktop…"
361179
361179
  };
361180
361180
  $2[17] = t4;
361181
361181
  } else {
@@ -361196,7 +361196,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361196
361196
  return t6;
361197
361197
  }
361198
361198
  async function _temp214(onDone_0) {
361199
- onDone_0("Session transferred to Claude Desktop", {
361199
+ onDone_0("Session transferred to localclawd desktop", {
361200
361200
  display: "system"
361201
361201
  });
361202
361202
  await gracefulShutdown(0, "other");
@@ -361919,7 +361919,7 @@ function buildPrimarySection() {
361919
361919
  }, undefined, false, undefined, this);
361920
361920
  return [{
361921
361921
  label: "Version",
361922
- value: "1.1.13"
361922
+ value: "1.1.15"
361923
361923
  }, {
361924
361924
  label: "Session name",
361925
361925
  value: nameValue
@@ -362942,7 +362942,7 @@ function ModelPicker(t0) {
362942
362942
  } else {
362943
362943
  t15 = $2[41];
362944
362944
  }
362945
- const t16 = headerText ?? "Switch between Claude models. Applies to this session and future Claude Code sessions. For other/previous model names, specify with --model.";
362945
+ const t16 = headerText ?? "Switch between models. Applies to this session and future localclawd sessions. For other/previous model names, specify with --model.";
362946
362946
  let t17;
362947
362947
  if ($2[42] !== t16) {
362948
362948
  t17 = /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
@@ -366537,7 +366537,7 @@ function Config({
366537
366537
  }
366538
366538
  }, undefined, false, undefined, this)
366539
366539
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
366540
- currentVersion: "1.1.13",
366540
+ currentVersion: "1.1.15",
366541
366541
  onChoice: (choice) => {
366542
366542
  setShowSubmenu(null);
366543
366543
  setTabsHidden(false);
@@ -366549,7 +366549,7 @@ function Config({
366549
366549
  autoUpdatesChannel: "stable"
366550
366550
  };
366551
366551
  if (choice === "stay") {
366552
- newSettings.minimumVersion = "1.1.13";
366552
+ newSettings.minimumVersion = "1.1.15";
366553
366553
  }
366554
366554
  updateSettingsForSource("userSettings", newSettings);
366555
366555
  setSettingsData((prev_27) => ({
@@ -376282,7 +376282,7 @@ function HelpV2(t0) {
376282
376282
  let t6;
376283
376283
  if ($2[31] !== tabs) {
376284
376284
  t6 = /* @__PURE__ */ jsx_dev_runtime214.jsxDEV(Tabs, {
376285
- title: `localclawd v${"1.1.13"}`,
376285
+ title: `localclawd v${"1.1.15"}`,
376286
376286
  color: "professionalBlue",
376287
376287
  defaultTab: "general",
376288
376288
  children: tabs
@@ -376713,7 +376713,7 @@ function IDEScreen(t0) {
376713
376713
  t5 = availableIDEs.length === 0 && /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
376714
376714
  dimColor: true,
376715
376715
  children: isSupportedJetBrainsTerminal() ? `No available IDEs detected. Please install the plugin and restart your IDE:
376716
- https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the Claude Code extension or plugin installed and is running."
376716
+ https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the localclawd extension or plugin installed and is running."
376717
376717
  }, undefined, false, undefined, this);
376718
376718
  $2[17] = availableIDEs.length;
376719
376719
  $2[18] = t5;
@@ -376745,7 +376745,7 @@ https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected.
376745
376745
  marginTop: 1,
376746
376746
  children: /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
376747
376747
  color: "warning",
376748
- children: "Note: Only one Claude Code instance can be connected to VS Code at a time."
376748
+ children: "Note: Only one localclawd instance can be connected to VS Code at a time."
376749
376749
  }, undefined, false, undefined, this)
376750
376750
  }, undefined, false, undefined, this);
376751
376751
  $2[24] = availableIDEs;
@@ -377089,7 +377089,7 @@ async function call30(onDone, context8, args) {
377089
377089
  const detectedIDEs2 = await detectIDEs(true);
377090
377090
  const availableIDEs2 = detectedIDEs2.filter((ide) => ide.isValid);
377091
377091
  if (availableIDEs2.length === 0) {
377092
- onDone("No IDEs with Claude Code extension detected.");
377092
+ onDone("No IDEs with localclawd extension detected.");
377093
377093
  return null;
377094
377094
  }
377095
377095
  return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(IDEOpenSelection, {
@@ -377725,7 +377725,7 @@ var init_logout2 = __esm(() => {
377725
377725
  logout_default = {
377726
377726
  type: "local-jsx",
377727
377727
  name: "logout",
377728
- description: "Sign out from your Anthropic account",
377728
+ description: "Sign out",
377729
377729
  isEnabled: () => !isEnvTruthy(process.env.DISABLE_LOGOUT_COMMAND),
377730
377730
  load: () => Promise.resolve().then(() => (init_logout(), exports_logout))
377731
377731
  };
@@ -383244,9 +383244,9 @@ function MCPRemoteServerMenu({
383244
383244
  if (success) {
383245
383245
  onComplete?.(`Authentication successful. Connected to ${server.name}.`);
383246
383246
  } else if (result.client.type === "needs-auth") {
383247
- onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.");
383247
+ onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
383248
383248
  } else {
383249
- onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.");
383249
+ onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
383250
383250
  }
383251
383251
  } catch (err2) {
383252
383252
  logEvent("tengu_claudeai_mcp_auth_completed", {
@@ -383408,10 +383408,10 @@ function MCPRemoteServerMenu({
383408
383408
  const message = isEffectivelyAuthenticated ? `Authentication successful. Reconnected to ${server.name}.` : `Authentication successful. Connected to ${server.name}.`;
383409
383409
  onComplete?.(message);
383410
383410
  } else if (result_0.client.type === "needs-auth") {
383411
- onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.");
383411
+ onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
383412
383412
  } else {
383413
383413
  logMCPDebug(server.name, `Reconnection failed after authentication`);
383414
- onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.");
383414
+ onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
383415
383415
  }
383416
383416
  }
383417
383417
  } catch (err_1) {
@@ -400440,7 +400440,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
400440
400440
  return [];
400441
400441
  }
400442
400442
  }
400443
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.13") {
400443
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.15") {
400444
400444
  if (process.env.USER_TYPE === "ant") {
400445
400445
  const changelog = MACRO.VERSION_CHANGELOG;
400446
400446
  if (changelog) {
@@ -400467,7 +400467,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.13")
400467
400467
  releaseNotes
400468
400468
  };
400469
400469
  }
400470
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.13") {
400470
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.15") {
400471
400471
  if (process.env.USER_TYPE === "ant") {
400472
400472
  const changelog = MACRO.VERSION_CHANGELOG;
400473
400473
  if (changelog) {
@@ -401634,7 +401634,7 @@ function getRecentActivitySync() {
401634
401634
  return cachedActivity;
401635
401635
  }
401636
401636
  function getLogoDisplayData() {
401637
- const version = process.env.DEMO_VERSION ?? "1.1.13";
401637
+ const version = process.env.DEMO_VERSION ?? "1.1.15";
401638
401638
  const serverUrl = getDirectConnectServerUrl();
401639
401639
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
401640
401640
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -402908,7 +402908,7 @@ function LogoV2() {
402908
402908
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
402909
402909
  t2 = () => {
402910
402910
  const currentConfig = getGlobalConfig();
402911
- if (currentConfig.lastReleaseNotesSeen === "1.1.13") {
402911
+ if (currentConfig.lastReleaseNotesSeen === "1.1.15") {
402912
402912
  return;
402913
402913
  }
402914
402914
  saveGlobalConfig(_temp327);
@@ -403584,12 +403584,12 @@ function LogoV2() {
403584
403584
  return t41;
403585
403585
  }
403586
403586
  function _temp327(current) {
403587
- if (current.lastReleaseNotesSeen === "1.1.13") {
403587
+ if (current.lastReleaseNotesSeen === "1.1.15") {
403588
403588
  return current;
403589
403589
  }
403590
403590
  return {
403591
403591
  ...current,
403592
- lastReleaseNotesSeen: "1.1.13"
403592
+ lastReleaseNotesSeen: "1.1.15"
403593
403593
  };
403594
403594
  }
403595
403595
  function _temp245(s_0) {
@@ -411167,7 +411167,7 @@ function startDetachedPoll(taskId, sessionId, url3, getAppState, setAppState) {
411167
411167
  ultraplanSessionUrl: undefined
411168
411168
  } : prev);
411169
411169
  enqueuePendingNotification({
411170
- value: [`Ultraplan approved — executing in Claude Code on the web. Follow along at: ${url3}`, "", "Results will land as a pull request when the remote session finishes. There is nothing to do here."].join(`
411170
+ value: [`Ultraplan approved — executing in localclawd on the web. Follow along at: ${url3}`, "", "Results will land as a pull request when the remote session finishes. There is nothing to do here."].join(`
411171
411171
  `),
411172
411172
  mode: "task-notification"
411173
411173
  });
@@ -411221,10 +411221,10 @@ Session: ${url3}`,
411221
411221
  function buildLaunchMessage(disconnectedBridge) {
411222
411222
  const prefix = disconnectedBridge ? `${REMOTE_CONTROL_DISCONNECTED_MSG} ` : "";
411223
411223
  return `${DIAMOND_OPEN} ultraplan
411224
- ${prefix}Starting Claude Code on the web…`;
411224
+ ${prefix}Starting localclawd on the web…`;
411225
411225
  }
411226
411226
  function buildSessionReadyMessage(url3) {
411227
- return `${DIAMOND_OPEN} ultraplan · Monitor progress in Claude Code on the web ${url3}
411227
+ return `${DIAMOND_OPEN} ultraplan · Monitor progress in localclawd on the web ${url3}
411228
411228
  You can continue working — when the ${DIAMOND_OPEN} fills, press ↓ to view results`;
411229
411229
  }
411230
411230
  function buildAlreadyActiveMessage(url3) {
@@ -411277,7 +411277,7 @@ async function launchUltraplan2(opts) {
411277
411277
  "in your prompt",
411278
411278
  "",
411279
411279
  "Advanced multi-agent plan mode with our most powerful model",
411280
- "(Opus). Runs in Claude Code on the web. When the plan is ready,",
411280
+ "(Opus). Runs in localclawd on the web. When the plan is ready,",
411281
411281
  "you can execute it in the web session or send it back here.",
411282
411282
  "Terminal stays free while the remote plans.",
411283
411283
  "Requires /login.",
@@ -411460,7 +411460,7 @@ var init_ultraplan = __esm(() => {
411460
411460
  ultraplan_default = {
411461
411461
  type: "local-jsx",
411462
411462
  name: "ultraplan",
411463
- description: `~10–30 min · Claude Code on the web drafts an advanced plan you can edit and approve. See ${CCR_TERMS_URL2}`,
411463
+ description: `~10–30 min · localclawd on the web drafts an advanced plan you can edit and approve. See ${CCR_TERMS_URL2}`,
411464
411464
  argumentHint: "<prompt>",
411465
411465
  isEnabled: () => false,
411466
411466
  load: () => Promise.resolve({
@@ -413738,7 +413738,7 @@ var init_mappers = __esm(() => {
413738
413738
  // src/components/tasks/RemoteSessionDetailDialog.tsx
413739
413739
  function formatToolUseSummary(name, input) {
413740
413740
  if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
413741
- return "Review the plan in Claude Code on the web";
413741
+ return "Review the plan in localclawd on the web";
413742
413742
  }
413743
413743
  if (!input || typeof input !== "object")
413744
413744
  return name;
@@ -413852,7 +413852,7 @@ function UltraplanSessionDetail(t0) {
413852
413852
  if ($2[12] === Symbol.for("react.memo_cache_sentinel")) {
413853
413853
  t72 = /* @__PURE__ */ jsx_dev_runtime294.jsxDEV(ThemedText, {
413854
413854
  dimColor: true,
413855
- children: "This will terminate the Claude Code on the web session."
413855
+ children: "This will terminate the localclawd on the web session."
413856
413856
  }, undefined, false, undefined, this);
413857
413857
  $2[12] = t72;
413858
413858
  } else {
@@ -414063,7 +414063,7 @@ function UltraplanSessionDetail(t0) {
414063
414063
  let t19;
414064
414064
  if ($2[47] === Symbol.for("react.memo_cache_sentinel")) {
414065
414065
  t19 = {
414066
- label: "Review in Claude Code on the web",
414066
+ label: "Review in localclawd on the web",
414067
414067
  value: "open"
414068
414068
  };
414069
414069
  $2[47] = t19;
@@ -414395,13 +414395,13 @@ function ReviewSessionDetail(t0) {
414395
414395
  let t3;
414396
414396
  if ($2[11] !== completed || $2[12] !== onKill || $2[13] !== running) {
414397
414397
  t3 = completed ? [{
414398
- label: "Open in Claude Code on the web",
414398
+ label: "Open in localclawd on the web",
414399
414399
  value: "open"
414400
414400
  }, {
414401
414401
  label: "Dismiss",
414402
414402
  value: "dismiss"
414403
414403
  }] : [{
414404
- label: "Open in Claude Code on the web",
414404
+ label: "Open in localclawd on the web",
414405
414405
  value: "open"
414406
414406
  }, ...onKill && running ? [{
414407
414407
  label: "Stop ultrareview",
@@ -418813,9 +418813,9 @@ function PermissionRulesTab(t0) {
418813
418813
  let t8;
418814
418814
  if ($2[10] === Symbol.for("react.memo_cache_sentinel")) {
418815
418815
  t8 = {
418816
- allow: "Claude Code won't ask before using allowed tools.",
418817
- ask: "Claude Code will always ask for confirmation before using these tools.",
418818
- deny: "Claude Code will always reject requests to use denied tools."
418816
+ allow: "localclawd won't ask before using allowed tools.",
418817
+ ask: "localclawd will always ask for confirmation before using these tools.",
418818
+ deny: "localclawd will always reject requests to use denied tools."
418819
418819
  };
418820
418820
  $2[10] = t8;
418821
418821
  } else {
@@ -420732,7 +420732,7 @@ function GracePeriodContentBody() {
420732
420732
  t3,
420733
420733
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
420734
420734
  children: [
420735
- "— Allow the use of your chats and coding sessions to train and improve Anthropic AI models. Change anytime in your Privacy Settings (",
420735
+ "— Allow the use of your chats and coding sessions to help improve the service. Change anytime in your Privacy Settings (",
420736
420736
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420737
420737
  url: "https://claude.ai/settings/data-privacy-controls"
420738
420738
  }, undefined, false, undefined, this),
@@ -420851,7 +420851,7 @@ function PostGracePeriodContentBody() {
420851
420851
  children: "Help improve Claude"
420852
420852
  }, undefined, false, undefined, this),
420853
420853
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
420854
- children: "Allow the use of your chats and coding sessions to train and improve Anthropic AI models. You can change this anytime in Privacy Settings"
420854
+ children: "Allow the use of your chats and coding sessions to help improve the service. You can change this anytime in Privacy Settings"
420855
420855
  }, undefined, false, undefined, this),
420856
420856
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420857
420857
  url: "https://claude.ai/settings/data-privacy-controls"
@@ -421427,7 +421427,7 @@ async function call54(onDone) {
421427
421427
  }
421428
421428
  const updatedSettings = updatedSettingsResult.data;
421429
421429
  const groveStatus = updatedSettings.grove_enabled ? "true" : "false";
421430
- onDone(`"Help improve Claude" set to ${groveStatus}.`);
421430
+ onDone(`"Data sharing" set to ${groveStatus}.`);
421431
421431
  if (settings.grove_enabled !== null && settings.grove_enabled !== updatedSettings.grove_enabled) {
421432
421432
  logEvent("tengu_grove_policy_toggled", {
421433
421433
  state: updatedSettings.grove_enabled,
@@ -429791,7 +429791,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
429791
429791
  smapsRollup,
429792
429792
  platform: process.platform,
429793
429793
  nodeVersion: process.version,
429794
- ccVersion: "1.1.13"
429794
+ ccVersion: "1.1.15"
429795
429795
  };
429796
429796
  }
429797
429797
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -430376,7 +430376,7 @@ var init_bridge_kick = __esm(() => {
430376
430376
  var call64 = async () => {
430377
430377
  return {
430378
430378
  type: "text",
430379
- value: `${"1.1.13"} (built ${"2026-04-07T18:09:59.417Z"})`
430379
+ value: `${"1.1.15"} (built ${"2026-04-08T22:42:21.973Z"})`
430380
430380
  };
430381
430381
  }, version, version_default;
430382
430382
  var init_version = __esm(() => {
@@ -439314,7 +439314,7 @@ function generateHtmlReport(data, insights) {
439314
439314
  </html>`;
439315
439315
  }
439316
439316
  function buildExportData(data, insights, facets, remoteStats) {
439317
- const version2 = typeof MACRO !== "undefined" ? "1.1.13" : "unknown";
439317
+ const version2 = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
439318
439318
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
439319
439319
  const facets_summary = {
439320
439320
  total: facets.size,
@@ -443481,7 +443481,7 @@ var init_sessionStorage = __esm(() => {
443481
443481
  init_settings2();
443482
443482
  init_slowOperations();
443483
443483
  init_uuid();
443484
- VERSION6 = typeof MACRO !== "undefined" ? "1.1.13" : "unknown";
443484
+ VERSION6 = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
443485
443485
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
443486
443486
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
443487
443487
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -444683,7 +444683,7 @@ var init_filesystem = __esm(() => {
444683
444683
  });
444684
444684
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
444685
444685
  const nonce = randomBytes19(16).toString("hex");
444686
- return join130(getClaudeTempDir(), "bundled-skills", "1.1.13", nonce);
444686
+ return join130(getClaudeTempDir(), "bundled-skills", "1.1.15", nonce);
444687
444687
  });
444688
444688
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
444689
444689
  });
@@ -450682,7 +450682,7 @@ function computeFingerprint(messageText, version2) {
450682
450682
  }
450683
450683
  function computeFingerprintFromMessages(messages) {
450684
450684
  const firstMessageText = extractFirstMessageText(messages);
450685
- return computeFingerprint(firstMessageText, "1.1.13");
450685
+ return computeFingerprint(firstMessageText, "1.1.15");
450686
450686
  }
450687
450687
  var FINGERPRINT_SALT = "59cf53e54c78";
450688
450688
  var init_fingerprint = () => {};
@@ -452537,7 +452537,7 @@ async function sideQuery(opts) {
452537
452537
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
452538
452538
  }
452539
452539
  const messageText = extractFirstUserMessageText(messages);
452540
- const fingerprint = computeFingerprint(messageText, "1.1.13");
452540
+ const fingerprint = computeFingerprint(messageText, "1.1.15");
452541
452541
  const attributionHeader = getAttributionHeader(fingerprint);
452542
452542
  const systemBlocks = [
452543
452543
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -456691,7 +456691,7 @@ function CostThresholdDialog(t0) {
456691
456691
  let t4;
456692
456692
  if ($2[4] !== onDone || $2[5] !== t3) {
456693
456693
  t4 = /* @__PURE__ */ jsx_dev_runtime373.jsxDEV(Dialog, {
456694
- title: "You've spent $5 on the Anthropic API this session.",
456694
+ title: "You've spent $5 on API calls this session.",
456695
456695
  onCancel: onDone,
456696
456696
  children: [
456697
456697
  t1,
@@ -457335,7 +457335,7 @@ function buildSystemInitMessage(inputs) {
457335
457335
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
457336
457336
  apiKeySource: getAnthropicApiKeyWithSource().source,
457337
457337
  betas: getSdkBetas(),
457338
- claude_code_version: "1.1.13",
457338
+ claude_code_version: "1.1.15",
457339
457339
  output_style: outputStyle2,
457340
457340
  agents: inputs.agents.map((agent) => agent.agentType),
457341
457341
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -466227,7 +466227,7 @@ function buildPlanApprovalOptions({
466227
466227
  });
466228
466228
  if (showUltraplan) {
466229
466229
  options.push({
466230
- label: "No, refine with Ultraplan on Claude Code on the web",
466230
+ label: "No, refine with Ultraplan on localclawd on the web",
466231
466231
  value: "ultraplan"
466232
466232
  });
466233
466233
  }
@@ -469482,14 +469482,14 @@ function permissionComponentForTool(tool) {
469482
469482
  function getNotificationMessage(toolUseConfirm) {
469483
469483
  const toolName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input);
469484
469484
  if (toolUseConfirm.tool === ExitPlanModeV2Tool) {
469485
- return "Claude Code needs your approval for the plan";
469485
+ return "localclawd needs your approval for the plan";
469486
469486
  }
469487
469487
  if (toolUseConfirm.tool === EnterPlanModeTool) {
469488
- return "Claude Code wants to enter plan mode";
469488
+ return "localclawd wants to enter plan mode";
469489
469489
  }
469490
469490
  if (false) {}
469491
469491
  if (!toolName || toolName.trim() === "") {
469492
- return "Claude Code needs your attention";
469492
+ return "localclawd needs your attention";
469493
469493
  }
469494
469494
  return `Claude needs your permission to use ${toolName}`;
469495
469495
  }
@@ -470056,7 +470056,7 @@ function ElicitationFormDialog({
470056
470056
  const currentFieldIsText = currentField !== undefined && isTextField(currentField.schema) && !isEnumSchema(currentField.schema);
470057
470057
  const isEditingTextField = currentFieldIsText && !focusedButton;
470058
470058
  useRegisterOverlay("elicitation");
470059
- useNotifyAfterTimeout("Claude Code needs your input", "elicitation_dialog");
470059
+ useNotifyAfterTimeout("localclawd needs your input", "elicitation_dialog");
470060
470060
  const syncTextInput = import_react221.useCallback((fieldIndex) => {
470061
470061
  if (fieldIndex === undefined) {
470062
470062
  setTextInputValue("");
@@ -470907,7 +470907,7 @@ function ElicitationURLDialog({
470907
470907
  const phaseRef = import_react221.useRef("prompt");
470908
470908
  const [focusedButton, setFocusedButton] = import_react221.useState("accept");
470909
470909
  const showCancel = waitingState?.showCancel ?? false;
470910
- useNotifyAfterTimeout("Claude Code needs your input", "elicitation_url_dialog");
470910
+ useNotifyAfterTimeout("localclawd needs your input", "elicitation_url_dialog");
470911
470911
  useRegisterOverlay("elicitation-url");
470912
470912
  phaseRef.current = phase;
470913
470913
  const onWaitingDismissRef = import_react221.useRef(onWaitingDismiss);
@@ -471914,7 +471914,7 @@ var init_useVoiceEnabled = __esm(() => {
471914
471914
  function getSemverPart(version2) {
471915
471915
  return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
471916
471916
  }
471917
- function useUpdateNotification(updatedVersion, initialVersion = "1.1.13") {
471917
+ function useUpdateNotification(updatedVersion, initialVersion = "1.1.15") {
471918
471918
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
471919
471919
  if (!updatedVersion) {
471920
471920
  return null;
@@ -471954,7 +471954,7 @@ function AutoUpdater({
471954
471954
  return;
471955
471955
  }
471956
471956
  if (false) {}
471957
- const currentVersion = "1.1.13";
471957
+ const currentVersion = "1.1.15";
471958
471958
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
471959
471959
  let latestVersion = await getLatestVersion(channel);
471960
471960
  const isDisabled = isAutoUpdaterDisabled();
@@ -472165,12 +472165,12 @@ function NativeAutoUpdater({
472165
472165
  logEvent("tengu_native_auto_updater_start", {});
472166
472166
  try {
472167
472167
  const maxVersion = await getMaxVersion();
472168
- if (maxVersion && gt("1.1.13", maxVersion)) {
472168
+ if (maxVersion && gt("1.1.15", maxVersion)) {
472169
472169
  const msg = await getMaxVersionMessage();
472170
472170
  setMaxVersionIssue(msg ?? "affects your version");
472171
472171
  }
472172
472172
  const result = await installLatest(channel);
472173
- const currentVersion = "1.1.13";
472173
+ const currentVersion = "1.1.15";
472174
472174
  const latencyMs = Date.now() - startTime;
472175
472175
  if (result.lockFailed) {
472176
472176
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -472305,17 +472305,17 @@ function PackageManagerAutoUpdater(t0) {
472305
472305
  const maxVersion = await getMaxVersion();
472306
472306
  if (maxVersion && latest && gt(latest, maxVersion)) {
472307
472307
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
472308
- if (gte("1.1.13", maxVersion)) {
472309
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.13"} is already at or above maxVersion ${maxVersion}, skipping update`);
472308
+ if (gte("1.1.15", maxVersion)) {
472309
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.15"} is already at or above maxVersion ${maxVersion}, skipping update`);
472310
472310
  setUpdateAvailable(false);
472311
472311
  return;
472312
472312
  }
472313
472313
  latest = maxVersion;
472314
472314
  }
472315
- const hasUpdate = latest && !gte("1.1.13", latest) && !shouldSkipVersion(latest);
472315
+ const hasUpdate = latest && !gte("1.1.15", latest) && !shouldSkipVersion(latest);
472316
472316
  setUpdateAvailable(!!hasUpdate);
472317
472317
  if (hasUpdate) {
472318
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.13"} -> ${latest}`);
472318
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.15"} -> ${latest}`);
472319
472319
  }
472320
472320
  };
472321
472321
  $2[0] = t1;
@@ -472349,7 +472349,7 @@ function PackageManagerAutoUpdater(t0) {
472349
472349
  wrap: "truncate",
472350
472350
  children: [
472351
472351
  "currentVersion: ",
472352
- "1.1.13"
472352
+ "1.1.15"
472353
472353
  ]
472354
472354
  }, undefined, true, undefined, this);
472355
472355
  $2[3] = verbose;
@@ -479907,7 +479907,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
479907
479907
  project_dir: getOriginalCwd(),
479908
479908
  added_dirs: addedDirs
479909
479909
  },
479910
- version: "1.1.13",
479910
+ version: "1.1.15",
479911
479911
  output_style: {
479912
479912
  name: outputStyleName
479913
479913
  },
@@ -491467,7 +491467,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
491467
491467
  } catch {}
491468
491468
  const data = {
491469
491469
  trigger,
491470
- version: "1.1.13",
491470
+ version: "1.1.15",
491471
491471
  platform: process.platform,
491472
491472
  transcript,
491473
491473
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -492275,7 +492275,7 @@ function TranscriptSharePrompt(t0) {
492275
492275
  }, undefined, true, undefined, this),
492276
492276
  /* @__PURE__ */ jsx_dev_runtime455.jsxDEV(ThemedText, {
492277
492277
  bold: true,
492278
- children: "Can Anthropic look at your session transcript to help us improve Claude Code?"
492278
+ children: "Can we look at your session transcript to help improve localclawd?"
492279
492279
  }, undefined, false, undefined, this)
492280
492280
  ]
492281
492281
  }, undefined, true, undefined, this);
@@ -493211,7 +493211,7 @@ function DesktopUpsellStartup(t0) {
493211
493211
  let t3;
493212
493212
  if ($2[5] === Symbol.for("react.memo_cache_sentinel")) {
493213
493213
  t3 = {
493214
- label: "Open in Claude Code Desktop",
493214
+ label: "Open in localclawd desktop",
493215
493215
  value: "try"
493216
493216
  };
493217
493217
  $2[5] = t3;
@@ -493244,7 +493244,7 @@ function DesktopUpsellStartup(t0) {
493244
493244
  t6 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
493245
493245
  marginBottom: 1,
493246
493246
  children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedText, {
493247
- children: "Same Claude Code with visual diffs, live app preview, parallel sessions, and more."
493247
+ children: "Same localclawd with visual diffs, live app preview, parallel sessions, and more."
493248
493248
  }, undefined, false, undefined, this)
493249
493249
  }, undefined, false, undefined, this);
493250
493250
  $2[8] = t6;
@@ -493262,7 +493262,7 @@ function DesktopUpsellStartup(t0) {
493262
493262
  let t8;
493263
493263
  if ($2[11] !== handleSelect || $2[12] !== t7) {
493264
493264
  t8 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(PermissionDialog, {
493265
- title: "Try Claude Code Desktop",
493265
+ title: "Try localclawd desktop",
493266
493266
  children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
493267
493267
  flexDirection: "column",
493268
493268
  paddingX: 2,
@@ -503502,46 +503502,52 @@ async function showSetupScreens(root3, permissionMode, allowDangerouslySkipPermi
503502
503502
  resetGrowthBook();
503503
503503
  initializeGrowthBook();
503504
503504
  getSystemContext();
503505
- const {
503506
- errors: allErrors
503507
- } = getSettingsWithAllErrors();
503508
- if (allErrors.length === 0) {
503509
- await handleMcpjsonServerApprovals(root3);
503510
- }
503511
- if (await shouldShowClaudeMdExternalIncludesWarning()) {
503512
- const externalIncludes = getExternalClaudeMdIncludes(await getMemoryFiles(true));
503505
+ try {
503513
503506
  const {
503514
- ClaudeMdExternalIncludesDialog: ClaudeMdExternalIncludesDialog2
503515
- } = await Promise.resolve().then(() => (init_ClaudeMdExternalIncludesDialog(), exports_ClaudeMdExternalIncludesDialog));
503516
- await showDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(AppStateProvider, {
503517
- onChangeAppState,
503518
- children: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ClaudeMdExternalIncludesDialog2, {
503519
- onDone: done,
503520
- isStandaloneDialog: true,
503521
- externalIncludes
503522
- }, undefined, false, undefined, this)
503523
- }, undefined, false, undefined, this));
503524
- }
503507
+ errors: allErrors
503508
+ } = getSettingsWithAllErrors();
503509
+ if (allErrors.length === 0) {
503510
+ await handleMcpjsonServerApprovals(root3);
503511
+ }
503512
+ } catch {}
503513
+ try {
503514
+ if (await shouldShowClaudeMdExternalIncludesWarning()) {
503515
+ const externalIncludes = getExternalClaudeMdIncludes(await getMemoryFiles(true));
503516
+ const {
503517
+ ClaudeMdExternalIncludesDialog: ClaudeMdExternalIncludesDialog2
503518
+ } = await Promise.resolve().then(() => (init_ClaudeMdExternalIncludesDialog(), exports_ClaudeMdExternalIncludesDialog));
503519
+ await showDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(AppStateProvider, {
503520
+ onChangeAppState,
503521
+ children: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ClaudeMdExternalIncludesDialog2, {
503522
+ onDone: done,
503523
+ isStandaloneDialog: true,
503524
+ externalIncludes
503525
+ }, undefined, false, undefined, this)
503526
+ }, undefined, false, undefined, this));
503527
+ }
503528
+ } catch {}
503525
503529
  }
503526
503530
  updateGithubRepoPathMapping();
503527
503531
  if (false) {}
503528
503532
  applyConfigEnvironmentVariables();
503529
503533
  setImmediate(() => initializeTelemetryAfterTrust());
503530
- if (await isQualifiedForGrove()) {
503531
- const {
503532
- GroveDialog: GroveDialog2
503533
- } = await Promise.resolve().then(() => (init_Grove(), exports_Grove));
503534
- const decision = await showSetupDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(GroveDialog2, {
503535
- showIfAlreadyViewed: false,
503536
- location: onboardingShown ? "onboarding" : "policy_update_modal",
503537
- onDone: done
503538
- }, undefined, false, undefined, this));
503539
- if (decision === "escape") {
503540
- logEvent("tengu_grove_policy_exited", {});
503541
- gracefulShutdownSync(0);
503542
- return false;
503534
+ try {
503535
+ if (await isQualifiedForGrove()) {
503536
+ const {
503537
+ GroveDialog: GroveDialog2
503538
+ } = await Promise.resolve().then(() => (init_Grove(), exports_Grove));
503539
+ const decision = await showSetupDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(GroveDialog2, {
503540
+ showIfAlreadyViewed: false,
503541
+ location: onboardingShown ? "onboarding" : "policy_update_modal",
503542
+ onDone: done
503543
+ }, undefined, false, undefined, this));
503544
+ if (decision === "escape") {
503545
+ logEvent("tengu_grove_policy_exited", {});
503546
+ gracefulShutdownSync(0);
503547
+ return false;
503548
+ }
503543
503549
  }
503544
- }
503550
+ } catch {}
503545
503551
  if ((permissionMode === "bypassPermissions" || allowDangerouslySkipPermissions) && !hasSkipDangerousModePermissionPrompt()) {
503546
503552
  const {
503547
503553
  BypassPermissionsModeDialog: BypassPermissionsModeDialog2
@@ -507185,7 +507191,7 @@ function cliOk(msg) {
507185
507191
 
507186
507192
  // src/commands/mcp/addCommand.ts
507187
507193
  function registerMcpAddCommand(mcp2) {
507188
- mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to Claude Code.
507194
+ mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to localclawd.
507189
507195
 
507190
507196
  ` + `Examples:
507191
507197
  ` + ` # Add HTTP server:
@@ -507924,7 +507930,7 @@ function appendToLog(path17, message) {
507924
507930
  cwd: getFsImplementation().cwd(),
507925
507931
  userType: process.env.USER_TYPE,
507926
507932
  sessionId: getSessionId(),
507927
- version: "1.1.13"
507933
+ version: "1.1.15"
507928
507934
  };
507929
507935
  getLogWriter(path17).write(messageWithTimestamp);
507930
507936
  }
@@ -511924,8 +511930,8 @@ async function getEnvLessBridgeConfig() {
511924
511930
  }
511925
511931
  async function checkEnvLessBridgeMinVersion() {
511926
511932
  const cfg = await getEnvLessBridgeConfig();
511927
- if (cfg.min_version && lt("1.1.13", cfg.min_version)) {
511928
- return `Your version of localclawd (${"1.1.13"}) is too old for Remote Control.
511933
+ if (cfg.min_version && lt("1.1.15", cfg.min_version)) {
511934
+ return `Your version of localclawd (${"1.1.15"}) is too old for Remote Control.
511929
511935
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
511930
511936
  }
511931
511937
  return null;
@@ -512397,7 +512403,7 @@ async function initBridgeCore(params) {
512397
512403
  const rawApi = createBridgeApiClient({
512398
512404
  baseUrl,
512399
512405
  getAccessToken,
512400
- runnerVersion: "1.1.13",
512406
+ runnerVersion: "1.1.15",
512401
512407
  onDebug: logForDebugging,
512402
512408
  onAuth401,
512403
512409
  getTrustedDeviceToken
@@ -518053,7 +518059,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
518053
518059
  setCwd(cwd3);
518054
518060
  const server = new Server({
518055
518061
  name: "claude/tengu",
518056
- version: "1.1.13"
518062
+ version: "1.1.15"
518057
518063
  }, {
518058
518064
  capabilities: {
518059
518065
  tools: {}
@@ -519134,7 +519140,7 @@ function WelcomeV2() {
519134
519140
  dimColor: true,
519135
519141
  children: [
519136
519142
  "v",
519137
- "1.1.13"
519143
+ "1.1.15"
519138
519144
  ]
519139
519145
  }, undefined, true, undefined, this)
519140
519146
  ]
@@ -519554,7 +519560,7 @@ async function setupTokenHandler(root3) {
519554
519560
  resolve40();
519555
519561
  },
519556
519562
  mode: "setup-token",
519557
- startingMessage: "This will guide you through long-lived (1-year) auth token setup for your Claude account. Claude subscription required."
519563
+ startingMessage: "This will guide you through long-lived (1-year) auth token setup."
519558
519564
  }, undefined, false, undefined, this)
519559
519565
  ]
519560
519566
  }, undefined, true, undefined, this)
@@ -519703,7 +519709,7 @@ __export(exports_update, {
519703
519709
  });
519704
519710
  async function update() {
519705
519711
  logEvent("tengu_update_check", {});
519706
- writeToStdout(`Current version: ${"1.1.13"}
519712
+ writeToStdout(`Current version: ${"1.1.15"}
519707
519713
  `);
519708
519714
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
519709
519715
  writeToStdout(`Checking for updates to ${channel} version...
@@ -519778,8 +519784,8 @@ async function update() {
519778
519784
  writeToStdout(`localclawd is managed by Homebrew.
519779
519785
  `);
519780
519786
  const latest = await getLatestVersion(channel);
519781
- if (latest && !gte("1.1.13", latest)) {
519782
- writeToStdout(`Update available: ${"1.1.13"} → ${latest}
519787
+ if (latest && !gte("1.1.15", latest)) {
519788
+ writeToStdout(`Update available: ${"1.1.15"} → ${latest}
519783
519789
  `);
519784
519790
  writeToStdout(`
519785
519791
  `);
@@ -519795,8 +519801,8 @@ async function update() {
519795
519801
  writeToStdout(`localclawd is managed by winget.
519796
519802
  `);
519797
519803
  const latest = await getLatestVersion(channel);
519798
- if (latest && !gte("1.1.13", latest)) {
519799
- writeToStdout(`Update available: ${"1.1.13"} → ${latest}
519804
+ if (latest && !gte("1.1.15", latest)) {
519805
+ writeToStdout(`Update available: ${"1.1.15"} → ${latest}
519800
519806
  `);
519801
519807
  writeToStdout(`
519802
519808
  `);
@@ -519810,8 +519816,8 @@ async function update() {
519810
519816
  writeToStdout(`localclawd is managed by apk.
519811
519817
  `);
519812
519818
  const latest = await getLatestVersion(channel);
519813
- if (latest && !gte("1.1.13", latest)) {
519814
- writeToStdout(`Update available: ${"1.1.13"} → ${latest}
519819
+ if (latest && !gte("1.1.15", latest)) {
519820
+ writeToStdout(`Update available: ${"1.1.15"} → ${latest}
519815
519821
  `);
519816
519822
  writeToStdout(`
519817
519823
  `);
@@ -519876,11 +519882,11 @@ async function update() {
519876
519882
  `);
519877
519883
  await gracefulShutdown(1);
519878
519884
  }
519879
- if (result.latestVersion === "1.1.13") {
519880
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.13"})`) + `
519885
+ if (result.latestVersion === "1.1.15") {
519886
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.15"})`) + `
519881
519887
  `);
519882
519888
  } else {
519883
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.13"} to version ${result.latestVersion}`) + `
519889
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.15"} to version ${result.latestVersion}`) + `
519884
519890
  `);
519885
519891
  await regenerateCompletionCache();
519886
519892
  }
@@ -519940,12 +519946,12 @@ async function update() {
519940
519946
  `);
519941
519947
  await gracefulShutdown(1);
519942
519948
  }
519943
- if (latestVersion === "1.1.13") {
519944
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.13"})`) + `
519949
+ if (latestVersion === "1.1.15") {
519950
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.15"})`) + `
519945
519951
  `);
519946
519952
  await gracefulShutdown(0);
519947
519953
  }
519948
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.13"})
519954
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.15"})
519949
519955
  `);
519950
519956
  writeToStdout(`Installing update...
519951
519957
  `);
@@ -519990,7 +519996,7 @@ async function update() {
519990
519996
  logForDebugging(`update: Installation status: ${status2}`);
519991
519997
  switch (status2) {
519992
519998
  case "success":
519993
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.13"} to version ${latestVersion}`) + `
519999
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.15"} to version ${latestVersion}`) + `
519994
520000
  `);
519995
520001
  await regenerateCompletionCache();
519996
520002
  break;
@@ -521099,14 +521105,33 @@ ${customInstructions}` : customInstructions;
521099
521105
  } = await Promise.resolve().then(() => (init_ink2(), exports_ink));
521100
521106
  logForDebugging("[STARTUP] Ink root module imported");
521101
521107
  startupLoadingIndicator?.stop();
521102
- root3 = await createRoot3(ctx2.renderOptions);
521108
+ try {
521109
+ root3 = await createRoot3(ctx2.renderOptions);
521110
+ } catch (err2) {
521111
+ const msg = err2 instanceof Error ? err2.message : String(err2);
521112
+ process.stderr.write(`
521113
+ localclawd: failed to initialize terminal — ${msg}
521114
+ If using VSCode, open a new terminal with Ctrl+\` and try again.
521115
+ `);
521116
+ process.exit(1);
521117
+ }
521103
521118
  logForDebugging("[STARTUP] Ink root created");
521104
521119
  logEvent("tengu_timer", {
521105
521120
  event: "startup",
521106
521121
  durationMs: Math.round(process.uptime() * 1000)
521107
521122
  });
521108
521123
  const setupScreensStart = Date.now();
521109
- const onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands2, enableClaudeInChrome, devChannels);
521124
+ let onboardingShown;
521125
+ try {
521126
+ onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands2, enableClaudeInChrome, devChannels);
521127
+ } catch (err2) {
521128
+ const msg = err2 instanceof Error ? err2.message : String(err2);
521129
+ process.stderr.write(`
521130
+ localclawd: startup error — ${msg}
521131
+ Run with --debug for more details.
521132
+ `);
521133
+ process.exit(1);
521134
+ }
521110
521135
  if (false) {}
521111
521136
  if (false) {}
521112
521137
  if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
@@ -521255,7 +521280,7 @@ ${customInstructions}` : customInstructions;
521255
521280
  }
521256
521281
  }
521257
521282
  logForDiagnosticsNoPII("info", "started", {
521258
- version: "1.1.13",
521283
+ version: "1.1.15",
521259
521284
  is_native_binary: isInBundledMode()
521260
521285
  });
521261
521286
  registerCleanup(async () => {
@@ -522039,7 +522064,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522039
522064
  pendingHookMessages
522040
522065
  }, renderAndRun);
522041
522066
  }
522042
- }).version("1.1.13 (localClawd)", "-v, --version", "Output the version number");
522067
+ }).version("1.1.15 (localClawd)", "-v, --version", "Output the version number");
522043
522068
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
522044
522069
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
522045
522070
  if (canUserConfigureAdvisor()) {
@@ -522130,8 +522155,8 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522130
522155
  if (false) {}
522131
522156
  if (false) {}
522132
522157
  if (false) {}
522133
- const auth2 = program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
522134
- auth2.command("login").description("Sign in to your Anthropic account").option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Anthropic Console (API usage billing) instead of Claude subscription").option("--claudeai", "Use Claude subscription (default)").action(async ({
522158
+ const auth2 = program2.command("auth").description("Manage API authentication").hideHelp().configureHelp(createSortedHelpConfig());
522159
+ auth2.command("login").description("Sign in (API key users)").hideHelp().option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Console (API usage billing)").option("--claudeai", "Use subscription (default)").action(async ({
522135
522160
  email,
522136
522161
  sso,
522137
522162
  console: useConsole,
@@ -522153,7 +522178,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522153
522178
  } = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
522154
522179
  await authStatus2(opts);
522155
522180
  });
522156
- auth2.command("logout").description("Log out from your Anthropic account").action(async () => {
522181
+ auth2.command("logout").description("Sign out").action(async () => {
522157
522182
  const {
522158
522183
  authLogout: authLogout2
522159
522184
  } = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
@@ -522547,7 +522572,7 @@ if (false) {}
522547
522572
  async function main2() {
522548
522573
  const args = process.argv.slice(2);
522549
522574
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
522550
- console.log(`${"1.1.13"} (localclawd)`);
522575
+ console.log(`${"1.1.15"} (localclawd)`);
522551
522576
  return;
522552
522577
  }
522553
522578
  const {
@@ -522629,6 +522654,19 @@ async function main2() {
522629
522654
  await cliMain();
522630
522655
  profileCheckpoint2("cli_after_main_complete");
522631
522656
  }
522632
- main2();
522657
+ process.on("unhandledRejection", (reason) => {
522658
+ const msg = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
522659
+ process.stderr.write(`
522660
+ localclawd: unhandled error — ${msg}
522661
+ `);
522662
+ process.exit(1);
522663
+ });
522664
+ main2().catch((err2) => {
522665
+ const msg = err2 instanceof Error ? err2.stack ?? err2.message : String(err2);
522666
+ process.stderr.write(`
522667
+ localclawd crashed: ${msg}
522668
+ `);
522669
+ process.exit(1);
522670
+ });
522633
522671
 
522634
- //# debugId=DADB345C47F11DBA64756E2164756E21
522672
+ //# debugId=EE921B1E2788116364756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",