localclawd 1.1.14 → 1.1.16

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 +19 -9
  2. package/dist/cli.mjs +216 -232
  3. package/package.json +1 -1
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.14"}`;
89230
+ return `claude-code/${"1.1.16"}`;
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.14"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89252
+ return `claude-cli/${"1.1.16"} (${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.14"}${suffix}`;
89266
+ return `claude-code/${"1.1.16"}${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.14"}.${fingerprint}`;
99175
+ const version = `${"1.1.16"}.${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.14".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132722
+ const match = "1.1.16".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.14",
132762
+ version: "1.1.16",
132763
132763
  versionBase: getVersionBase(),
132764
- buildTime: "2026-04-07T18:27:17.273Z",
132764
+ buildTime: "2026-04-08T22:59:48.602Z",
132765
132765
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
132766
132766
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
132767
132767
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -154097,7 +154097,7 @@ function getSSLErrorHint(error5) {
154097
154097
  if (!details?.isSSLError) {
154098
154098
  return null;
154099
154099
  }
154100
- return `SSL certificate error (${details.code}). If you are behind a corporate proxy or TLS-intercepting firewall, set NODE_EXTRA_CA_CERTS to your CA bundle path, or ask IT to allowlist *.anthropic.com. Run /doctor for details.`;
154100
+ return `SSL certificate error (${details.code}). If you are behind a corporate proxy or TLS-intercepting firewall, set NODE_EXTRA_CA_CERTS to your CA bundle path. Run /doctor for details.`;
154101
154101
  }
154102
154102
  function sanitizeMessageHTML(message) {
154103
154103
  if (message.includes("<!DOCTYPE html") || message.includes("<html")) {
@@ -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.14";
197351
+ attributes["app.version"] = "1.1.16";
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.14";
229412
+ return "1.1.16";
229413
229413
  }
229414
229414
  async function getInstalledVSCodeExtensionVersion(command) {
229415
229415
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -235009,10 +235009,10 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
235009
235009
  const results = await Promise.allSettled(Object.entries(sdkMcpConfigs).map(async ([name, config]) => {
235010
235010
  const transport = new SdkControlClientTransport(name, sendMcpMessage);
235011
235011
  const client4 = new Client({
235012
- name: "claude-code",
235013
- title: "Claude Code",
235014
- version: "1.1.14",
235015
- description: "Anthropic's agentic coding tool",
235012
+ name: "localclawd",
235013
+ title: "localclawd",
235014
+ version: "1.1.16",
235015
+ description: "local-first AI coding tool",
235016
235016
  websiteUrl: PRODUCT_URL
235017
235017
  }, {
235018
235018
  capabilities: {}
@@ -235362,10 +235362,10 @@ var init_client9 = __esm(() => {
235362
235362
  }
235363
235363
  }
235364
235364
  const client4 = new Client({
235365
- name: "claude-code",
235366
- title: "Claude Code",
235367
- version: "1.1.14",
235368
- description: "Anthropic's agentic coding tool",
235365
+ name: "localclawd",
235366
+ title: "localclawd",
235367
+ version: "1.1.16",
235368
+ description: "local-first AI coding tool",
235369
235369
  websiteUrl: PRODUCT_URL
235370
235370
  }, {
235371
235371
  capabilities: {
@@ -253970,6 +253970,7 @@ async function updateGroveSettings(groveEnabled) {
253970
253970
  }
253971
253971
  }
253972
253972
  async function isQualifiedForGrove() {
253973
+ return false;
253973
253974
  if (!isConsumerSubscriber()) {
253974
253975
  return false;
253975
253976
  }
@@ -257637,7 +257638,7 @@ function ManagedSettingsSecurityDialog(t0) {
257637
257638
  label: "Yes, I trust these settings",
257638
257639
  value: "accept"
257639
257640
  }, {
257640
- label: "No, exit Claude Code",
257641
+ label: "No, exit localclawd",
257641
257642
  value: "exit"
257642
257643
  }];
257643
257644
  $2[11] = t15;
@@ -258555,7 +258556,7 @@ var init_user = __esm(() => {
258555
258556
  deviceId,
258556
258557
  sessionId: getSessionId(),
258557
258558
  email: getEmail(),
258558
- appVersion: "1.1.14",
258559
+ appVersion: "1.1.16",
258559
258560
  platform: getHostPlatformForAnalytics(),
258560
258561
  organizationUuid,
258561
258562
  accountUuid,
@@ -259879,7 +259880,7 @@ async function initializeBetaTracing(resource) {
259879
259880
  });
259880
259881
  logs.setGlobalLoggerProvider(loggerProvider);
259881
259882
  setLoggerProvider(loggerProvider);
259882
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.14");
259883
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.16");
259883
259884
  setEventLogger(eventLogger);
259884
259885
  process.on("beforeExit", async () => {
259885
259886
  await loggerProvider?.forceFlush();
@@ -259919,7 +259920,7 @@ async function initializeTelemetry() {
259919
259920
  const platform3 = getPlatform();
259920
259921
  const baseAttributes = {
259921
259922
  [ATTR_SERVICE_NAME5]: "claude-code",
259922
- [ATTR_SERVICE_VERSION5]: "1.1.14"
259923
+ [ATTR_SERVICE_VERSION5]: "1.1.16"
259923
259924
  };
259924
259925
  if (platform3 === "wsl") {
259925
259926
  const wslVersion = getWslVersion();
@@ -259964,7 +259965,7 @@ async function initializeTelemetry() {
259964
259965
  } catch {}
259965
259966
  };
259966
259967
  registerCleanup(shutdownTelemetry2);
259967
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.14");
259968
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.16");
259968
259969
  }
259969
259970
  const meterProvider = new MeterProvider5({
259970
259971
  resource,
@@ -259984,7 +259985,7 @@ async function initializeTelemetry() {
259984
259985
  });
259985
259986
  logs.setGlobalLoggerProvider(loggerProvider);
259986
259987
  setLoggerProvider(loggerProvider);
259987
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.14");
259988
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.16");
259988
259989
  setEventLogger(eventLogger);
259989
259990
  logForDebugging("[3P telemetry] Event logger set successfully");
259990
259991
  process.on("beforeExit", async () => {
@@ -260046,7 +260047,7 @@ Current timeout: ${timeoutMs}ms
260046
260047
  }
260047
260048
  };
260048
260049
  registerCleanup(shutdownTelemetry);
260049
- return meterProvider.getMeter("com.anthropic.claude_code", "1.1.14");
260050
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.1.16");
260050
260051
  }
260051
260052
  async function flushTelemetry() {
260052
260053
  const meterProvider = getMeterProvider();
@@ -260211,7 +260212,7 @@ async function call3() {
260211
260212
  clearOnboarding: true
260212
260213
  });
260213
260214
  const message = /* @__PURE__ */ jsx_dev_runtime102.jsxDEV(ThemedText, {
260214
- children: "Successfully logged out from your Anthropic account."
260215
+ children: "Successfully signed out."
260215
260216
  }, undefined, false, undefined, this);
260216
260217
  setTimeout(() => {
260217
260218
  gracefulShutdownSync(0, "logout");
@@ -261269,7 +261270,7 @@ function detectLinuxGlobPatternWarnings() {
261269
261270
  }
261270
261271
  async function getDoctorDiagnostic() {
261271
261272
  const installationType = await getCurrentInstallationType();
261272
- const version = typeof MACRO !== "undefined" ? "1.1.14" : "unknown";
261273
+ const version = typeof MACRO !== "undefined" ? "1.1.16" : "unknown";
261273
261274
  const installationPath = await getInstallationPath();
261274
261275
  const invokedBinary = getInvokedBinary();
261275
261276
  const multipleInstallations = await detectMultipleInstallations();
@@ -262210,8 +262211,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262210
262211
  const maxVersion = await getMaxVersion();
262211
262212
  if (maxVersion && gt(version, maxVersion)) {
262212
262213
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
262213
- if (gte("1.1.14", maxVersion)) {
262214
- logForDebugging(`Native installer: current version ${"1.1.14"} is already at or above maxVersion ${maxVersion}, skipping update`);
262214
+ if (gte("1.1.16", maxVersion)) {
262215
+ logForDebugging(`Native installer: current version ${"1.1.16"} is already at or above maxVersion ${maxVersion}, skipping update`);
262215
262216
  logEvent("tengu_native_update_skipped_max_version", {
262216
262217
  latency_ms: Date.now() - startTime,
262217
262218
  max_version: maxVersion,
@@ -262222,7 +262223,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262222
262223
  version = maxVersion;
262223
262224
  }
262224
262225
  }
262225
- if (!forceReinstall && version === "1.1.14" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262226
+ if (!forceReinstall && version === "1.1.16" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262226
262227
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
262227
262228
  logEvent("tengu_native_update_complete", {
262228
262229
  latency_ms: Date.now() - startTime,
@@ -271233,11 +271234,11 @@ function TeleportError(t0) {
271233
271234
  children: [
271234
271235
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
271235
271236
  dimColor: true,
271236
- children: "Teleport requires a Claude.ai account."
271237
+ children: "Teleport requires an account."
271237
271238
  }, undefined, false, undefined, this),
271238
271239
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
271239
271240
  dimColor: true,
271240
- children: "Your Claude Pro/Max subscription will be used by Claude Code."
271241
+ children: "Your subscription will be used by localclawd."
271241
271242
  }, undefined, false, undefined, this)
271242
271243
  ]
271243
271244
  }, undefined, true, undefined, this);
@@ -271248,13 +271249,13 @@ function TeleportError(t0) {
271248
271249
  let t10;
271249
271250
  if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
271250
271251
  t10 = /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Dialog, {
271251
- title: "Log in to Claude",
271252
+ title: "Log in",
271252
271253
  onCancel,
271253
271254
  children: [
271254
271255
  t9,
271255
271256
  /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Select, {
271256
271257
  options: [{
271257
- label: "Login with Claude account",
271258
+ label: "Log in",
271258
271259
  value: "login"
271259
271260
  }, {
271260
271261
  label: "Exit",
@@ -334442,7 +334443,7 @@ function getAnthropicEnvMetadata() {
334442
334443
  function getBuildAgeMinutes() {
334443
334444
  if (false)
334444
334445
  ;
334445
- const buildTime = new Date("2026-04-07T18:27:17.273Z").getTime();
334446
+ const buildTime = new Date("2026-04-08T22:59:48.602Z").getTime();
334446
334447
  if (isNaN(buildTime))
334447
334448
  return;
334448
334449
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -350853,7 +350854,7 @@ function getAssistantMessageFromError(error5, model, options) {
350853
350854
  });
350854
350855
  }
350855
350856
  if (error5.message.includes("Extra usage is required for long context")) {
350856
- const hint = getIsNonInteractiveSession() ? "enable extra usage at claude.ai/settings/usage, or use --model to switch to standard context" : "run /extra-usage to enable, or /model to switch to standard context";
350857
+ const hint = getIsNonInteractiveSession() ? "use --model to switch to a standard-context model" : "run /model to switch to a standard-context model";
350857
350858
  return createAssistantAPIErrorMessage({
350858
350859
  content: `${API_ERROR_MESSAGE_PREFIX}: Extra usage is required for 1M context · ${hint}`,
350859
350860
  error: "rate_limit"
@@ -350863,7 +350864,7 @@ function getAssistantMessageFromError(error5, model, options) {
350863
350864
  const innerMessage = stripped.match(/"message"\s*:\s*"([^"]*)"/)?.[1];
350864
350865
  const detail = innerMessage || stripped;
350865
350866
  return createAssistantAPIErrorMessage({
350866
- content: `${API_ERROR_MESSAGE_PREFIX}: Request rejected (429) · ${detail || "this may be a temporary capacity issue — check status.anthropic.com"}`,
350867
+ content: `${API_ERROR_MESSAGE_PREFIX}: Request rejected (429) · ${detail || "this may be a temporary capacity issue — check your backend status"}`,
350867
350868
  error: "rate_limit"
350868
350869
  });
350869
350870
  }
@@ -351174,7 +351175,7 @@ function getErrorMessageIfRefusal(stopReason, model) {
351174
351175
  return;
351175
351176
  }
351176
351177
  logEvent("tengu_refusal_api_response", {});
351177
- const baseMessage = getIsNonInteractiveSession() ? `${API_ERROR_MESSAGE_PREFIX}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Try rephrasing the request or attempting a different approach.` : `${API_ERROR_MESSAGE_PREFIX}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Please double press esc to edit your last message or start a new session for Claude Code to assist with a different task.`;
351178
+ const baseMessage = getIsNonInteractiveSession() ? `${API_ERROR_MESSAGE_PREFIX}: localclawd is unable to respond to this request. Try rephrasing the request or attempting a different approach.` : `${API_ERROR_MESSAGE_PREFIX}: localclawd is unable to respond to this request. Please double press esc to edit your last message or start a new session.`;
351178
351179
  const modelSuggestion = model !== "claude-sonnet-4-20250514" ? " If you are seeing this refusal repeatedly, try running /model claude-sonnet-4-20250514 to switch models." : "";
351179
351180
  return createAssistantAPIErrorMessage({
351180
351181
  content: baseMessage + modelSuggestion,
@@ -357262,7 +357263,7 @@ function PermissionDescription() {
357262
357263
  if ($2[0] === Symbol.for("react.memo_cache_sentinel")) {
357263
357264
  t0 = /* @__PURE__ */ jsx_dev_runtime158.jsxDEV(ThemedText, {
357264
357265
  dimColor: true,
357265
- children: "Claude Code will be able to read files in this directory and make edits when auto-accept edits is on."
357266
+ children: "localclawd will be able to read files in this directory and make edits when auto-accept edits is on."
357266
357267
  }, undefined, false, undefined, this);
357267
357268
  $2[0] = t0;
357268
357269
  } else {
@@ -358508,7 +358509,7 @@ function Feedback({
358508
358509
  platform: env4.platform,
358509
358510
  gitRepo: envInfo.isGit,
358510
358511
  terminal: env4.terminal,
358511
- version: "1.1.14",
358512
+ version: "1.1.16",
358512
358513
  transcript: normalizeMessagesForAPI(messages),
358513
358514
  errors: sanitizedErrors,
358514
358515
  lastApiRequest: getLastAPIRequest(),
@@ -358700,7 +358701,7 @@ function Feedback({
358700
358701
  ", ",
358701
358702
  env4.terminal,
358702
358703
  ", v",
358703
- "1.1.14"
358704
+ "1.1.16"
358704
358705
  ]
358705
358706
  }, undefined, true, undefined, this)
358706
358707
  ]
@@ -358734,7 +358735,7 @@ function Feedback({
358734
358735
  children: [
358735
358736
  "We will use your feedback to debug related issues or to improve",
358736
358737
  " ",
358737
- "Claude Code's functionality (eg. to reduce the risk of bugs occurring in the future)."
358738
+ "localclawd's functionality (eg. to reduce the risk of bugs occurring in the future)."
358738
358739
  ]
358739
358740
  }, undefined, true, undefined, this)
358740
358741
  }, undefined, false, undefined, this),
@@ -358806,7 +358807,7 @@ ${sanitizedDescription}
358806
358807
  ` + `**Environment Info**
358807
358808
  ` + `- Platform: ${env4.platform}
358808
358809
  ` + `- Terminal: ${env4.terminal}
358809
- ` + `- Version: ${"1.1.14"}
358810
+ ` + `- Version: ${"1.1.16"}
358810
358811
  ` + `- Feedback ID: ${feedbackId}
358811
358812
  ` + `
358812
358813
  **Errors**
@@ -358855,7 +358856,7 @@ ${sanitizedDescription}
358855
358856
  async function generateTitle(description, abortSignal) {
358856
358857
  try {
358857
358858
  const response = await queryHaiku({
358858
- systemPrompt: asSystemPrompt(["Generate a concise, technical issue title (max 80 chars) for a public GitHub issue based on this bug report for Claude Code.", "Claude Code is an agentic coding CLI based on the Anthropic API.", "The title should:", "- Include the type of issue [Bug] or [Feature Request] as the first thing in the title", "- Be concise, specific and descriptive of the actual problem", "- Use technical terminology appropriate for a software issue", '- For error messages, extract the key error (e.g., "Missing Tool Result Block" rather than the full message)', "- Be direct and clear for developers to understand the problem", '- If you cannot determine a clear issue, use "Bug Report: [brief description]"', "- Any LLM API errors are from the Anthropic API, not from any other model provider", "Your response will be directly used as the title of the Github issue, and as such should not contain any other commentary or explaination", 'Examples of good titles include: "[Bug] Auto-Compact triggers to soon", "[Bug] Anthropic API Error: Missing Tool Result Block", "[Bug] Error: Invalid Model Name for Opus"']),
358859
+ systemPrompt: asSystemPrompt(["Generate a concise, technical issue title (max 80 chars) for a public GitHub issue based on this bug report for localclawd.", "localclawd is a local-first agentic coding CLI.", "The title should:", "- Include the type of issue [Bug] or [Feature Request] as the first thing in the title", "- Be concise, specific and descriptive of the actual problem", "- Use technical terminology appropriate for a software issue", '- For error messages, extract the key error (e.g., "Missing Tool Result Block" rather than the full message)', "- Be direct and clear for developers to understand the problem", '- If you cannot determine a clear issue, use "Bug Report: [brief description]"', "Your response will be directly used as the title of the Github issue, and as such should not contain any other commentary or explaination", 'Examples of good titles include: "[Bug] Auto-Compact triggers too soon", "[Bug] API Error: Missing Tool Result Block", "[Bug] Error: Invalid Model Name"']),
358859
358860
  userPrompt: description,
358860
358861
  signal: abortSignal,
358861
358862
  options: {
@@ -361055,12 +361056,12 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361055
361056
  setState("checking");
361056
361057
  const installStatus = await getDesktopInstallStatus();
361057
361058
  if (installStatus.status === "not-installed") {
361058
- setDownloadMessage("Claude Desktop is not installed.");
361059
+ setDownloadMessage("Desktop app is not installed.");
361059
361060
  setState("prompt-download");
361060
361061
  return;
361061
361062
  }
361062
361063
  if (installStatus.status === "version-too-old") {
361063
- setDownloadMessage(`Claude Desktop needs to be updated (found v${installStatus.version}, need v1.1.2396+).`);
361064
+ setDownloadMessage(`localclawd desktop needs to be updated (found v${installStatus.version}, need v1.1.2396+).`);
361064
361065
  setState("prompt-download");
361065
361066
  return;
361066
361067
  }
@@ -361069,7 +361070,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361069
361070
  setState("opening");
361070
361071
  const result = await openCurrentSessionInDesktop();
361071
361072
  if (!result.success) {
361072
- setError(result.error ?? "Failed to open Claude Desktop");
361073
+ setError(result.error ?? "Failed to open desktop app");
361073
361074
  setState("error");
361074
361075
  return;
361075
361076
  }
@@ -361172,10 +361173,10 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361172
361173
  let t4;
361173
361174
  if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
361174
361175
  t4 = {
361175
- checking: "Checking for Claude Desktop…",
361176
+ checking: "Checking for localclawd desktop…",
361176
361177
  flushing: "Saving session…",
361177
- opening: "Opening Claude Desktop…",
361178
- success: "Opening in Claude Desktop…"
361178
+ opening: "Opening localclawd desktop…",
361179
+ success: "Opening in localclawd desktop…"
361179
361180
  };
361180
361181
  $2[17] = t4;
361181
361182
  } else {
@@ -361196,7 +361197,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
361196
361197
  return t6;
361197
361198
  }
361198
361199
  async function _temp214(onDone_0) {
361199
- onDone_0("Session transferred to Claude Desktop", {
361200
+ onDone_0("Session transferred to localclawd desktop", {
361200
361201
  display: "system"
361201
361202
  });
361202
361203
  await gracefulShutdown(0, "other");
@@ -361919,7 +361920,7 @@ function buildPrimarySection() {
361919
361920
  }, undefined, false, undefined, this);
361920
361921
  return [{
361921
361922
  label: "Version",
361922
- value: "1.1.14"
361923
+ value: "1.1.16"
361923
361924
  }, {
361924
361925
  label: "Session name",
361925
361926
  value: nameValue
@@ -362942,7 +362943,7 @@ function ModelPicker(t0) {
362942
362943
  } else {
362943
362944
  t15 = $2[41];
362944
362945
  }
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.";
362946
+ const t16 = headerText ?? "Switch between models. Applies to this session and future localclawd sessions. For other/previous model names, specify with --model.";
362946
362947
  let t17;
362947
362948
  if ($2[42] !== t16) {
362948
362949
  t17 = /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
@@ -364464,7 +364465,7 @@ function OutputStylePicker(t0) {
364464
364465
  marginTop: 1,
364465
364466
  children: /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ThemedText, {
364466
364467
  dimColor: true,
364467
- children: "This changes how Claude Code communicates with you"
364468
+ children: "This changes how localclawd communicates with you"
364468
364469
  }, undefined, false, undefined, this)
364469
364470
  }, undefined, false, undefined, this);
364470
364471
  $2[5] = t7;
@@ -366537,7 +366538,7 @@ function Config({
366537
366538
  }
366538
366539
  }, undefined, false, undefined, this)
366539
366540
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
366540
- currentVersion: "1.1.14",
366541
+ currentVersion: "1.1.16",
366541
366542
  onChoice: (choice) => {
366542
366543
  setShowSubmenu(null);
366543
366544
  setTabsHidden(false);
@@ -366549,7 +366550,7 @@ function Config({
366549
366550
  autoUpdatesChannel: "stable"
366550
366551
  };
366551
366552
  if (choice === "stay") {
366552
- newSettings.minimumVersion = "1.1.14";
366553
+ newSettings.minimumVersion = "1.1.16";
366553
366554
  }
366554
366555
  updateSettingsForSource("userSettings", newSettings);
366555
366556
  setSettingsData((prev_27) => ({
@@ -376282,7 +376283,7 @@ function HelpV2(t0) {
376282
376283
  let t6;
376283
376284
  if ($2[31] !== tabs) {
376284
376285
  t6 = /* @__PURE__ */ jsx_dev_runtime214.jsxDEV(Tabs, {
376285
- title: `localclawd v${"1.1.14"}`,
376286
+ title: `localclawd v${"1.1.16"}`,
376286
376287
  color: "professionalBlue",
376287
376288
  defaultTab: "general",
376288
376289
  children: tabs
@@ -376713,7 +376714,7 @@ function IDEScreen(t0) {
376713
376714
  t5 = availableIDEs.length === 0 && /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
376714
376715
  dimColor: true,
376715
376716
  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."
376717
+ 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
376718
  }, undefined, false, undefined, this);
376718
376719
  $2[17] = availableIDEs.length;
376719
376720
  $2[18] = t5;
@@ -376745,7 +376746,7 @@ https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected.
376745
376746
  marginTop: 1,
376746
376747
  children: /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
376747
376748
  color: "warning",
376748
- children: "Note: Only one Claude Code instance can be connected to VS Code at a time."
376749
+ children: "Note: Only one localclawd instance can be connected to VS Code at a time."
376749
376750
  }, undefined, false, undefined, this)
376750
376751
  }, undefined, false, undefined, this);
376751
376752
  $2[24] = availableIDEs;
@@ -377089,7 +377090,7 @@ async function call30(onDone, context8, args) {
377089
377090
  const detectedIDEs2 = await detectIDEs(true);
377090
377091
  const availableIDEs2 = detectedIDEs2.filter((ide) => ide.isValid);
377091
377092
  if (availableIDEs2.length === 0) {
377092
- onDone("No IDEs with Claude Code extension detected.");
377093
+ onDone("No IDEs with localclawd extension detected.");
377093
377094
  return null;
377094
377095
  }
377095
377096
  return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(IDEOpenSelection, {
@@ -377725,7 +377726,7 @@ var init_logout2 = __esm(() => {
377725
377726
  logout_default = {
377726
377727
  type: "local-jsx",
377727
377728
  name: "logout",
377728
- description: "Sign out from your Anthropic account",
377729
+ description: "Sign out",
377729
377730
  isEnabled: () => !isEnvTruthy(process.env.DISABLE_LOGOUT_COMMAND),
377730
377731
  load: () => Promise.resolve().then(() => (init_logout(), exports_logout))
377731
377732
  };
@@ -378202,7 +378203,7 @@ function ApiKeyStep(t0) {
378202
378203
  children: /* @__PURE__ */ jsx_dev_runtime219.jsxDEV(ThemedText, {
378203
378204
  children: [
378204
378205
  selectedOption === "existing" ? color("success", theme)("> ") : " ",
378205
- "Use your existing Claude Code API key"
378206
+ "Use your existing API key"
378206
378207
  ]
378207
378208
  }, undefined, true, undefined, this)
378208
378209
  }, undefined, false, undefined, this);
@@ -380169,7 +380170,7 @@ async function setupGitHubActions(repoName, apiKeyOrOAuthToken, secretName, upda
380169
380170
  workflows.push({
380170
380171
  path: ".github/workflows/claude-code-review.yml",
380171
380172
  content: CODE_REVIEW_PLUGIN_WORKFLOW_CONTENT,
380172
- message: "Claude Code Review workflow"
380173
+ message: "localclawd review workflow"
380173
380174
  });
380174
380175
  }
380175
380176
  for (const workflow of workflows) {
@@ -381784,7 +381785,7 @@ function MCPListPanel(t0) {
381784
381785
  paddingLeft: 2,
381785
381786
  children: /* @__PURE__ */ jsx_dev_runtime232.jsxDEV(ThemedText, {
381786
381787
  bold: true,
381787
- children: "claude.ai"
381788
+ children: "remote"
381788
381789
  }, undefined, false, undefined, this)
381789
381790
  }, undefined, false, undefined, this),
381790
381791
  claudeAiServers.map((server_5) => renderServerItem(server_5))
@@ -383244,9 +383245,9 @@ function MCPRemoteServerMenu({
383244
383245
  if (success) {
383245
383246
  onComplete?.(`Authentication successful. Connected to ${server.name}.`);
383246
383247
  } else if (result.client.type === "needs-auth") {
383247
- onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.");
383248
+ onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
383248
383249
  } else {
383249
- onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.");
383250
+ onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
383250
383251
  }
383251
383252
  } catch (err2) {
383252
383253
  logEvent("tengu_claudeai_mcp_auth_completed", {
@@ -383408,10 +383409,10 @@ function MCPRemoteServerMenu({
383408
383409
  const message = isEffectivelyAuthenticated ? `Authentication successful. Reconnected to ${server.name}.` : `Authentication successful. Connected to ${server.name}.`;
383409
383410
  onComplete?.(message);
383410
383411
  } 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.");
383412
+ onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
383412
383413
  } else {
383413
383414
  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.");
383415
+ onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
383415
383416
  }
383416
383417
  }
383417
383418
  } catch (err_1) {
@@ -383714,7 +383715,7 @@ function MCPRemoteServerMenu({
383714
383715
  }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime236.jsxDEV(jsx_dev_runtime236.Fragment, {
383715
383716
  children: [
383716
383717
  /* @__PURE__ */ jsx_dev_runtime236.jsxDEV(ThemedText, {
383717
- children: 'This will open claude.ai in the browser. Find the MCP server in the list and click "Disconnect".'
383718
+ children: 'Find the MCP server in the list and click "Disconnect".'
383718
383719
  }, undefined, false, undefined, this),
383719
383720
  /* @__PURE__ */ jsx_dev_runtime236.jsxDEV(ThemedBox_default, {
383720
383721
  marginLeft: 3,
@@ -385070,7 +385071,7 @@ function MCPSettings(t0) {
385070
385071
  t9 = $2[25];
385071
385072
  }
385072
385073
  const serverTools_0 = t9;
385073
- const defaultTab = viewState.server.transport === "claudeai-proxy" ? "claude.ai" : "Claude Code";
385074
+ const defaultTab = viewState.server.transport === "claudeai-proxy" ? "remote" : "localclawd";
385074
385075
  if (viewState.server.transport === "stdio") {
385075
385076
  let t10;
385076
385077
  if ($2[26] !== viewState.server) {
@@ -386436,7 +386437,7 @@ function PluginTrustWarning() {
386436
386437
  dimColor: true,
386437
386438
  italic: true,
386438
386439
  children: [
386439
- "Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.",
386440
+ "Make sure you trust a plugin before installing, updating, or using it. We do not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.",
386440
386441
  customMessage ? ` ${customMessage}` : ""
386441
386442
  ]
386442
386443
  }, undefined, true, undefined, this)
@@ -388365,7 +388366,7 @@ function EmptyStateMessage(t0) {
388365
388366
  }, undefined, false, undefined, this),
388366
388367
  /* @__PURE__ */ jsx_dev_runtime247.jsxDEV(ThemedText, {
388367
388368
  dimColor: true,
388368
- children: "Please install git and restart Claude Code."
388369
+ children: "Please install git and restart localclawd."
388369
388370
  }, undefined, false, undefined, this)
388370
388371
  ]
388371
388372
  }, undefined, true, undefined, this);
@@ -389870,7 +389871,7 @@ function ManageMarketplaces({
389870
389871
  marginTop: 1,
389871
389872
  children: /* @__PURE__ */ jsx_dev_runtime248.jsxDEV(ThemedText, {
389872
389873
  dimColor: true,
389873
- children: "Auto-update enabled. Claude Code will automatically update this marketplace and its installed plugins."
389874
+ children: "Auto-update enabled. localclawd will automatically update this marketplace and its installed plugins."
389874
389875
  }, undefined, false, undefined, this)
389875
389876
  }, undefined, false, undefined, this),
389876
389877
  /* @__PURE__ */ jsx_dev_runtime248.jsxDEV(ThemedBox_default, {
@@ -400440,7 +400441,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
400440
400441
  return [];
400441
400442
  }
400442
400443
  }
400443
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.14") {
400444
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.16") {
400444
400445
  if (process.env.USER_TYPE === "ant") {
400445
400446
  const changelog = MACRO.VERSION_CHANGELOG;
400446
400447
  if (changelog) {
@@ -400467,7 +400468,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.14")
400467
400468
  releaseNotes
400468
400469
  };
400469
400470
  }
400470
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.14") {
400471
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.16") {
400471
400472
  if (process.env.USER_TYPE === "ant") {
400472
400473
  const changelog = MACRO.VERSION_CHANGELOG;
400473
400474
  if (changelog) {
@@ -401634,7 +401635,7 @@ function getRecentActivitySync() {
401634
401635
  return cachedActivity;
401635
401636
  }
401636
401637
  function getLogoDisplayData() {
401637
- const version = process.env.DEMO_VERSION ?? "1.1.14";
401638
+ const version = process.env.DEMO_VERSION ?? "1.1.16";
401638
401639
  const serverUrl = getDirectConnectServerUrl();
401639
401640
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
401640
401641
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -402156,7 +402157,7 @@ function createWhatsNewFeed(releaseNotes2) {
402156
402157
  text: note
402157
402158
  };
402158
402159
  });
402159
- const emptyMessage = "Check the Claude Code changelog for updates";
402160
+ const emptyMessage = "Check the changelog for updates";
402160
402161
  return {
402161
402162
  title: "What's new",
402162
402163
  lines,
@@ -402190,7 +402191,7 @@ function createProjectOnboardingFeed(steps) {
402190
402191
  }
402191
402192
  function createGuestPassesFeed() {
402192
402193
  const reward = getCachedReferrerReward();
402193
- const subtitle = reward ? `Share Claude Code and earn ${formatCreditAmount(reward)} of extra usage` : "Share Claude Code with friends";
402194
+ const subtitle = reward ? `Share localclawd and earn ${formatCreditAmount(reward)} of extra usage` : "Share localclawd with friends";
402194
402195
  return {
402195
402196
  title: "3 guest passes",
402196
402197
  lines: [],
@@ -402422,7 +402423,7 @@ function GuestPassesUpsell() {
402422
402423
  }, undefined, false, undefined, this),
402423
402424
  " ·",
402424
402425
  " ",
402425
- reward ? `Share Claude Code and earn ${formatCreditAmount(reward)} of extra usage · /passes` : "3 guest passes at /passes"
402426
+ "guest passes at /passes"
402426
402427
  ]
402427
402428
  }, undefined, true, undefined, this);
402428
402429
  $2[0] = t0;
@@ -402908,7 +402909,7 @@ function LogoV2() {
402908
402909
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
402909
402910
  t2 = () => {
402910
402911
  const currentConfig = getGlobalConfig();
402911
- if (currentConfig.lastReleaseNotesSeen === "1.1.14") {
402912
+ if (currentConfig.lastReleaseNotesSeen === "1.1.16") {
402912
402913
  return;
402913
402914
  }
402914
402915
  saveGlobalConfig(_temp327);
@@ -403584,12 +403585,12 @@ function LogoV2() {
403584
403585
  return t41;
403585
403586
  }
403586
403587
  function _temp327(current) {
403587
- if (current.lastReleaseNotesSeen === "1.1.14") {
403588
+ if (current.lastReleaseNotesSeen === "1.1.16") {
403588
403589
  return current;
403589
403590
  }
403590
403591
  return {
403591
403592
  ...current,
403592
- lastReleaseNotesSeen: "1.1.14"
403593
+ lastReleaseNotesSeen: "1.1.16"
403593
403594
  };
403594
403595
  }
403595
403596
  function _temp245(s_0) {
@@ -410150,13 +410151,13 @@ async function launchAndDone(args, context8, onDone, billingNote, signal) {
410150
410151
  var jsx_dev_runtime282, call39 = async (onDone, context8, args) => {
410151
410152
  const gate = await checkOverageGate();
410152
410153
  if (gate.kind === "not-enabled") {
410153
- onDone("Free ultrareviews used. Enable Extra Usage at https://claude.ai/settings/billing to continue.", {
410154
+ onDone("Free ultrareviews used. This feature requires a cloud subscription.", {
410154
410155
  display: "system"
410155
410156
  });
410156
410157
  return null;
410157
410158
  }
410158
410159
  if (gate.kind === "low-balance") {
410159
- onDone(`Balance too low to launch ultrareview ($${gate.available.toFixed(2)} available, $10 minimum). Top up at https://claude.ai/settings/billing`, {
410160
+ onDone(`Balance too low to launch ultrareview ($${gate.available.toFixed(2)} available, $10 minimum). This feature requires a cloud subscription.`, {
410160
410161
  display: "system"
410161
410162
  });
