localclawd 1.1.9 → 1.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.mjs +305 -418
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -89253,7 +89253,7 @@ var init_isEqual = __esm(() => {
89253
89253
 
89254
89254
  // src/utils/userAgent.ts
89255
89255
  function getClaudeCodeUserAgent() {
89256
- return `claude-code/${"1.1.9"}`;
89256
+ return `claude-code/${"1.1.10"}`;
89257
89257
  }
89258
89258
 
89259
89259
  // src/utils/workloadContext.ts
@@ -89275,7 +89275,7 @@ function getUserAgent() {
89275
89275
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
89276
89276
  const workload = getWorkload();
89277
89277
  const workloadSuffix = workload ? `, workload/${workload}` : "";
89278
- return `claude-cli/${"1.1.9"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89278
+ return `claude-cli/${"1.1.10"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89279
89279
  }
89280
89280
  function getMCPUserAgent() {
89281
89281
  const parts = [];
@@ -89289,7 +89289,7 @@ function getMCPUserAgent() {
89289
89289
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
89290
89290
  }
89291
89291
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
89292
- return `claude-code/${"1.1.9"}${suffix}`;
89292
+ return `claude-code/${"1.1.10"}${suffix}`;
89293
89293
  }
89294
89294
  function getWebFetchUserAgent() {
89295
89295
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -99198,7 +99198,7 @@ function getAttributionHeader(fingerprint) {
99198
99198
  if (!isAttributionHeaderEnabled()) {
99199
99199
  return "";
99200
99200
  }
99201
- const version = `${"1.1.9"}.${fingerprint}`;
99201
+ const version = `${"1.1.10"}.${fingerprint}`;
99202
99202
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
99203
99203
  const cch = "";
99204
99204
  const workload = getWorkload();
@@ -104752,7 +104752,7 @@ function parseKey(keypress) {
104752
104752
  wheelDown: keypress.name === "wheeldown",
104753
104753
  home: keypress.name === "home",
104754
104754
  end: keypress.name === "end",
104755
- return: keypress.name === "return",
104755
+ return: keypress.name === "return" || keypress.name === "enter",
104756
104756
  escape: keypress.name === "escape",
104757
104757
  fn: keypress.fn,
104758
104758
  ctrl: keypress.ctrl,
@@ -132745,7 +132745,7 @@ var init_metadata = __esm(() => {
132745
132745
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
132746
132746
  WHITESPACE_REGEX = /\s+/;
132747
132747
  getVersionBase = memoize_default(() => {
132748
- const match = "1.1.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132748
+ const match = "1.1.10".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132749
132749
  return match ? match[0] : undefined;
132750
132750
  });
132751
132751
  buildEnvContext = memoize_default(async () => {
@@ -132785,9 +132785,9 @@ var init_metadata = __esm(() => {
132785
132785
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
132786
132786
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
132787
132787
  isClaudeAiAuth: isClaudeAISubscriber(),
132788
- version: "1.1.9",
132788
+ version: "1.1.10",
132789
132789
  versionBase: getVersionBase(),
132790
- buildTime: "2026-04-07T13:39:54.752Z",
132790
+ buildTime: "2026-04-07T13:57:33.526Z",
132791
132791
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
132792
132792
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
132793
132793
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -197374,7 +197374,7 @@ function getTelemetryAttributes() {
197374
197374
  attributes["session.id"] = sessionId;
197375
197375
  }
197376
197376
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
197377
- attributes["app.version"] = "1.1.9";
197377
+ attributes["app.version"] = "1.1.10";
197378
197378
  }
197379
197379
  const oauthAccount = getOauthAccountInfo();
197380
197380
  if (oauthAccount) {
@@ -229435,7 +229435,7 @@ function getInstallationEnv() {
229435
229435
  return;
229436
229436
  }
229437
229437
  function getClaudeCodeVersion() {
229438
- return "1.1.9";
229438
+ return "1.1.10";
229439
229439
  }
229440
229440
  async function getInstalledVSCodeExtensionVersion(command) {
229441
229441
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -235037,7 +235037,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
235037
235037
  const client4 = new Client({
235038
235038
  name: "claude-code",
235039
235039
  title: "Claude Code",
235040
- version: "1.1.9",
235040
+ version: "1.1.10",
235041
235041
  description: "Anthropic's agentic coding tool",
235042
235042
  websiteUrl: PRODUCT_URL
235043
235043
  }, {
@@ -235390,7 +235390,7 @@ var init_client9 = __esm(() => {
235390
235390
  const client4 = new Client({
235391
235391
  name: "claude-code",
235392
235392
  title: "Claude Code",
235393
- version: "1.1.9",
235393
+ version: "1.1.10",
235394
235394
  description: "Anthropic's agentic coding tool",
235395
235395
  websiteUrl: PRODUCT_URL
235396
235396
  }, {
@@ -258581,7 +258581,7 @@ var init_user = __esm(() => {
258581
258581
  deviceId,
258582
258582
  sessionId: getSessionId(),
258583
258583
  email: getEmail(),
258584
- appVersion: "1.1.9",
258584
+ appVersion: "1.1.10",
258585
258585
  platform: getHostPlatformForAnalytics(),
258586
258586
  organizationUuid,
258587
258587
  accountUuid,
@@ -259905,7 +259905,7 @@ async function initializeBetaTracing(resource) {
259905
259905
  });
259906
259906
  logs.setGlobalLoggerProvider(loggerProvider);
259907
259907
  setLoggerProvider(loggerProvider);
259908
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.9");
259908
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.10");
259909
259909
  setEventLogger(eventLogger);
259910
259910
  process.on("beforeExit", async () => {
259911
259911
  await loggerProvider?.forceFlush();
@@ -259945,7 +259945,7 @@ async function initializeTelemetry() {
259945
259945
  const platform3 = getPlatform();
259946
259946
  const baseAttributes = {
259947
259947
  [ATTR_SERVICE_NAME5]: "claude-code",
259948
- [ATTR_SERVICE_VERSION5]: "1.1.9"
259948
+ [ATTR_SERVICE_VERSION5]: "1.1.10"
259949
259949
  };
259950
259950
  if (platform3 === "wsl") {
259951
259951
  const wslVersion = getWslVersion();
@@ -259990,7 +259990,7 @@ async function initializeTelemetry() {
259990
259990
  } catch {}
259991
259991
  };
259992
259992
  registerCleanup(shutdownTelemetry2);
259993
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.9");
259993
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.10");
259994
259994
  }
259995
259995
  const meterProvider = new MeterProvider5({
259996
259996
  resource,
@@ -260010,7 +260010,7 @@ async function initializeTelemetry() {
260010
260010
  });
260011
260011
  logs.setGlobalLoggerProvider(loggerProvider);
260012
260012
  setLoggerProvider(loggerProvider);
260013
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.9");
260013
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.10");
260014
260014
  setEventLogger(eventLogger);
260015
260015
  logForDebugging("[3P telemetry] Event logger set successfully");
260016
260016
  process.on("beforeExit", async () => {
@@ -260072,7 +260072,7 @@ Current timeout: ${timeoutMs}ms
260072
260072
  }
260073
260073
  };
260074
260074
  registerCleanup(shutdownTelemetry);
260075
- return meterProvider.getMeter("com.anthropic.claude_code", "1.1.9");
260075
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.1.10");
260076
260076
  }
260077
260077
  async function flushTelemetry() {
260078
260078
  const meterProvider = getMeterProvider();
@@ -261295,7 +261295,7 @@ function detectLinuxGlobPatternWarnings() {
261295
261295
  }
261296
261296
  async function getDoctorDiagnostic() {
261297
261297
  const installationType = await getCurrentInstallationType();
261298
- const version = typeof MACRO !== "undefined" ? "1.1.9" : "unknown";
261298
+ const version = typeof MACRO !== "undefined" ? "1.1.10" : "unknown";
261299
261299
  const installationPath = await getInstallationPath();
261300
261300
  const invokedBinary = getInvokedBinary();
261301
261301
  const multipleInstallations = await detectMultipleInstallations();
@@ -262236,8 +262236,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262236
262236
  const maxVersion = await getMaxVersion();
262237
262237
  if (maxVersion && gt(version, maxVersion)) {
262238
262238
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
262239
- if (gte("1.1.9", maxVersion)) {
262240
- logForDebugging(`Native installer: current version ${"1.1.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
262239
+ if (gte("1.1.10", maxVersion)) {
262240
+ logForDebugging(`Native installer: current version ${"1.1.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
262241
262241
  logEvent("tengu_native_update_skipped_max_version", {
262242
262242
  latency_ms: Date.now() - startTime,
262243
262243
  max_version: maxVersion,
@@ -262248,7 +262248,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262248
262248
  version = maxVersion;
262249
262249
  }
262250
262250
  }
262251
- if (!forceReinstall && version === "1.1.9" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262251
+ if (!forceReinstall && version === "1.1.10" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262252
262252
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
262253
262253
  logEvent("tengu_native_update_complete", {
262254
262254
  latency_ms: Date.now() - startTime,
@@ -334468,7 +334468,7 @@ function getAnthropicEnvMetadata() {
334468
334468
  function getBuildAgeMinutes() {
334469
334469
  if (false)
334470
334470
  ;
334471
- const buildTime = new Date("2026-04-07T13:39:54.752Z").getTime();
334471
+ const buildTime = new Date("2026-04-07T13:57:33.526Z").getTime();
334472
334472
  if (isNaN(buildTime))
334473
334473
  return;
334474
334474
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -358534,7 +358534,7 @@ function Feedback({
358534
358534
  platform: env4.platform,
358535
358535
  gitRepo: envInfo.isGit,
358536
358536
  terminal: env4.terminal,
358537
- version: "1.1.9",
358537
+ version: "1.1.10",
358538
358538
  transcript: normalizeMessagesForAPI(messages),
358539
358539
  errors: sanitizedErrors,
358540
358540
  lastApiRequest: getLastAPIRequest(),
@@ -358726,7 +358726,7 @@ function Feedback({
358726
358726
  ", ",
358727
358727
  env4.terminal,
358728
358728
  ", v",
358729
- "1.1.9"
358729
+ "1.1.10"
358730
358730
  ]
358731
358731
  }, undefined, true, undefined, this)
358732
358732
  ]
@@ -358832,7 +358832,7 @@ ${sanitizedDescription}
358832
358832
  ` + `**Environment Info**
358833
358833
  ` + `- Platform: ${env4.platform}
358834
358834
  ` + `- Terminal: ${env4.terminal}
358835
- ` + `- Version: ${"1.1.9"}
358835
+ ` + `- Version: ${"1.1.10"}
358836
358836
  ` + `- Feedback ID: ${feedbackId}
358837
358837
  ` + `
358838
358838
  **Errors**
@@ -361945,7 +361945,7 @@ function buildPrimarySection() {
361945
361945
  }, undefined, false, undefined, this);
361946
361946
  return [{
361947
361947
  label: "Version",
361948
- value: "1.1.9"
361948
+ value: "1.1.10"
361949
361949
  }, {
361950
361950
  label: "Session name",
361951
361951
  value: nameValue
@@ -363516,51 +363516,29 @@ function SimpleMenu({ items, isActive, onSelect, onCancel }) {
363516
363516
  const VISIBLE = Math.min(7, items.length);
363517
363517
  const [focusIdx, setFocusIdx] = import_react100.useState(0);
363518
363518
  const [fromIdx, setFromIdx] = import_react100.useState(0);
363519
- const stateRef = import_react100.useRef({ focusIdx: 0, fromIdx: 0, items, done: false });
363520
- stateRef.current.items = items;
363521
- import_react100.useEffect(() => {
363522
- if (!isActive)
363523
- return;
363524
- stateRef.current.done = false;
363525
- if (!process.stdin.readableFlowing) {
363526
- process.stdin.resume();
363527
- }
363528
- const onData = (chunk) => {
363529
- const str2 = typeof chunk === "string" ? chunk : chunk.toString("utf8");
363530
- const s = stateRef.current;
363531
- const visible2 = Math.min(VISIBLE, s.items.length);
363532
- if (str2 === "\x1B[A" || str2 === "\x1BOA" || str2 === "k") {
363533
- const next = Math.max(0, s.focusIdx - 1);
363534
- const nextFrom = next < s.fromIdx ? next : s.fromIdx;
363535
- stateRef.current.focusIdx = next;
363536
- stateRef.current.fromIdx = nextFrom;
363537
- setFocusIdx(next);
363538
- setFromIdx(nextFrom);
363539
- } else if (str2 === "\x1B[B" || str2 === "\x1BOB" || str2 === "j") {
363540
- const next = Math.min(s.items.length - 1, s.focusIdx + 1);
363541
- const nextFrom = next >= s.fromIdx + visible2 ? next - visible2 + 1 : s.fromIdx;
363542
- stateRef.current.focusIdx = next;
363543
- stateRef.current.fromIdx = nextFrom;
363544
- setFocusIdx(next);
363545
- setFromIdx(nextFrom);
363546
- } else if (str2 === "\r" || str2 === `
363547
- ` || str2 === `\r
363548
- `) {
363549
- if (s.done)
363550
- return;
363551
- stateRef.current.done = true;
363552
- const item = s.items[s.focusIdx];
363553
- if (item)
363554
- onSelect(item.value);
363555
- } else if (str2 === "\x1B" || str2 === "\x1B\x1B") {
363556
- onCancel?.();
363557
- }
363558
- };
363559
- process.stdin.on("data", onData);
363560
- return () => {
363561
- process.stdin.off("data", onData);
363562
- };
363563
- }, [isActive, onSelect, onCancel]);
363519
+ use_input_default((_input, key) => {
363520
+ if (key.upArrow) {
363521
+ setFocusIdx((prev) => {
363522
+ const next = Math.max(0, prev - 1);
363523
+ if (next < fromIdx)
363524
+ setFromIdx(next);
363525
+ return next;
363526
+ });
363527
+ } else if (key.downArrow) {
363528
+ setFocusIdx((prev) => {
363529
+ const next = Math.min(items.length - 1, prev + 1);
363530
+ if (next >= fromIdx + VISIBLE)
363531
+ setFromIdx(next - VISIBLE + 1);
363532
+ return next;
363533
+ });
363534
+ } else if (key.return) {
363535
+ const item = items[focusIdx];
363536
+ if (item)
363537
+ onSelect(item.value);
363538
+ } else if (key.escape) {
363539
+ onCancel?.();
363540
+ }
363541
+ }, { isActive });
363564
363542
  const visible = items.slice(fromIdx, fromIdx + VISIBLE);
363565
363543
  const showScrollUp = fromIdx > 0;
363566
363544
  const showScrollDown = fromIdx + VISIBLE < items.length;
@@ -363651,45 +363629,25 @@ function LocalBackendSetup({
363651
363629
  const nextValue = step === "baseUrl" ? baseUrl : step === "model" ? model : apiKey;
363652
363630
  setCursorOffset(nextValue.length);
363653
363631
  }, [step, baseUrl, model, apiKey]);
363654
- const scanStepActive = step === "networkScan" || step === "scanningModels";
363655
- const scanStepRef = import_react100.useRef(step);
363656
- scanStepRef.current = step;
363657
- import_react100.useEffect(() => {
363658
- if (!scanStepActive)
363659
- return;
363660
- if (!process.stdin.readableFlowing) {
363661
- process.stdin.resume();
363662
- }
363663
- const onData = (chunk) => {
363664
- const str2 = typeof chunk === "string" ? chunk : chunk.toString("utf8");
363665
- const current = scanStepRef.current;
363666
- if (current === "networkScan") {
363667
- if (str2 === "\x1B" || str2 === "\x1B\x1B" || str2 === "\r" || str2 === `
363668
- ` || str2 === `\r
363669
- `) {
363670
- networkAbortRef.current?.abort();
363671
- setDiscoveredEndpoints(discoveredSnapshotRef.current);
363672
- setStep("selectEndpoint");
363673
- }
363674
- } else if (current === "scanningModels") {
363675
- if (str2 === "\x1B" || str2 === "\x1B\x1B") {
363676
- modelScanAbortRef.current?.abort();
363677
- goBack();
363678
- } else if (str2 === "\r" || str2 === `
363679
- ` || str2 === `\r
363680
- `) {
363681
- modelScanAbortRef.current?.abort();
363682
- setScanError("Model scan skipped. Enter the model name manually.");
363683
- setAvailableModels([]);
363684
- setStep("model");
363685
- }
363632
+ use_input_default((_input, key) => {
363633
+ if (step === "networkScan") {
363634
+ if (key.escape || key.return) {
363635
+ networkAbortRef.current?.abort();
363636
+ setDiscoveredEndpoints(discoveredSnapshotRef.current);
363637
+ setStep("selectEndpoint");
363686
363638
  }
363687
- };
363688
- process.stdin.on("data", onData);
363689
- return () => {
363690
- process.stdin.off("data", onData);
363691
- };
363692
- }, [scanStepActive]);
363639
+ } else if (step === "scanningModels") {
363640
+ if (key.escape) {
363641
+ modelScanAbortRef.current?.abort();
363642
+ goBack();
363643
+ } else if (key.return) {
363644
+ modelScanAbortRef.current?.abort();
363645
+ setScanError("Model scan skipped. Enter the model name manually.");
363646
+ setAvailableModels([]);
363647
+ setStep("model");
363648
+ }
363649
+ }
363650
+ }, { isActive: step === "networkScan" || step === "scanningModels" });
363693
363651
  function goBack() {
363694
363652
  setError(null);
363695
363653
  switch (step) {
@@ -366595,7 +366553,7 @@ function Config({
366595
366553
  }
366596
366554
  }, undefined, false, undefined, this)
366597
366555
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
366598
- currentVersion: "1.1.9",
366556
+ currentVersion: "1.1.10",
366599
366557
  onChoice: (choice) => {
366600
366558
  setShowSubmenu(null);
366601
366559
  setTabsHidden(false);
@@ -366607,7 +366565,7 @@ function Config({
366607
366565
  autoUpdatesChannel: "stable"
366608
366566
  };
366609
366567
  if (choice === "stay") {
366610
- newSettings.minimumVersion = "1.1.9";
366568
+ newSettings.minimumVersion = "1.1.10";
366611
366569
  }
366612
366570
  updateSettingsForSource("userSettings", newSettings);
366613
366571
  setSettingsData((prev_27) => ({
@@ -376339,7 +376297,7 @@ function HelpV2(t0) {
376339
376297
  let t6;
376340
376298
  if ($2[31] !== tabs) {
376341
376299
  t6 = /* @__PURE__ */ jsx_dev_runtime214.jsxDEV(Tabs, {
376342
- title: `localclawd v${"1.1.9"}`,
376300
+ title: `localclawd v${"1.1.10"}`,
376343
376301
  color: "professionalBlue",
376344
376302
  defaultTab: "general",
376345
376303
  children: tabs
@@ -400497,7 +400455,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
400497
400455
  return [];
400498
400456
  }
400499
400457
  }
400500
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.9") {
400458
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.10") {
400501
400459
  if (process.env.USER_TYPE === "ant") {
400502
400460
  const changelog = MACRO.VERSION_CHANGELOG;
400503
400461
  if (changelog) {
@@ -400524,7 +400482,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.9") {
400524
400482
  releaseNotes
400525
400483
  };
400526
400484
  }
400527
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.9") {
400485
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.10") {
400528
400486
  if (process.env.USER_TYPE === "ant") {
400529
400487
  const changelog = MACRO.VERSION_CHANGELOG;
400530
400488
  if (changelog) {
@@ -401691,7 +401649,7 @@ function getRecentActivitySync() {
401691
401649
  return cachedActivity;
401692
401650
  }
401693
401651
  function getLogoDisplayData() {
401694
- const version = process.env.DEMO_VERSION ?? "1.1.9";
401652
+ const version = process.env.DEMO_VERSION ?? "1.1.10";
401695
401653
  const serverUrl = getDirectConnectServerUrl();
401696
401654
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
401697
401655
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -402965,7 +402923,7 @@ function LogoV2() {
402965
402923
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
402966
402924
  t2 = () => {
402967
402925
  const currentConfig = getGlobalConfig();
402968
- if (currentConfig.lastReleaseNotesSeen === "1.1.9") {
402926
+ if (currentConfig.lastReleaseNotesSeen === "1.1.10") {
402969
402927
  return;
402970
402928
  }
402971
402929
  saveGlobalConfig(_temp327);
@@ -403641,12 +403599,12 @@ function LogoV2() {
403641
403599
  return t41;
403642
403600
  }
403643
403601
  function _temp327(current) {
403644
- if (current.lastReleaseNotesSeen === "1.1.9") {
403602
+ if (current.lastReleaseNotesSeen === "1.1.10") {
403645
403603
  return current;
403646
403604
  }
403647
403605
  return {
403648
403606
  ...current,
403649
- lastReleaseNotesSeen: "1.1.9"
403607
+ lastReleaseNotesSeen: "1.1.10"
403650
403608
  };
403651
403609
  }
403652
403610
  function _temp245(s_0) {
@@ -429848,7 +429806,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
429848
429806
  smapsRollup,
429849
429807
  platform: process.platform,
429850
429808
  nodeVersion: process.version,
429851
- ccVersion: "1.1.9"
429809
+ ccVersion: "1.1.10"
429852
429810
  };
429853
429811
  }
429854
429812
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -430433,7 +430391,7 @@ var init_bridge_kick = __esm(() => {
430433
430391
  var call64 = async () => {
430434
430392
  return {
430435
430393
  type: "text",
430436
- value: `${"1.1.9"} (built ${"2026-04-07T13:39:54.752Z"})`
430394
+ value: `${"1.1.10"} (built ${"2026-04-07T13:57:33.526Z"})`
430437
430395
  };
430438
430396
  }, version, version_default;
430439
430397
  var init_version = __esm(() => {
@@ -439369,7 +439327,7 @@ function generateHtmlReport(data, insights) {
439369
439327
  </html>`;
439370
439328
  }
439371
439329
  function buildExportData(data, insights, facets, remoteStats) {
439372
- const version2 = typeof MACRO !== "undefined" ? "1.1.9" : "unknown";
439330
+ const version2 = typeof MACRO !== "undefined" ? "1.1.10" : "unknown";
439373
439331
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
439374
439332
  const facets_summary = {
439375
439333
  total: facets.size,
@@ -443536,7 +443494,7 @@ var init_sessionStorage = __esm(() => {
443536
443494
  init_settings2();
443537
443495
  init_slowOperations();
443538
443496
  init_uuid();
443539
- VERSION6 = typeof MACRO !== "undefined" ? "1.1.9" : "unknown";
443497
+ VERSION6 = typeof MACRO !== "undefined" ? "1.1.10" : "unknown";
443540
443498
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
443541
443499
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
443542
443500
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -444738,7 +444696,7 @@ var init_filesystem = __esm(() => {
444738
444696
  });
444739
444697
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
444740
444698
  const nonce = randomBytes19(16).toString("hex");
444741
- return join130(getClaudeTempDir(), "bundled-skills", "1.1.9", nonce);
444699
+ return join130(getClaudeTempDir(), "bundled-skills", "1.1.10", nonce);
444742
444700
  });
444743
444701
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
444744
444702
  });
@@ -450737,7 +450695,7 @@ function computeFingerprint(messageText, version2) {
450737
450695
  }
450738
450696
  function computeFingerprintFromMessages(messages) {
450739
450697
  const firstMessageText = extractFirstMessageText(messages);
450740
- return computeFingerprint(firstMessageText, "1.1.9");
450698
+ return computeFingerprint(firstMessageText, "1.1.10");
450741
450699
  }
450742
450700
  var FINGERPRINT_SALT = "59cf53e54c78";
450743
450701
  var init_fingerprint = () => {};
@@ -452592,7 +452550,7 @@ async function sideQuery(opts) {
452592
452550
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
452593
452551
  }
452594
452552
  const messageText = extractFirstUserMessageText(messages);
452595
- const fingerprint = computeFingerprint(messageText, "1.1.9");
452553
+ const fingerprint = computeFingerprint(messageText, "1.1.10");
452596
452554
  const attributionHeader = getAttributionHeader(fingerprint);
452597
452555
  const systemBlocks = [
452598
452556
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -457390,7 +457348,7 @@ function buildSystemInitMessage(inputs) {
457390
457348
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
457391
457349
  apiKeySource: getAnthropicApiKeyWithSource().source,
457392
457350
  betas: getSdkBetas(),
457393
- claude_code_version: "1.1.9",
457351
+ claude_code_version: "1.1.10",
457394
457352
  output_style: outputStyle2,
457395
457353
  agents: inputs.agents.map((agent) => agent.agentType),
457396
457354
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -471969,7 +471927,7 @@ var init_useVoiceEnabled = __esm(() => {
471969
471927
  function getSemverPart(version2) {
471970
471928
  return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
471971
471929
  }
471972
- function useUpdateNotification(updatedVersion, initialVersion = "1.1.9") {
471930
+ function useUpdateNotification(updatedVersion, initialVersion = "1.1.10") {
471973
471931
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
471974
471932
  if (!updatedVersion) {
471975
471933
  return null;
@@ -472009,7 +471967,7 @@ function AutoUpdater({
472009
471967
  return;
472010
471968
  }
472011
471969
  if (false) {}
472012
- const currentVersion = "1.1.9";
471970
+ const currentVersion = "1.1.10";
472013
471971
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472014
471972
  let latestVersion = await getLatestVersion(channel);
472015
471973
  const isDisabled = isAutoUpdaterDisabled();
@@ -472220,12 +472178,12 @@ function NativeAutoUpdater({
472220
472178
  logEvent("tengu_native_auto_updater_start", {});
472221
472179
  try {
472222
472180
  const maxVersion = await getMaxVersion();
472223
- if (maxVersion && gt("1.1.9", maxVersion)) {
472181
+ if (maxVersion && gt("1.1.10", maxVersion)) {
472224
472182
  const msg = await getMaxVersionMessage();
472225
472183
  setMaxVersionIssue(msg ?? "affects your version");
472226
472184
  }
472227
472185
  const result = await installLatest(channel);
472228
- const currentVersion = "1.1.9";
472186
+ const currentVersion = "1.1.10";
472229
472187
  const latencyMs = Date.now() - startTime;
472230
472188
  if (result.lockFailed) {
472231
472189
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -472360,17 +472318,17 @@ function PackageManagerAutoUpdater(t0) {
472360
472318
  const maxVersion = await getMaxVersion();
472361
472319
  if (maxVersion && latest && gt(latest, maxVersion)) {
472362
472320
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
472363
- if (gte("1.1.9", maxVersion)) {
472364
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
472321
+ if (gte("1.1.10", maxVersion)) {
472322
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
472365
472323
  setUpdateAvailable(false);
472366
472324
  return;
472367
472325
  }
472368
472326
  latest = maxVersion;
472369
472327
  }
472370
- const hasUpdate = latest && !gte("1.1.9", latest) && !shouldSkipVersion(latest);
472328
+ const hasUpdate = latest && !gte("1.1.10", latest) && !shouldSkipVersion(latest);
472371
472329
  setUpdateAvailable(!!hasUpdate);
472372
472330
  if (hasUpdate) {
472373
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.9"} -> ${latest}`);
472331
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.10"} -> ${latest}`);
472374
472332
  }
472375
472333
  };
472376
472334
  $2[0] = t1;
@@ -472404,7 +472362,7 @@ function PackageManagerAutoUpdater(t0) {
472404
472362
  wrap: "truncate",
472405
472363
  children: [
472406
472364
  "currentVersion: ",
472407
- "1.1.9"
472365
+ "1.1.10"
472408
472366
  ]
472409
472367
  }, undefined, true, undefined, this);
472410
472368
  $2[3] = verbose;
@@ -479962,7 +479920,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
479962
479920
  project_dir: getOriginalCwd(),
479963
479921
  added_dirs: addedDirs
479964
479922
  },
479965
- version: "1.1.9",
479923
+ version: "1.1.10",
479966
479924
  output_style: {
479967
479925
  name: outputStyleName
479968
479926
  },
@@ -491522,7 +491480,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
491522
491480
  } catch {}
491523
491481
  const data = {
491524
491482
  trigger,
491525
- version: "1.1.9",
491483
+ version: "1.1.10",
491526
491484
  platform: process.platform,
491527
491485
  transcript,
491528
491486
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -503111,7 +503069,7 @@ function WelcomeV2() {
503111
503069
  dimColor: true,
503112
503070
  children: [
503113
503071
  "v",
503114
- "1.1.9"
503072
+ "1.1.10"
503115
503073
  ]
503116
503074
  }, undefined, true, undefined, this)
503117
503075
  ]
@@ -503146,38 +503104,15 @@ function StartPage({ currentConfig, onDone }) {
503146
503104
  const hasSavedConfig = hasSavedBackendConfig(currentConfig);
503147
503105
  const options = hasSavedConfig ? CONTINUE_OPTIONS : SETUP_OPTIONS;
503148
503106
  const [focusIdx, setFocusIdx] = import_react321.useState(0);
503149
- const stateRef = import_react321.useRef({ focusIdx: 0, done: false, options });
503150
- stateRef.current.options = options;
503151
- import_react321.useEffect(() => {
503152
- if (!process.stdin.readableFlowing) {
503153
- process.stdin.resume();
503107
+ use_input_default((_input, key) => {
503108
+ if (key.upArrow) {
503109
+ setFocusIdx((i2) => (i2 - 1 + options.length) % options.length);
503110
+ } else if (key.downArrow) {
503111
+ setFocusIdx((i2) => (i2 + 1) % options.length);
503112
+ } else if (key.return) {
503113
+ onDone(options[focusIdx].value);
503154
503114
  }
503155
- const onData = (chunk2) => {
503156
- const str2 = typeof chunk2 === "string" ? chunk2 : chunk2.toString("utf8");
503157
- if (str2 === "\x1B[A" || str2 === "\x1BOA") {
503158
- const next = (stateRef.current.focusIdx - 1 + stateRef.current.options.length) % stateRef.current.options.length;
503159
- stateRef.current.focusIdx = next;
503160
- setFocusIdx(next);
503161
- } else if (str2 === "\x1B[B" || str2 === "\x1BOB") {
503162
- const next = (stateRef.current.focusIdx + 1) % stateRef.current.options.length;
503163
- stateRef.current.focusIdx = next;
503164
- setFocusIdx(next);
503165
- } else if (str2 === "\r" || str2 === `
503166
- ` || str2 === `\r
503167
- `) {
503168
- if (stateRef.current.done)
503169
- return;
503170
- stateRef.current.done = true;
503171
- const chosen = stateRef.current.options[stateRef.current.focusIdx];
503172
- if (chosen)
503173
- onDone(chosen.value);
503174
- }
503175
- };
503176
- process.stdin.on("data", onData);
503177
- return () => {
503178
- process.stdin.off("data", onData);
503179
- };
503180
- }, [onDone]);
503115
+ });
503181
503116
  return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
503182
503117
  flexDirection: "column",
503183
503118
  gap: 1,
@@ -503452,51 +503387,33 @@ var exports_Onboarding = {};
503452
503387
  __export(exports_Onboarding, {
503453
503388
  Onboarding: () => Onboarding
503454
503389
  });
503455
- function SimpleMenu2({ items, onSelect, onCancel }) {
503390
+ function SimpleMenu2({ items, isActive, onSelect, onCancel }) {
503456
503391
  const VISIBLE = Math.min(7, items.length);
503457
503392
  const [focusIdx, setFocusIdx] = import_react324.useState(0);
503458
503393
  const [fromIdx, setFromIdx] = import_react324.useState(0);
503459
- const stateRef = import_react324.useRef({ focusIdx: 0, fromIdx: 0, items, done: false });
503460
- stateRef.current.items = items;
503461
- import_react324.useEffect(() => {
503462
- if (!process.stdin.readableFlowing)
503463
- process.stdin.resume();
503464
- const onData = (chunk2) => {
503465
- const str2 = typeof chunk2 === "string" ? chunk2 : chunk2.toString("utf8");
503466
- const s = stateRef.current;
503467
- const vis = Math.min(VISIBLE, s.items.length);
503468
- if (str2 === "\x1B[A" || str2 === "\x1BOA") {
503469
- const next = Math.max(0, s.focusIdx - 1);
503470
- const nextFrom = next < s.fromIdx ? next : s.fromIdx;
503471
- stateRef.current.focusIdx = next;
503472
- stateRef.current.fromIdx = nextFrom;
503473
- setFocusIdx(next);
503474
- setFromIdx(nextFrom);
503475
- } else if (str2 === "\x1B[B" || str2 === "\x1BOB") {
503476
- const next = Math.min(s.items.length - 1, s.focusIdx + 1);
503477
- const nextFrom = next >= s.fromIdx + vis ? next - vis + 1 : s.fromIdx;
503478
- stateRef.current.focusIdx = next;
503479
- stateRef.current.fromIdx = nextFrom;
503480
- setFocusIdx(next);
503481
- setFromIdx(nextFrom);
503482
- } else if (str2 === "\r" || str2 === `
503483
- ` || str2 === `\r
503484
- `) {
503485
- if (s.done)
503486
- return;
503487
- stateRef.current.done = true;
503488
- const item = s.items[s.focusIdx];
503489
- if (item)
503490
- onSelect(item.value);
503491
- } else if (str2 === "\x1B" || str2 === "\x1B\x1B") {
503492
- onCancel?.();
503493
- }
503494
- };
503495
- process.stdin.on("data", onData);
503496
- return () => {
503497
- process.stdin.off("data", onData);
503498
- };
503499
- }, [onSelect, onCancel]);
503394
+ use_input_default((_input, key) => {
503395
+ if (key.upArrow) {
503396
+ setFocusIdx((prev) => {
503397
+ const next = Math.max(0, prev - 1);
503398
+ if (next < fromIdx)
503399
+ setFromIdx(next);
503400
+ return next;
503401
+ });
503402
+ } else if (key.downArrow) {
503403
+ setFocusIdx((prev) => {
503404
+ const next = Math.min(items.length - 1, prev + 1);
503405
+ if (next >= fromIdx + VISIBLE)
503406
+ setFromIdx(next - VISIBLE + 1);
503407
+ return next;
503408
+ });
503409
+ } else if (key.return) {
503410
+ const item = items[focusIdx];
503411
+ if (item)
503412
+ onSelect(item.value);
503413
+ } else if (key.escape) {
503414
+ onCancel?.();
503415
+ }
503416
+ }, { isActive });
503500
503417
  const visible = items.slice(fromIdx, fromIdx + VISIBLE);
503501
503418
  return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503502
503419
  flexDirection: "column",
@@ -503530,25 +503447,11 @@ function SimpleMenu2({ items, onSelect, onCancel }) {
503530
503447
  ]
503531
503448
  }, undefined, true, undefined, this);
503532
503449
  }
503533
- function PressEnterToContinue2({ onContinue }) {
503534
- const doneRef = import_react324.useRef(false);
503535
- import_react324.useEffect(() => {
503536
- if (!process.stdin.readableFlowing)
503537
- process.stdin.resume();
503538
- const onData = (chunk2) => {
503539
- const str2 = typeof chunk2 === "string" ? chunk2 : chunk2.toString("utf8");
503540
- if ((str2 === "\r" || str2 === `
503541
- ` || str2 === `\r
503542
- `) && !doneRef.current) {
503543
- doneRef.current = true;
503544
- onContinue();
503545
- }
503546
- };
503547
- process.stdin.on("data", onData);
503548
- return () => {
503549
- process.stdin.off("data", onData);
503550
- };
503551
- }, [onContinue]);
503450
+ function PressEnterToContinue2({ isActive, onContinue }) {
503451
+ use_input_default((_input, key) => {
503452
+ if (key.return)
503453
+ onContinue();
503454
+ }, { isActive });
503552
503455
  return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503553
503456
  color: "permission",
503554
503457
  children: [
@@ -503608,116 +503511,127 @@ function Onboarding({ onDone, showWelcome = true }) {
503608
503511
  ];
503609
503512
  const steps = import_react324.useMemo(() => {
503610
503513
  const config2 = getGlobalConfig();
503611
- const themeStep = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503612
- flexDirection: "column",
503613
- gap: 1,
503614
- paddingLeft: 1,
503615
- children: [
503616
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503617
- bold: true,
503618
- children: "Choose a theme"
503619
- }, undefined, false, undefined, this),
503620
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(SimpleMenu2, {
503621
- items: themeItems,
503622
- onSelect: handleThemeSelection,
503623
- onCancel: goToNextStep
503624
- }, undefined, false, undefined, this),
503625
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503626
- dimColor: true,
503627
- children: "Change later with /theme"
503628
- }, undefined, false, undefined, this)
503629
- ]
503630
- }, undefined, true, undefined, this);
503631
- const compactContextStep = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503632
- flexDirection: "column",
503633
- gap: 1,
503634
- paddingLeft: 1,
503635
- width: 70,
503636
- children: [
503637
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503638
- bold: true,
503639
- children: "Choose a compact context window"
503640
- }, undefined, false, undefined, this),
503641
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503642
- dimColor: true,
503643
- wrap: "wrap",
503644
- children: "localclawd can compact earlier than the model's full advertised window. Useful for local models that degrade before hitting their limit."
503645
- }, undefined, false, undefined, this),
503646
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(SimpleMenu2, {
503647
- items: compactItems,
503648
- onSelect: (value) => {
503649
- const compactContextWindowTokens = value === "default" ? undefined : parseInt(value, 10);
503650
- saveGlobalConfig((current) => ({ ...current, compactContextWindowTokens }));
503651
- goToNextStep();
503514
+ const result = [
503515
+ {
503516
+ id: "theme",
503517
+ component: (isActive2) => /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503518
+ flexDirection: "column",
503519
+ gap: 1,
503520
+ paddingLeft: 1,
503521
+ children: [
503522
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503523
+ bold: true,
503524
+ children: "Choose a theme"
503525
+ }, undefined, false, undefined, this),
503526
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(SimpleMenu2, {
503527
+ items: themeItems,
503528
+ isActive: isActive2,
503529
+ onSelect: handleThemeSelection,
503530
+ onCancel: goToNextStep
503531
+ }, undefined, false, undefined, this),
503532
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503533
+ dimColor: true,
503534
+ children: "Change later with /theme"
503535
+ }, undefined, false, undefined, this)
503536
+ ]
503537
+ }, undefined, true, undefined, this)
503538
+ },
503539
+ {
503540
+ id: "compact-context",
503541
+ component: (isActive2) => /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503542
+ flexDirection: "column",
503543
+ gap: 1,
503544
+ paddingLeft: 1,
503545
+ width: 70,
503546
+ children: [
503547
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503548
+ bold: true,
503549
+ children: "Choose a compact context window"
503550
+ }, undefined, false, undefined, this),
503551
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503552
+ dimColor: true,
503553
+ wrap: "wrap",
503554
+ children: "localclawd can compact earlier than the model's full advertised window. Useful for local models that degrade before hitting their limit."
503555
+ }, undefined, false, undefined, this),
503556
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(SimpleMenu2, {
503557
+ items: compactItems,
503558
+ isActive: isActive2,
503559
+ onSelect: (value) => {
503560
+ const compactContextWindowTokens = value === "default" ? undefined : parseInt(value, 10);
503561
+ saveGlobalConfig((current) => ({ ...current, compactContextWindowTokens }));
503562
+ goToNextStep();
503563
+ },
503564
+ onCancel: goToNextStep
503565
+ }, undefined, false, undefined, this),
503566
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503567
+ dimColor: true,
503568
+ children: "Change later in /config under Compact context window."
503569
+ }, undefined, false, undefined, this)
503570
+ ]
503571
+ }, undefined, true, undefined, this)
503572
+ },
503573
+ {
503574
+ id: "local-backend",
503575
+ component: (_isActive) => /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(LocalBackendSetup, {
503576
+ initialConfig: {
503577
+ provider: config2.localBackendProvider,
503578
+ baseUrl: config2.localBackendBaseUrl,
503579
+ model: config2.localBackendModel,
503580
+ apiKey: config2.localBackendApiKey
503652
503581
  },
503653
- onCancel: goToNextStep
503654
- }, undefined, false, undefined, this),
503655
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503656
- dimColor: true,
503657
- children: "Change later in /config under Compact context window."
503582
+ onComplete: handleLocalBackendSetup,
503583
+ onCancel: goToNextStep,
503584
+ title: "Choose your local backend",
503585
+ description: "Set the OpenAI-compatible endpoint and model localclawd should use. You can point it at vLLM, Ollama, or any compatible host.",
503586
+ showSaveGloballyOption: true
503658
503587
  }, undefined, false, undefined, this)
503659
- ]
503660
- }, undefined, true, undefined, this);
503661
- const localBackendStep = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(LocalBackendSetup, {
503662
- initialConfig: {
503663
- provider: config2.localBackendProvider,
503664
- baseUrl: config2.localBackendBaseUrl,
503665
- model: config2.localBackendModel,
503666
- apiKey: config2.localBackendApiKey
503667
503588
  },
503668
- onComplete: handleLocalBackendSetup,
503669
- onCancel: goToNextStep,
503670
- title: "Choose your local backend",
503671
- description: "Set the OpenAI-compatible endpoint and model localclawd should use. You can point it at vLLM, Ollama, or any compatible host.",
503672
- showSaveGloballyOption: true
503673
- }, undefined, false, undefined, this);
503674
- const securityStep = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503675
- flexDirection: "column",
503676
- gap: 1,
503677
- paddingLeft: 1,
503678
- children: [
503679
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503680
- bold: true,
503681
- children: "Security notes:"
503682
- }, undefined, false, undefined, this),
503683
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503589
+ {
503590
+ id: "security",
503591
+ component: (isActive2) => /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503684
503592
  flexDirection: "column",
503685
- width: 70,
503686
- children: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList, {
503687
- children: [
503688
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList.Item, {
503593
+ gap: 1,
503594
+ paddingLeft: 1,
503595
+ children: [
503596
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503597
+ bold: true,
503598
+ children: "Security notes:"
503599
+ }, undefined, false, undefined, this),
503600
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503601
+ flexDirection: "column",
503602
+ width: 70,
503603
+ children: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList, {
503689
503604
  children: [
503690
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503691
- children: "localclawd can make mistakes"
503692
- }, undefined, false, undefined, this),
503693
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503694
- dimColor: true,
503695
- wrap: "wrap",
503605
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList.Item, {
503696
503606
  children: [
503697
- "Always review responses, especially when running code.",
503698
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Newline, {}, undefined, false, undefined, this)
503607
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503608
+ children: "localclawd can make mistakes"
503609
+ }, undefined, false, undefined, this),
503610
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503611
+ dimColor: true,
503612
+ wrap: "wrap",
503613
+ children: [
503614
+ "Always review responses, especially when running code.",
503615
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Newline, {}, undefined, false, undefined, this)
503616
+ ]
503617
+ }, undefined, true, undefined, this)
503699
503618
  ]
503700
- }, undefined, true, undefined, this)
503619
+ }, undefined, true, undefined, this),
503620
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList.Item, {
503621
+ children: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503622
+ children: "Due to prompt injection risks, only use it with code you trust"
503623
+ }, undefined, false, undefined, this)
503624
+ }, undefined, false, undefined, this)
503701
503625
  ]
503702
- }, undefined, true, undefined, this),
503703
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(OrderedList.Item, {
503704
- children: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503705
- children: "Due to prompt injection risks, only use it with code you trust"
503706
- }, undefined, false, undefined, this)
503707
- }, undefined, false, undefined, this)
503708
- ]
503709
- }, undefined, true, undefined, this)
503710
- }, undefined, false, undefined, this),
503711
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(PressEnterToContinue2, {
503712
- onContinue: goToNextStep
503713
- }, undefined, false, undefined, this)
503714
- ]
503715
- }, undefined, true, undefined, this);
503716
- const result = [
503717
- { id: "theme", component: themeStep },
503718
- { id: "compact-context", component: compactContextStep },
503719
- { id: "local-backend", component: localBackendStep },
503720
- { id: "security", component: securityStep }
503626
+ }, undefined, true, undefined, this)
503627
+ }, undefined, false, undefined, this),
503628
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(PressEnterToContinue2, {
503629
+ isActive: isActive2,
503630
+ onContinue: goToNextStep
503631
+ }, undefined, false, undefined, this)
503632
+ ]
503633
+ }, undefined, true, undefined, this)
503634
+ }
503721
503635
  ];
503722
503636
  if (shouldOfferTerminalSetup()) {
503723
503637
  const terminalItems = [
@@ -503726,7 +503640,7 @@ function Onboarding({ onDone, showWelcome = true }) {
503726
503640
  ];
503727
503641
  result.push({
503728
503642
  id: "terminal-setup",
503729
- component: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503643
+ component: (isActive2) => /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503730
503644
  flexDirection: "column",
503731
503645
  gap: 1,
503732
503646
  paddingLeft: 1,
@@ -503742,7 +503656,7 @@ function Onboarding({ onDone, showWelcome = true }) {
503742
503656
  children: [
503743
503657
  /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
503744
503658
  children: [
503745
- "For the optimal coding experience, enable recommended settings",
503659
+ "For the optimal experience, enable recommended settings",
503746
503660
  /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Newline, {}, undefined, false, undefined, this),
503747
503661
  "for your terminal:",
503748
503662
  " ",
@@ -503751,6 +503665,7 @@ function Onboarding({ onDone, showWelcome = true }) {
503751
503665
  }, undefined, true, undefined, this),
503752
503666
  /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(SimpleMenu2, {
503753
503667
  items: terminalItems,
503668
+ isActive: isActive2,
503754
503669
  onSelect: (value) => {
503755
503670
  if (value === "install") {
503756
503671
  setupTerminal(theme2).catch(() => {}).finally(goToNextStep);
@@ -503769,6 +503684,7 @@ function Onboarding({ onDone, showWelcome = true }) {
503769
503684
  return result;
503770
503685
  }, [goToNextStep, handleLocalBackendSetup, handleThemeSelection, theme2]);
503771
503686
  const currentStep = steps[currentStepIndex];
503687
+ const isActive = true;
503772
503688
  return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503773
503689
  flexDirection: "column",
503774
503690
  children: [
@@ -503776,7 +503692,7 @@ function Onboarding({ onDone, showWelcome = true }) {
503776
503692
  /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
503777
503693
  flexDirection: "column",
503778
503694
  marginTop: 1,
503779
- children: currentStep?.component
503695
+ children: currentStep?.component(isActive)
503780
503696
  }, undefined, false, undefined, this)
503781
503697
  ]
503782
503698
  }, undefined, true, undefined, this);
@@ -503803,72 +503719,43 @@ __export(exports_TrustDialog, {
503803
503719
  TrustDialog: () => TrustDialog
503804
503720
  });
503805
503721
  import { homedir as homedir36 } from "os";
503806
- function acceptTrust(onDone) {
503807
- try {
503808
- const isHomeDir = homedir36() === getCwd();
503809
- if (isHomeDir) {
503810
- setSessionTrustAccepted(true);
503811
- } else {
503812
- try {
503813
- saveCurrentProjectConfig((current) => ({ ...current, hasTrustDialogAccepted: true }));
503814
- } catch {}
503815
- setSessionTrustAccepted(true);
503816
- }
503817
- } finally {
503818
- onDone();
503819
- }
503820
- }
503821
503722
  function TrustDialog({ onDone }) {
503822
503723
  const hasTrustDialogAccepted = checkHasTrustDialogAccepted();
503823
503724
  const [focusIdx, setFocusIdx] = import_react325.useState(0);
503824
- const stateRef = import_react325.useRef({ focusIdx: 0, done: false });
503825
- import_react325.useEffect(() => {
503826
- if (hasTrustDialogAccepted) {
503827
- setSessionTrustAccepted(true);
503828
- onDone();
503829
- }
503830
- }, []);
503831
- import_react325.useEffect(() => {
503725
+ use_input_default((_input, key) => {
503832
503726
  if (hasTrustDialogAccepted)
503833
503727
  return;
503834
- if (!process.stdin.readableFlowing) {
503835
- process.stdin.resume();
503836
- }
503837
- const onData = (chunk2) => {
503838
- const str2 = typeof chunk2 === "string" ? chunk2 : chunk2.toString("utf8");
503839
- if (str2 === "\x1B[A" || str2 === "\x1BOA") {
503840
- const next = (stateRef.current.focusIdx - 1 + OPTIONS.length) % OPTIONS.length;
503841
- stateRef.current.focusIdx = next;
503842
- setFocusIdx(next);
503843
- } else if (str2 === "\x1B[B" || str2 === "\x1BOB") {
503844
- const next = (stateRef.current.focusIdx + 1) % OPTIONS.length;
503845
- stateRef.current.focusIdx = next;
503846
- setFocusIdx(next);
503847
- } else if (str2 === "\r" || str2 === `
503848
- ` || str2 === `\r
503849
- `) {
503850
- if (stateRef.current.done)
503851
- return;
503852
- stateRef.current.done = true;
503853
- const chosen = OPTIONS[stateRef.current.focusIdx];
503854
- if (chosen?.value === "exit") {
503855
- gracefulShutdownSync(1);
503856
- } else {
503857
- acceptTrust(onDone);
503858
- }
503859
- } else if (str2 === "\x1B" || str2 === "\x1B\x1B") {
503860
- gracefulShutdownSync(0);
503861
- } else if (str2 === "\x03") {
503728
+ if (key.upArrow) {
503729
+ setFocusIdx((i2) => (i2 - 1 + OPTIONS.length) % OPTIONS.length);
503730
+ } else if (key.downArrow) {
503731
+ setFocusIdx((i2) => (i2 + 1) % OPTIONS.length);
503732
+ } else if (key.return) {
503733
+ const chosen = OPTIONS[focusIdx];
503734
+ if (chosen?.value === "exit") {
503862
503735
  gracefulShutdownSync(1);
503736
+ } else {
503737
+ try {
503738
+ const isHomeDir = homedir36() === getCwd();
503739
+ if (isHomeDir) {
503740
+ setSessionTrustAccepted(true);
503741
+ } else {
503742
+ try {
503743
+ saveCurrentProjectConfig((current) => ({ ...current, hasTrustDialogAccepted: true }));
503744
+ } catch {}
503745
+ setSessionTrustAccepted(true);
503746
+ }
503747
+ } finally {
503748
+ onDone();
503749
+ }
503863
503750
  }
503864
- };
503865
- process.stdin.on("data", onData);
503866
- return () => {
503867
- process.stdin.off("data", onData);
503868
- };
503869
- }, [hasTrustDialogAccepted, onDone]);
503870
- if (hasTrustDialogAccepted)
503751
+ } else if (key.escape) {
503752
+ gracefulShutdownSync(0);
503753
+ }
503754
+ });
503755
+ if (hasTrustDialogAccepted) {
503756
+ setTimeout(onDone, 0);
503871
503757
  return null;
503758
+ }
503872
503759
  const cwd2 = getFsImplementation().cwd();
503873
503760
  return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(PermissionDialog, {
503874
503761
  color: "warning",
@@ -504242,7 +504129,7 @@ function completeOnboarding() {
504242
504129
  saveGlobalConfig((current) => ({
504243
504130
  ...current,
504244
504131
  hasCompletedOnboarding: true,
504245
- lastOnboardingVersion: "1.1.9"
504132
+ lastOnboardingVersion: "1.1.10"
504246
504133
  }));
504247
504134
  }
504248
504135
  function showDialog(root3, renderer) {
@@ -508801,7 +508688,7 @@ function appendToLog(path17, message) {
508801
508688
  cwd: getFsImplementation().cwd(),
508802
508689
  userType: process.env.USER_TYPE,
508803
508690
  sessionId: getSessionId(),
508804
- version: "1.1.9"
508691
+ version: "1.1.10"
508805
508692
  };
508806
508693
  getLogWriter(path17).write(messageWithTimestamp);
508807
508694
  }
@@ -512801,8 +512688,8 @@ async function getEnvLessBridgeConfig() {
512801
512688
  }
512802
512689
  async function checkEnvLessBridgeMinVersion() {
512803
512690
  const cfg = await getEnvLessBridgeConfig();
512804
- if (cfg.min_version && lt("1.1.9", cfg.min_version)) {
512805
- return `Your version of localclawd (${"1.1.9"}) is too old for Remote Control.
512691
+ if (cfg.min_version && lt("1.1.10", cfg.min_version)) {
512692
+ return `Your version of localclawd (${"1.1.10"}) is too old for Remote Control.
512806
512693
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
512807
512694
  }
512808
512695
  return null;
@@ -513274,7 +513161,7 @@ async function initBridgeCore(params) {
513274
513161
  const rawApi = createBridgeApiClient({
513275
513162
  baseUrl,
513276
513163
  getAccessToken,
513277
- runnerVersion: "1.1.9",
513164
+ runnerVersion: "1.1.10",
513278
513165
  onDebug: logForDebugging,
513279
513166
  onAuth401,
513280
513167
  getTrustedDeviceToken
@@ -518930,7 +518817,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
518930
518817
  setCwd(cwd3);
518931
518818
  const server = new Server({
518932
518819
  name: "claude/tengu",
518933
- version: "1.1.9"
518820
+ version: "1.1.10"
518934
518821
  }, {
518935
518822
  capabilities: {
518936
518823
  tools: {}
@@ -520535,7 +520422,7 @@ __export(exports_update, {
520535
520422
  });
520536
520423
  async function update() {
520537
520424
  logEvent("tengu_update_check", {});
520538
- writeToStdout(`Current version: ${"1.1.9"}
520425
+ writeToStdout(`Current version: ${"1.1.10"}
520539
520426
  `);
520540
520427
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520541
520428
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520610,8 +520497,8 @@ async function update() {
520610
520497
  writeToStdout(`localclawd is managed by Homebrew.
520611
520498
  `);
520612
520499
  const latest = await getLatestVersion(channel);
520613
- if (latest && !gte("1.1.9", latest)) {
520614
- writeToStdout(`Update available: ${"1.1.9"} → ${latest}
520500
+ if (latest && !gte("1.1.10", latest)) {
520501
+ writeToStdout(`Update available: ${"1.1.10"} → ${latest}
520615
520502
  `);
520616
520503
  writeToStdout(`
520617
520504
  `);
@@ -520627,8 +520514,8 @@ async function update() {
520627
520514
  writeToStdout(`localclawd is managed by winget.
520628
520515
  `);
520629
520516
  const latest = await getLatestVersion(channel);
520630
- if (latest && !gte("1.1.9", latest)) {
520631
- writeToStdout(`Update available: ${"1.1.9"} → ${latest}
520517
+ if (latest && !gte("1.1.10", latest)) {
520518
+ writeToStdout(`Update available: ${"1.1.10"} → ${latest}
520632
520519
  `);
520633
520520
  writeToStdout(`
520634
520521
  `);
@@ -520642,8 +520529,8 @@ async function update() {
520642
520529
  writeToStdout(`localclawd is managed by apk.
520643
520530
  `);
520644
520531
  const latest = await getLatestVersion(channel);
520645
- if (latest && !gte("1.1.9", latest)) {
520646
- writeToStdout(`Update available: ${"1.1.9"} → ${latest}
520532
+ if (latest && !gte("1.1.10", latest)) {
520533
+ writeToStdout(`Update available: ${"1.1.10"} → ${latest}
520647
520534
  `);
520648
520535
  writeToStdout(`
520649
520536
  `);
@@ -520708,11 +520595,11 @@ async function update() {
520708
520595
  `);
520709
520596
  await gracefulShutdown(1);
520710
520597
  }
520711
- if (result.latestVersion === "1.1.9") {
520712
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.9"})`) + `
520598
+ if (result.latestVersion === "1.1.10") {
520599
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.10"})`) + `
520713
520600
  `);
520714
520601
  } else {
520715
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.9"} to version ${result.latestVersion}`) + `
520602
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.10"} to version ${result.latestVersion}`) + `
520716
520603
  `);
520717
520604
  await regenerateCompletionCache();
520718
520605
  }
@@ -520772,12 +520659,12 @@ async function update() {
520772
520659
  `);
520773
520660
  await gracefulShutdown(1);
520774
520661
  }
520775
- if (latestVersion === "1.1.9") {
520776
- writeToStdout(source_default.green(`localclawd is up to date (${"1.1.9"})`) + `
520662
+ if (latestVersion === "1.1.10") {
520663
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.1.10"})`) + `
520777
520664
  `);
520778
520665
  await gracefulShutdown(0);
520779
520666
  }
520780
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.9"})
520667
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.10"})
520781
520668
  `);
520782
520669
  writeToStdout(`Installing update...
520783
520670
  `);
@@ -520822,7 +520709,7 @@ async function update() {
520822
520709
  logForDebugging(`update: Installation status: ${status2}`);
520823
520710
  switch (status2) {
520824
520711
  case "success":
520825
- writeToStdout(source_default.green(`Successfully updated from ${"1.1.9"} to version ${latestVersion}`) + `
520712
+ writeToStdout(source_default.green(`Successfully updated from ${"1.1.10"} to version ${latestVersion}`) + `
520826
520713
  `);
520827
520714
  await regenerateCompletionCache();
520828
520715
  break;
@@ -522087,7 +521974,7 @@ ${customInstructions}` : customInstructions;
522087
521974
  }
522088
521975
  }
522089
521976
  logForDiagnosticsNoPII("info", "started", {
522090
- version: "1.1.9",
521977
+ version: "1.1.10",
522091
521978
  is_native_binary: isInBundledMode()
522092
521979
  });
522093
521980
  registerCleanup(async () => {
@@ -522871,7 +522758,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
522871
522758
  pendingHookMessages
522872
522759
  }, renderAndRun);
522873
522760
  }
522874
- }).version("1.1.9 (localClawd)", "-v, --version", "Output the version number");
522761
+ }).version("1.1.10 (localClawd)", "-v, --version", "Output the version number");
522875
522762
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
522876
522763
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
522877
522764
  if (canUserConfigureAdvisor()) {
@@ -523379,7 +523266,7 @@ if (false) {}
523379
523266
  async function main2() {
523380
523267
  const args = process.argv.slice(2);
523381
523268
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523382
- console.log(`${"1.1.9"} (localclawd)`);
523269
+ console.log(`${"1.1.10"} (localclawd)`);
523383
523270
  return;
523384
523271
  }
523385
523272
  const {
@@ -523463,4 +523350,4 @@ async function main2() {
523463
523350
  }
523464
523351
  main2();
523465
523352
 
523466
- //# debugId=E10CFCD17A6A5D2D64756E2164756E21
523353
+ //# debugId=8FD76418D3A40B8164756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.1.9",
3
+ "version": "1.1.10",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",