410162
410163
  return null;
@@ -411167,7 +411168,7 @@ function startDetachedPoll(taskId, sessionId, url3, getAppState, setAppState) {
411167
411168
  ultraplanSessionUrl: undefined
411168
411169
  } : prev);
411169
411170
  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(`
411171
+ 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
411172
  `),
411172
411173
  mode: "task-notification"
411173
411174
  });
@@ -411221,10 +411222,10 @@ Session: ${url3}`,
411221
411222
  function buildLaunchMessage(disconnectedBridge) {
411222
411223
  const prefix = disconnectedBridge ? `${REMOTE_CONTROL_DISCONNECTED_MSG} ` : "";
411223
411224
  return `${DIAMOND_OPEN} ultraplan
411224
- ${prefix}Starting Claude Code on the web…`;
411225
+ ${prefix}Starting localclawd on the web…`;
411225
411226
  }
411226
411227
  function buildSessionReadyMessage(url3) {
411227
- return `${DIAMOND_OPEN} ultraplan · Monitor progress in Claude Code on the web ${url3}
411228
+ return `${DIAMOND_OPEN} ultraplan · Monitor progress in localclawd on the web ${url3}
411228
411229
  You can continue working — when the ${DIAMOND_OPEN} fills, press ↓ to view results`;
411229
411230
  }
411230
411231
  function buildAlreadyActiveMessage(url3) {
@@ -411277,7 +411278,7 @@ async function launchUltraplan2(opts) {
411277
411278
  "in your prompt",
411278
411279
  "",
411279
411280
  "Advanced multi-agent plan mode with our most powerful model",
411280
- "(Opus). Runs in Claude Code on the web. When the plan is ready,",
411281
+ "(Opus). Runs in localclawd on the web. When the plan is ready,",
411281
411282
  "you can execute it in the web session or send it back here.",
411282
411283
  "Terminal stays free while the remote plans.",
411283
411284
  "Requires /login.",
@@ -411460,7 +411461,7 @@ var init_ultraplan = __esm(() => {
411460
411461
  ultraplan_default = {
411461
411462
  type: "local-jsx",
411462
411463
  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}`,
411464
+ description: `~10–30 min · localclawd on the web drafts an advanced plan you can edit and approve. See ${CCR_TERMS_URL2}`,
411464
411465
  argumentHint: "<prompt>",
411465
411466
  isEnabled: () => false,
411466
411467
  load: () => Promise.resolve({
@@ -413738,7 +413739,7 @@ var init_mappers = __esm(() => {
413738
413739
  // src/components/tasks/RemoteSessionDetailDialog.tsx
413739
413740
  function formatToolUseSummary(name, input) {
413740
413741
  if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
413741
- return "Review the plan in Claude Code on the web";
413742
+ return "Review the plan in localclawd on the web";
413742
413743
  }
413743
413744
  if (!input || typeof input !== "object")
413744
413745
  return name;
@@ -413852,7 +413853,7 @@ function UltraplanSessionDetail(t0) {
413852
413853
  if ($2[12] === Symbol.for("react.memo_cache_sentinel")) {
413853
413854
  t72 = /* @__PURE__ */ jsx_dev_runtime294.jsxDEV(ThemedText, {
413854
413855
  dimColor: true,
413855
- children: "This will terminate the Claude Code on the web session."
413856
+ children: "This will terminate the localclawd on the web session."
413856
413857
  }, undefined, false, undefined, this);
413857
413858
  $2[12] = t72;
413858
413859
  } else {
@@ -414063,7 +414064,7 @@ function UltraplanSessionDetail(t0) {
414063
414064
  let t19;
414064
414065
  if ($2[47] === Symbol.for("react.memo_cache_sentinel")) {
414065
414066
  t19 = {
414066
- label: "Review in Claude Code on the web",
414067
+ label: "Review in localclawd on the web",
414067
414068
  value: "open"
414068
414069
  };
414069
414070
  $2[47] = t19;
@@ -414395,13 +414396,13 @@ function ReviewSessionDetail(t0) {
414395
414396
  let t3;
414396
414397
  if ($2[11] !== completed || $2[12] !== onKill || $2[13] !== running) {
414397
414398
  t3 = completed ? [{
414398
- label: "Open in Claude Code on the web",
414399
+ label: "Open in localclawd on the web",
414399
414400
  value: "open"
414400
414401
  }, {
414401
414402
  label: "Dismiss",
414402
414403
  value: "dismiss"
414403
414404
  }] : [{
414404
- label: "Open in Claude Code on the web",
414405
+ label: "Open in localclawd on the web",
414405
414406
  value: "open"
414406
414407
  }, ...onKill && running ? [{
414407
414408
  label: "Stop ultrareview",
@@ -418134,7 +418135,7 @@ function RemoveWorkspaceDirectory(t0) {
418134
418135
  let t4;
418135
418136
  if ($2[10] === Symbol.for("react.memo_cache_sentinel")) {
418136
418137
  t4 = /* @__PURE__ */ jsx_dev_runtime305.jsxDEV(ThemedText, {
418137
- children: "Claude Code will no longer have access to files in this directory."
418138
+ children: "localclawd will no longer have access to files in this directory."
418138
418139
  }, undefined, false, undefined, this);
418139
418140
  $2[10] = t4;
418140
418141
  } else {
@@ -418813,9 +418814,9 @@ function PermissionRulesTab(t0) {
418813
418814
  let t8;
418814
418815
  if ($2[10] === Symbol.for("react.memo_cache_sentinel")) {
418815
418816
  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."
418817
+ allow: "localclawd won't ask before using allowed tools.",
418818
+ ask: "localclawd will always ask for confirmation before using these tools.",
418819
+ deny: "localclawd will always reject requests to use denied tools."
418819
418820
  };
418820
418821
  $2[10] = t8;
418821
418822
  } else {
@@ -419578,7 +419579,7 @@ function PermissionRuleList(t0) {
419578
419579
  let t28;
419579
419580
  if ($2[89] === Symbol.for("react.memo_cache_sentinel")) {
419580
419581
  t28 = /* @__PURE__ */ jsx_dev_runtime307.jsxDEV(ThemedText, {
419581
- children: "Claude Code can read files in the workspace, and make edits when auto-accept edits is on."
419582
+ children: "localclawd can read files in the workspace, and make edits when auto-accept edits is on."
419582
419583
  }, undefined, false, undefined, this);
419583
419584
  $2[89] = t28;
419584
419585
  } else {
@@ -420585,7 +420586,7 @@ function Passes({
420585
420586
  children: /* @__PURE__ */ jsx_dev_runtime312.jsxDEV(ThemedText, {
420586
420587
  dimColor: true,
420587
420588
  children: [
420588
- referrerReward ? `Share a free week of Claude Code with friends. If they love it and subscribe, you'll get ${formatCreditAmount(referrerReward)} of extra usage to keep building. ` : "Share a free week of Claude Code with friends. ",
420589
+ referrerReward ? `Share a free week of localclawd with friends. If they love it and subscribe, you'll get ${formatCreditAmount(referrerReward)} of extra usage to keep building. ` : "Share a free week of localclawd with friends. ",
420589
420590
  /* @__PURE__ */ jsx_dev_runtime312.jsxDEV(Link, {
420590
420591
  url: referrerReward ? "https://support.claude.com/en/articles/13456702-claude-code-guest-passes" : "https://support.claude.com/en/articles/12875061-claude-code-guest-passes",
420591
420592
  children: "Terms apply."
@@ -420732,9 +420733,9 @@ function GracePeriodContentBody() {
420732
420733
  t3,
420733
420734
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
420734
420735
  children: [
420735
- "— Allow the use of your chats and coding sessions to train and improve Anthropic AI models. Change anytime in your Privacy Settings (",
420736
+ "— Allow the use of your chats and coding sessions to help improve the service. Change anytime in your Privacy Settings (",
420736
420737
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420737
- url: "https://claude.ai/settings/data-privacy-controls"
420738
+ url: "https://github.com/chromebookwiz/localclawd"
420738
420739
  }, undefined, false, undefined, this),
420739
420740
  ")."
420740
420741
  ]
@@ -420779,7 +420780,7 @@ function GracePeriodContentBody() {
420779
420780
  let t6;
420780
420781
  if ($2[6] === Symbol.for("react.memo_cache_sentinel")) {
420781
420782
  t6 = /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420782
- url: "https://www.anthropic.com/news/updates-to-our-consumer-terms"
420783
+ url: "https://github.com/chromebookwiz/localclawd"
420783
420784
  }, undefined, false, undefined, this);
420784
420785
  $2[6] = t6;
420785
420786
  } else {
@@ -420788,7 +420789,7 @@ function GracePeriodContentBody() {
420788
420789
  let t7;
420789
420790
  if ($2[7] === Symbol.for("react.memo_cache_sentinel")) {
420790
420791
  t7 = /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420791
- url: "https://anthropic.com/legal/terms"
420792
+ url: "https://github.com/chromebookwiz/localclawd"
420792
420793
  }, undefined, false, undefined, this);
420793
420794
  $2[7] = t7;
420794
420795
  } else {
@@ -420808,7 +420809,7 @@ function GracePeriodContentBody() {
420808
420809
  t7,
420809
420810
  ") and Privacy Policy (",
420810
420811
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420811
- url: "https://anthropic.com/legal/privacy"
420812
+ url: "https://github.com/chromebookwiz/localclawd"
420812
420813
  }, undefined, false, undefined, this),
420813
420814
  ")"
420814
420815
  ]
@@ -420848,13 +420849,13 @@ function PostGracePeriodContentBody() {
420848
420849
  children: [
420849
420850
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
420850
420851
  bold: true,
420851
- children: "Help improve Claude"
420852
+ children: "Help improve the service"
420852
420853
  }, undefined, false, undefined, this),
420853
420854
  /* @__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"
420855
+ children: "Allow the use of your chats and coding sessions to help improve the service. You can change this anytime in Privacy Settings"
420855
420856
  }, undefined, false, undefined, this),
420856
420857
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420857
- url: "https://claude.ai/settings/data-privacy-controls"
420858
+ url: "https://github.com/chromebookwiz/localclawd"
420858
420859
  }, undefined, false, undefined, this)
420859
420860
  ]
420860
420861
  }, undefined, true, undefined, this);
@@ -420891,7 +420892,7 @@ function PostGracePeriodContentBody() {
420891
420892
  let t4;
420892
420893
  if ($2[4] === Symbol.for("react.memo_cache_sentinel")) {
420893
420894
  t4 = /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420894
- url: "https://www.anthropic.com/news/updates-to-our-consumer-terms"
420895
+ url: "https://github.com/chromebookwiz/localclawd"
420895
420896
  }, undefined, false, undefined, this);
420896
420897
  $2[4] = t4;
420897
420898
  } else {
@@ -420900,7 +420901,7 @@ function PostGracePeriodContentBody() {
420900
420901
  let t5;
420901
420902
  if ($2[5] === Symbol.for("react.memo_cache_sentinel")) {
420902
420903
  t5 = /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420903
- url: "https://anthropic.com/legal/terms"
420904
+ url: "https://github.com/chromebookwiz/localclawd"
420904
420905
  }, undefined, false, undefined, this);
420905
420906
  $2[5] = t5;
420906
420907
  } else {
@@ -420920,7 +420921,7 @@ function PostGracePeriodContentBody() {
420920
420921
  t5,
420921
420922
  ") and Privacy Policy (",
420922
420923
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
420923
- url: "https://anthropic.com/legal/privacy"
420924
+ url: "https://github.com/chromebookwiz/localclawd"
420924
420925
  }, undefined, false, undefined, this),
420925
420926
  ")"
420926
420927
  ]
@@ -421024,13 +421025,13 @@ function GroveDialog(t0) {
421024
421025
  let t4;
421025
421026
  if ($2[8] !== groveConfig?.domain_excluded) {
421026
421027
  t4 = groveConfig?.domain_excluded ? [{
421027
- label: "Accept terms · Help improve Claude: OFF (for emails with your domain)",
421028
+ label: "Accept terms · Help improve the service: OFF (for emails with your domain)",
421028
421029
  value: "accept_opt_out"
421029
421030
  }] : [{
421030
- label: "Accept terms · Help improve Claude: ON",
421031
+ label: "Accept terms · Help improve the service: ON",
421031
421032
  value: "accept_opt_in"
421032
421033
  }, {
421033
- label: "Accept terms · Help improve Claude: OFF",
421034
+ label: "Accept terms · Help improve the service: OFF",
421034
421035
  value: "accept_opt_out"
421035
421036
  }];
421036
421037
  $2[8] = groveConfig?.domain_excluded;
@@ -421308,7 +421309,7 @@ function PrivacySettingsDialog(t0) {
421308
421309
  "Review and manage your privacy settings at",
421309
421310
  " ",
421310
421311
  /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
421311
- url: "https://claude.ai/settings/data-privacy-controls"
421312
+ url: "https://github.com/chromebookwiz/localclawd"
421312
421313
  }, undefined, false, undefined, this)
421313
421314
  ]
421314
421315
  }, undefined, true, undefined, this);
@@ -421322,7 +421323,7 @@ function PrivacySettingsDialog(t0) {
421322
421323
  width: 44,
421323
421324
  children: /* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
421324
421325
  bold: true,
421325
- children: "Help improve Claude"
421326
+ children: "Help improve the service"
421326
421327
  }, undefined, false, undefined, this)
421327
421328
  }, undefined, false, undefined, this);
421328
421329
  $2[10] = t6;
@@ -421427,7 +421428,7 @@ async function call54(onDone) {
421427
421428
  }
421428
421429
  const updatedSettings = updatedSettingsResult.data;
421429
421430
  const groveStatus = updatedSettings.grove_enabled ? "true" : "false";
421430
- onDone(`"Help improve Claude" set to ${groveStatus}.`);
421431
+ onDone(`"Data sharing" set to ${groveStatus}.`);
421431
421432
  if (settings.grove_enabled !== null && settings.grove_enabled !== updatedSettings.grove_enabled) {
421432
421433
  logEvent("tengu_grove_policy_toggled", {
421433
421434
  state: updatedSettings.grove_enabled,
@@ -421448,7 +421449,7 @@ async function call54(onDone) {
421448
421449
  location: "settings"
421449
421450
  }, undefined, false, undefined, this);
421450
421451
  }
421451
- var jsx_dev_runtime315, FALLBACK_MESSAGE = "Review and manage your privacy settings at https://claude.ai/settings/data-privacy-controls";
421452
+ var jsx_dev_runtime315, FALLBACK_MESSAGE = "Privacy settings are not available in this local-first build. No data is shared with cloud services unless you configure a cloud backend.";
421452
421453
  var init_privacy_settings = __esm(() => {
421453
421454
  init_Grove();
421454
421455
  init_grove();
@@ -429791,7 +429792,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
429791
429792
  smapsRollup,
429792
429793
  platform: process.platform,
429793
429794
  nodeVersion: process.version,
429794
- ccVersion: "1.1.14"
429795
+ ccVersion: "1.1.16"
429795
429796
  };
429796
429797
  }
429797
429798
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -430376,7 +430377,7 @@ var init_bridge_kick = __esm(() => {
430376
430377
  var call64 = async () => {
430377
430378
  return {
430378
430379
  type: "text",
430379
- value: `${"1.1.14"} (built ${"2026-04-07T18:27:17.273Z"})`
430380
+ value: `${"1.1.16"} (built ${"2026-04-08T22:59:48.602Z"})`
430380
430381
  };
430381
430382
  }, version, version_default;
430382
430383
  var init_version = __esm(() => {
@@ -434508,7 +434509,7 @@ async function call76(onDone, context8) {
434508
434509
  setTimeout(onDone, 0, "Opened the Claude Max upgrade page in your browser. localclawd no longer runs a separate in-terminal login flow; use /provider to configure the backend you want after any browser-side account changes.");
434509
434510
  } catch (error5) {
434510
434511
  logError(error5);
434511
- setTimeout(onDone, 0, "Failed to open browser. Please visit https://claude.ai/upgrade/max to upgrade.");
434512
+ setTimeout(onDone, 0, "Failed to open browser. /upgrade is a cloud-only feature — use /setup to configure a local backend instead.");
434512
434513
  }
434513
434514
  return null;
434514
434515
  }
@@ -439314,7 +439315,7 @@ function generateHtmlReport(data, insights) {
439314
439315
  </html>`;
439315
439316
  }
439316
439317
  function buildExportData(data, insights, facets, remoteStats) {
439317
- const version2 = typeof MACRO !== "undefined" ? "1.1.14" : "unknown";
439318
+ const version2 = typeof MACRO !== "undefined" ? "1.1.16" : "unknown";
439318
439319
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
439319
439320
  const facets_summary = {
439320
439321
  total: facets.size,
@@ -443481,7 +443482,7 @@ var init_sessionStorage = __esm(() => {
443481
443482
  init_settings2();
443482
443483
  init_slowOperations();
443483
443484
  init_uuid();
443484
- VERSION6 = typeof MACRO !== "undefined" ? "1.1.14" : "unknown";
443485
+ VERSION6 = typeof MACRO !== "undefined" ? "1.1.16" : "unknown";
443485
443486
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
443486
443487
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
443487
443488
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -444683,7 +444684,7 @@ var init_filesystem = __esm(() => {
444683
444684
  });
444684
444685
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
444685
444686
  const nonce = randomBytes19(16).toString("hex");
444686
- return join130(getClaudeTempDir(), "bundled-skills", "1.1.14", nonce);
444687
+ return join130(getClaudeTempDir(), "bundled-skills", "1.1.16", nonce);
444687
444688
  });
444688
444689
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
444689
444690
  });
@@ -450682,7 +450683,7 @@ function computeFingerprint(messageText, version2) {
450682
450683
  }
450683
450684
  function computeFingerprintFromMessages(messages) {
450684
450685
  const firstMessageText = extractFirstMessageText(messages);
450685
- return computeFingerprint(firstMessageText, "1.1.14");
450686
+ return computeFingerprint(firstMessageText, "1.1.16");
450686
450687
  }
450687
450688
  var FINGERPRINT_SALT = "59cf53e54c78";
450688
450689
  var init_fingerprint = () => {};
@@ -452537,7 +452538,7 @@ async function sideQuery(opts) {
452537
452538
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
452538
452539
  }
452539
452540
  const messageText = extractFirstUserMessageText(messages);
452540
- const fingerprint = computeFingerprint(messageText, "1.1.14");
452541
+ const fingerprint = computeFingerprint(messageText, "1.1.16");
452541
452542
  const attributionHeader = getAttributionHeader(fingerprint);
452542
452543
  const systemBlocks = [
452543
452544
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -456691,7 +456692,7 @@ function CostThresholdDialog(t0) {
456691
456692
  let t4;
456692
456693
  if ($2[4] !== onDone || $2[5] !== t3) {
456693
456694
  t4 = /* @__PURE__ */ jsx_dev_runtime373.jsxDEV(Dialog, {
456694
- title: "You've spent $5 on the Anthropic API this session.",
456695
+ title: "You've spent $5 on API calls this session.",
456695
456696
  onCancel: onDone,
456696
456697
  children: [
456697
456698
  t1,
@@ -457335,7 +457336,7 @@ function buildSystemInitMessage(inputs) {
457335
457336
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
457336
457337
  apiKeySource: getAnthropicApiKeyWithSource().source,
457337
457338
  betas: getSdkBetas(),
457338
- claude_code_version: "1.1.14",
457339
+ claude_code_version: "1.1.16",
457339
457340
  output_style: outputStyle2,
457340
457341
  agents: inputs.agents.map((agent) => agent.agentType),
457341
457342
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -466227,7 +466228,7 @@ function buildPlanApprovalOptions({
466227
466228
  });
466228
466229
  if (showUltraplan) {
466229
466230
  options.push({
466230
- label: "No, refine with Ultraplan on Claude Code on the web",
466231
+ label: "No, refine with Ultraplan on localclawd on the web",
466231
466232
  value: "ultraplan"
466232
466233
  });
466233
466234
  }
@@ -469482,14 +469483,14 @@ function permissionComponentForTool(tool) {
469482
469483
  function getNotificationMessage(toolUseConfirm) {
469483
469484
  const toolName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input);
469484
469485
  if (toolUseConfirm.tool === ExitPlanModeV2Tool) {
469485
- return "Claude Code needs your approval for the plan";
469486
+ return "localclawd needs your approval for the plan";
469486
469487
  }
469487
469488
  if (toolUseConfirm.tool === EnterPlanModeTool) {
469488
- return "Claude Code wants to enter plan mode";
469489
+ return "localclawd wants to enter plan mode";
469489
469490
  }
469490
469491
  if (false) {}
469491
469492
  if (!toolName || toolName.trim() === "") {
469492
- return "Claude Code needs your attention";
469493
+ return "localclawd needs your attention";
469493
469494
  }
469494
469495
  return `Claude needs your permission to use ${toolName}`;
469495
469496
  }
@@ -470056,7 +470057,7 @@ function ElicitationFormDialog({
470056
470057
  const currentFieldIsText = currentField !== undefined && isTextField(currentField.schema) && !isEnumSchema(currentField.schema);
470057
470058
  const isEditingTextField = currentFieldIsText && !focusedButton;
470058
470059
  useRegisterOverlay("elicitation");
470059
- useNotifyAfterTimeout("Claude Code needs your input", "elicitation_dialog");
470060
+ useNotifyAfterTimeout("localclawd needs your input", "elicitation_dialog");
470060
470061
  const syncTextInput = import_react221.useCallback((fieldIndex) => {
470061
470062
  if (fieldIndex === undefined) {
470062
470063
  setTextInputValue("");
@@ -470907,7 +470908,7 @@ function ElicitationURLDialog({
470907
470908
  const phaseRef = import_react221.useRef("prompt");
470908
470909
  const [focusedButton, setFocusedButton] = import_react221.useState("accept");
470909
470910
  const showCancel = waitingState?.showCancel ?? false;
470910
- useNotifyAfterTimeout("Claude Code needs your input", "elicitation_url_dialog");
470911
+ useNotifyAfterTimeout("localclawd needs your input", "elicitation_url_dialog");
470911
470912
  useRegisterOverlay("elicitation-url");
470912
470913
  phaseRef.current = phase;
470913
470914
  const onWaitingDismissRef = import_react221.useRef(onWaitingDismiss);
@@ -471914,7 +471915,7 @@ var init_useVoiceEnabled = __esm(() => {
471914
471915
  function getSemverPart(version2) {
471915
471916
  return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
471916
471917
  }
471917
- function useUpdateNotification(updatedVersion, initialVersion = "1.1.14") {
471918
+ function useUpdateNotification(updatedVersion, initialVersion = "1.1.16") {
471918
471919
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
471919
471920
  if (!updatedVersion) {
471920
471921
  return null;
@@ -471954,7 +471955,7 @@ function AutoUpdater({
471954
471955
  return;
471955
471956
  }
471956
471957
  if (false) {}
471957
- const currentVersion = "1.1.14";
471958
+ const currentVersion = "1.1.16";
471958
471959
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
471959
471960
  let latestVersion = await getLatestVersion(channel);
471960
471961
  const isDisabled = isAutoUpdaterDisabled();
@@ -472165,12 +472166,12 @@ function NativeAutoUpdater({
472165
472166
  logEvent("tengu_native_auto_updater_start", {});
472166
472167
  try {
472167
472168
  const maxVersion = await getMaxVersion();
472168
- if (maxVersion && gt("1.1.14", maxVersion)) {
472169
+ if (maxVersion && gt("1.1.16", maxVersion)) {
472169
472170
  const msg = await getMaxVersionMessage();
472170
472171
  setMaxVersionIssue(msg ?? "affects your version");
472171
472172
  }
472172
472173
  const result = await installLatest(channel);
472173
- const currentVersion = "1.1.14";
472174
+ const currentVersion = "1.1.16";
472174
472175
  const latencyMs = Date.now() - startTime;
472175
472176
  if (result.lockFailed) {
472176
472177
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -472305,17 +472306,17 @@ function PackageManagerAutoUpdater(t0) {
472305
472306
  const maxVersion = await getMaxVersion();
472306
472307
  if (maxVersion && latest && gt(latest, maxVersion)) {
472307
472308
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
472308
- if (gte("1.1.14", maxVersion)) {
472309
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.14"} is already at or above maxVersion ${maxVersion}, skipping update`);
472309
+ if (gte("1.1.16", maxVersion)) {
472310
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.16"} is already at or above maxVersion ${maxVersion}, skipping update`);
472310
472311
  setUpdateAvailable(false);
472311
472312
  return;
472312
472313
  }
472313
472314
  latest = maxVersion;
472314
472315
  }
472315
- const hasUpdate = latest && !gte("1.1.14", latest) && !shouldSkipVersion(latest);
472316
+ const hasUpdate = latest && !gte("1.1.16", latest) && !shouldSkipVersion(latest);
472316
472317
  setUpdateAvailable(!!hasUpdate);
472317
472318
  if (hasUpdate) {
472318
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.14"} -> ${latest}`);
472319
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.16"} -> ${latest}`);
472319
472320
  }
472320
472321
  };
472321
472322
  $2[0] = t1;
@@ -472349,7 +472350,7 @@ function PackageManagerAutoUpdater(t0) {
472349
472350
  wrap: "truncate",
472350
472351
  children: [
472351
472352
  "currentVersion: ",
472352
- "1.1.14"
472353
+ "1.1.16"
472353
472354
  ]
472354
472355
  }, undefined, true, undefined, this);
472355
472356
  $2[3] = verbose;
@@ -479907,7 +479908,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
479907
479908
  project_dir: getOriginalCwd(),
479908
479909
  added_dirs: addedDirs
479909
479910
  },
479910
- version: "1.1.14",
479911
+ version: "1.1.16",
479911
479912
  output_style: {
479912
479913
  name: outputStyleName
479913
479914
  },
@@ -491467,7 +491468,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
491467
491468
  } catch {}
491468
491469
  const data = {
491469
491470
  trigger,
491470
- version: "1.1.14",
491471
+ version: "1.1.16",
491471
491472
  platform: process.platform,
491472
491473
  transcript,
491473
491474
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -492275,7 +492276,7 @@ function TranscriptSharePrompt(t0) {
492275
492276
  }, undefined, true, undefined, this),
492276
492277
  /* @__PURE__ */ jsx_dev_runtime455.jsxDEV(ThemedText, {
492277
492278
  bold: true,
492278
- children: "Can Anthropic look at your session transcript to help us improve Claude Code?"
492279
+ children: "Can we look at your session transcript to help improve localclawd?"
492279
492280
  }, undefined, false, undefined, this)
492280
492281
  ]
492281
492282
  }, undefined, true, undefined, this);
@@ -493211,7 +493212,7 @@ function DesktopUpsellStartup(t0) {
493211
493212
  let t3;
493212
493213
  if ($2[5] === Symbol.for("react.memo_cache_sentinel")) {
493213
493214
  t3 = {
493214
- label: "Open in Claude Code Desktop",
493215
+ label: "Open in localclawd desktop",
493215
493216
  value: "try"
493216
493217
  };
493217
493218
  $2[5] = t3;
@@ -493244,7 +493245,7 @@ function DesktopUpsellStartup(t0) {
493244
493245
  t6 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
493245
493246
  marginBottom: 1,
493246
493247
  children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedText, {
493247
- children: "Same Claude Code with visual diffs, live app preview, parallel sessions, and more."
493248
+ children: "Same localclawd with visual diffs, live app preview, parallel sessions, and more."
493248
493249
  }, undefined, false, undefined, this)
493249
493250
  }, undefined, false, undefined, this);
493250
493251
  $2[8] = t6;
@@ -493262,7 +493263,7 @@ function DesktopUpsellStartup(t0) {
493262
493263
  let t8;
493263
493264
  if ($2[11] !== handleSelect || $2[12] !== t7) {
493264
493265
  t8 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(PermissionDialog, {
493265
- title: "Try Claude Code Desktop",
493266
+ title: "Try localclawd desktop",
493266
493267
  children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
493267
493268
  flexDirection: "column",
493268
493269
  paddingX: 2,
@@ -495279,31 +495280,6 @@ function useMcpConnectivityStatus(t0) {
495279
495280
  priority: "medium"
495280
495281
  });
495281
495282
  }
495282
- if (failedClaudeAiClients.length > 0) {
495283
- addNotification({
495284
- key: "mcp-claudeai-failed",
495285
- jsx: /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(jsx_dev_runtime462.Fragment, {
495286
- children: [
495287
- /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(ThemedText, {
495288
- color: "error",
495289
- children: [
495290
- failedClaudeAiClients.length,
495291
- " claude.ai",
495292
- " ",
495293
- failedClaudeAiClients.length === 1 ? "connector" : "connectors",
495294
- " ",
495295
- "unavailable"
495296
- ]
495297
- }, undefined, true, undefined, this),
495298
- /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(ThemedText, {
495299
- dimColor: true,
495300
- children: " · /mcp"
495301
- }, undefined, false, undefined, this)
495302
- ]
495303
- }, undefined, true, undefined, this),
495304
- priority: "medium"
495305
- });
495306
- }
495307
495283
  if (needsAuthLocalServers.length > 0) {
495308
495284
  addNotification({
495309
495285
  key: "mcp-needs-auth",
@@ -495329,31 +495305,6 @@ function useMcpConnectivityStatus(t0) {
495329
495305
  priority: "medium"
495330
495306
  });
495331
495307
  }
495332
- if (needsAuthClaudeAiServers.length > 0) {
495333
- addNotification({
495334
- key: "mcp-claudeai-needs-auth",
495335
- jsx: /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(jsx_dev_runtime462.Fragment, {
495336
- children: [
495337
- /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(ThemedText, {
495338
- color: "warning",
495339
- children: [
495340
- needsAuthClaudeAiServers.length,
495341
- " claude.ai",
495342
- " ",
495343
- needsAuthClaudeAiServers.length === 1 ? "connector needs" : "connectors need",
495344
- " ",
495345
- "auth"
495346
- ]
495347
- }, undefined, true, undefined, this),
495348
- /* @__PURE__ */ jsx_dev_runtime462.jsxDEV(ThemedText, {
495349
- dimColor: true,
495350
- children: " · /mcp"
495351
- }, undefined, false, undefined, this)
495352
- ]
495353
- }, undefined, true, undefined, this),
495354
- priority: "medium"
495355
- });
495356
- }
495357
495308
  };
495358
495309
  t3 = [addNotification, mcpClients];
495359
495310
  $2[0] = addNotification;
@@ -497577,6 +497528,7 @@ function useCanSwitchToExistingSubscription() {
497577
497528
  useStartupNotification(_temp297);
497578
497529
  }
497579
497530
  async function _temp297() {
497531
+ return null;
497580
497532
  if ((getGlobalConfig().subscriptionNoticeCount ?? 0) >= MAX_SHOW_COUNT2) {
497581
497533
  return null;
497582
497534
  }
@@ -507191,7 +507143,7 @@ function cliOk(msg) {
507191
507143
 
507192
507144
  // src/commands/mcp/addCommand.ts
507193
507145
  function registerMcpAddCommand(mcp2) {
507194
- mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to Claude Code.
507146
+ mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to localclawd.
507195
507147
 
507196
507148
  ` + `Examples:
507197
507149
  ` + ` # Add HTTP server:
@@ -507930,7 +507882,7 @@ function appendToLog(path17, message) {
507930
507882
  cwd: getFsImplementation().cwd(),
507931
507883
  userType: process.env.USER_TYPE,
507932
507884
  sessionId: getSessionId(),
507933
- version: "1.1.14"
507885
+ version: "1.1.16"
507934
507886
  };
507935
507887
  getLogWriter(path17).write(messageWithTimestamp);
507936
507888
  }
@@ -511930,8 +511882,8 @@ async function getEnvLessBridgeConfig() {
511930
511882
  }
511931
511883
  async function checkEnvLessBridgeMinVersion() {
511932
511884
  const cfg = await getEnvLessBridgeConfig();
511933
- if (cfg.min_version && lt("1.1.14", cfg.min_version)) {
511934
- return `Your version of localclawd (${"1.1.14"}) is too old for Remote Control.
511885
+ if (cfg.min_version && lt("1.1.16", cfg.min_version)) {
511886
+ return `Your version of localclawd (${"1.1.16"}) is too old for Remote Control.
511935
511887
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
511936
511888
  }
511937
511889
  return null;
@@ -512403,7 +512355,7 @@ async function initBridgeCore(params) {
512403
512355
  const rawApi = createBridgeApiClient({
512404
512356
  baseUrl,
512405
512357
  getAccessToken,
512406
- runnerVersion: "1.1.14",
512358
+ runnerVersion: "1.1.16",
512407
512359
  onDebug: logForDebugging,
512408
512360
  onAuth401,
512409
512361
  getTrustedDeviceToken
@@ -518059,7 +518011,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
518059
518011
  setCwd(cwd3);
518060
518012
  const server = new Server({
518061
518013
  name: "claude/tengu",
518062
- version: "1.1.14"
518014
+ version: "1.1.16"
518063
518015
  }, {
518064
518016
  capabilities: {
518065
518017
  tools: {}
@@ -519140,7 +519092,7 @@ function WelcomeV2() {
519140
519092
  dimColor: true,
519141
519093
  children: [
519142
519094
  "v",
519143
- "1.1.14"
519095
+ "1.1.16"
519144
519096
  ]
519145
519097
  }, undefined, true, undefined, this)
519146
519098
  ]
@@ -519560,7 +519512,7 @@ async function setupTokenHandler(root3) {
519560
519512
  resolve40();
519561
519513
  },
519562
519514
  mode: "setup-token",
519563
- startingMessage: "This will guide you through long-lived (1-year) auth token setup for your Claude account. Claude subscription required."
519515
+ startingMessage: "This will guide you through long-lived (1-year) auth token setup."
519564
519516
  }, undefined, false, undefined, this)
519565
519517
  ]
519566
519518
  }, undefined, true, undefined, this)
@@ -519709,7 +519661,7 @@ __export(exports_update, {
519709
519661
  });
519710
519662
  async function update() {
519711
519663
  logEvent("tengu_update_check", {});
519712
- writeToStdout(`Current version: ${"1.1.14"}
519664
+ writeToStdout(`Current version: ${"1.1.16"}
519713
519665
  `);
519714
519666
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
519715
519667
  writeToStdout(`Checking for updates to ${channel} version...
@@ -519784,8 +519736,8 @@ async function update() {
519784
519736
  writeToStdout(`localclawd is managed by Homebrew.
519785
519737
  `);
519786
519738
  const latest = await getLatestVersion(channel);
519787
- if (latest && !gte("1.1.14", latest)) {
519788
- writeToStdout(`Update available: ${"1.1.14"} → ${latest}
519739
+ if (latest && !gte("1.1.16", latest)) {
519740
+ writeToStdout(`Update available: ${"1.1.16"} → ${latest}
519789
519741
  `);
519790
519742
  writeToStdout(`
519791
519743
  `);
@@ -519801,8 +519753,8 @@ async function update() {
519801
519753
  writeToStdout(`localclawd is managed by winget.
519802
519754
  `);
519803
519755
  const latest = await getLatestVersion(channel);
519804
- if (latest && !gte("1.1.14", latest)) {
519805
- writeToStdout(`Update available: ${"1.1.14"} → ${latest}
519756
+ if (latest && !gte("1.1.16", latest)) {
519757
+ writeToStdout(`Update available: ${"1.1.16"} → ${latest}
519806
519758
  `);
519807
519759
  writeToStdout(`
519808
519760
  `);
@@ -519816,8 +519768,8 @@ async function update() {
519816
519768
  writeToStdout(`localclawd is managed by apk.
519817
519769
  `);
519818
519770
  const latest = await getLatestVersion(channel);
519819
- if (latest && !gte("1.1.14", latest)) {
519820
- writeToStdout(`Update available: ${"1.1.14"} → ${latest}
519771
+ if (latest && !gte("1.1.16", latest)) {
519772
+ writeToStdout(`Update available: ${"1.1.16"} → ${latest}
519821
519773
  `);
519822
519774
  writeToStdout(`
519823
519775
  `);
@@ -519882,11 +519834,11 @@ async function update() {
519882
519834
  `);
519883
519835
  await gracefulShutdown(1);
519884
519836
  }
519885
- if (result.latestVersion === "1.1.14") {
519886
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.14"})`) + `
519837
+ if (result.latestVersion === "1.1.16") {
519838
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.16"})`) + `
519887
519839
  `);
519888
519840
  } else {
519889
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.14"} to version ${result.latestVersion}`) + `
519841
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.16"} to version ${result.latestVersion}`) + `
519890
519842
  `);
519891
519843
  await regenerateCompletionCache();
519892
519844
  }
@@ -519946,12 +519898,12 @@ async function update() {
519946
519898
  `);
519947
519899
  await gracefulShutdown(1);
519948
519900
  }
519949
- if (latestVersion === "1.1.14") {
519950
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.14"})`) + `
519901
+ if (latestVersion === "1.1.16") {
519902
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.16"})`) + `
519951
519903
  `);
519952
519904
  await gracefulShutdown(0);
519953
519905
  }
519954
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.14"})
519906
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.16"})
519955
519907
  `);
519956
519908
  writeToStdout(`Installing update...
519957
519909
  `);
@@ -519996,7 +519948,7 @@ async function update() {
519996
519948
  logForDebugging(`update: Installation status: ${status2}`);
519997
519949
  switch (status2) {
519998
519950
  case "success":
519999
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.14"} to version ${latestVersion}`) + `
519951
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.16"} to version ${latestVersion}`) + `
520000
519952
  `);
520001
519953
  await regenerateCompletionCache();
520002
519954
  break;
@@ -521105,14 +521057,33 @@ ${customInstructions}` : customInstructions;
521105
521057
  } = await Promise.resolve().then(() => (init_ink2(), exports_ink));
521106
521058
  logForDebugging("[STARTUP] Ink root module imported");
521107
521059
  startupLoadingIndicator?.stop();
521108
- root3 = await createRoot3(ctx2.renderOptions);
521060
+ try {
521061
+ root3 = await createRoot3(ctx2.renderOptions);
521062
+ } catch (err2) {
521063
+ const msg = err2 instanceof Error ? err2.message : String(err2);
521064
+ process.stderr.write(`
521065
+ localclawd: failed to initialize terminal — ${msg}
521066
+ If using VSCode, open a new terminal with Ctrl+\` and try again.
521067
+ `);
521068
+ process.exit(1);
521069
+ }
521109
521070
  logForDebugging("[STARTUP] Ink root created");
521110
521071
  logEvent("tengu_timer", {
521111
521072
  event: "startup",
521112
521073
  durationMs: Math.round(process.uptime() * 1000)
521113
521074
  });
521114
521075
  const setupScreensStart = Date.now();
521115
- const onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands2, enableClaudeInChrome, devChannels);
521076
+ let onboardingShown;
521077
+ try {
521078
+ onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands2, enableClaudeInChrome, devChannels);
521079
+ } catch (err2) {
521080
+ const msg = err2 instanceof Error ? err2.message : String(err2);
521081
+ process.stderr.write(`
521082
+ localclawd: startup error — ${msg}
521083
+ Run with --debug for more details.
521084
+ `);
521085
+ process.exit(1);
521086
+ }
521116
521087
  if (false) {}
521117
521088
  if (false) {}
521118
521089
  if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
@@ -521261,7 +521232,7 @@ ${customInstructions}` : customInstructions;
521261
521232
  }
521262
521233
  }
521263
521234
  logForDiagnosticsNoPII("info", "started", {
521264
- version: "1.1.14",
521235
+ version: "1.1.16",
521265
521236
  is_native_binary: isInBundledMode()
521266
521237
  });
521267
521238
  registerCleanup(async () => {
@@ -522045,7 +522016,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522045
522016
  pendingHookMessages
522046
522017
  }, renderAndRun);
522047
522018
  }
522048
- }).version("1.1.14 (localClawd)", "-v, --version", "Output the version number");
522019
+ }).version("1.1.16 (localClawd)", "-v, --version", "Output the version number");
522049
522020
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
522050
522021
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
522051
522022
  if (canUserConfigureAdvisor()) {
@@ -522136,8 +522107,8 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522136
522107
  if (false) {}
522137
522108
  if (false) {}
522138
522109
  if (false) {}
522139
- const auth2 = program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
522140
- 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 ({
522110
+ const auth2 = program2.command("auth").description("Manage API authentication").hideHelp().configureHelp(createSortedHelpConfig());
522111
+ 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 ({
522141
522112
  email,
522142
522113
  sso,
522143
522114
  console: useConsole,
@@ -522159,7 +522130,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522159
522130
  } = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
522160
522131
  await authStatus2(opts);
522161
522132
  });
522162
- auth2.command("logout").description("Log out from your Anthropic account").action(async () => {
522133
+ auth2.command("logout").description("Sign out").action(async () => {
522163
522134
  const {
522164
522135
  authLogout: authLogout2
522165
522136
  } = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
@@ -522553,7 +522524,7 @@ if (false) {}
522553
522524
  async function main2() {
522554
522525
  const args = process.argv.slice(2);
522555
522526
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
522556
- console.log(`${"1.1.14"} (localclawd)`);
522527
+ console.log(`${"1.1.16"} (localclawd)`);
522557
522528
  return;
522558
522529
  }
522559
522530
  const {
@@ -522635,6 +522606,19 @@ async function main2() {
522635
522606
  await cliMain();
522636
522607
  profileCheckpoint2("cli_after_main_complete");
522637
522608
  }
522638
- main2();
522609
+ process.on("unhandledRejection", (reason) => {
522610
+ const msg = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
522611
+ process.stderr.write(`
522612
+ localclawd: unhandled error — ${msg}
522613
+ `);
522614
+ process.exit(1);
522615
+ });
522616
+ main2().catch((err2) => {
522617
+ const msg = err2 instanceof Error ? err2.stack ?? err2.message : String(err2);
522618
+ process.stderr.write(`
522619
+ localclawd crashed: ${msg}
522620
+ `);
522621
+ process.exit(1);
522622
+ });
522639
522623
 
522640
- //# debugId=D2EDD6030256A37964756E2164756E21
522624
+ //# debugId=5C73951C8879C82664756E2164756E21