localclawd 1.0.4 → 1.0.6

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 +2 -1
  2. package/dist/cli.mjs +1124 -517
  3. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -14629,6 +14629,7 @@ var init_exports = __esm(() => {
14629
14629
  init_array();
14630
14630
  init_array_buffer();
14631
14631
  init_string();
14632
+ init_contents();
14632
14633
  });
14633
14634
 
14634
14635
  // node_modules/get-stream/source/index.js
@@ -14642,7 +14643,7 @@ var init_source2 = __esm(() => {
14642
14643
 
14643
14644
  // node_modules/execa/lib/io/max-buffer.js
14644
14645
  var handleMaxBuffer = ({ error: error2, stream, readableObjectMode, lines, encoding, fdNumber }) => {
14645
- if (!(error2 instanceof MaxBufferError2)) {
14646
+ if (!(error2 instanceof MaxBufferError)) {
14646
14647
  throw error2;
14647
14648
  }
14648
14649
  if (fdNumber === "all") {
@@ -14667,7 +14668,7 @@ var handleMaxBuffer = ({ error: error2, stream, readableObjectMode, lines, encod
14667
14668
  if (ipcOutput.length !== maxBuffer) {
14668
14669
  return;
14669
14670
  }
14670
- const error2 = new MaxBufferError2;
14671
+ const error2 = new MaxBufferError;
14671
14672
  error2.maxBufferInfo = { fdNumber: "ipc" };
14672
14673
  throw error2;
14673
14674
  }, getMaxBufferMessage = (error2, maxBuffer) => {
@@ -18542,7 +18543,7 @@ var execaCoreAsync = (rawFile, rawArguments, rawOptions, createNested) => {
18542
18543
  timedOut: context2.terminationReason === "timeout",
18543
18544
  isCanceled: context2.terminationReason === "cancel" || context2.terminationReason === "gracefulCancel",
18544
18545
  isGracefullyCanceled: context2.terminationReason === "gracefulCancel",
18545
- isMaxBuffer: errorInfo.error instanceof MaxBufferError2,
18546
+ isMaxBuffer: errorInfo.error instanceof MaxBufferError,
18546
18547
  isForcefullyTerminated: context2.isForcefullyTerminated,
18547
18548
  exitCode,
18548
18549
  signal,
@@ -94396,6 +94397,23 @@ var init_config = __esm(() => {
94396
94397
  });
94397
94398
 
94398
94399
  // src/utils/model/providers.ts
94400
+ var exports_providers = {};
94401
+ __export(exports_providers, {
94402
+ setSessionLocalLLMConfigOverride: () => setSessionLocalLLMConfigOverride,
94403
+ normalizeLocalLLMConfig: () => normalizeLocalLLMConfig,
94404
+ isLocalLLMProviderEnabled: () => isLocalLLMProviderEnabled,
94405
+ isFirstPartyAnthropicBaseUrl: () => isFirstPartyAnthropicBaseUrl,
94406
+ getSessionLocalLLMConfigOverride: () => getSessionLocalLLMConfigOverride,
94407
+ getLocalLLMProviderLabel: () => getLocalLLMProviderLabel,
94408
+ getLocalLLMProvider: () => getLocalLLMProvider,
94409
+ getLocalLLMModel: () => getLocalLLMModel,
94410
+ getLocalLLMBaseUrl: () => getLocalLLMBaseUrl,
94411
+ getLocalLLMApiKey: () => getLocalLLMApiKey,
94412
+ getDefaultLocalLLMConfig: () => getDefaultLocalLLMConfig,
94413
+ getAPIProviderForStatsig: () => getAPIProviderForStatsig,
94414
+ getAPIProvider: () => getAPIProvider,
94415
+ clearSessionLocalLLMConfigOverride: () => clearSessionLocalLLMConfigOverride
94416
+ });
94399
94417
  function getEnvAlias(localKey, legacyKey) {
94400
94418
  return process.env[localKey] ?? process.env[legacyKey];
94401
94419
  }
@@ -94444,8 +94462,17 @@ function normalizeLocalLLMConfig(config) {
94444
94462
  apiKey: config?.apiKey?.trim() || defaults2.apiKey
94445
94463
  };
94446
94464
  }
94465
+ function setSessionLocalLLMConfigOverride(config) {
94466
+ sessionLocalLLMConfigOverride = config ? normalizeLocalLLMConfig(config) : null;
94467
+ }
94468
+ function clearSessionLocalLLMConfigOverride() {
94469
+ sessionLocalLLMConfigOverride = null;
94470
+ }
94471
+ function getSessionLocalLLMConfigOverride() {
94472
+ return sessionLocalLLMConfigOverride;
94473
+ }
94447
94474
  function getLocalLLMProvider() {
94448
- return getLocalLLMProviderFromEnv() ?? getConfiguredLocalLLMProvider() ?? "vllm";
94475
+ return getLocalLLMProviderFromEnv() ?? sessionLocalLLMConfigOverride?.provider ?? getConfiguredLocalLLMProvider() ?? "vllm";
94449
94476
  }
94450
94477
  function isLocalLLMProviderEnabled() {
94451
94478
  return true;
@@ -94456,6 +94483,9 @@ function getLocalLLMBaseUrl(provider = getLocalLLMProvider()) {
94456
94483
  return configuredFromEnv;
94457
94484
  }
94458
94485
  const defaults2 = getDefaultLocalLLMConfig(provider);
94486
+ if (sessionLocalLLMConfigOverride?.provider === provider) {
94487
+ return sessionLocalLLMConfigOverride.baseUrl;
94488
+ }
94459
94489
  const globalConfig = getGlobalConfig();
94460
94490
  const configuredProvider = getConfiguredLocalLLMProvider();
94461
94491
  if (configuredProvider === provider && globalConfig.localBackendBaseUrl?.trim()) {
@@ -94469,6 +94499,9 @@ function getLocalLLMApiKey(provider = getLocalLLMProvider()) {
94469
94499
  return configuredFromEnv;
94470
94500
  }
94471
94501
  const defaults2 = getDefaultLocalLLMConfig(provider);
94502
+ if (sessionLocalLLMConfigOverride?.provider === provider) {
94503
+ return sessionLocalLLMConfigOverride.apiKey;
94504
+ }
94472
94505
  const globalConfig = getGlobalConfig();
94473
94506
  const configuredProvider = getConfiguredLocalLLMProvider();
94474
94507
  if (configuredProvider === provider) {
@@ -94482,6 +94515,9 @@ function getLocalLLMModel(provider = getLocalLLMProvider()) {
94482
94515
  return model;
94483
94516
  }
94484
94517
  const defaults2 = getDefaultLocalLLMConfig(provider);
94518
+ if (sessionLocalLLMConfigOverride?.provider === provider) {
94519
+ return sessionLocalLLMConfigOverride.model;
94520
+ }
94485
94521
  const globalConfig = getGlobalConfig();
94486
94522
  const configuredProvider = getConfiguredLocalLLMProvider();
94487
94523
  if (configuredProvider === provider && globalConfig.localBackendModel?.trim()) {
@@ -94514,7 +94550,7 @@ function isFirstPartyAnthropicBaseUrl() {
94514
94550
  return false;
94515
94551
  }
94516
94552
  }
94517
- var LOCAL_LLM_DEFAULTS;
94553
+ var sessionLocalLLMConfigOverride = null, LOCAL_LLM_DEFAULTS;
94518
94554
  var init_providers = __esm(() => {
94519
94555
  init_config();
94520
94556
  init_envUtils();
@@ -96073,6 +96109,10 @@ function getRuntimeMainLoopModel(params) {
96073
96109
  return mainLoopModel;
96074
96110
  }
96075
96111
  function getDefaultMainLoopModelSetting() {
96112
+ const provider = getAPIProvider();
96113
+ if (provider === "local") {
96114
+ return getLocalLLMModel() ?? "qwen2.5-coder-32b-instruct";
96115
+ }
96076
96116
  if (process.env.USER_TYPE === "ant") {
96077
96117
  return getAntModelOverrideConfig()?.defaultModel ?? getDefaultOpusModel() + "[1m]";
96078
96118
  }
@@ -96391,7 +96431,7 @@ var init_isEqual = __esm(() => {
96391
96431
 
96392
96432
  // src/utils/userAgent.ts
96393
96433
  function getClaudeCodeUserAgent() {
96394
- return `claude-code/${"1.0.4"}`;
96434
+ return `claude-code/${"1.0.6"}`;
96395
96435
  }
96396
96436
 
96397
96437
  // src/utils/workloadContext.ts
@@ -96413,7 +96453,7 @@ function getUserAgent() {
96413
96453
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
96414
96454
  const workload = getWorkload();
96415
96455
  const workloadSuffix = workload ? `, workload/${workload}` : "";
96416
- return `claude-cli/${"1.0.4"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
96456
+ return `claude-cli/${"1.0.6"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
96417
96457
  }
96418
96458
  function getMCPUserAgent() {
96419
96459
  const parts = [];
@@ -96427,7 +96467,7 @@ function getMCPUserAgent() {
96427
96467
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
96428
96468
  }
96429
96469
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
96430
- return `claude-code/${"1.0.4"}${suffix}`;
96470
+ return `claude-code/${"1.0.6"}${suffix}`;
96431
96471
  }
96432
96472
  function getWebFetchUserAgent() {
96433
96473
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -106248,7 +106288,7 @@ function getAttributionHeader(fingerprint) {
106248
106288
  if (!isAttributionHeaderEnabled()) {
106249
106289
  return "";
106250
106290
  }
106251
- const version = `${"1.0.4"}.${fingerprint}`;
106291
+ const version = `${"1.0.6"}.${fingerprint}`;
106252
106292
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
106253
106293
  const cch = "";
106254
106294
  const workload = getWorkload();
@@ -139293,7 +139333,7 @@ var init_metadata = __esm(() => {
139293
139333
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
139294
139334
  WHITESPACE_REGEX = /\s+/;
139295
139335
  getVersionBase = memoize_default(() => {
139296
- const match = "1.0.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
139336
+ const match = "1.0.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
139297
139337
  return match ? match[0] : undefined;
139298
139338
  });
139299
139339
  buildEnvContext = memoize_default(async () => {
@@ -139333,9 +139373,9 @@ var init_metadata = __esm(() => {
139333
139373
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
139334
139374
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
139335
139375
  isClaudeAiAuth: isClaudeAISubscriber(),
139336
- version: "1.0.4",
139376
+ version: "1.0.6",
139337
139377
  versionBase: getVersionBase(),
139338
- buildTime: "2026-04-05T15:58:33.485Z",
139378
+ buildTime: "2026-04-05T19:01:49.000Z",
139339
139379
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
139340
139380
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
139341
139381
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -203889,7 +203929,7 @@ function getTelemetryAttributes() {
203889
203929
  attributes["session.id"] = sessionId;
203890
203930
  }
203891
203931
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
203892
- attributes["app.version"] = "1.0.4";
203932
+ attributes["app.version"] = "1.0.6";
203893
203933
  }
203894
203934
  const oauthAccount = getOauthAccountInfo();
203895
203935
  if (oauthAccount) {
@@ -235493,7 +235533,7 @@ function getInstallationEnv() {
235493
235533
  return;
235494
235534
  }
235495
235535
  function getClaudeCodeVersion() {
235496
- return "1.0.4";
235536
+ return "1.0.6";
235497
235537
  }
235498
235538
  async function getInstalledVSCodeExtensionVersion(command) {
235499
235539
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -241096,7 +241136,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
241096
241136
  const client4 = new Client({
241097
241137
  name: "claude-code",
241098
241138
  title: "Claude Code",
241099
- version: "1.0.4",
241139
+ version: "1.0.6",
241100
241140
  description: "Anthropic's agentic coding tool",
241101
241141
  websiteUrl: PRODUCT_URL
241102
241142
  }, {
@@ -241449,7 +241489,7 @@ var init_client9 = __esm(() => {
241449
241489
  const client4 = new Client({
241450
241490
  name: "claude-code",
241451
241491
  title: "Claude Code",
241452
- version: "1.0.4",
241492
+ version: "1.0.6",
241453
241493
  description: "Anthropic's agentic coding tool",
241454
241494
  websiteUrl: PRODUCT_URL
241455
241495
  }, {
@@ -264640,7 +264680,7 @@ var init_user = __esm(() => {
264640
264680
  deviceId,
264641
264681
  sessionId: getSessionId(),
264642
264682
  email: getEmail(),
264643
- appVersion: "1.0.4",
264683
+ appVersion: "1.0.6",
264644
264684
  platform: getHostPlatformForAnalytics(),
264645
264685
  organizationUuid,
264646
264686
  accountUuid,
@@ -265964,7 +266004,7 @@ async function initializeBetaTracing(resource) {
265964
266004
  });
265965
266005
  logs.setGlobalLoggerProvider(loggerProvider);
265966
266006
  setLoggerProvider(loggerProvider);
265967
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.4");
266007
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.6");
265968
266008
  setEventLogger(eventLogger);
265969
266009
  process.on("beforeExit", async () => {
265970
266010
  await loggerProvider?.forceFlush();
@@ -266004,7 +266044,7 @@ async function initializeTelemetry() {
266004
266044
  const platform4 = getPlatform();
266005
266045
  const baseAttributes = {
266006
266046
  [ATTR_SERVICE_NAME5]: "claude-code",
266007
- [ATTR_SERVICE_VERSION5]: "1.0.4"
266047
+ [ATTR_SERVICE_VERSION5]: "1.0.6"
266008
266048
  };
266009
266049
  if (platform4 === "wsl") {
266010
266050
  const wslVersion = getWslVersion();
@@ -266049,7 +266089,7 @@ async function initializeTelemetry() {
266049
266089
  } catch {}
266050
266090
  };
266051
266091
  registerCleanup(shutdownTelemetry2);
266052
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.0.4");
266092
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.0.6");
266053
266093
  }
266054
266094
  const meterProvider = new MeterProvider5({
266055
266095
  resource,
@@ -266069,7 +266109,7 @@ async function initializeTelemetry() {
266069
266109
  });
266070
266110
  logs.setGlobalLoggerProvider(loggerProvider);
266071
266111
  setLoggerProvider(loggerProvider);
266072
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.4");
266112
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.6");
266073
266113
  setEventLogger(eventLogger);
266074
266114
  logForDebugging("[3P telemetry] Event logger set successfully");
266075
266115
  process.on("beforeExit", async () => {
@@ -266131,7 +266171,7 @@ Current timeout: ${timeoutMs}ms
266131
266171
  }
266132
266172
  };
266133
266173
  registerCleanup(shutdownTelemetry);
266134
- return meterProvider.getMeter("com.anthropic.claude_code", "1.0.4");
266174
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.0.6");
266135
266175
  }
266136
266176
  async function flushTelemetry() {
266137
266177
  const meterProvider = getMeterProvider();
@@ -267353,7 +267393,7 @@ function detectLinuxGlobPatternWarnings() {
267353
267393
  }
267354
267394
  async function getDoctorDiagnostic() {
267355
267395
  const installationType = await getCurrentInstallationType();
267356
- const version = typeof MACRO !== "undefined" ? "1.0.4" : "unknown";
267396
+ const version = typeof MACRO !== "undefined" ? "1.0.6" : "unknown";
267357
267397
  const installationPath = await getInstallationPath();
267358
267398
  const invokedBinary = getInvokedBinary();
267359
267399
  const multipleInstallations = await detectMultipleInstallations();
@@ -268295,8 +268335,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
268295
268335
  const maxVersion = await getMaxVersion();
268296
268336
  if (maxVersion && gt(version, maxVersion)) {
268297
268337
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
268298
- if (gte("1.0.4", maxVersion)) {
268299
- logForDebugging(`Native installer: current version ${"1.0.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
268338
+ if (gte("1.0.6", maxVersion)) {
268339
+ logForDebugging(`Native installer: current version ${"1.0.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
268300
268340
  logEvent("tengu_native_update_skipped_max_version", {
268301
268341
  latency_ms: Date.now() - startTime,
268302
268342
  max_version: maxVersion,
@@ -268307,7 +268347,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
268307
268347
  version = maxVersion;
268308
268348
  }
268309
268349
  }
268310
- if (!forceReinstall && version === "1.0.4" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
268350
+ if (!forceReinstall && version === "1.0.6" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
268311
268351
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
268312
268352
  logEvent("tengu_native_update_complete", {
268313
268353
  latency_ms: Date.now() - startTime,
@@ -321654,6 +321694,9 @@ var init_WebSearchTool = __esm(() => {
321654
321694
  },
321655
321695
  isEnabled() {
321656
321696
  const provider = getAPIProvider();
321697
+ if (provider === "local") {
321698
+ return false;
321699
+ }
321657
321700
  const model = getMainLoopModel();
321658
321701
  if (provider === "firstParty") {
321659
321702
  return true;
@@ -328428,7 +328471,7 @@ var REPLTool2, SuggestBackgroundPRTool2, SleepTool = null, cronTools, RemoteTrig
328428
328471
  allowedTools = allowedTools.filter((tool) => !REPL_ONLY_TOOLS.has(tool.name));
328429
328472
  }
328430
328473
  }
328431
- const isEnabled2 = allowedTools.map((_2) => _2.isEnabled());
328474
+ const isEnabled2 = allowedTools.map((tool) => tool.isEnabled());
328432
328475
  return allowedTools.filter((_2, i3) => isEnabled2[i3]);
328433
328476
  };
328434
328477
  var init_tools2 = __esm(() => {
@@ -337535,29 +337578,134 @@ var init_readFileInRange = __esm(() => {
337535
337578
  function parseTags(raw) {
337536
337579
  if (!raw)
337537
337580
  return [];
337538
- if (Array.isArray(raw)) {
337581
+ if (Array.isArray(raw))
337539
337582
  return raw.filter((t) => typeof t === "string").map((t) => t.trim().toLowerCase()).filter(Boolean);
337540
- }
337541
- if (typeof raw === "string") {
337583
+ if (typeof raw === "string")
337542
337584
  return raw.split(/[,\s]+/).map((t) => t.trim().toLowerCase()).filter(Boolean);
337543
- }
337544
337585
  return [];
337545
337586
  }
337546
337587
  function extractQueryTags(query2) {
337547
- return query2.toLowerCase().replace(/[^a-z0-9\s_-]/g, " ").split(/\s+/).map((t) => t.trim()).filter((t) => t.length >= 2 && !STOP_WORDS.has(t)).slice(0, 20);
337588
+ return query2.toLowerCase().replace(/[^a-z0-9\s_-]/g, " ").split(/\s+/).map((t) => t.trim()).filter((t) => t.length >= 2 && !STOP_WORDS.has(t)).slice(0, 24);
337589
+ }
337590
+ function gradeOf(blade) {
337591
+ let k2 = 0;
337592
+ let b3 = blade;
337593
+ while (b3) {
337594
+ k2 += b3 & 1;
337595
+ b3 >>>= 1;
337596
+ }
337597
+ return k2;
337598
+ }
337599
+ function revSign(grade) {
337600
+ return grade * (grade - 1) / 2 % 2 === 0 ? 1 : -1;
337601
+ }
337602
+ function mvGeometricInner(A, B2) {
337603
+ let sum = 0;
337604
+ for (const [blade, coeff] of A) {
337605
+ const bCoeff = B2.get(blade);
337606
+ if (bCoeff === undefined)
337607
+ continue;
337608
+ const grade = gradeOf(blade);
337609
+ sum += revSign(grade) * coeff * bCoeff;
337610
+ }
337611
+ return sum;
337612
+ }
337613
+ function mvNormSquared(M3) {
337614
+ let sum = 0;
337615
+ for (const [blade, coeff] of M3) {
337616
+ const grade = gradeOf(blade);
337617
+ sum += Math.abs(revSign(grade)) * coeff * coeff;
337618
+ }
337619
+ return sum;
337548
337620
  }
337549
- function jaccardSimilarity(a2, b3) {
337550
- if (a2.length === 0 && b3.length === 0)
337621
+ function mvCosineSimilarity(A, B2) {
337622
+ const normA = Math.sqrt(mvNormSquared(A));
337623
+ const normB = Math.sqrt(mvNormSquared(B2));
337624
+ if (normA === 0 || normB === 0)
337551
337625
  return 0;
337552
- const setA = new Set(a2);
337553
- const setB = new Set(b3);
337554
- let intersection3 = 0;
337555
- for (const t of setA) {
337556
- if (setB.has(t))
337557
- intersection3++;
337626
+ return Math.max(-1, Math.min(1, mvGeometricInner(A, B2) / (normA * normB)));
337627
+ }
337628
+ function buildTagVocabulary(memories) {
337629
+ const freq = new Map;
337630
+ for (const m2 of memories)
337631
+ for (const t of m2.tags)
337632
+ freq.set(t, (freq.get(t) ?? 0) + 1);
337633
+ const sorted = [...freq.entries()].sort((a2, b3) => b3[1] - a2[1]);
337634
+ const vocab = new Map;
337635
+ for (let i3 = 0;i3 < Math.min(sorted.length, MAX_DIM); i3++)
337636
+ vocab.set(sorted[i3][0], i3);
337637
+ return vocab;
337638
+ }
337639
+ function buildIdfWeights(memories, vocab) {
337640
+ const N2 = memories.length;
337641
+ const df = new Map;
337642
+ for (const m2 of memories) {
337643
+ const seen = new Set;
337644
+ for (const t of m2.tags) {
337645
+ const idx = vocab.get(t);
337646
+ if (idx !== undefined && !seen.has(idx)) {
337647
+ seen.add(idx);
337648
+ df.set(idx, (df.get(idx) ?? 0) + 1);
337649
+ }
337650
+ }
337558
337651
  }
337559
- const union3 = setA.size + setB.size - intersection3;
337560
- return union3 === 0 ? 0 : intersection3 / union3;
337652
+ const weights = new Map;
337653
+ for (const [bit, count3] of df)
337654
+ weights.set(bit, Math.log(1 + N2 / count3));
337655
+ return weights;
337656
+ }
337657
+ function tagsToMultivector(tags, vocab, idfWeights, coocIndex, maxCoocPerMemory) {
337658
+ const mv = new Map;
337659
+ const n2 = tags.length;
337660
+ if (n2 > 0)
337661
+ mv.set(0, 1 / Math.sqrt(n2));
337662
+ const bits2 = [];
337663
+ for (const t of tags) {
337664
+ const idx = vocab.get(t);
337665
+ if (idx === undefined)
337666
+ continue;
337667
+ const blade = 1 << idx;
337668
+ const w2 = idfWeights.get(idx) ?? 1;
337669
+ mv.set(blade, (mv.get(blade) ?? 0) + w2);
337670
+ bits2.push(idx);
337671
+ }
337672
+ for (let a2 = 0;a2 < bits2.length; a2++) {
337673
+ for (let b3 = a2 + 1;b3 < bits2.length; b3++) {
337674
+ const ta = [...vocab.entries()].find(([, v2]) => v2 === bits2[a2])?.[0];
337675
+ const tb = [...vocab.entries()].find(([, v2]) => v2 === bits2[b3])?.[0];
337676
+ if (!ta || !tb)
337677
+ continue;
337678
+ const coCount = coocIndex.get(ta)?.get(tb) ?? 0;
337679
+ if (coCount === 0)
337680
+ continue;
337681
+ const w_a = idfWeights.get(bits2[a2]) ?? 1;
337682
+ const w_b = idfWeights.get(bits2[b3]) ?? 1;
337683
+ const blade = 1 << bits2[a2] | 1 << bits2[b3];
337684
+ const coStrength = Math.sqrt(coCount / (maxCoocPerMemory || 1));
337685
+ mv.set(blade, (mv.get(blade) ?? 0) + Math.sqrt(w_a * w_b) * coStrength);
337686
+ }
337687
+ }
337688
+ return mv;
337689
+ }
337690
+ function fcaNeighborhoodScore(queryTags, memoryTags) {
337691
+ if (queryTags.length === 0)
337692
+ return 0;
337693
+ const memSet = new Set(memoryTags);
337694
+ let covered = 0;
337695
+ for (const qt of queryTags)
337696
+ if (memSet.has(qt))
337697
+ covered++;
337698
+ const ratio = covered / queryTags.length;
337699
+ return ratio * ratio;
337700
+ }
337701
+ function rotorDecay(ageMs, halfLifeMs = HALF_LIFE_MS, nowMs = Date.now()) {
337702
+ const lambda = Math.LN2 / halfLifeMs;
337703
+ const baseDecay = Math.exp(-lambda * Math.max(0, ageMs));
337704
+ const currentPhase = nowMs % ANNUAL_PERIOD_MS / ANNUAL_PERIOD_MS;
337705
+ const memPhase = (nowMs - ageMs) % ANNUAL_PERIOD_MS / ANNUAL_PERIOD_MS;
337706
+ const phaseDiff = currentPhase - memPhase;
337707
+ const periodicBoost = 1 + ROTOR_AMPLITUDE * Math.cos(2 * Math.PI * phaseDiff);
337708
+ return baseDecay * periodicBoost;
337561
337709
  }
337562
337710
  function buildCooccurrenceIndex(memories) {
337563
337711
  const index = new Map;
@@ -337569,46 +337717,41 @@ function buildCooccurrenceIndex(memories) {
337569
337717
  };
337570
337718
  for (const mem of memories) {
337571
337719
  const tags = mem.tags;
337572
- for (let i3 = 0;i3 < tags.length; i3++) {
337720
+ for (let i3 = 0;i3 < tags.length; i3++)
337573
337721
  for (let j2 = i3 + 1;j2 < tags.length; j2++) {
337574
337722
  bump(tags[i3], tags[j2]);
337575
337723
  bump(tags[j2], tags[i3]);
337576
337724
  }
337577
- }
337578
337725
  }
337579
337726
  return index;
337580
337727
  }
337581
- function cooccurrenceBonus(queryTags, memoryTags, index) {
337582
- if (queryTags.length === 0 || memoryTags.length === 0)
337583
- return 0;
337584
- let score = 0;
337585
- const memSet = new Set(memoryTags);
337586
- for (const qt of queryTags) {
337587
- const neighbours = index.get(qt);
337588
- if (!neighbours)
337589
- continue;
337590
- for (const mt2 of memSet) {
337591
- const coCount = neighbours.get(mt2) ?? 0;
337592
- if (coCount > 0) {
337593
- score += Math.log1p(coCount);
337594
- }
337595
- }
337596
- }
337597
- const maxPossible = queryTags.length * memoryTags.length * Math.log1p(1);
337598
- return maxPossible === 0 ? 0 : Math.min(1, score / maxPossible);
337599
- }
337600
- function latticeRelevanceScore(queryTags, memory, index, nowMs = Date.now()) {
337601
- const jaccard = jaccardSimilarity(queryTags, memory.tags);
337602
- const cooc = cooccurrenceBonus(queryTags, memory.tags, index);
337728
+ function maxCoocCount(index) {
337729
+ let max2 = 1;
337730
+ for (const row of index.values())
337731
+ for (const v2 of row.values())
337732
+ if (v2 > max2)
337733
+ max2 = v2;
337734
+ return max2;
337735
+ }
337736
+ function geometricLatticeScore(queryMv, queryTags, memory, vocab, idfWeights, coocIndex, maxCooc, nowMs) {
337737
+ const memMv = tagsToMultivector(memory.tags, vocab, idfWeights, coocIndex, maxCooc);
337738
+ const geoSim = Math.max(0, mvCosineSimilarity(queryMv, memMv));
337739
+ const fcaScore = fcaNeighborhoodScore(queryTags, memory.tags);
337603
337740
  const ageMs = Math.max(0, nowMs - memory.mtimeMs);
337604
- const halfLifeMs = 30 * 24 * 60 * 60 * 1000;
337605
- const recency = Math.pow(0.5, ageMs / halfLifeMs);
337606
- return JACCARD_WEIGHT * jaccard + COOCCURRENCE_WEIGHT * cooc + RECENCY_WEIGHT * recency;
337741
+ const temporal = rotorDecay(ageMs, HALF_LIFE_MS, nowMs);
337742
+ return GEO_WEIGHT * geoSim + FCA_WEIGHT * fcaScore + TEMPORAL_WEIGHT * temporal;
337607
337743
  }
337608
- function rankByLatticeRelevance(queryTags, memories, index, nowMs = Date.now()) {
337744
+ function rankByLatticeRelevance(queryTags, memories, _index, nowMs = Date.now()) {
337745
+ if (memories.length === 0)
337746
+ return [];
337747
+ const vocab = buildTagVocabulary(memories);
337748
+ const idfWeights = buildIdfWeights(memories, vocab);
337749
+ const coocIndex = buildCooccurrenceIndex(memories);
337750
+ const maxCooc = maxCoocCount(coocIndex);
337751
+ const queryMv = tagsToMultivector(queryTags, vocab, idfWeights, coocIndex, maxCooc);
337609
337752
  return memories.map((mem) => ({
337610
337753
  ...mem,
337611
- latticeScore: latticeRelevanceScore(queryTags, mem, index, nowMs)
337754
+ latticeScore: geometricLatticeScore(queryMv, queryTags, mem, vocab, idfWeights, coocIndex, maxCooc, nowMs)
337612
337755
  })).sort((a2, b3) => b3.latticeScore - a2.latticeScore);
337613
337756
  }
337614
337757
  function topLatticeMemories(query2, memories, topN = 5) {
@@ -337617,7 +337760,7 @@ function topLatticeMemories(query2, memories, topN = 5) {
337617
337760
  const ranked = rankByLatticeRelevance(queryTags, memories, index);
337618
337761
  return ranked.filter((m2) => m2.latticeScore > 0).slice(0, topN);
337619
337762
  }
337620
- var STOP_WORDS, JACCARD_WEIGHT = 0.65, COOCCURRENCE_WEIGHT = 0.25, RECENCY_WEIGHT = 0.1;
337763
+ var STOP_WORDS, MAX_DIM = 20, HALF_LIFE_MS, ANNUAL_PERIOD_MS, ROTOR_AMPLITUDE = 0.08, GEO_WEIGHT = 0.6, FCA_WEIGHT = 0.28, TEMPORAL_WEIGHT = 0.12;
337621
337764
  var init_lattice = __esm(() => {
337622
337765
  STOP_WORDS = new Set([
337623
337766
  "a",
@@ -337679,8 +337822,24 @@ var init_lattice = __esm(() => {
337679
337822
  "me",
337680
337823
  "him",
337681
337824
  "us",
337682
- "them"
337825
+ "them",
337826
+ "not",
337827
+ "no",
337828
+ "if",
337829
+ "then",
337830
+ "so",
337831
+ "up",
337832
+ "out",
337833
+ "about",
337834
+ "into",
337835
+ "over",
337836
+ "after",
337837
+ "from",
337838
+ "get",
337839
+ "use"
337683
337840
  ]);
337841
+ HALF_LIFE_MS = 30 * 24 * 60 * 60 * 1000;
337842
+ ANNUAL_PERIOD_MS = 365.25 * 24 * 60 * 60 * 1000;
337684
337843
  });
337685
337844
 
337686
337845
  // src/memdir/memoryTypes.ts
@@ -339264,7 +339423,7 @@ function getAnthropicEnvMetadata() {
339264
339423
  function getBuildAgeMinutes() {
339265
339424
  if (false)
339266
339425
  ;
339267
- const buildTime = new Date("2026-04-05T15:58:33.485Z").getTime();
339426
+ const buildTime = new Date("2026-04-05T19:01:49.000Z").getTime();
339268
339427
  if (isNaN(buildTime))
339269
339428
  return;
339270
339429
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -362972,7 +363131,7 @@ function Feedback({
362972
363131
  platform: env4.platform,
362973
363132
  gitRepo: envInfo.isGit,
362974
363133
  terminal: env4.terminal,
362975
- version: "1.0.4",
363134
+ version: "1.0.6",
362976
363135
  transcript: normalizeMessagesForAPI(messages),
362977
363136
  errors: sanitizedErrors,
362978
363137
  lastApiRequest: getLastAPIRequest(),
@@ -363164,7 +363323,7 @@ function Feedback({
363164
363323
  ", ",
363165
363324
  env4.terminal,
363166
363325
  ", v",
363167
- "1.0.4"
363326
+ "1.0.6"
363168
363327
  ]
363169
363328
  }, undefined, true, undefined, this)
363170
363329
  ]
@@ -363270,7 +363429,7 @@ ${sanitizedDescription}
363270
363429
  ` + `**Environment Info**
363271
363430
  ` + `- Platform: ${env4.platform}
363272
363431
  ` + `- Terminal: ${env4.terminal}
363273
- ` + `- Version: ${"1.0.4"}
363432
+ ` + `- Version: ${"1.0.6"}
363274
363433
  ` + `- Feedback ID: ${feedbackId}
363275
363434
  ` + `
363276
363435
  **Errors**
@@ -366383,7 +366542,7 @@ function buildPrimarySection() {
366383
366542
  }, undefined, false, undefined, this);
366384
366543
  return [{
366385
366544
  label: "Version",
366386
- value: "1.0.4"
366545
+ value: "1.0.6"
366387
366546
  }, {
366388
366547
  label: "Session name",
366389
366548
  value: nameValue
@@ -367757,6 +367916,10 @@ var init_ModelPicker = __esm(() => {
367757
367916
  });
367758
367917
 
367759
367918
  // src/components/LocalBackendSetup.tsx
367919
+ var exports_LocalBackendSetup = {};
367920
+ __export(exports_LocalBackendSetup, {
367921
+ LocalBackendSetup: () => LocalBackendSetup
367922
+ });
367760
367923
  function getProviderGuidance(provider) {
367761
367924
  switch (provider) {
367762
367925
  case "vllm":
@@ -367784,7 +367947,8 @@ function LocalBackendSetup({
367784
367947
  onComplete,
367785
367948
  onCancel,
367786
367949
  title = "Configure your model backend",
367787
- description = "localclawd speaks to OpenAI-compatible chat completion APIs. Pick a backend, then confirm the endpoint and model to use."
367950
+ description = "localclawd speaks to OpenAI-compatible chat completion APIs. Pick a backend, then confirm the endpoint and model to use.",
367951
+ showSaveGloballyOption = false
367788
367952
  }) {
367789
367953
  const normalizedInitial = import_react99.useMemo(() => normalizeLocalLLMConfig(initialConfig), [initialConfig]);
367790
367954
  const [step, setStep] = import_react99.useState("provider");
@@ -367834,11 +367998,20 @@ function LocalBackendSetup({
367834
367998
  setStep("apiKey");
367835
367999
  }
367836
368000
  function submitApiKey(value) {
367837
- onComplete({
368001
+ const nextConfig = {
367838
368002
  provider,
367839
368003
  baseUrl,
367840
368004
  model,
367841
368005
  apiKey: value.trim()
368006
+ };
368007
+ setApiKey(nextConfig.apiKey);
368008
+ setError(null);
368009
+ if (showSaveGloballyOption) {
368010
+ setStep("saveScope");
368011
+ return;
368012
+ }
368013
+ onComplete(nextConfig, {
368014
+ saveGlobally: true
367842
368015
  });
367843
368016
  }
367844
368017
  const providerLabel = getLocalLLMProviderLabel(provider);
@@ -367953,6 +368126,41 @@ function LocalBackendSetup({
367953
368126
  }, undefined, false, undefined, this)
367954
368127
  ]
367955
368128
  }, undefined, true, undefined, this) : null,
368129
+ step === "saveScope" ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
368130
+ children: [
368131
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
368132
+ children: "How should localclawd use this backend?"
368133
+ }, undefined, false, undefined, this),
368134
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
368135
+ dimColor: true,
368136
+ wrap: "wrap",
368137
+ children: "Save it globally if you want this backend to be the default every time localclawd starts. Choose this launch only if you want a temporary override."
368138
+ }, undefined, false, undefined, this),
368139
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(Select, {
368140
+ options: [
368141
+ {
368142
+ label: "Save as global default (recommended)",
368143
+ value: "global"
368144
+ },
368145
+ {
368146
+ label: "Use only for this launch",
368147
+ value: "session"
368148
+ }
368149
+ ],
368150
+ onChange: (value) => {
368151
+ onComplete({
368152
+ provider,
368153
+ baseUrl,
368154
+ model,
368155
+ apiKey
368156
+ }, {
368157
+ saveGlobally: value === "global"
368158
+ });
368159
+ },
368160
+ onCancel: () => setStep("apiKey")
368161
+ }, undefined, false, undefined, this)
368162
+ ]
368163
+ }, undefined, true, undefined, this) : null,
367956
368164
  error5 ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
367957
368165
  color: "error",
367958
368166
  children: error5
@@ -370448,7 +370656,7 @@ function Config({
370448
370656
  }
370449
370657
  }, undefined, false, undefined, this)
370450
370658
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
370451
- currentVersion: "1.0.4",
370659
+ currentVersion: "1.0.6",
370452
370660
  onChoice: (choice) => {
370453
370661
  setShowSubmenu(null);
370454
370662
  setTabsHidden(false);
@@ -370460,7 +370668,7 @@ function Config({
370460
370668
  autoUpdatesChannel: "stable"
370461
370669
  };
370462
370670
  if (choice === "stay") {
370463
- newSettings.minimumVersion = "1.0.4";
370671
+ newSettings.minimumVersion = "1.0.6";
370464
370672
  }
370465
370673
  updateSettingsForSource("userSettings", newSettings);
370466
370674
  setSettingsData((prev_27) => ({
@@ -376934,14 +377142,84 @@ var exports_keepgoing = {};
376934
377142
  __export(exports_keepgoing, {
376935
377143
  call: () => call19
376936
377144
  });
377145
+ function resetSession(focus) {
377146
+ sessionRound = 0;
377147
+ sessionFocus = focus;
377148
+ }
377149
+ function incrementRound() {
377150
+ sessionRound += 1;
377151
+ return sessionRound;
377152
+ }
377153
+ function parseMaxRounds(args) {
377154
+ const parts = args.trim().split(/\s+/);
377155
+ let maxRounds = DEFAULT_MAX_ROUNDS;
377156
+ const focusParts = [];
377157
+ for (const part of parts) {
377158
+ if (part === "unlimited" || part === "0") {
377159
+ maxRounds = Infinity;
377160
+ } else if (/^\d+$/.test(part)) {
377161
+ maxRounds = parseInt(part, 10);
377162
+ } else if (part) {
377163
+ focusParts.push(part);
377164
+ }
377165
+ }
377166
+ return { maxRounds, focus: focusParts.join(" ") };
377167
+ }
377168
+ function detectStopSignal(text) {
377169
+ for (const { pattern, label } of STOP_PATTERNS)
377170
+ if (pattern.test(text))
377171
+ return label;
377172
+ return null;
377173
+ }
377174
+ function buildContinuationPrompt(round2, maxRounds, focus) {
377175
+ const roundInfo = isFinite(maxRounds) ? `Round ${round2} of ${maxRounds}` : `Round ${round2} (unlimited)`;
377176
+ const focusLine = focus ? `
377177
+ Current focus: ${focus}
377178
+ ` : "";
377179
+ return `[KEEP GOING — AUTONOMOUS OPERATION — ${roundInfo}]
377180
+ ${focusLine}
377181
+ You are in full autonomous mode. Work continuously until all tasks are done.
377182
+
377183
+ ━━━ CAPABILITIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377184
+ You have access to ALL tools:
377185
+ • Read, Write, Edit, MultiEdit — file operations
377186
+ • Bash — run commands, builds, tests, git
377187
+ • Glob, Grep — search codebase
377188
+ • WebFetch, WebSearch — internet access
377189
+ • Agent — SPAWN SUBAGENTS for parallel/complex work
377190
+ • TodoCreate, TodoUpdate — task tracking
377191
+
377192
+ SPAWN SUBAGENTS when:
377193
+ → A sub-task is independent of current work (run in parallel)
377194
+ → A task is complex enough to benefit from a fresh context
377195
+ → You need specialized work done concurrently (e.g., research + implement)
377196
+
377197
+ ━━━ AUTONOMOUS RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377198
+ 1. DO NOT ask for confirmation between steps — proceed immediately
377199
+ 2. After completing a major milestone, state: "Completed: <what was done>"
377200
+ 3. After significant changes, run tests/builds to verify correctness
377201
+ 4. Use git commits after each logical unit of work
377202
+ 5. If you encounter a blocker you cannot resolve autonomously, emit:
377203
+ NEEDS INPUT: <specific question>
377204
+ Then stop and wait — do NOT guess or assume critical details
377205
+ 6. When ALL work is truly complete, emit:
377206
+ TASK COMPLETE: <one-sentence summary of everything accomplished>
377207
+
377208
+ ━━━ CONTINUE NOW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
377209
+ Pick up exactly where you left off. Do not re-explain what was already done.
377210
+ Proceed directly with the next action.`;
377211
+ }
376937
377212
  function KeepGoingBanner({
376938
- args,
377213
+ round: round2,
377214
+ maxRounds,
377215
+ focus,
376939
377216
  onReady
376940
377217
  }) {
376941
377218
  React57.useEffect(() => {
376942
377219
  const id = setTimeout(onReady, 0);
376943
377220
  return () => clearTimeout(id);
376944
377221
  }, [onReady]);
377222
+ const roundDisplay = isFinite(maxRounds) ? `${round2}/${maxRounds}` : `${round2}/∞`;
376945
377223
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedBox_default, {
376946
377224
  flexDirection: "column",
376947
377225
  marginTop: 1,
@@ -376949,77 +377227,122 @@ function KeepGoingBanner({
376949
377227
  /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
376950
377228
  bold: true,
376951
377229
  color: "cyan",
376952
- children: "◆ Keep Going — working autonomously until TASK COMPLETE"
377230
+ children: `◆ Keep Going [round ${roundDisplay}]`
376953
377231
  }, undefined, false, undefined, this),
376954
- args ? /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
377232
+ focus ? /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
376955
377233
  dimColor: true,
376956
- children: ` Focus: ${args}`
377234
+ color: "cyan",
377235
+ children: ` ↳ Focus: ${focus}`
376957
377236
  }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
376958
377237
  dimColor: true,
376959
- children: " Press Ctrl+C or type to intervene at any time"
377238
+ children: " Press Ctrl+C or type to intervene at any time"
377239
+ }, undefined, false, undefined, this)
377240
+ ]
377241
+ }, undefined, true, undefined, this);
377242
+ }
377243
+ function KeepGoingDone({
377244
+ round: round2,
377245
+ reason,
377246
+ onReady
377247
+ }) {
377248
+ React57.useEffect(() => {
377249
+ const id = setTimeout(onReady, 0);
377250
+ return () => clearTimeout(id);
377251
+ }, [onReady]);
377252
+ return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedBox_default, {
377253
+ flexDirection: "column",
377254
+ marginTop: 1,
377255
+ children: [
377256
+ /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
377257
+ bold: true,
377258
+ color: "green",
377259
+ children: `◆ Keep Going — stopped after ${round2} rounds`
376960
377260
  }, undefined, false, undefined, this),
376961
377261
  /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
376962
377262
  dimColor: true,
376963
- children: ` Auto-rounds cap: ${MAX_AUTO_ROUNDS}`
377263
+ children: ` Reason: ${reason}`
376964
377264
  }, undefined, false, undefined, this)
376965
377265
  ]
376966
377266
  }, undefined, true, undefined, this);
376967
377267
  }
376968
- function KeepGoingDone({
376969
- message,
377268
+ function KeepGoingCapReached({
377269
+ round: round2,
377270
+ maxRounds,
377271
+ focus,
376970
377272
  onReady
376971
377273
  }) {
376972
377274
  React57.useEffect(() => {
376973
377275
  const id = setTimeout(onReady, 0);
376974
377276
  return () => clearTimeout(id);
376975
377277
  }, [onReady]);
377278
+ const resumeCmd = focus ? `/keepgoing ${focus}` : "/keepgoing";
376976
377279
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedBox_default, {
377280
+ flexDirection: "column",
376977
377281
  marginTop: 1,
376978
- children: /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
376979
- bold: true,
376980
- color: "green",
376981
- children: `◆ Keep Going — ${message}`
376982
- }, undefined, false, undefined, this)
376983
- }, undefined, false, undefined, this);
377282
+ children: [
377283
+ /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
377284
+ bold: true,
377285
+ color: "yellow",
377286
+ children: `◆ Keep Going — round cap reached (${round2}/${maxRounds})`
377287
+ }, undefined, false, undefined, this),
377288
+ /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(ThemedText, {
377289
+ dimColor: true,
377290
+ children: ` Type ${resumeCmd} to continue for another ${maxRounds} rounds.`
377291
+ }, undefined, false, undefined, this)
377292
+ ]
377293
+ }, undefined, true, undefined, this);
376984
377294
  }
376985
- var React57, jsx_dev_runtime198, MAX_AUTO_ROUNDS = 25, CONTINUATION_PROMPT = `Continue working on the current task.
376986
-
376987
- Rules:
376988
- - Work through every outstanding step using all available tools.
376989
- - Do NOT wait for user confirmation between steps — proceed autonomously.
376990
- - When the ENTIRE task is fully and completely done, respond with:
376991
- TASK COMPLETE: <one-sentence summary>
376992
- - If you are blocked and need user input, respond with:
376993
- NEEDS INPUT: <what you need>
376994
- - If you are unsure what the task is, ask briefly.
376995
-
376996
- Begin.`, call19 = async (onDone, context8, args) => {
376997
- const extraFocus = args?.trim() ?? "";
377295
+ var React57, jsx_dev_runtime198, sessionRound = 0, sessionFocus = "", DEFAULT_MAX_ROUNDS = 50, STOP_PATTERNS, call19 = async (onDone, context8, args) => {
377296
+ const rawArgs = args?.trim() ?? "";
377297
+ const { maxRounds, focus } = parseMaxRounds(rawArgs);
377298
+ if (sessionRound === 0 || focus && focus !== sessionFocus) {
377299
+ resetSession(focus);
377300
+ }
376998
377301
  let stopReason = null;
376999
377302
  context8.setMessages((prev) => {
377000
- const lastAssistant = [...prev].reverse().find((m2) => m2.role === "assistant");
377001
- if (lastAssistant) {
377002
- const blocks = Array.isArray(lastAssistant.content) ? lastAssistant.content : [];
377303
+ if (prev.length === 0)
377304
+ return prev;
377305
+ for (let i3 = prev.length - 1;i3 >= 0; i3--) {
377306
+ const msg = prev[i3];
377307
+ if (msg.role !== "assistant")
377308
+ continue;
377309
+ const blocks = Array.isArray(msg.content) ? msg.content : [];
377003
377310
  const text = blocks.filter((b3) => b3.type === "text").map((b3) => b3.text ?? "").join(`
377004
377311
  `);
377005
- if (text.includes("TASK COMPLETE:")) {
377006
- stopReason = "task declared complete";
377007
- } else if (text.includes("NEEDS INPUT:")) {
377008
- stopReason = "paused — model needs input";
377009
- }
377312
+ stopReason = detectStopSignal(text);
377313
+ break;
377010
377314
  }
377011
377315
  return prev;
377012
377316
  });
377013
377317
  if (stopReason !== null) {
377318
+ const finalRound = sessionRound;
377319
+ resetSession("");
377014
377320
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(KeepGoingDone, {
377015
- message: stopReason,
377016
- onReady: () => onDone(stopReason)
377321
+ round: finalRound,
377322
+ reason: stopReason,
377323
+ onReady: () => onDone(undefined)
377017
377324
  }, undefined, false, undefined, this);
377018
377325
  }
377019
- const prompt = CONTINUATION_PROMPT + (extraFocus ? `
377020
-
377021
- Focus specifically on: ${extraFocus}` : "");
377022
- const nextCmd = extraFocus ? `/keepgoing ${extraFocus}` : "/keepgoing";
377326
+ const round2 = incrementRound();
377327
+ if (isFinite(maxRounds) && round2 > maxRounds) {
377328
+ const finalRound = sessionRound;
377329
+ resetSession("");
377330
+ return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(KeepGoingCapReached, {
377331
+ round: finalRound,
377332
+ maxRounds,
377333
+ focus,
377334
+ onReady: () => onDone(undefined)
377335
+ }, undefined, false, undefined, this);
377336
+ }
377337
+ const prompt = buildContinuationPrompt(round2, maxRounds, focus);
377338
+ const nextArgs = [];
377339
+ if (!isFinite(maxRounds))
377340
+ nextArgs.push("unlimited");
377341
+ else if (maxRounds !== DEFAULT_MAX_ROUNDS)
377342
+ nextArgs.push(String(maxRounds));
377343
+ if (focus)
377344
+ nextArgs.push(focus);
377345
+ const nextCmd = `/keepgoing${nextArgs.length ? " " + nextArgs.join(" ") : ""}`;
377023
377346
  const handleReady = () => {
377024
377347
  onDone(undefined, {
377025
377348
  display: "system",
@@ -377030,7 +377353,9 @@ Focus specifically on: ${extraFocus}` : "");
377030
377353
  });
377031
377354
  };
377032
377355
  return /* @__PURE__ */ jsx_dev_runtime198.jsxDEV(KeepGoingBanner, {
377033
- args: extraFocus,
377356
+ round: round2,
377357
+ maxRounds,
377358
+ focus,
377034
377359
  onReady: handleReady
377035
377360
  }, undefined, false, undefined, this);
377036
377361
  };
@@ -377038,6 +377363,13 @@ var init_keepgoing = __esm(() => {
377038
377363
  init_ink2();
377039
377364
  React57 = __toESM(require_react(), 1);
377040
377365
  jsx_dev_runtime198 = __toESM(require_jsx_dev_runtime(), 1);
377366
+ STOP_PATTERNS = [
377367
+ { pattern: /TASK[_ ]COMPLETE:/i, label: "task complete" },
377368
+ { pattern: /NEEDS[_ ]INPUT:/i, label: "paused — needs input" },
377369
+ { pattern: /\bFINISHED\b/, label: "finished" },
377370
+ { pattern: /ALL[_ ]DONE\b/i, label: "all done" },
377371
+ { pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
377372
+ ];
377041
377373
  });
377042
377374
 
377043
377375
  // src/commands/keepgoing/index.ts
@@ -377076,16 +377408,26 @@ function ThinkHarderBanner({ onReady }) {
377076
377408
  /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377077
377409
  bold: true,
377078
377410
  color: "magenta",
377079
- children: "◆ Think Harder mode ACTIVE"
377411
+ children: "◆ Think Harder 3-iteration refinement pipeline ACTIVE"
377080
377412
  }, undefined, false, undefined, this),
377081
- /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377082
- dimColor: true,
377083
- children: " Model will double-check each step and query memory frequently."
377084
- }, undefined, false, undefined, this),
377085
- /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377086
- dimColor: true,
377087
- children: " Use /thinknormal to return to default."
377088
- }, undefined, false, undefined, this)
377413
+ /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedBox_default, {
377414
+ flexDirection: "column",
377415
+ marginLeft: 2,
377416
+ children: [
377417
+ /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377418
+ dimColor: true,
377419
+ children: "Phase 1 DRAFT Phase 2 CRITIQUE → Phase 3 REFINE → Phase 4 VERIFY → Write"
377420
+ }, undefined, false, undefined, this),
377421
+ /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377422
+ dimColor: true,
377423
+ children: "Each code change must pass all four phases before being saved."
377424
+ }, undefined, false, undefined, this),
377425
+ /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377426
+ dimColor: true,
377427
+ children: "Use /thinknormal to return to default."
377428
+ }, undefined, false, undefined, this)
377429
+ ]
377430
+ }, undefined, true, undefined, this)
377089
377431
  ]
377090
377432
  }, undefined, true, undefined, this);
377091
377433
  }
@@ -377105,31 +377447,69 @@ function ThinkNormalBanner({ onReady }) {
377105
377447
  }, undefined, false, undefined, this),
377106
377448
  /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThemedText, {
377107
377449
  dimColor: true,
377108
- children: " Default pipeline active. Lattice memory is fallback-only."
377450
+ children: " Default pipeline. Lattice memory is fallback-only."
377109
377451
  }, undefined, false, undefined, this)
377110
377452
  ]
377111
377453
  }, undefined, true, undefined, this);
377112
377454
  }
377113
- var React58, jsx_dev_runtime199, isThinkHarderMode = false, THINKHARDER_PROMPT = `[CAREFUL MODE ACTIVE]
377114
-
377115
- For the remainder of this conversation, follow these rules at every step:
377116
-
377117
- 1. VERIFY before acting: Read the relevant file(s) before making any edit.
377118
- 2. DOUBLE-CHECK your output: After each tool call or code change, re-read
377119
- what you wrote and confirm it is correct and complete.
377120
- 3. MEMORY-FIRST: Before starting a new sub-task, check memory files for
377121
- relevant context using the Read tool on ~/.claude/memory/ or the project
377122
- CLAUDE.md / memory/ directory.
377123
- 4. SMALL STEPS: Prefer smaller, verifiable increments over large sweeping
377124
- changes. Confirm each step before proceeding.
377125
- 5. EXPLAIN: Briefly explain your reasoning before each non-trivial action
377126
- so the user can follow along.
377127
-
377128
- Begin working with extra care.`, THINKNORMAL_PROMPT = `[CAREFUL MODE DEACTIVATED]
377129
-
377130
- Resume normal operation. Standard tool use and pipeline apply.
377131
- Lattice memory scoring is available as a fallback when the hosted
377132
- side-query model is unavailable, but is not invoked by default.`, call20 = async (onDone, _context, _args) => {
377455
+ var React58, jsx_dev_runtime199, isThinkHarderMode = false, THINKHARDER_PROMPT = `[THINK HARDER — 3-ITERATION REFINEMENT PIPELINE ACTIVE]
377456
+
377457
+ Every code change or file edit must pass through all four phases before
377458
+ being written to disk. Do NOT call Edit, Write, or Bash with new code until
377459
+ Phase 4 is complete.
377460
+
377461
+ ══════════════════════════════════════════════════════════
377462
+ PHASE 1 DRAFT
377463
+ ══════════════════════════════════════════════════════════
377464
+ Write the initial implementation in full inside a code block.
377465
+ Think aloud: describe your approach, key decisions, and any tradeoffs.
377466
+ Do NOT call any write tool yet.
377467
+
377468
+ ══════════════════════════════════════════════════════════
377469
+ PHASE 2 — CRITIQUE (self-review)
377470
+ ══════════════════════════════════════════════════════════
377471
+ Critically review your draft. For each issue found, write:
377472
+ [CATEGORY] Description of the issue
377473
+
377474
+ Categories: CORRECTNESS | EDGE CASE | PERFORMANCE | SECURITY |
377475
+ STYLE | NAMING | MISSING LOGIC | TYPE SAFETY
377476
+
377477
+ If the draft is perfect (rare), write: ✓ No issues found — proceeding.
377478
+
377479
+ ══════════════════════════════════════════════════════════
377480
+ PHASE 3 — REFINE
377481
+ ══════════════════════════════════════════════════════════
377482
+ Apply every fix from Phase 2. For each fix:
377483
+ → [CATEGORY] What you changed and why
377484
+
377485
+ Write the complete refined implementation inside a code block.
377486
+
377487
+ ══════════════════════════════════════════════════════════
377488
+ PHASE 4 — VERIFY (final gate)
377489
+ ══════════════════════════════════════════════════════════
377490
+ For each issue listed in Phase 2, confirm:
377491
+ ✓ [CATEGORY] Resolved: description of fix applied
377492
+
377493
+ Only after ALL issues are marked ✓ may you call Edit/Write/Bash to
377494
+ persist the code. If new issues are discovered during verification,
377495
+ loop back to Phase 3.
377496
+
377497
+ ══════════════════════════════════════════════════════════
377498
+ ADDITIONAL RULES
377499
+ ══════════════════════════════════════════════════════════
377500
+ • READ every file before editing it — never guess current contents.
377501
+ • CHECK memory files at the start of each new task for relevant context.
377502
+ • After writing a change, verify it by reading the file back.
377503
+ • Prefer small, focused edits over large sweeping rewrites.
377504
+ • Explain each non-trivial decision briefly for the user.
377505
+
377506
+ Begin Phase 1 now.`, THINKNORMAL_PROMPT = `[THINK HARDER DEACTIVATED — default pipeline restored]
377507
+
377508
+ Resume standard operation:
377509
+ • Normal tool use and response pipeline apply.
377510
+ • Lattice memory scoring is available as a fallback only (not invoked by default).
377511
+ • You may write code without the 3-phase refinement cycle, though careful
377512
+ reasoning is always encouraged.`, call20 = async (onDone, _context, _args) => {
377133
377513
  setThinkHarderMode(true);
377134
377514
  return /* @__PURE__ */ jsx_dev_runtime199.jsxDEV(ThinkHarderBanner, {
377135
377515
  onReady: () => onDone(undefined, {
@@ -378835,7 +379215,7 @@ function HelpV2(t0) {
378835
379215
  let t6;
378836
379216
  if ($3[31] !== tabs) {
378837
379217
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
378838
- title: `localclawd v${"1.0.4"}`,
379218
+ title: `localclawd v${"1.0.6"}`,
378839
379219
  color: "professionalBlue",
378840
379220
  defaultTab: "general",
378841
379221
  children: tabs
@@ -402993,7 +403373,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
402993
403373
  return [];
402994
403374
  }
402995
403375
  }
402996
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.4") {
403376
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.6") {
402997
403377
  if (process.env.USER_TYPE === "ant") {
402998
403378
  const changelog = MACRO.VERSION_CHANGELOG;
402999
403379
  if (changelog) {
@@ -403020,7 +403400,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.4") {
403020
403400
  releaseNotes
403021
403401
  };
403022
403402
  }
403023
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.4") {
403403
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.6") {
403024
403404
  if (process.env.USER_TYPE === "ant") {
403025
403405
  const changelog = MACRO.VERSION_CHANGELOG;
403026
403406
  if (changelog) {
@@ -404187,7 +404567,7 @@ function getRecentActivitySync() {
404187
404567
  return cachedActivity;
404188
404568
  }
404189
404569
  function getLogoDisplayData() {
404190
- const version = process.env.DEMO_VERSION ?? "1.0.4";
404570
+ const version = process.env.DEMO_VERSION ?? "1.0.6";
404191
404571
  const serverUrl = getDirectConnectServerUrl();
404192
404572
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
404193
404573
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -405461,7 +405841,7 @@ function LogoV2() {
405461
405841
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
405462
405842
  t2 = () => {
405463
405843
  const currentConfig = getGlobalConfig();
405464
- if (currentConfig.lastReleaseNotesSeen === "1.0.4") {
405844
+ if (currentConfig.lastReleaseNotesSeen === "1.0.6") {
405465
405845
  return;
405466
405846
  }
405467
405847
  saveGlobalConfig(_temp327);
@@ -406137,12 +406517,12 @@ function LogoV2() {
406137
406517
  return t41;
406138
406518
  }
406139
406519
  function _temp327(current) {
406140
- if (current.lastReleaseNotesSeen === "1.0.4") {
406520
+ if (current.lastReleaseNotesSeen === "1.0.6") {
406141
406521
  return current;
406142
406522
  }
406143
406523
  return {
406144
406524
  ...current,
406145
- lastReleaseNotesSeen: "1.0.4"
406525
+ lastReleaseNotesSeen: "1.0.6"
406146
406526
  };
406147
406527
  }
406148
406528
  function _temp245(s_0) {
@@ -432350,7 +432730,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
432350
432730
  smapsRollup,
432351
432731
  platform: process.platform,
432352
432732
  nodeVersion: process.version,
432353
- ccVersion: "1.0.4"
432733
+ ccVersion: "1.0.6"
432354
432734
  };
432355
432735
  }
432356
432736
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -432935,7 +433315,7 @@ var init_bridge_kick = __esm(() => {
432935
433315
  var call57 = async () => {
432936
433316
  return {
432937
433317
  type: "text",
432938
- value: `${"1.0.4"} (built ${"2026-04-05T15:58:33.485Z"})`
433318
+ value: `${"1.0.6"} (built ${"2026-04-05T19:01:49.000Z"})`
432939
433319
  };
432940
433320
  }, version, version_default;
432941
433321
  var init_version = __esm(() => {
@@ -441871,7 +442251,7 @@ function generateHtmlReport(data, insights) {
441871
442251
  </html>`;
441872
442252
  }
441873
442253
  function buildExportData(data, insights, facets, remoteStats) {
441874
- const version2 = typeof MACRO !== "undefined" ? "1.0.4" : "unknown";
442254
+ const version2 = typeof MACRO !== "undefined" ? "1.0.6" : "unknown";
441875
442255
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
441876
442256
  const facets_summary = {
441877
442257
  total: facets.size,
@@ -445984,7 +446364,7 @@ var init_sessionStorage = __esm(() => {
445984
446364
  init_settings2();
445985
446365
  init_slowOperations();
445986
446366
  init_uuid();
445987
- VERSION5 = typeof MACRO !== "undefined" ? "1.0.4" : "unknown";
446367
+ VERSION5 = typeof MACRO !== "undefined" ? "1.0.6" : "unknown";
445988
446368
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
445989
446369
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
445990
446370
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -447186,7 +447566,7 @@ var init_filesystem = __esm(() => {
447186
447566
  });
447187
447567
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
447188
447568
  const nonce = randomBytes18(16).toString("hex");
447189
- return join128(getClaudeTempDir(), "bundled-skills", "1.0.4", nonce);
447569
+ return join128(getClaudeTempDir(), "bundled-skills", "1.0.6", nonce);
447190
447570
  });
447191
447571
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
447192
447572
  });
@@ -453184,7 +453564,7 @@ function computeFingerprint(messageText, version2) {
453184
453564
  }
453185
453565
  function computeFingerprintFromMessages(messages) {
453186
453566
  const firstMessageText = extractFirstMessageText(messages);
453187
- return computeFingerprint(firstMessageText, "1.0.4");
453567
+ return computeFingerprint(firstMessageText, "1.0.6");
453188
453568
  }
453189
453569
  var FINGERPRINT_SALT = "59cf53e54c78";
453190
453570
  var init_fingerprint = () => {};
@@ -455039,7 +455419,7 @@ async function sideQuery(opts) {
455039
455419
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
455040
455420
  }
455041
455421
  const messageText = extractFirstUserMessageText(messages);
455042
- const fingerprint = computeFingerprint(messageText, "1.0.4");
455422
+ const fingerprint = computeFingerprint(messageText, "1.0.6");
455043
455423
  const attributionHeader = getAttributionHeader(fingerprint);
455044
455424
  const systemBlocks = [
455045
455425
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -459837,7 +460217,7 @@ function buildSystemInitMessage(inputs) {
459837
460217
  slash_commands: inputs.commands.filter((c7) => c7.userInvocable !== false).map((c7) => c7.name),
459838
460218
  apiKeySource: getAnthropicApiKeyWithSource().source,
459839
460219
  betas: getSdkBetas(),
459840
- claude_code_version: "1.0.4",
460220
+ claude_code_version: "1.0.6",
459841
460221
  output_style: outputStyle2,
459842
460222
  agents: inputs.agents.map((agent) => agent.agentType),
459843
460223
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -474416,7 +474796,7 @@ var init_useVoiceEnabled = __esm(() => {
474416
474796
  function getSemverPart(version2) {
474417
474797
  return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
474418
474798
  }
474419
- function useUpdateNotification(updatedVersion, initialVersion = "1.0.4") {
474799
+ function useUpdateNotification(updatedVersion, initialVersion = "1.0.6") {
474420
474800
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react227.useState(() => getSemverPart(initialVersion));
474421
474801
  if (!updatedVersion) {
474422
474802
  return null;
@@ -474456,7 +474836,7 @@ function AutoUpdater({
474456
474836
  return;
474457
474837
  }
474458
474838
  if (false) {}
474459
- const currentVersion = "1.0.4";
474839
+ const currentVersion = "1.0.6";
474460
474840
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
474461
474841
  let latestVersion = await getLatestVersion(channel);
474462
474842
  const isDisabled = isAutoUpdaterDisabled();
@@ -474667,12 +475047,12 @@ function NativeAutoUpdater({
474667
475047
  logEvent("tengu_native_auto_updater_start", {});
474668
475048
  try {
474669
475049
  const maxVersion = await getMaxVersion();
474670
- if (maxVersion && gt("1.0.4", maxVersion)) {
475050
+ if (maxVersion && gt("1.0.6", maxVersion)) {
474671
475051
  const msg = await getMaxVersionMessage();
474672
475052
  setMaxVersionIssue(msg ?? "affects your version");
474673
475053
  }
474674
475054
  const result = await installLatest(channel);
474675
- const currentVersion = "1.0.4";
475055
+ const currentVersion = "1.0.6";
474676
475056
  const latencyMs = Date.now() - startTime;
474677
475057
  if (result.lockFailed) {
474678
475058
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -474807,17 +475187,17 @@ function PackageManagerAutoUpdater(t0) {
474807
475187
  const maxVersion = await getMaxVersion();
474808
475188
  if (maxVersion && latest && gt(latest, maxVersion)) {
474809
475189
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
474810
- if (gte("1.0.4", maxVersion)) {
474811
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.0.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
475190
+ if (gte("1.0.6", maxVersion)) {
475191
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.0.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
474812
475192
  setUpdateAvailable(false);
474813
475193
  return;
474814
475194
  }
474815
475195
  latest = maxVersion;
474816
475196
  }
474817
- const hasUpdate = latest && !gte("1.0.4", latest) && !shouldSkipVersion(latest);
475197
+ const hasUpdate = latest && !gte("1.0.6", latest) && !shouldSkipVersion(latest);
474818
475198
  setUpdateAvailable(!!hasUpdate);
474819
475199
  if (hasUpdate) {
474820
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.0.4"} -> ${latest}`);
475200
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.0.6"} -> ${latest}`);
474821
475201
  }
474822
475202
  };
474823
475203
  $3[0] = t1;
@@ -474851,7 +475231,7 @@ function PackageManagerAutoUpdater(t0) {
474851
475231
  wrap: "truncate",
474852
475232
  children: [
474853
475233
  "currentVersion: ",
474854
- "1.0.4"
475234
+ "1.0.6"
474855
475235
  ]
474856
475236
  }, undefined, true, undefined, this);
474857
475237
  $3[3] = verbose;
@@ -482409,7 +482789,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
482409
482789
  project_dir: getOriginalCwd(),
482410
482790
  added_dirs: addedDirs
482411
482791
  },
482412
- version: "1.0.4",
482792
+ version: "1.0.6",
482413
482793
  output_style: {
482414
482794
  name: outputStyleName
482415
482795
  },
@@ -493955,7 +494335,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
493955
494335
  } catch {}
493956
494336
  const data = {
493957
494337
  trigger,
493958
- version: "1.0.4",
494338
+ version: "1.0.6",
493959
494339
  platform: process.platform,
493960
494340
  transcript,
493961
494341
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -505540,7 +505920,7 @@ function WelcomeV2() {
505540
505920
  dimColor: true,
505541
505921
  children: [
505542
505922
  "v",
505543
- "1.0.4"
505923
+ "1.0.6"
505544
505924
  ]
505545
505925
  }, undefined, true, undefined, this)
505546
505926
  ]
@@ -505590,6 +505970,104 @@ var init_WelcomeV2 = __esm(() => {
505590
505970
  ];
505591
505971
  });
505592
505972
 
505973
+ // src/components/StartPage.tsx
505974
+ var exports_StartPage = {};
505975
+ __export(exports_StartPage, {
505976
+ StartPage: () => StartPage
505977
+ });
505978
+ function hasSavedBackendConfig(config2) {
505979
+ return Boolean(config2?.provider && config2?.baseUrl?.trim() && config2?.model?.trim());
505980
+ }
505981
+ function StartPage({ currentConfig, onDone }) {
505982
+ const hasSavedConfig = hasSavedBackendConfig(currentConfig);
505983
+ return /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedBox_default, {
505984
+ flexDirection: "column",
505985
+ gap: 1,
505986
+ children: [
505987
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(WelcomeV2, {}, undefined, false, undefined, this),
505988
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedBox_default, {
505989
+ flexDirection: "column",
505990
+ gap: 1,
505991
+ paddingLeft: 1,
505992
+ width: 78,
505993
+ children: [
505994
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
505995
+ bold: true,
505996
+ children: "Connect a model backend"
505997
+ }, undefined, false, undefined, this),
505998
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
505999
+ dimColor: true,
506000
+ wrap: "wrap",
506001
+ children: "localclawd works with vLLM, Ollama, and other OpenAI-compatible endpoints. Start your model server, then configure the endpoint and model you want to use."
506002
+ }, undefined, false, undefined, this),
506003
+ hasSavedConfig ? /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedBox_default, {
506004
+ flexDirection: "column",
506005
+ children: [
506006
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506007
+ children: [
506008
+ "Saved default:",
506009
+ " ",
506010
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506011
+ bold: true,
506012
+ children: getLocalLLMProviderLabel(currentConfig.provider)
506013
+ }, undefined, false, undefined, this)
506014
+ ]
506015
+ }, undefined, true, undefined, this),
506016
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506017
+ dimColor: true,
506018
+ wrap: "wrap",
506019
+ children: [
506020
+ "Model: ",
506021
+ currentConfig.model
506022
+ ]
506023
+ }, undefined, true, undefined, this),
506024
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506025
+ dimColor: true,
506026
+ wrap: "wrap",
506027
+ children: [
506028
+ "Endpoint: ",
506029
+ currentConfig.baseUrl
506030
+ ]
506031
+ }, undefined, true, undefined, this)
506032
+ ]
506033
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506034
+ dimColor: true,
506035
+ wrap: "wrap",
506036
+ children: "No global backend is saved yet. You can configure one now, or continue and come back later with /provider."
506037
+ }, undefined, false, undefined, this),
506038
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506039
+ dimColor: true,
506040
+ wrap: "wrap",
506041
+ children: "Choose Configure model backend to set a backend for just this launch or save it as your global default. Environment variables still override saved defaults when present."
506042
+ }, undefined, false, undefined, this),
506043
+ /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(Select, {
506044
+ options: [
506045
+ {
506046
+ label: "Continue to dashboard",
506047
+ value: "continue"
506048
+ },
506049
+ {
506050
+ label: "Configure model backend",
506051
+ value: "configure-backend"
506052
+ }
506053
+ ],
506054
+ onChange: (value) => onDone(value),
506055
+ onCancel: () => onDone("continue")
506056
+ }, undefined, false, undefined, this)
506057
+ ]
506058
+ }, undefined, true, undefined, this)
506059
+ ]
506060
+ }, undefined, true, undefined, this);
506061
+ }
506062
+ var jsx_dev_runtime475;
506063
+ var init_StartPage = __esm(() => {
506064
+ init_ink2();
506065
+ init_providers();
506066
+ init_select();
506067
+ init_WelcomeV2();
506068
+ jsx_dev_runtime475 = __toESM(require_jsx_dev_runtime(), 1);
506069
+ });
506070
+
505593
506071
  // src/components/ui/OrderedListItem.tsx
505594
506072
  function OrderedListItem(t0) {
505595
506073
  const $3 = c5(7);
@@ -505601,7 +506079,7 @@ function OrderedListItem(t0) {
505601
506079
  } = import_react320.useContext(OrderedListItemContext);
505602
506080
  let t1;
505603
506081
  if ($3[0] !== marker) {
505604
- t1 = /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedText, {
506082
+ t1 = /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(ThemedText, {
505605
506083
  dimColor: true,
505606
506084
  children: marker
505607
506085
  }, undefined, false, undefined, this);
@@ -505612,7 +506090,7 @@ function OrderedListItem(t0) {
505612
506090
  }
505613
506091
  let t2;
505614
506092
  if ($3[2] !== children) {
505615
- t2 = /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedBox_default, {
506093
+ t2 = /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(ThemedBox_default, {
505616
506094
  flexDirection: "column",
505617
506095
  children
505618
506096
  }, undefined, false, undefined, this);
@@ -505623,7 +506101,7 @@ function OrderedListItem(t0) {
505623
506101
  }
505624
506102
  let t3;
505625
506103
  if ($3[4] !== t1 || $3[5] !== t2) {
505626
- t3 = /* @__PURE__ */ jsx_dev_runtime475.jsxDEV(ThemedBox_default, {
506104
+ t3 = /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(ThemedBox_default, {
505627
506105
  gap: 1,
505628
506106
  children: [
505629
506107
  t1,
@@ -505638,11 +506116,11 @@ function OrderedListItem(t0) {
505638
506116
  }
505639
506117
  return t3;
505640
506118
  }
505641
- var import_react320, jsx_dev_runtime475, OrderedListItemContext;
506119
+ var import_react320, jsx_dev_runtime476, OrderedListItemContext;
505642
506120
  var init_OrderedListItem = __esm(() => {
505643
506121
  init_ink2();
505644
506122
  import_react320 = __toESM(require_react(), 1);
505645
- jsx_dev_runtime475 = __toESM(require_jsx_dev_runtime(), 1);
506123
+ jsx_dev_runtime476 = __toESM(require_jsx_dev_runtime(), 1);
505646
506124
  OrderedListItemContext = import_react320.createContext({
505647
506125
  marker: ""
505648
506126
  });
@@ -505675,11 +506153,11 @@ function OrderedListComponent(t0) {
505675
506153
  }
505676
506154
  const paddedMarker = `${String(index + 1).padStart(maxMarkerWidth)}.`;
505677
506155
  const marker = `${parentMarker}${paddedMarker}`;
505678
- return /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(OrderedListContext.Provider, {
506156
+ return /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(OrderedListContext.Provider, {
505679
506157
  value: {
505680
506158
  marker
505681
506159
  },
505682
- children: /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(OrderedListItemContext.Provider, {
506160
+ children: /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(OrderedListItemContext.Provider, {
505683
506161
  value: {
505684
506162
  marker
505685
506163
  },
@@ -505703,7 +506181,7 @@ function OrderedListComponent(t0) {
505703
506181
  }
505704
506182
  let t2;
505705
506183
  if ($3[7] !== t1) {
505706
- t2 = /* @__PURE__ */ jsx_dev_runtime476.jsxDEV(ThemedBox_default, {
506184
+ t2 = /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
505707
506185
  flexDirection: "column",
505708
506186
  children: t1
505709
506187
  }, undefined, false, undefined, this);
@@ -505714,12 +506192,12 @@ function OrderedListComponent(t0) {
505714
506192
  }
505715
506193
  return t2;
505716
506194
  }
505717
- var import_react321, jsx_dev_runtime476, OrderedListContext, OrderedList;
506195
+ var import_react321, jsx_dev_runtime477, OrderedListContext, OrderedList;
505718
506196
  var init_OrderedList = __esm(() => {
505719
506197
  init_ink2();
505720
506198
  init_OrderedListItem();
505721
506199
  import_react321 = __toESM(require_react(), 1);
505722
- jsx_dev_runtime476 = __toESM(require_jsx_dev_runtime(), 1);
506200
+ jsx_dev_runtime477 = __toESM(require_jsx_dev_runtime(), 1);
505723
506201
  OrderedListContext = import_react321.createContext({
505724
506202
  marker: ""
505725
506203
  });
@@ -505732,7 +506210,7 @@ var exports_Onboarding = {};
505732
506210
  __export(exports_Onboarding, {
505733
506211
  Onboarding: () => Onboarding
505734
506212
  });
505735
- function Onboarding({ onDone }) {
506213
+ function Onboarding({ onDone, showWelcome = true }) {
505736
506214
  const [currentStepIndex, setCurrentStepIndex] = import_react322.useState(0);
505737
506215
  const [theme2, setTheme] = useTheme();
505738
506216
  const exitState = useExitOnCtrlCDWithKeybindings();
@@ -505759,21 +506237,26 @@ function Onboarding({ onDone }) {
505759
506237
  setTheme(newTheme);
505760
506238
  goToNextStep();
505761
506239
  }, [goToNextStep, setTheme]);
505762
- const handleLocalBackendSetup = import_react322.useCallback((config2) => {
505763
- saveGlobalConfig((current) => ({
505764
- ...current,
505765
- localBackendProvider: config2.provider,
505766
- localBackendBaseUrl: config2.baseUrl,
505767
- localBackendModel: config2.model,
505768
- localBackendApiKey: config2.apiKey
505769
- }));
506240
+ const handleLocalBackendSetup = import_react322.useCallback((config2, options) => {
506241
+ if (options?.saveGlobally === false) {
506242
+ setSessionLocalLLMConfigOverride(config2);
506243
+ } else {
506244
+ clearSessionLocalLLMConfigOverride();
506245
+ saveGlobalConfig((current) => ({
506246
+ ...current,
506247
+ localBackendProvider: config2.provider,
506248
+ localBackendBaseUrl: config2.baseUrl,
506249
+ localBackendModel: config2.model,
506250
+ localBackendApiKey: config2.apiKey
506251
+ }));
506252
+ }
505770
506253
  goToNextStep();
505771
506254
  }, [goToNextStep]);
505772
506255
  const steps = import_react322.useMemo(() => {
505773
506256
  const config2 = getGlobalConfig();
505774
- const themeStep = /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506257
+ const themeStep = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505775
506258
  marginX: 1,
505776
- children: /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemePicker, {
506259
+ children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemePicker, {
505777
506260
  onThemeSelect: handleThemeSelection,
505778
506261
  showIntroText: true,
505779
506262
  helpText: "To change this later, run /theme",
@@ -505781,22 +506264,22 @@ function Onboarding({ onDone }) {
505781
506264
  skipExitHandling: true
505782
506265
  }, undefined, false, undefined, this)
505783
506266
  }, undefined, false, undefined, this);
505784
- const compactContextStep = /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506267
+ const compactContextStep = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505785
506268
  flexDirection: "column",
505786
506269
  gap: 1,
505787
506270
  paddingLeft: 1,
505788
506271
  width: 70,
505789
506272
  children: [
505790
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506273
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505791
506274
  bold: true,
505792
506275
  children: "Choose a compact context window"
505793
506276
  }, undefined, false, undefined, this),
505794
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506277
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505795
506278
  dimColor: true,
505796
506279
  wrap: "wrap",
505797
506280
  children: "localclawd can compact earlier than the model's full advertised window. This is useful for local models that degrade before hitting their theoretical limit."
505798
506281
  }, undefined, false, undefined, this),
505799
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Select, {
506282
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Select, {
505800
506283
  options: [
505801
506284
  {
505802
506285
  label: `${formatCompactContextWindowOption(undefined)} (recommended)`,
@@ -505817,13 +506300,13 @@ function Onboarding({ onDone }) {
505817
506300
  },
505818
506301
  onCancel: goToNextStep
505819
506302
  }, undefined, false, undefined, this),
505820
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506303
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505821
506304
  dimColor: true,
505822
506305
  children: "Change this later in /config under Compact context window."
505823
506306
  }, undefined, false, undefined, this)
505824
506307
  ]
505825
506308
  }, undefined, true, undefined, this);
505826
- const localBackendStep = /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(LocalBackendSetup, {
506309
+ const localBackendStep = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(LocalBackendSetup, {
505827
506310
  initialConfig: {
505828
506311
  provider: config2.localBackendProvider,
505829
506312
  baseUrl: config2.localBackendBaseUrl,
@@ -505833,51 +506316,52 @@ function Onboarding({ onDone }) {
505833
506316
  onComplete: handleLocalBackendSetup,
505834
506317
  onCancel: goToNextStep,
505835
506318
  title: "Choose your local backend",
505836
- description: "Set the OpenAI-compatible endpoint and model localclawd should use by default. You can point vLLM at a local server, Ollama, or any other compatible host."
506319
+ description: "Set the OpenAI-compatible endpoint and model localclawd should use by default. You can point vLLM at a local server, Ollama, or any other compatible host.",
506320
+ showSaveGloballyOption: true
505837
506321
  }, undefined, false, undefined, this);
505838
- const securityStep = /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506322
+ const securityStep = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505839
506323
  flexDirection: "column",
505840
506324
  gap: 1,
505841
506325
  paddingLeft: 1,
505842
506326
  children: [
505843
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506327
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505844
506328
  bold: true,
505845
506329
  children: "Security notes:"
505846
506330
  }, undefined, false, undefined, this),
505847
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506331
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505848
506332
  flexDirection: "column",
505849
506333
  width: 70,
505850
- children: /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(OrderedList, {
506334
+ children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(OrderedList, {
505851
506335
  children: [
505852
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(OrderedList.Item, {
506336
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(OrderedList.Item, {
505853
506337
  children: [
505854
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506338
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505855
506339
  children: "localclawd can make mistakes"
505856
506340
  }, undefined, false, undefined, this),
505857
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506341
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505858
506342
  dimColor: true,
505859
506343
  wrap: "wrap",
505860
506344
  children: [
505861
506345
  "You should always review localclawd's responses, especially when",
505862
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this),
506346
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Newline, {}, undefined, false, undefined, this),
505863
506347
  "running code.",
505864
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this)
506348
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Newline, {}, undefined, false, undefined, this)
505865
506349
  ]
505866
506350
  }, undefined, true, undefined, this)
505867
506351
  ]
505868
506352
  }, undefined, true, undefined, this),
505869
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(OrderedList.Item, {
506353
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(OrderedList.Item, {
505870
506354
  children: [
505871
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506355
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505872
506356
  children: "Due to prompt injection risks, only use it with code you trust"
505873
506357
  }, undefined, false, undefined, this),
505874
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506358
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505875
506359
  dimColor: true,
505876
506360
  wrap: "wrap",
505877
506361
  children: [
505878
506362
  "For more details see:",
505879
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this),
505880
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Link, {
506363
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Newline, {}, undefined, false, undefined, this),
506364
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Link, {
505881
506365
  url: "https://github.com/chromebookwiz/localclawd"
505882
506366
  }, undefined, false, undefined, this)
505883
506367
  ]
@@ -505887,7 +506371,7 @@ function Onboarding({ onDone }) {
505887
506371
  ]
505888
506372
  }, undefined, true, undefined, this)
505889
506373
  }, undefined, false, undefined, this),
505890
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(PressEnterToContinue, {}, undefined, false, undefined, this)
506374
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(PressEnterToContinue, {}, undefined, false, undefined, this)
505891
506375
  ]
505892
506376
  }, undefined, true, undefined, this);
505893
506377
  const nextSteps = [
@@ -505899,30 +506383,30 @@ function Onboarding({ onDone }) {
505899
506383
  if (shouldOfferTerminalSetup()) {
505900
506384
  nextSteps.push({
505901
506385
  id: "terminal-setup",
505902
- component: /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506386
+ component: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505903
506387
  flexDirection: "column",
505904
506388
  gap: 1,
505905
506389
  paddingLeft: 1,
505906
506390
  children: [
505907
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506391
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505908
506392
  bold: true,
505909
506393
  children: "Use localclawd's terminal setup?"
505910
506394
  }, undefined, false, undefined, this),
505911
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506395
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505912
506396
  flexDirection: "column",
505913
506397
  width: 70,
505914
506398
  gap: 1,
505915
506399
  children: [
505916
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506400
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505917
506401
  children: [
505918
506402
  "For the optimal coding experience, enable the recommended settings",
505919
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this),
506403
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Newline, {}, undefined, false, undefined, this),
505920
506404
  "for your terminal:",
505921
506405
  " ",
505922
506406
  env4.terminal === "Apple_Terminal" ? "Option+Enter for newlines and visual bell" : "Shift+Enter for newlines"
505923
506407
  ]
505924
506408
  }, undefined, true, undefined, this),
505925
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Select, {
506409
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Select, {
505926
506410
  options: [
505927
506411
  {
505928
506412
  label: "Yes, use recommended settings",
@@ -505942,15 +506426,15 @@ function Onboarding({ onDone }) {
505942
506426
  },
505943
506427
  onCancel: goToNextStep
505944
506428
  }, undefined, false, undefined, this),
505945
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506429
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
505946
506430
  dimColor: true,
505947
- children: exitState.pending ? /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(jsx_dev_runtime477.Fragment, {
506431
+ children: exitState.pending ? /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(jsx_dev_runtime478.Fragment, {
505948
506432
  children: [
505949
506433
  "Press ",
505950
506434
  exitState.keyName,
505951
506435
  " again to exit"
505952
506436
  ]
505953
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(jsx_dev_runtime477.Fragment, {
506437
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(jsx_dev_runtime478.Fragment, {
505954
506438
  children: "Enter to confirm · Esc to skip"
505955
506439
  }, undefined, false, undefined, this)
505956
506440
  }, undefined, false, undefined, this)
@@ -505985,18 +506469,18 @@ function Onboarding({ onDone }) {
505985
506469
  context: "Confirmation",
505986
506470
  isActive: currentStep?.id === "terminal-setup"
505987
506471
  });
505988
- return /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506472
+ return /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505989
506473
  flexDirection: "column",
505990
506474
  children: [
505991
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(WelcomeV2, {}, undefined, false, undefined, this),
505992
- /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506475
+ showWelcome ? /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(WelcomeV2, {}, undefined, false, undefined, this) : null,
506476
+ /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505993
506477
  flexDirection: "column",
505994
506478
  marginTop: 1,
505995
506479
  children: [
505996
506480
  currentStep?.component,
505997
- exitState.pending ? /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedBox_default, {
506481
+ exitState.pending ? /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
505998
506482
  padding: 1,
505999
- children: /* @__PURE__ */ jsx_dev_runtime477.jsxDEV(ThemedText, {
506483
+ children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506000
506484
  dimColor: true,
506001
506485
  children: [
506002
506486
  "Press ",
@@ -506010,7 +506494,7 @@ function Onboarding({ onDone }) {
506010
506494
  ]
506011
506495
  }, undefined, true, undefined, this);
506012
506496
  }
506013
- var import_react322, jsx_dev_runtime477;
506497
+ var import_react322, jsx_dev_runtime478;
506014
506498
  var init_Onboarding = __esm(() => {
506015
506499
  init_terminalSetup();
506016
506500
  init_useExitOnCtrlCDWithKeybindings();
@@ -506019,6 +506503,7 @@ var init_Onboarding = __esm(() => {
506019
506503
  init_config();
506020
506504
  init_context();
506021
506505
  init_env();
506506
+ init_providers();
506022
506507
  init_select();
506023
506508
  init_LocalBackendSetup();
506024
506509
  init_WelcomeV2();
@@ -506026,7 +506511,7 @@ var init_Onboarding = __esm(() => {
506026
506511
  init_ThemePicker();
506027
506512
  init_OrderedList();
506028
506513
  import_react322 = __toESM(require_react(), 1);
506029
- jsx_dev_runtime477 = __toESM(require_jsx_dev_runtime(), 1);
506514
+ jsx_dev_runtime478 = __toESM(require_jsx_dev_runtime(), 1);
506030
506515
  });
506031
506516
 
506032
506517
  // src/components/TrustDialog/utils.ts
@@ -506351,18 +506836,18 @@ function TrustDialog(t0) {
506351
506836
  let t17;
506352
506837
  let t18;
506353
506838
  if ($3[20] === Symbol.for("react.memo_cache_sentinel")) {
506354
- t16 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506839
+ t16 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
506355
506840
  bold: true,
506356
506841
  children: getFsImplementation().cwd()
506357
506842
  }, undefined, false, undefined, this);
506358
- t17 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506843
+ t17 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
506359
506844
  children: [
506360
506845
  "Quick safety check: Is this a project you created or one you trust? (Like your own code, a well-known open source project, or work from your team). If not, take a moment to review what",
506361
506846
  "'",
506362
506847
  "s in this folder first."
506363
506848
  ]
506364
506849
  }, undefined, true, undefined, this);
506365
- t18 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506850
+ t18 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
506366
506851
  children: [
506367
506852
  "Claude Code",
506368
506853
  "'",
@@ -506379,9 +506864,9 @@ function TrustDialog(t0) {
506379
506864
  }
506380
506865
  let t19;
506381
506866
  if ($3[23] === Symbol.for("react.memo_cache_sentinel")) {
506382
- t19 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506867
+ t19 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
506383
506868
  dimColor: true,
506384
- children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Link, {
506869
+ children: /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Link, {
506385
506870
  url: "https://code.claude.com/docs/en/security",
506386
506871
  children: "Security guide"
506387
506872
  }, undefined, false, undefined, this)
@@ -506405,7 +506890,7 @@ function TrustDialog(t0) {
506405
506890
  }
506406
506891
  let t21;
506407
506892
  if ($3[25] !== onChange) {
506408
- t21 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Select, {
506893
+ t21 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Select, {
506409
506894
  options: t20,
506410
506895
  onChange: (value_0) => onChange(value_0),
506411
506896
  onCancel: () => onChange("exit")
@@ -506417,15 +506902,15 @@ function TrustDialog(t0) {
506417
506902
  }
506418
506903
  let t22;
506419
506904
  if ($3[27] !== exitState.keyName || $3[28] !== exitState.pending) {
506420
- t22 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
506905
+ t22 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
506421
506906
  dimColor: true,
506422
- children: exitState.pending ? /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(jsx_dev_runtime478.Fragment, {
506907
+ children: exitState.pending ? /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(jsx_dev_runtime479.Fragment, {
506423
506908
  children: [
506424
506909
  "Press ",
506425
506910
  exitState.keyName,
506426
506911
  " again to exit"
506427
506912
  ]
506428
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(jsx_dev_runtime478.Fragment, {
506913
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(jsx_dev_runtime479.Fragment, {
506429
506914
  children: "Enter to confirm · Esc to cancel"
506430
506915
  }, undefined, false, undefined, this)
506431
506916
  }, undefined, false, undefined, this);
@@ -506437,11 +506922,11 @@ function TrustDialog(t0) {
506437
506922
  }
506438
506923
  let t23;
506439
506924
  if ($3[30] !== t21 || $3[31] !== t22) {
506440
- t23 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(PermissionDialog, {
506925
+ t23 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(PermissionDialog, {
506441
506926
  color: "warning",
506442
506927
  titleColor: "warning",
506443
506928
  title: "Accessing workspace:",
506444
- children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedBox_default, {
506929
+ children: /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedBox_default, {
506445
506930
  flexDirection: "column",
506446
506931
  gap: 1,
506447
506932
  paddingTop: 1,
@@ -506487,7 +506972,7 @@ function _temp2101(command8) {
506487
506972
  function _temp303(tool) {
506488
506973
  return tool === BASH_TOOL_NAME || tool.startsWith(BASH_TOOL_NAME + "(");
506489
506974
  }
506490
- var import_react323, jsx_dev_runtime478;
506975
+ var import_react323, jsx_dev_runtime479;
506491
506976
  var init_TrustDialog = __esm(() => {
506492
506977
  init_state();
506493
506978
  init_useExitOnCtrlCDWithKeybindings();
@@ -506502,7 +506987,7 @@ var init_TrustDialog = __esm(() => {
506502
506987
  init_PermissionDialog();
506503
506988
  init_utils14();
506504
506989
  import_react323 = __toESM(require_react(), 1);
506505
- jsx_dev_runtime478 = __toESM(require_jsx_dev_runtime(), 1);
506990
+ jsx_dev_runtime479 = __toESM(require_jsx_dev_runtime(), 1);
506506
506991
  });
506507
506992
 
506508
506993
  // src/components/BypassPermissionsModeDialog.tsx
@@ -506550,21 +507035,21 @@ function BypassPermissionsModeDialog(t0) {
506550
507035
  const handleEscape = _temp2102;
506551
507036
  let t3;
506552
507037
  if ($3[3] === Symbol.for("react.memo_cache_sentinel")) {
506553
- t3 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedBox_default, {
507038
+ t3 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedBox_default, {
506554
507039
  flexDirection: "column",
506555
507040
  gap: 1,
506556
507041
  children: [
506557
- /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
507042
+ /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
506558
507043
  children: [
506559
507044
  "In Bypass Permissions mode, localclawd will not ask for your approval before running potentially dangerous commands.",
506560
- /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Newline, {}, undefined, false, undefined, this),
507045
+ /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Newline, {}, undefined, false, undefined, this),
506561
507046
  "This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."
506562
507047
  ]
506563
507048
  }, undefined, true, undefined, this),
506564
- /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
507049
+ /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
506565
507050
  children: "By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."
506566
507051
  }, undefined, false, undefined, this),
506567
- /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Link, {
507052
+ /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
506568
507053
  url: "https://github.com/chromebookwiz/localclawd"
506569
507054
  }, undefined, false, undefined, this)
506570
507055
  ]
@@ -506588,13 +507073,13 @@ function BypassPermissionsModeDialog(t0) {
506588
507073
  }
506589
507074
  let t5;
506590
507075
  if ($3[5] !== onChange) {
506591
- t5 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Dialog, {
507076
+ t5 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Dialog, {
506592
507077
  title: "WARNING: localclawd running in Bypass Permissions mode",
506593
507078
  color: "error",
506594
507079
  onCancel: handleEscape,
506595
507080
  children: [
506596
507081
  t3,
506597
- /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Select, {
507082
+ /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Select, {
506598
507083
  options: t4,
506599
507084
  onChange: (value_0) => onChange(value_0)
506600
507085
  }, undefined, false, undefined, this)
@@ -506613,7 +507098,7 @@ function _temp2102() {
506613
507098
  function _temp304() {
506614
507099
  logEvent("tengu_bypass_permissions_mode_dialog_shown", {});
506615
507100
  }
506616
- var import_react324, jsx_dev_runtime479;
507101
+ var import_react324, jsx_dev_runtime480;
506617
507102
  var init_BypassPermissionsModeDialog = __esm(() => {
506618
507103
  init_ink2();
506619
507104
  init_gracefulShutdown();
@@ -506621,7 +507106,7 @@ var init_BypassPermissionsModeDialog = __esm(() => {
506621
507106
  init_CustomSelect();
506622
507107
  init_Dialog();
506623
507108
  import_react324 = __toESM(require_react(), 1);
506624
- jsx_dev_runtime479 = __toESM(require_jsx_dev_runtime(), 1);
507109
+ jsx_dev_runtime480 = __toESM(require_jsx_dev_runtime(), 1);
506625
507110
  });
506626
507111
 
506627
507112
  // src/components/ClaudeInChromeOnboarding.tsx
@@ -506666,13 +507151,13 @@ function ClaudeInChromeOnboarding(t0) {
506666
507151
  use_input_default(t3);
506667
507152
  let t4;
506668
507153
  if ($3[4] !== isExtensionInstalled) {
506669
- t4 = !isExtensionInstalled && /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(jsx_dev_runtime480.Fragment, {
507154
+ t4 = !isExtensionInstalled && /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(jsx_dev_runtime481.Fragment, {
506670
507155
  children: [
506671
- /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Newline, {}, undefined, false, undefined, this),
506672
- /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Newline, {}, undefined, false, undefined, this),
507156
+ /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Newline, {}, undefined, false, undefined, this),
507157
+ /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Newline, {}, undefined, false, undefined, this),
506673
507158
  "Requires the Chrome extension. Get started at",
506674
507159
  " ",
506675
- /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
507160
+ /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Link, {
506676
507161
  url: CHROME_EXTENSION_URL2
506677
507162
  }, undefined, false, undefined, this)
506678
507163
  ]
@@ -506684,7 +507169,7 @@ function ClaudeInChromeOnboarding(t0) {
506684
507169
  }
506685
507170
  let t5;
506686
507171
  if ($3[6] !== t4) {
506687
- t5 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
507172
+ t5 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ThemedText, {
506688
507173
  children: [
506689
507174
  "localclawd in Chrome works with the Chrome extension to let you control your browser directly from localclawd. You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.",
506690
507175
  t4
@@ -506697,11 +507182,11 @@ function ClaudeInChromeOnboarding(t0) {
506697
507182
  }
506698
507183
  let t6;
506699
507184
  if ($3[8] !== isExtensionInstalled) {
506700
- t6 = isExtensionInstalled && /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(jsx_dev_runtime480.Fragment, {
507185
+ t6 = isExtensionInstalled && /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(jsx_dev_runtime481.Fragment, {
506701
507186
  children: [
506702
507187
  " ",
506703
507188
  "(",
506704
- /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
507189
+ /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Link, {
506705
507190
  url: CHROME_PERMISSIONS_URL2
506706
507191
  }, undefined, false, undefined, this),
506707
507192
  ")"
@@ -506714,7 +507199,7 @@ function ClaudeInChromeOnboarding(t0) {
506714
507199
  }
506715
507200
  let t7;
506716
507201
  if ($3[10] !== t6) {
506717
- t7 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
507202
+ t7 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ThemedText, {
506718
507203
  dimColor: true,
506719
507204
  children: [
506720
507205
  "Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites localclawd can browse, click, and type on",
@@ -506729,7 +507214,7 @@ function ClaudeInChromeOnboarding(t0) {
506729
507214
  }
506730
507215
  let t8;
506731
507216
  if ($3[12] === Symbol.for("react.memo_cache_sentinel")) {
506732
- t8 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
507217
+ t8 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ThemedText, {
506733
507218
  bold: true,
506734
507219
  color: "chromeYellow",
506735
507220
  children: "/chrome"
@@ -506740,7 +507225,7 @@ function ClaudeInChromeOnboarding(t0) {
506740
507225
  }
506741
507226
  let t9;
506742
507227
  if ($3[13] === Symbol.for("react.memo_cache_sentinel")) {
506743
- t9 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
507228
+ t9 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ThemedText, {
506744
507229
  dimColor: true,
506745
507230
  children: [
506746
507231
  "For more info, use",
@@ -506748,7 +507233,7 @@ function ClaudeInChromeOnboarding(t0) {
506748
507233
  t8,
506749
507234
  " ",
506750
507235
  "or visit ",
506751
- /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
507236
+ /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Link, {
506752
507237
  url: "https://github.com/chromebookwiz/localclawd"
506753
507238
  }, undefined, false, undefined, this)
506754
507239
  ]
@@ -506759,7 +507244,7 @@ function ClaudeInChromeOnboarding(t0) {
506759
507244
  }
506760
507245
  let t10;
506761
507246
  if ($3[14] !== t5 || $3[15] !== t7) {
506762
- t10 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedBox_default, {
507247
+ t10 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ThemedBox_default, {
506763
507248
  flexDirection: "column",
506764
507249
  gap: 1,
506765
507250
  children: [
@@ -506776,7 +507261,7 @@ function ClaudeInChromeOnboarding(t0) {
506776
507261
  }
506777
507262
  let t11;
506778
507263
  if ($3[17] !== onDone || $3[18] !== t10) {
506779
- t11 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Dialog, {
507264
+ t11 = /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Dialog, {
506780
507265
  title: "localclawd in Chrome (Beta)",
506781
507266
  onCancel: onDone,
506782
507267
  color: "chromeYellow",
@@ -506796,14 +507281,14 @@ function _temp305(current) {
506796
507281
  hasCompletedClaudeInChromeOnboarding: true
506797
507282
  };
506798
507283
  }
506799
- var import_react325, jsx_dev_runtime480, CHROME_EXTENSION_URL2 = "https://github.com/chromebookwiz/localclawd", CHROME_PERMISSIONS_URL2 = "https://clau.de/chrome/permissions";
507284
+ var import_react325, jsx_dev_runtime481, CHROME_EXTENSION_URL2 = "https://github.com/chromebookwiz/localclawd", CHROME_PERMISSIONS_URL2 = "https://clau.de/chrome/permissions";
506800
507285
  var init_ClaudeInChromeOnboarding = __esm(() => {
506801
507286
  init_ink2();
506802
507287
  init_setup2();
506803
507288
  init_config();
506804
507289
  init_Dialog();
506805
507290
  import_react325 = __toESM(require_react(), 1);
506806
- jsx_dev_runtime480 = __toESM(require_jsx_dev_runtime(), 1);
507291
+ jsx_dev_runtime481 = __toESM(require_jsx_dev_runtime(), 1);
506807
507292
  });
506808
507293
 
506809
507294
  // src/interactiveHelpers.tsx
@@ -506812,7 +507297,7 @@ function completeOnboarding() {
506812
507297
  saveGlobalConfig((current) => ({
506813
507298
  ...current,
506814
507299
  hasCompletedOnboarding: true,
506815
- lastOnboardingVersion: "1.0.4"
507300
+ lastOnboardingVersion: "1.0.6"
506816
507301
  }));
506817
507302
  }
506818
507303
  function showDialog(root2, renderer) {
@@ -506833,10 +507318,10 @@ async function exitWithMessage2(root2, message, options) {
506833
507318
  } = await Promise.resolve().then(() => (init_ink2(), exports_ink));
506834
507319
  const color3 = options?.color;
506835
507320
  const exitCode = options?.exitCode ?? 1;
506836
- root2.render(color3 ? /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Text6, {
507321
+ root2.render(color3 ? /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(Text6, {
506837
507322
  color: color3,
506838
507323
  children: message
506839
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Text6, {
507324
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(Text6, {
506840
507325
  children: message
506841
507326
  }, undefined, false, undefined, this));
506842
507327
  root2.unmount();
@@ -506844,9 +507329,9 @@ async function exitWithMessage2(root2, message, options) {
506844
507329
  process.exit(exitCode);
506845
507330
  }
506846
507331
  function showSetupDialog(root2, renderer, options) {
506847
- return showDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(AppStateProvider, {
507332
+ return showDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(AppStateProvider, {
506848
507333
  onChangeAppState: options?.onChangeAppState,
506849
- children: /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(KeybindingSetup, {
507334
+ children: /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(KeybindingSetup, {
506850
507335
  children: renderer(done)
506851
507336
  }, undefined, false, undefined, this)
506852
507337
  }, undefined, false, undefined, this));
@@ -506862,13 +507347,68 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506862
507347
  return false;
506863
507348
  }
506864
507349
  const config2 = getGlobalConfig();
507350
+ const {
507351
+ StartPage: StartPage2
507352
+ } = await Promise.resolve().then(() => (init_StartPage(), exports_StartPage));
507353
+ const startAction = await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(StartPage2, {
507354
+ currentConfig: {
507355
+ provider: config2.localBackendProvider,
507356
+ baseUrl: config2.localBackendBaseUrl,
507357
+ model: config2.localBackendModel,
507358
+ apiKey: config2.localBackendApiKey
507359
+ },
507360
+ onDone: done
507361
+ }, undefined, false, undefined, this), {
507362
+ onChangeAppState
507363
+ });
507364
+ if (startAction === "configure-backend") {
507365
+ const {
507366
+ LocalBackendSetup: LocalBackendSetup2
507367
+ } = await Promise.resolve().then(() => (init_LocalBackendSetup(), exports_LocalBackendSetup));
507368
+ const {
507369
+ clearSessionLocalLLMConfigOverride: clearSessionLocalLLMConfigOverride2,
507370
+ setSessionLocalLLMConfigOverride: setSessionLocalLLMConfigOverride2
507371
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
507372
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(LocalBackendSetup2, {
507373
+ initialConfig: {
507374
+ provider: config2.localBackendProvider,
507375
+ baseUrl: config2.localBackendBaseUrl,
507376
+ model: config2.localBackendModel,
507377
+ apiKey: config2.localBackendApiKey
507378
+ },
507379
+ onComplete: (nextConfig, options) => {
507380
+ if (options?.saveGlobally === false) {
507381
+ setSessionLocalLLMConfigOverride2(nextConfig);
507382
+ } else {
507383
+ clearSessionLocalLLMConfigOverride2();
507384
+ saveGlobalConfig((current) => ({
507385
+ ...current,
507386
+ localBackendProvider: nextConfig.provider,
507387
+ localBackendBaseUrl: nextConfig.baseUrl,
507388
+ localBackendModel: nextConfig.model,
507389
+ localBackendApiKey: nextConfig.apiKey
507390
+ }));
507391
+ }
507392
+ done();
507393
+ },
507394
+ onCancel: () => {
507395
+ done();
507396
+ },
507397
+ title: "Connect your model backend",
507398
+ description: "Choose the OpenAI-compatible endpoint localclawd should talk to. You can save it globally for every run or use it only for this launch.",
507399
+ showSaveGloballyOption: true
507400
+ }, undefined, false, undefined, this), {
507401
+ onChangeAppState
507402
+ });
507403
+ }
506865
507404
  let onboardingShown = false;
506866
507405
  if (!config2.theme || !config2.hasCompletedOnboarding) {
506867
507406
  onboardingShown = true;
506868
507407
  const {
506869
507408
  Onboarding: Onboarding2
506870
507409
  } = await Promise.resolve().then(() => (init_Onboarding(), exports_Onboarding));
506871
- await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(Onboarding2, {
507410
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(Onboarding2, {
507411
+ showWelcome: false,
506872
507412
  onDone: () => {
506873
507413
  completeOnboarding();
506874
507414
  done();
@@ -506882,7 +507422,7 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506882
507422
  const {
506883
507423
  TrustDialog: TrustDialog2
506884
507424
  } = await Promise.resolve().then(() => (init_TrustDialog(), exports_TrustDialog));
506885
- await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(TrustDialog2, {
507425
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(TrustDialog2, {
506886
507426
  commands,
506887
507427
  onDone: done
506888
507428
  }, undefined, false, undefined, this));
@@ -506902,7 +507442,7 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506902
507442
  const {
506903
507443
  ClaudeMdExternalIncludesDialog: ClaudeMdExternalIncludesDialog2
506904
507444
  } = await Promise.resolve().then(() => (init_ClaudeMdExternalIncludesDialog(), exports_ClaudeMdExternalIncludesDialog));
506905
- await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ClaudeMdExternalIncludesDialog2, {
507445
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ClaudeMdExternalIncludesDialog2, {
506906
507446
  onDone: done,
506907
507447
  isStandaloneDialog: true,
506908
507448
  externalIncludes
@@ -506917,7 +507457,7 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506917
507457
  const {
506918
507458
  GroveDialog: GroveDialog2
506919
507459
  } = await Promise.resolve().then(() => (init_Grove(), exports_Grove));
506920
- const decision = await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(GroveDialog2, {
507460
+ const decision = await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(GroveDialog2, {
506921
507461
  showIfAlreadyViewed: false,
506922
507462
  location: onboardingShown ? "onboarding" : "policy_update_modal",
506923
507463
  onDone: done
@@ -506932,7 +507472,7 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506932
507472
  const {
506933
507473
  BypassPermissionsModeDialog: BypassPermissionsModeDialog2
506934
507474
  } = await Promise.resolve().then(() => (init_BypassPermissionsModeDialog(), exports_BypassPermissionsModeDialog));
506935
- await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(BypassPermissionsModeDialog2, {
507475
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(BypassPermissionsModeDialog2, {
506936
507476
  onAccept: done
506937
507477
  }, undefined, false, undefined, this));
506938
507478
  }
@@ -506942,7 +507482,7 @@ async function showSetupScreens(root2, permissionMode, allowDangerouslySkipPermi
506942
507482
  const {
506943
507483
  ClaudeInChromeOnboarding: ClaudeInChromeOnboarding2
506944
507484
  } = await Promise.resolve().then(() => (init_ClaudeInChromeOnboarding(), exports_ClaudeInChromeOnboarding));
506945
- await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime481.jsxDEV(ClaudeInChromeOnboarding2, {
507485
+ await showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ClaudeInChromeOnboarding2, {
506946
507486
  onDone: done
506947
507487
  }, undefined, false, undefined, this));
506948
507488
  }
@@ -506997,7 +507537,7 @@ function getRenderContext(exitOnCtrlC) {
506997
507537
  }
506998
507538
  };
506999
507539
  }
507000
- var jsx_dev_runtime481;
507540
+ var jsx_dev_runtime482;
507001
507541
  var init_interactiveHelpers = __esm(() => {
507002
507542
  init_gracefulShutdown();
507003
507543
  init_state();
@@ -507020,7 +507560,7 @@ var init_interactiveHelpers = __esm(() => {
507020
507560
  init_renderOptions();
507021
507561
  init_allErrors();
507022
507562
  init_settings2();
507023
- jsx_dev_runtime481 = __toESM(require_jsx_dev_runtime(), 1);
507563
+ jsx_dev_runtime482 = __toESM(require_jsx_dev_runtime(), 1);
507024
507564
  });
507025
507565
 
507026
507566
  // src/components/InvalidSettingsDialog.tsx
@@ -507053,7 +507593,7 @@ function InvalidSettingsDialog(t0) {
507053
507593
  const handleSelect = t1;
507054
507594
  let t2;
507055
507595
  if ($3[3] !== settingsErrors) {
507056
- t2 = /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ValidationErrorsList, {
507596
+ t2 = /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ValidationErrorsList, {
507057
507597
  errors: settingsErrors
507058
507598
  }, undefined, false, undefined, this);
507059
507599
  $3[3] = settingsErrors;
@@ -507063,7 +507603,7 @@ function InvalidSettingsDialog(t0) {
507063
507603
  }
507064
507604
  let t3;
507065
507605
  if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
507066
- t3 = /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(ThemedText, {
507606
+ t3 = /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507067
507607
  dimColor: true,
507068
507608
  children: "Files with errors are skipped entirely, not just the invalid settings."
507069
507609
  }, undefined, false, undefined, this);
@@ -507086,7 +507626,7 @@ function InvalidSettingsDialog(t0) {
507086
507626
  }
507087
507627
  let t5;
507088
507628
  if ($3[7] !== handleSelect) {
507089
- t5 = /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(Select, {
507629
+ t5 = /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Select, {
507090
507630
  options: t4,
507091
507631
  onChange: handleSelect
507092
507632
  }, undefined, false, undefined, this);
@@ -507097,7 +507637,7 @@ function InvalidSettingsDialog(t0) {
507097
507637
  }
507098
507638
  let t6;
507099
507639
  if ($3[9] !== onExit2 || $3[10] !== t2 || $3[11] !== t5) {
507100
- t6 = /* @__PURE__ */ jsx_dev_runtime482.jsxDEV(Dialog, {
507640
+ t6 = /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Dialog, {
507101
507641
  title: "Settings Error",
507102
507642
  onCancel: onExit2,
507103
507643
  color: "warning",
@@ -507116,13 +507656,13 @@ function InvalidSettingsDialog(t0) {
507116
507656
  }
507117
507657
  return t6;
507118
507658
  }
507119
- var jsx_dev_runtime482;
507659
+ var jsx_dev_runtime483;
507120
507660
  var init_InvalidSettingsDialog = __esm(() => {
507121
507661
  init_ink2();
507122
507662
  init_CustomSelect();
507123
507663
  init_Dialog();
507124
507664
  init_ValidationErrorsList();
507125
- jsx_dev_runtime482 = __toESM(require_jsx_dev_runtime(), 1);
507665
+ jsx_dev_runtime483 = __toESM(require_jsx_dev_runtime(), 1);
507126
507666
  });
507127
507667
 
507128
507668
  // src/hooks/useTeleportResume.tsx
@@ -507279,26 +507819,26 @@ function ResumeTask({
507279
507819
  loadSessions();
507280
507820
  }, [setHasCompletedTeleportErrorFlow, loadSessions]);
507281
507821
  if (!hasCompletedTeleportErrorFlow) {
507282
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(TeleportError, {
507822
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(TeleportError, {
507283
507823
  onComplete: handleErrorComplete
507284
507824
  }, undefined, false, undefined, this);
507285
507825
  }
507286
507826
  if (loading) {
507287
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507827
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507288
507828
  flexDirection: "column",
507289
507829
  padding: 1,
507290
507830
  children: [
507291
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507831
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507292
507832
  flexDirection: "row",
507293
507833
  children: [
507294
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Spinner, {}, undefined, false, undefined, this),
507295
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507834
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(Spinner, {}, undefined, false, undefined, this),
507835
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507296
507836
  bold: true,
507297
507837
  children: "Loading localclawd sessions…"
507298
507838
  }, undefined, false, undefined, this)
507299
507839
  ]
507300
507840
  }, undefined, true, undefined, this),
507301
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507841
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507302
507842
  dimColor: true,
507303
507843
  children: retrying ? "Retrying…" : "Fetching your localclawd sessions…"
507304
507844
  }, undefined, false, undefined, this)
@@ -507306,27 +507846,27 @@ function ResumeTask({
507306
507846
  }, undefined, true, undefined, this);
507307
507847
  }
507308
507848
  if (loadErrorType) {
507309
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507849
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507310
507850
  flexDirection: "column",
507311
507851
  padding: 1,
507312
507852
  children: [
507313
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507853
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507314
507854
  bold: true,
507315
507855
  color: "error",
507316
507856
  children: "Error loading localclawd sessions"
507317
507857
  }, undefined, false, undefined, this),
507318
507858
  renderErrorSpecificGuidance(loadErrorType),
507319
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507859
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507320
507860
  dimColor: true,
507321
507861
  children: [
507322
507862
  "Press ",
507323
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507863
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507324
507864
  bold: true,
507325
507865
  children: "Ctrl+R"
507326
507866
  }, undefined, false, undefined, this),
507327
507867
  " to retry · Press",
507328
507868
  " ",
507329
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507869
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507330
507870
  bold: true,
507331
507871
  children: escKey
507332
507872
  }, undefined, false, undefined, this),
@@ -507337,15 +507877,15 @@ function ResumeTask({
507337
507877
  }, undefined, true, undefined, this);
507338
507878
  }
507339
507879
  if (sessions.length === 0) {
507340
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507880
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507341
507881
  flexDirection: "column",
507342
507882
  padding: 1,
507343
507883
  children: [
507344
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507884
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507345
507885
  bold: true,
507346
507886
  children: [
507347
507887
  "No localclawd sessions found",
507348
- currentRepo && /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507888
+ currentRepo && /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507349
507889
  children: [
507350
507890
  " for ",
507351
507891
  currentRepo
@@ -507353,13 +507893,13 @@ function ResumeTask({
507353
507893
  }, undefined, true, undefined, this)
507354
507894
  ]
507355
507895
  }, undefined, true, undefined, this),
507356
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507896
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507357
507897
  marginTop: 1,
507358
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507898
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507359
507899
  dimColor: true,
507360
507900
  children: [
507361
507901
  "Press ",
507362
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507902
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507363
507903
  bold: true,
507364
507904
  children: escKey
507365
507905
  }, undefined, false, undefined, this),
@@ -507390,16 +507930,16 @@ function ResumeTask({
507390
507930
  const maxVisibleOptions = Math.max(1, isEmbedded ? Math.min(sessions.length, 5, rows - 6 - layoutOverhead) : Math.min(sessions.length, rows - 1 - layoutOverhead));
507391
507931
  const maxHeight = maxVisibleOptions + layoutOverhead;
507392
507932
  const showScrollPosition = sessions.length > maxVisibleOptions;
507393
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507933
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507394
507934
  flexDirection: "column",
507395
507935
  padding: 1,
507396
507936
  height: maxHeight,
507397
507937
  children: [
507398
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507938
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507399
507939
  bold: true,
507400
507940
  children: [
507401
507941
  "Select a session to resume",
507402
- showScrollPosition && /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507942
+ showScrollPosition && /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507403
507943
  dimColor: true,
507404
507944
  children: [
507405
507945
  " ",
@@ -507410,7 +507950,7 @@ function ResumeTask({
507410
507950
  ")"
507411
507951
  ]
507412
507952
  }, undefined, true, undefined, this),
507413
- currentRepo && /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507953
+ currentRepo && /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507414
507954
  dimColor: true,
507415
507955
  children: [
507416
507956
  " (",
@@ -507421,14 +507961,14 @@ function ResumeTask({
507421
507961
  ":"
507422
507962
  ]
507423
507963
  }, undefined, true, undefined, this),
507424
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507964
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507425
507965
  flexDirection: "column",
507426
507966
  marginTop: 1,
507427
507967
  flexGrow: 1,
507428
507968
  children: [
507429
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507969
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507430
507970
  marginLeft: 2,
507431
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
507971
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507432
507972
  bold: true,
507433
507973
  children: [
507434
507974
  UPDATED_STRING.padEnd(maxTimeStringLength, " "),
@@ -507437,7 +507977,7 @@ function ResumeTask({
507437
507977
  ]
507438
507978
  }, undefined, true, undefined, this)
507439
507979
  }, undefined, false, undefined, this),
507440
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Select, {
507980
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(Select, {
507441
507981
  visibleOptionCount: maxVisibleOptions,
507442
507982
  options,
507443
507983
  onChange: (value) => {
@@ -507455,21 +507995,21 @@ function ResumeTask({
507455
507995
  }, undefined, false, undefined, this)
507456
507996
  ]
507457
507997
  }, undefined, true, undefined, this),
507458
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
507998
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507459
507999
  flexDirection: "row",
507460
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508000
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507461
508001
  dimColor: true,
507462
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Byline, {
508002
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(Byline, {
507463
508003
  children: [
507464
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(KeyboardShortcutHint, {
508004
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(KeyboardShortcutHint, {
507465
508005
  shortcut: "↑/↓",
507466
508006
  action: "select"
507467
508007
  }, undefined, false, undefined, this),
507468
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(KeyboardShortcutHint, {
508008
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(KeyboardShortcutHint, {
507469
508009
  shortcut: "Enter",
507470
508010
  action: "confirm"
507471
508011
  }, undefined, false, undefined, this),
507472
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ConfigurableShortcutHint, {
508012
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ConfigurableShortcutHint, {
507473
508013
  action: "confirm:no",
507474
508014
  context: "Confirmation",
507475
508015
  fallback: "Esc",
@@ -507498,28 +508038,28 @@ function determineErrorType(errorMessage4) {
507498
508038
  function renderErrorSpecificGuidance(errorType) {
507499
508039
  switch (errorType) {
507500
508040
  case "network":
507501
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
508041
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507502
508042
  marginY: 1,
507503
508043
  flexDirection: "column",
507504
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508044
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507505
508045
  dimColor: true,
507506
508046
  children: "Check your internet connection"
507507
508047
  }, undefined, false, undefined, this)
507508
508048
  }, undefined, false, undefined, this);
507509
508049
  case "auth":
507510
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
508050
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507511
508051
  marginY: 1,
507512
508052
  flexDirection: "column",
507513
508053
  children: [
507514
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508054
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507515
508055
  dimColor: true,
507516
508056
  children: "Remote web sessions are disabled in this local-first build"
507517
508057
  }, undefined, false, undefined, this),
507518
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508058
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507519
508059
  dimColor: true,
507520
508060
  children: [
507521
508061
  "Use ",
507522
- /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508062
+ /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507523
508063
  bold: true,
507524
508064
  children: "/provider"
507525
508065
  }, undefined, false, undefined, this),
@@ -507529,26 +508069,26 @@ function renderErrorSpecificGuidance(errorType) {
507529
508069
  ]
507530
508070
  }, undefined, true, undefined, this);
507531
508071
  case "api":
507532
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
508072
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507533
508073
  marginY: 1,
507534
508074
  flexDirection: "column",
507535
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508075
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507536
508076
  dimColor: true,
507537
508077
  children: "Sorry, Claude encountered an error"
507538
508078
  }, undefined, false, undefined, this)
507539
508079
  }, undefined, false, undefined, this);
507540
508080
  case "other":
507541
- return /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedBox_default, {
508081
+ return /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
507542
508082
  marginY: 1,
507543
508083
  flexDirection: "row",
507544
- children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
508084
+ children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
507545
508085
  dimColor: true,
507546
508086
  children: "Sorry, Claude Code encountered an error"
507547
508087
  }, undefined, false, undefined, this)
507548
508088
  }, undefined, false, undefined, this);
507549
508089
  }
507550
508090
  }
507551
- var import_react327, jsx_dev_runtime483, UPDATED_STRING = "Updated", SPACE_BETWEEN_TABLE_COLUMNS = " ";
508091
+ var import_react327, jsx_dev_runtime484, UPDATED_STRING = "Updated", SPACE_BETWEEN_TABLE_COLUMNS = " ";
507552
508092
  var init_ResumeTask = __esm(() => {
507553
508093
  init_useTerminalSize();
507554
508094
  init_api();
@@ -507565,7 +508105,7 @@ var init_ResumeTask = __esm(() => {
507565
508105
  init_Spinner2();
507566
508106
  init_TeleportError();
507567
508107
  import_react327 = __toESM(require_react(), 1);
507568
- jsx_dev_runtime483 = __toESM(require_jsx_dev_runtime(), 1);
508108
+ jsx_dev_runtime484 = __toESM(require_jsx_dev_runtime(), 1);
507569
508109
  });
507570
508110
 
507571
508111
  // src/components/TeleportResumeWrapper.tsx
@@ -507657,11 +508197,11 @@ function TeleportResumeWrapper(t0) {
507657
508197
  if (isResuming && selectedSession) {
507658
508198
  let t82;
507659
508199
  if ($3[12] === Symbol.for("react.memo_cache_sentinel")) {
507660
- t82 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
508200
+ t82 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
507661
508201
  flexDirection: "row",
507662
508202
  children: [
507663
- /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(Spinner, {}, undefined, false, undefined, this),
507664
- /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508203
+ /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508204
+ /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507665
508205
  bold: true,
507666
508206
  children: "Resuming session…"
507667
508207
  }, undefined, false, undefined, this)
@@ -507673,12 +508213,12 @@ function TeleportResumeWrapper(t0) {
507673
508213
  }
507674
508214
  let t9;
507675
508215
  if ($3[13] !== selectedSession.title) {
507676
- t9 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
508216
+ t9 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
507677
508217
  flexDirection: "column",
507678
508218
  padding: 1,
507679
508219
  children: [
507680
508220
  t82,
507681
- /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508221
+ /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507682
508222
  dimColor: true,
507683
508223
  children: [
507684
508224
  'Loading "',
@@ -507698,7 +508238,7 @@ function TeleportResumeWrapper(t0) {
507698
508238
  if (error5 && !onError) {
507699
508239
  let t82;
507700
508240
  if ($3[15] === Symbol.for("react.memo_cache_sentinel")) {
507701
- t82 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508241
+ t82 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507702
508242
  bold: true,
507703
508243
  color: "error",
507704
508244
  children: "Failed to resume session"
@@ -507709,7 +508249,7 @@ function TeleportResumeWrapper(t0) {
507709
508249
  }
507710
508250
  let t9;
507711
508251
  if ($3[16] !== error5.message) {
507712
- t9 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508252
+ t9 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507713
508253
  dimColor: true,
507714
508254
  children: error5.message
507715
508255
  }, undefined, false, undefined, this);
@@ -507720,13 +508260,13 @@ function TeleportResumeWrapper(t0) {
507720
508260
  }
507721
508261
  let t10;
507722
508262
  if ($3[18] === Symbol.for("react.memo_cache_sentinel")) {
507723
- t10 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
508263
+ t10 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
507724
508264
  marginTop: 1,
507725
- children: /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508265
+ children: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507726
508266
  dimColor: true,
507727
508267
  children: [
507728
508268
  "Press ",
507729
- /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedText, {
508269
+ /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
507730
508270
  bold: true,
507731
508271
  children: "Esc"
507732
508272
  }, undefined, false, undefined, this),
@@ -507740,7 +508280,7 @@ function TeleportResumeWrapper(t0) {
507740
508280
  }
507741
508281
  let t11;
507742
508282
  if ($3[19] !== t9) {
507743
- t11 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ThemedBox_default, {
508283
+ t11 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
507744
508284
  flexDirection: "column",
507745
508285
  padding: 1,
507746
508286
  children: [
@@ -507758,7 +508298,7 @@ function TeleportResumeWrapper(t0) {
507758
508298
  }
507759
508299
  let t8;
507760
508300
  if ($3[21] !== handleCancel || $3[22] !== handleSelect || $3[23] !== isEmbedded) {
507761
- t8 = /* @__PURE__ */ jsx_dev_runtime484.jsxDEV(ResumeTask, {
508301
+ t8 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ResumeTask, {
507762
508302
  onSelect: handleSelect,
507763
508303
  onCancel: handleCancel,
507764
508304
  isEmbedded
@@ -507772,7 +508312,7 @@ function TeleportResumeWrapper(t0) {
507772
508312
  }
507773
508313
  return t8;
507774
508314
  }
507775
- var import_react328, jsx_dev_runtime484;
508315
+ var import_react328, jsx_dev_runtime485;
507776
508316
  var init_TeleportResumeWrapper = __esm(() => {
507777
508317
  init_useTeleportResume();
507778
508318
  init_ink2();
@@ -507780,7 +508320,7 @@ var init_TeleportResumeWrapper = __esm(() => {
507780
508320
  init_ResumeTask();
507781
508321
  init_Spinner2();
507782
508322
  import_react328 = __toESM(require_react(), 1);
507783
- jsx_dev_runtime484 = __toESM(require_jsx_dev_runtime(), 1);
508323
+ jsx_dev_runtime485 = __toESM(require_jsx_dev_runtime(), 1);
507784
508324
  });
507785
508325
 
507786
508326
  // src/components/TeleportRepoMismatchDialog.tsx
@@ -507849,20 +508389,20 @@ function TeleportRepoMismatchDialog(t0) {
507849
508389
  const options = t2;
507850
508390
  let t3;
507851
508391
  if ($3[8] !== availablePaths.length || $3[9] !== errorMessage4 || $3[10] !== handleChange4 || $3[11] !== options || $3[12] !== targetRepo || $3[13] !== validating) {
507852
- t3 = availablePaths.length > 0 ? /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(jsx_dev_runtime485.Fragment, {
508392
+ t3 = availablePaths.length > 0 ? /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(jsx_dev_runtime486.Fragment, {
507853
508393
  children: [
507854
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
508394
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
507855
508395
  flexDirection: "column",
507856
508396
  gap: 1,
507857
508397
  children: [
507858
- errorMessage4 && /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508398
+ errorMessage4 && /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507859
508399
  color: "error",
507860
508400
  children: errorMessage4
507861
508401
  }, undefined, false, undefined, this),
507862
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508402
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507863
508403
  children: [
507864
508404
  "Open Claude Code in ",
507865
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508405
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507866
508406
  bold: true,
507867
508407
  children: targetRepo
507868
508408
  }, undefined, false, undefined, this),
@@ -507871,27 +508411,27 @@ function TeleportRepoMismatchDialog(t0) {
507871
508411
  }, undefined, true, undefined, this)
507872
508412
  ]
507873
508413
  }, undefined, true, undefined, this),
507874
- validating ? /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
508414
+ validating ? /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
507875
508415
  children: [
507876
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(Spinner, {}, undefined, false, undefined, this),
507877
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508416
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508417
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507878
508418
  children: " Validating repository…"
507879
508419
  }, undefined, false, undefined, this)
507880
508420
  ]
507881
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(Select, {
508421
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Select, {
507882
508422
  options,
507883
508423
  onChange: (value_0) => void handleChange4(value_0)
507884
508424
  }, undefined, false, undefined, this)
507885
508425
  ]
507886
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedBox_default, {
508426
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
507887
508427
  flexDirection: "column",
507888
508428
  gap: 1,
507889
508429
  children: [
507890
- errorMessage4 && /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508430
+ errorMessage4 && /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507891
508431
  color: "error",
507892
508432
  children: errorMessage4
507893
508433
  }, undefined, false, undefined, this),
507894
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508434
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507895
508435
  dimColor: true,
507896
508436
  children: [
507897
508437
  "Run claude --teleport from a checkout of ",
@@ -507912,7 +508452,7 @@ function TeleportRepoMismatchDialog(t0) {
507912
508452
  }
507913
508453
  let t4;
507914
508454
  if ($3[15] !== onCancel || $3[16] !== t3) {
507915
- t4 = /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(Dialog, {
508455
+ t4 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Dialog, {
507916
508456
  title: "Teleport to Repo",
507917
508457
  onCancel,
507918
508458
  color: "background",
@@ -507928,10 +508468,10 @@ function TeleportRepoMismatchDialog(t0) {
507928
508468
  }
507929
508469
  function _temp306(path22) {
507930
508470
  return {
507931
- label: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508471
+ label: /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507932
508472
  children: [
507933
508473
  "Use ",
507934
- /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
508474
+ /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
507935
508475
  bold: true,
507936
508476
  children: getDisplayPath(path22)
507937
508477
  }, undefined, false, undefined, this)
@@ -507940,7 +508480,7 @@ function _temp306(path22) {
507940
508480
  value: path22
507941
508481
  };
507942
508482
  }
507943
- var import_react329, jsx_dev_runtime485;
508483
+ var import_react329, jsx_dev_runtime486;
507944
508484
  var init_TeleportRepoMismatchDialog = __esm(() => {
507945
508485
  init_ink2();
507946
508486
  init_file();
@@ -507949,7 +508489,7 @@ var init_TeleportRepoMismatchDialog = __esm(() => {
507949
508489
  init_Dialog();
507950
508490
  init_Spinner2();
507951
508491
  import_react329 = __toESM(require_react(), 1);
507952
- jsx_dev_runtime485 = __toESM(require_jsx_dev_runtime(), 1);
508492
+ jsx_dev_runtime486 = __toESM(require_jsx_dev_runtime(), 1);
507953
508493
  });
507954
508494
 
507955
508495
  // src/screens/ResumeConversation.tsx
@@ -508147,12 +508687,12 @@ function ResumeConversation({
508147
508687
  }
508148
508688
  }
508149
508689
  if (crossProjectCommand) {
508150
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(CrossProjectMessage, {
508690
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(CrossProjectMessage, {
508151
508691
  command: crossProjectCommand
508152
508692
  }, undefined, false, undefined, this);
508153
508693
  }
508154
508694
  if (resumeData) {
508155
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(REPL, {
508695
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(REPL, {
508156
508696
  debug: debug3,
508157
508697
  commands,
508158
508698
  initialTools,
@@ -508175,29 +508715,29 @@ function ResumeConversation({
508175
508715
  }, undefined, false, undefined, this);
508176
508716
  }
508177
508717
  if (loading) {
508178
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
508718
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedBox_default, {
508179
508719
  children: [
508180
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508181
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508720
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508721
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508182
508722
  children: " Loading conversations…"
508183
508723
  }, undefined, false, undefined, this)
508184
508724
  ]
508185
508725
  }, undefined, true, undefined, this);
508186
508726
  }
508187
508727
  if (resuming) {
508188
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
508728
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedBox_default, {
508189
508729
  children: [
508190
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508191
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508730
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(Spinner, {}, undefined, false, undefined, this),
508731
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508192
508732
  children: " Resuming conversation…"
508193
508733
  }, undefined, false, undefined, this)
508194
508734
  ]
508195
508735
  }, undefined, true, undefined, this);
508196
508736
  }
508197
508737
  if (filteredLogs.length === 0) {
508198
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(NoConversationsMessage, {}, undefined, false, undefined, this);
508738
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(NoConversationsMessage, {}, undefined, false, undefined, this);
508199
508739
  }
508200
- return /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(LogSelector, {
508740
+ return /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(LogSelector, {
508201
508741
  logs: filteredLogs,
508202
508742
  maxHeight: rows,
508203
508743
  onCancel,
@@ -508224,13 +508764,13 @@ function NoConversationsMessage() {
508224
508764
  useKeybinding("app:interrupt", _temp307, t0);
508225
508765
  let t1;
508226
508766
  if ($3[1] === Symbol.for("react.memo_cache_sentinel")) {
508227
- t1 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
508767
+ t1 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedBox_default, {
508228
508768
  flexDirection: "column",
508229
508769
  children: [
508230
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508770
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508231
508771
  children: "No conversations found to resume."
508232
508772
  }, undefined, false, undefined, this),
508233
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508773
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508234
508774
  dimColor: true,
508235
508775
  children: "Press Ctrl+C to exit and start a new conversation."
508236
508776
  }, undefined, false, undefined, this)
@@ -508260,7 +508800,7 @@ function CrossProjectMessage(t0) {
508260
508800
  import_react330.default.useEffect(_temp357, t1);
508261
508801
  let t2;
508262
508802
  if ($3[1] === Symbol.for("react.memo_cache_sentinel")) {
508263
- t2 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508803
+ t2 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508264
508804
  children: "This conversation is from a different directory."
508265
508805
  }, undefined, false, undefined, this);
508266
508806
  $3[1] = t2;
@@ -508269,7 +508809,7 @@ function CrossProjectMessage(t0) {
508269
508809
  }
508270
508810
  let t3;
508271
508811
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
508272
- t3 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508812
+ t3 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508273
508813
  children: "To resume, run:"
508274
508814
  }, undefined, false, undefined, this);
508275
508815
  $3[2] = t3;
@@ -508278,11 +508818,11 @@ function CrossProjectMessage(t0) {
508278
508818
  }
508279
508819
  let t4;
508280
508820
  if ($3[3] !== command8) {
508281
- t4 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
508821
+ t4 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedBox_default, {
508282
508822
  flexDirection: "column",
508283
508823
  children: [
508284
508824
  t3,
508285
- /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508825
+ /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508286
508826
  children: [
508287
508827
  " ",
508288
508828
  command8
@@ -508297,7 +508837,7 @@ function CrossProjectMessage(t0) {
508297
508837
  }
508298
508838
  let t5;
508299
508839
  if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
508300
- t5 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedText, {
508840
+ t5 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedText, {
508301
508841
  dimColor: true,
508302
508842
  children: "(Command copied to clipboard)"
508303
508843
  }, undefined, false, undefined, this);
@@ -508307,7 +508847,7 @@ function CrossProjectMessage(t0) {
508307
508847
  }
508308
508848
  let t6;
508309
508849
  if ($3[6] !== t4) {
508310
- t6 = /* @__PURE__ */ jsx_dev_runtime486.jsxDEV(ThemedBox_default, {
508850
+ t6 = /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ThemedBox_default, {
508311
508851
  flexDirection: "column",
508312
508852
  gap: 1,
508313
508853
  children: [
@@ -508330,7 +508870,7 @@ function _temp357() {
508330
508870
  function _temp2103() {
508331
508871
  process.exit(0);
508332
508872
  }
508333
- var import_react330, jsx_dev_runtime486;
508873
+ var import_react330, jsx_dev_runtime487;
508334
508874
  var init_ResumeConversation = __esm(() => {
508335
508875
  init_useTerminalSize();
508336
508876
  init_state();
@@ -508353,7 +508893,7 @@ var init_ResumeConversation = __esm(() => {
508353
508893
  init_sessionStorage();
508354
508894
  init_REPL();
508355
508895
  import_react330 = __toESM(require_react(), 1);
508356
- jsx_dev_runtime486 = __toESM(require_jsx_dev_runtime(), 1);
508896
+ jsx_dev_runtime487 = __toESM(require_jsx_dev_runtime(), 1);
508357
508897
  });
508358
508898
 
508359
508899
  // src/dialogLaunchers.tsx
@@ -508361,7 +508901,7 @@ async function launchInvalidSettingsDialog(root2, props) {
508361
508901
  const {
508362
508902
  InvalidSettingsDialog: InvalidSettingsDialog2
508363
508903
  } = await Promise.resolve().then(() => (init_InvalidSettingsDialog(), exports_InvalidSettingsDialog));
508364
- return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(InvalidSettingsDialog2, {
508904
+ return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(InvalidSettingsDialog2, {
508365
508905
  settingsErrors: props.settingsErrors,
508366
508906
  onContinue: done,
508367
508907
  onExit: props.onExit
@@ -508371,7 +508911,7 @@ async function launchTeleportResumeWrapper(root2) {
508371
508911
  const {
508372
508912
  TeleportResumeWrapper: TeleportResumeWrapper2
508373
508913
  } = await Promise.resolve().then(() => (init_TeleportResumeWrapper(), exports_TeleportResumeWrapper));
508374
- return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(TeleportResumeWrapper2, {
508914
+ return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(TeleportResumeWrapper2, {
508375
508915
  onComplete: done,
508376
508916
  onCancel: () => done(null),
508377
508917
  source: "cliArg"
@@ -508381,7 +508921,7 @@ async function launchTeleportRepoMismatchDialog(root2, props) {
508381
508921
  const {
508382
508922
  TeleportRepoMismatchDialog: TeleportRepoMismatchDialog2
508383
508923
  } = await Promise.resolve().then(() => (init_TeleportRepoMismatchDialog(), exports_TeleportRepoMismatchDialog));
508384
- return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(TeleportRepoMismatchDialog2, {
508924
+ return showSetupDialog(root2, (done) => /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(TeleportRepoMismatchDialog2, {
508385
508925
  targetRepo: props.targetRepo,
508386
508926
  initialPaths: props.initialPaths,
508387
508927
  onSelectPath: done,
@@ -508394,23 +508934,23 @@ async function launchResumeChooser(root2, appProps, worktreePathsPromise, resume
508394
508934
  }, {
508395
508935
  App: App3
508396
508936
  }] = await Promise.all([worktreePathsPromise, Promise.resolve().then(() => (init_ResumeConversation(), exports_ResumeConversation)), Promise.resolve().then(() => (init_App2(), exports_App))]);
508397
- await renderAndRun(root2, /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(App3, {
508937
+ await renderAndRun(root2, /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(App3, {
508398
508938
  getFpsMetrics: appProps.getFpsMetrics,
508399
508939
  stats: appProps.stats,
508400
508940
  initialState: appProps.initialState,
508401
- children: /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(KeybindingSetup, {
508402
- children: /* @__PURE__ */ jsx_dev_runtime487.jsxDEV(ResumeConversation2, {
508941
+ children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(KeybindingSetup, {
508942
+ children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ResumeConversation2, {
508403
508943
  ...resumeProps,
508404
508944
  worktreePaths
508405
508945
  }, undefined, false, undefined, this)
508406
508946
  }, undefined, false, undefined, this)
508407
508947
  }, undefined, false, undefined, this));
508408
508948
  }
508409
- var jsx_dev_runtime487;
508949
+ var jsx_dev_runtime488;
508410
508950
  var init_dialogLaunchers = __esm(() => {
508411
508951
  init_interactiveHelpers();
508412
508952
  init_KeybindingProviderSetup();
508413
- jsx_dev_runtime487 = __toESM(require_jsx_dev_runtime(), 1);
508953
+ jsx_dev_runtime488 = __toESM(require_jsx_dev_runtime(), 1);
508414
508954
  });
508415
508955
 
508416
508956
  // src/plugins/bundled/index.ts
@@ -510858,6 +511398,64 @@ function eagerParseCliFlag(flagName, argv = process.argv) {
510858
511398
  return;
510859
511399
  }
510860
511400
 
511401
+ // src/utils/startupLoading.ts
511402
+ function canRenderStartupLoadingIndicator() {
511403
+ return process.stderr.isTTY === true && !process.argv.includes("--debug-to-stderr");
511404
+ }
511405
+ function startStartupLoadingIndicator(initialMessage = "Starting localclawd") {
511406
+ if (!canRenderStartupLoadingIndicator()) {
511407
+ return {
511408
+ update() {},
511409
+ stop() {}
511410
+ };
511411
+ }
511412
+ let frameIndex = 0;
511413
+ let message = initialMessage;
511414
+ let stopped = false;
511415
+ const clear2 = () => {
511416
+ writeToStderr(`\r${CURSOR_LEFT}${ERASE_LINE}${SHOW_CURSOR}`);
511417
+ };
511418
+ const render3 = () => {
511419
+ const frame = source_default.blue(FRAMES[frameIndex % FRAMES.length]);
511420
+ const suffix = source_default.dim(" loading...");
511421
+ writeToStderr(`\r${HIDE_CURSOR}${CURSOR_LEFT}${ERASE_LINE}${frame} ${message}${suffix}`);
511422
+ frameIndex += 1;
511423
+ };
511424
+ const onExit2 = () => {
511425
+ if (!stopped) {
511426
+ clear2();
511427
+ }
511428
+ };
511429
+ render3();
511430
+ const interval = setInterval(render3, 80);
511431
+ process.on("exit", onExit2);
511432
+ return {
511433
+ update(nextMessage) {
511434
+ if (stopped) {
511435
+ return;
511436
+ }
511437
+ message = nextMessage;
511438
+ render3();
511439
+ },
511440
+ stop() {
511441
+ if (stopped) {
511442
+ return;
511443
+ }
511444
+ stopped = true;
511445
+ clearInterval(interval);
511446
+ process.off("exit", onExit2);
511447
+ clear2();
511448
+ }
511449
+ };
511450
+ }
511451
+ var FRAMES;
511452
+ var init_startupLoading = __esm(() => {
511453
+ init_source();
511454
+ init_dec();
511455
+ init_csi();
511456
+ FRAMES = ["|", "/", "-", "\\"];
511457
+ });
511458
+
510861
511459
  // src/migrations/migrateAutoUpdatesToSettings.ts
510862
511460
  function migrateAutoUpdatesToSettings() {
510863
511461
  const globalConfig = getGlobalConfig();
@@ -511247,7 +511845,7 @@ function appendToLog(path22, message) {
511247
511845
  cwd: getFsImplementation().cwd(),
511248
511846
  userType: process.env.USER_TYPE,
511249
511847
  sessionId: getSessionId(),
511250
- version: "1.0.4"
511848
+ version: "1.0.6"
511251
511849
  };
511252
511850
  getLogWriter(path22).write(messageWithTimestamp);
511253
511851
  }
@@ -515224,8 +515822,8 @@ async function getEnvLessBridgeConfig() {
515224
515822
  }
515225
515823
  async function checkEnvLessBridgeMinVersion() {
515226
515824
  const cfg = await getEnvLessBridgeConfig();
515227
- if (cfg.min_version && lt("1.0.4", cfg.min_version)) {
515228
- return `Your version of localclawd (${"1.0.4"}) is too old for Remote Control.
515825
+ if (cfg.min_version && lt("1.0.6", cfg.min_version)) {
515826
+ return `Your version of localclawd (${"1.0.6"}) is too old for Remote Control.
515229
515827
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
515230
515828
  }
515231
515829
  return null;
@@ -515697,7 +516295,7 @@ async function initBridgeCore(params) {
515697
516295
  const rawApi = createBridgeApiClient({
515698
516296
  baseUrl,
515699
516297
  getAccessToken,
515700
- runnerVersion: "1.0.4",
516298
+ runnerVersion: "1.0.6",
515701
516299
  onDebug: logForDebugging,
515702
516300
  onAuth401,
515703
516301
  getTrustedDeviceToken
@@ -520509,9 +521107,9 @@ function TeleportProgress(t0) {
520509
521107
  const t2 = SPINNER_FRAMES3[frame];
520510
521108
  let t3;
520511
521109
  if ($3[2] !== t2) {
520512
- t3 = /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521110
+ t3 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520513
521111
  marginBottom: 1,
520514
- children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedText, {
521112
+ children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
520515
521113
  bold: true,
520516
521114
  color: "claude",
520517
521115
  children: [
@@ -520527,9 +521125,9 @@ function TeleportProgress(t0) {
520527
521125
  }
520528
521126
  let t4;
520529
521127
  if ($3[4] !== sessionId) {
520530
- t4 = sessionId && /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521128
+ t4 = sessionId && /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520531
521129
  marginBottom: 1,
520532
- children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedText, {
521130
+ children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
520533
521131
  dimColor: true,
520534
521132
  children: sessionId
520535
521133
  }, undefined, false, undefined, this)
@@ -520559,18 +521157,18 @@ function TeleportProgress(t0) {
520559
521157
  color3 = undefined;
520560
521158
  }
520561
521159
  }
520562
- return /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521160
+ return /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520563
521161
  flexDirection: "row",
520564
521162
  children: [
520565
- /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521163
+ /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520566
521164
  width: 2,
520567
- children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedText, {
521165
+ children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
520568
521166
  color: color3,
520569
521167
  dimColor: isPending,
520570
521168
  children: icon
520571
521169
  }, undefined, false, undefined, this)
520572
521170
  }, undefined, false, undefined, this),
520573
- /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedText, {
521171
+ /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
520574
521172
  dimColor: isPending,
520575
521173
  bold: isCurrent,
520576
521174
  children: step.label
@@ -520586,7 +521184,7 @@ function TeleportProgress(t0) {
520586
521184
  }
520587
521185
  let t6;
520588
521186
  if ($3[9] !== t5) {
520589
- t6 = /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521187
+ t6 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520590
521188
  flexDirection: "column",
520591
521189
  marginLeft: 2,
520592
521190
  children: t5
@@ -520598,7 +521196,7 @@ function TeleportProgress(t0) {
520598
521196
  }
520599
521197
  let t7;
520600
521198
  if ($3[11] !== ref || $3[12] !== t3 || $3[13] !== t4 || $3[14] !== t6) {
520601
- t7 = /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(ThemedBox_default, {
521199
+ t7 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
520602
521200
  ref,
520603
521201
  flexDirection: "column",
520604
521202
  paddingX: 1,
@@ -520624,13 +521222,13 @@ async function teleportWithProgress(root2, sessionId) {
520624
521222
  function TeleportProgressWrapper() {
520625
521223
  const [step, _setStep] = import_react331.useState("validating");
520626
521224
  setStep = _setStep;
520627
- return /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(TeleportProgress, {
521225
+ return /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(TeleportProgress, {
520628
521226
  currentStep: step,
520629
521227
  sessionId
520630
521228
  }, undefined, false, undefined, this);
520631
521229
  }
520632
- root2.render(/* @__PURE__ */ jsx_dev_runtime488.jsxDEV(AppStateProvider, {
520633
- children: /* @__PURE__ */ jsx_dev_runtime488.jsxDEV(TeleportProgressWrapper, {}, undefined, false, undefined, this)
521230
+ root2.render(/* @__PURE__ */ jsx_dev_runtime489.jsxDEV(AppStateProvider, {
521231
+ children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(TeleportProgressWrapper, {}, undefined, false, undefined, this)
520634
521232
  }, undefined, false, undefined, this));
520635
521233
  const result = await teleportResumeCodeSession(sessionId, setStep);
520636
521234
  setStep("checking_out");
@@ -520643,14 +521241,14 @@ async function teleportWithProgress(root2, sessionId) {
520643
521241
  branchName
520644
521242
  };
520645
521243
  }
520646
- var import_react331, jsx_dev_runtime488, SPINNER_FRAMES3, STEPS;
521244
+ var import_react331, jsx_dev_runtime489, SPINNER_FRAMES3, STEPS;
520647
521245
  var init_TeleportProgress = __esm(() => {
520648
521246
  init_figures();
520649
521247
  init_ink2();
520650
521248
  init_AppState();
520651
521249
  init_teleport();
520652
521250
  import_react331 = __toESM(require_react(), 1);
520653
- jsx_dev_runtime488 = __toESM(require_jsx_dev_runtime(), 1);
521251
+ jsx_dev_runtime489 = __toESM(require_jsx_dev_runtime(), 1);
520654
521252
  SPINNER_FRAMES3 = ["◐", "◓", "◑", "◒"];
520655
521253
  STEPS = [{
520656
521254
  key: "validating",
@@ -520786,7 +521384,7 @@ No servers were imported.`);
520786
521384
  const t10 = `Found ${t8} MCP ${t9} in Claude Desktop.`;
520787
521385
  let t11;
520788
521386
  if ($3[16] !== collisions.length) {
520789
- t11 = collisions.length > 0 && /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
521387
+ t11 = collisions.length > 0 && /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(ThemedText, {
520790
521388
  color: "warning",
520791
521389
  children: "Note: Some servers already exist with the same name. If selected, they will be imported with a numbered suffix."
520792
521390
  }, undefined, false, undefined, this);
@@ -520797,7 +521395,7 @@ No servers were imported.`);
520797
521395
  }
520798
521396
  let t12;
520799
521397
  if ($3[18] === Symbol.for("react.memo_cache_sentinel")) {
520800
- t12 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
521398
+ t12 = /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(ThemedText, {
520801
521399
  children: "Please select the servers you want to import:"
520802
521400
  }, undefined, false, undefined, this);
520803
521401
  $3[18] = t12;
@@ -520822,7 +521420,7 @@ No servers were imported.`);
520822
521420
  }
520823
521421
  let t15;
520824
521422
  if ($3[23] !== handleEscCancel || $3[24] !== onSubmit || $3[25] !== t13 || $3[26] !== t14) {
520825
- t15 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(SelectMulti, {
521423
+ t15 = /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(SelectMulti, {
520826
521424
  options: t13,
520827
521425
  defaultValue: t14,
520828
521426
  onSubmit,
@@ -520839,7 +521437,7 @@ No servers were imported.`);
520839
521437
  }
520840
521438
  let t16;
520841
521439
  if ($3[28] !== handleEscCancel || $3[29] !== t10 || $3[30] !== t11 || $3[31] !== t15) {
520842
- t16 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(Dialog, {
521440
+ t16 = /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(Dialog, {
520843
521441
  title: "Import MCP Servers from Claude Desktop",
520844
521442
  subtitle: t10,
520845
521443
  color: "success",
@@ -520861,22 +521459,22 @@ No servers were imported.`);
520861
521459
  }
520862
521460
  let t17;
520863
521461
  if ($3[33] === Symbol.for("react.memo_cache_sentinel")) {
520864
- t17 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedBox_default, {
521462
+ t17 = /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(ThemedBox_default, {
520865
521463
  paddingX: 1,
520866
- children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ThemedText, {
521464
+ children: /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(ThemedText, {
520867
521465
  dimColor: true,
520868
521466
  italic: true,
520869
- children: /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(Byline, {
521467
+ children: /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(Byline, {
520870
521468
  children: [
520871
- /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(KeyboardShortcutHint, {
521469
+ /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(KeyboardShortcutHint, {
520872
521470
  shortcut: "Space",
520873
521471
  action: "select"
520874
521472
  }, undefined, false, undefined, this),
520875
- /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(KeyboardShortcutHint, {
521473
+ /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(KeyboardShortcutHint, {
520876
521474
  shortcut: "Enter",
520877
521475
  action: "confirm"
520878
521476
  }, undefined, false, undefined, this),
520879
- /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(ConfigurableShortcutHint, {
521477
+ /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(ConfigurableShortcutHint, {
520880
521478
  action: "confirm:no",
520881
521479
  context: "Confirmation",
520882
521480
  fallback: "Esc",
@@ -520892,7 +521490,7 @@ No servers were imported.`);
520892
521490
  }
520893
521491
  let t18;
520894
521492
  if ($3[34] !== t16) {
520895
- t18 = /* @__PURE__ */ jsx_dev_runtime489.jsxDEV(jsx_dev_runtime489.Fragment, {
521493
+ t18 = /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(jsx_dev_runtime490.Fragment, {
520896
521494
  children: [
520897
521495
  t16,
520898
521496
  t17
@@ -520905,7 +521503,7 @@ No servers were imported.`);
520905
521503
  }
520906
521504
  return t18;
520907
521505
  }
520908
- var import_react332, jsx_dev_runtime489;
521506
+ var import_react332, jsx_dev_runtime490;
520909
521507
  var init_MCPServerDesktopImportDialog = __esm(() => {
520910
521508
  init_gracefulShutdown();
520911
521509
  init_ink2();
@@ -520917,7 +521515,7 @@ var init_MCPServerDesktopImportDialog = __esm(() => {
520917
521515
  init_Dialog();
520918
521516
  init_KeyboardShortcutHint();
520919
521517
  import_react332 = __toESM(require_react(), 1);
520920
- jsx_dev_runtime489 = __toESM(require_jsx_dev_runtime(), 1);
521518
+ jsx_dev_runtime490 = __toESM(require_jsx_dev_runtime(), 1);
520921
521519
  });
520922
521520
 
520923
521521
  // node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
@@ -521353,7 +521951,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
521353
521951
  setCwd(cwd3);
521354
521952
  const server = new Server({
521355
521953
  name: "claude/tengu",
521356
- version: "1.0.4"
521954
+ version: "1.0.6"
521357
521955
  }, {
521358
521956
  capabilities: {
521359
521957
  tools: {}
@@ -521841,9 +522439,9 @@ async function mcpAddFromDesktopHandler(options) {
521841
522439
  }
521842
522440
  const {
521843
522441
  unmount
521844
- } = await render(/* @__PURE__ */ jsx_dev_runtime490.jsxDEV(AppStateProvider, {
521845
- children: /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(KeybindingSetup, {
521846
- children: /* @__PURE__ */ jsx_dev_runtime490.jsxDEV(MCPServerDesktopImportDialog, {
522442
+ } = await render(/* @__PURE__ */ jsx_dev_runtime491.jsxDEV(AppStateProvider, {
522443
+ children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(KeybindingSetup, {
522444
+ children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(MCPServerDesktopImportDialog, {
521847
522445
  servers,
521848
522446
  scope,
521849
522447
  onDone: () => {
@@ -521869,7 +522467,7 @@ async function mcpResetChoicesHandler() {
521869
522467
  cliOk(`All project-scoped (.mcp.json) server approvals and rejections have been reset.
521870
522468
  You will be prompted for approval next time you start localclawd.`);
521871
522469
  }
521872
- var jsx_dev_runtime490;
522470
+ var jsx_dev_runtime491;
521873
522471
  var init_mcp5 = __esm(() => {
521874
522472
  init_p_map();
521875
522473
  init_MCPServerDesktopImportDialog();
@@ -521885,7 +522483,7 @@ var init_mcp5 = __esm(() => {
521885
522483
  init_gracefulShutdown();
521886
522484
  init_json();
521887
522485
  init_platform();
521888
- jsx_dev_runtime490 = __toESM(require_jsx_dev_runtime(), 1);
522486
+ jsx_dev_runtime491 = __toESM(require_jsx_dev_runtime(), 1);
521889
522487
  });
521890
522488
 
521891
522489
  // src/cli/handlers/plugins.ts
@@ -522438,11 +523036,11 @@ function SetupNotes(t0) {
522438
523036
  }
522439
523037
  let t1;
522440
523038
  if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
522441
- t1 = /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
522442
- children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523039
+ t1 = /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
523040
+ children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522443
523041
  color: "warning",
522444
523042
  children: [
522445
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(StatusIcon, {
523043
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(StatusIcon, {
522446
523044
  status: "warning",
522447
523045
  withSpace: true
522448
523046
  }, undefined, false, undefined, this),
@@ -522464,7 +523062,7 @@ function SetupNotes(t0) {
522464
523062
  }
522465
523063
  let t3;
522466
523064
  if ($3[3] !== t2) {
522467
- t3 = /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523065
+ t3 = /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522468
523066
  flexDirection: "column",
522469
523067
  gap: 0,
522470
523068
  marginBottom: 1,
@@ -522481,9 +523079,9 @@ function SetupNotes(t0) {
522481
523079
  return t3;
522482
523080
  }
522483
523081
  function _temp308(message, index) {
522484
- return /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523082
+ return /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522485
523083
  marginLeft: 2,
522486
- children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523084
+ children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522487
523085
  dimColor: true,
522488
523086
  children: [
522489
523087
  "• ",
@@ -522599,19 +523197,19 @@ function Install({
522599
523197
  });
522600
523198
  }
522601
523199
  }, [state2, onDone]);
522602
- return /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523200
+ return /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522603
523201
  flexDirection: "column",
522604
523202
  marginTop: 1,
522605
523203
  children: [
522606
- state2.type === "checking" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523204
+ state2.type === "checking" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522607
523205
  color: "claude",
522608
523206
  children: "Checking installation status..."
522609
523207
  }, undefined, false, undefined, this),
522610
- state2.type === "cleaning-npm" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523208
+ state2.type === "cleaning-npm" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522611
523209
  color: "warning",
522612
523210
  children: "Cleaning up old npm installations..."
522613
523211
  }, undefined, false, undefined, this),
522614
- state2.type === "installing" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523212
+ state2.type === "installing" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522615
523213
  color: "claude",
522616
523214
  children: [
522617
523215
  "Installing localclawd native build ",
@@ -522619,54 +523217,54 @@ function Install({
522619
523217
  "..."
522620
523218
  ]
522621
523219
  }, undefined, true, undefined, this),
522622
- state2.type === "setting-up" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523220
+ state2.type === "setting-up" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522623
523221
  color: "claude",
522624
523222
  children: "Setting up launcher and shell integration..."
522625
523223
  }, undefined, false, undefined, this),
522626
- state2.type === "set-up" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(SetupNotes, {
523224
+ state2.type === "set-up" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(SetupNotes, {
522627
523225
  messages: state2.messages
522628
523226
  }, undefined, false, undefined, this),
522629
- state2.type === "success" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523227
+ state2.type === "success" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522630
523228
  flexDirection: "column",
522631
523229
  gap: 1,
522632
523230
  children: [
522633
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523231
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522634
523232
  children: [
522635
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(StatusIcon, {
523233
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(StatusIcon, {
522636
523234
  status: "success",
522637
523235
  withSpace: true
522638
523236
  }, undefined, false, undefined, this),
522639
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523237
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522640
523238
  color: "success",
522641
523239
  bold: true,
522642
523240
  children: "localclawd successfully installed!"
522643
523241
  }, undefined, false, undefined, this)
522644
523242
  ]
522645
523243
  }, undefined, true, undefined, this),
522646
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523244
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522647
523245
  marginLeft: 2,
522648
523246
  flexDirection: "column",
522649
523247
  gap: 1,
522650
523248
  children: [
522651
- state2.version !== "current" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523249
+ state2.version !== "current" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522652
523250
  children: [
522653
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523251
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522654
523252
  dimColor: true,
522655
523253
  children: "Version: "
522656
523254
  }, undefined, false, undefined, this),
522657
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523255
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522658
523256
  color: "claude",
522659
523257
  children: state2.version
522660
523258
  }, undefined, false, undefined, this)
522661
523259
  ]
522662
523260
  }, undefined, true, undefined, this),
522663
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523261
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522664
523262
  children: [
522665
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523263
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522666
523264
  dimColor: true,
522667
523265
  children: "Location: "
522668
523266
  }, undefined, false, undefined, this),
522669
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523267
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522670
523268
  color: "text",
522671
523269
  children: getInstallationPath2()
522672
523270
  }, undefined, false, undefined, this)
@@ -522674,57 +523272,57 @@ function Install({
522674
523272
  }, undefined, true, undefined, this)
522675
523273
  ]
522676
523274
  }, undefined, true, undefined, this),
522677
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523275
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522678
523276
  marginLeft: 2,
522679
523277
  flexDirection: "column",
522680
523278
  gap: 1,
522681
- children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523279
+ children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522682
523280
  marginTop: 1,
522683
523281
  children: [
522684
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523282
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522685
523283
  dimColor: true,
522686
523284
  children: "Next: Run "
522687
523285
  }, undefined, false, undefined, this),
522688
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523286
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522689
523287
  color: "claude",
522690
523288
  bold: true,
522691
523289
  children: "localclawd --help"
522692
523290
  }, undefined, false, undefined, this),
522693
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523291
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522694
523292
  dimColor: true,
522695
523293
  children: " to get started"
522696
523294
  }, undefined, false, undefined, this)
522697
523295
  ]
522698
523296
  }, undefined, true, undefined, this)
522699
523297
  }, undefined, false, undefined, this),
522700
- state2.setupMessages && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(SetupNotes, {
523298
+ state2.setupMessages && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(SetupNotes, {
522701
523299
  messages: state2.setupMessages
522702
523300
  }, undefined, false, undefined, this)
522703
523301
  ]
522704
523302
  }, undefined, true, undefined, this),
522705
- state2.type === "error" && /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523303
+ state2.type === "error" && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522706
523304
  flexDirection: "column",
522707
523305
  gap: 1,
522708
523306
  children: [
522709
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523307
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522710
523308
  children: [
522711
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(StatusIcon, {
523309
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(StatusIcon, {
522712
523310
  status: "error",
522713
523311
  withSpace: true
522714
523312
  }, undefined, false, undefined, this),
522715
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523313
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522716
523314
  color: "error",
522717
523315
  children: "Installation failed"
522718
523316
  }, undefined, false, undefined, this)
522719
523317
  ]
522720
523318
  }, undefined, true, undefined, this),
522721
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523319
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522722
523320
  color: "error",
522723
523321
  children: state2.message
522724
523322
  }, undefined, false, undefined, this),
522725
- /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedBox_default, {
523323
+ /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
522726
523324
  marginTop: 1,
522727
- children: /* @__PURE__ */ jsx_dev_runtime491.jsxDEV(ThemedText, {
523325
+ children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
522728
523326
  dimColor: true,
522729
523327
  children: "Try running with --force to override checks"
522730
523328
  }, undefined, false, undefined, this)
@@ -522734,7 +523332,7 @@ function Install({
522734
523332
  ]
522735
523333
  }, undefined, true, undefined, this);
522736
523334
  }
522737
- var import_react333, jsx_dev_runtime491, install;
523335
+ var import_react333, jsx_dev_runtime492, install;
522738
523336
  var init_install = __esm(() => {
522739
523337
  init_StatusIcon();
522740
523338
  init_ink2();
@@ -522744,7 +523342,7 @@ var init_install = __esm(() => {
522744
523342
  init_nativeInstaller();
522745
523343
  init_settings2();
522746
523344
  import_react333 = __toESM(require_react(), 1);
522747
- jsx_dev_runtime491 = __toESM(require_jsx_dev_runtime(), 1);
523345
+ jsx_dev_runtime492 = __toESM(require_jsx_dev_runtime(), 1);
522748
523346
  install = {
522749
523347
  type: "local-jsx",
522750
523348
  name: "install",
@@ -522756,7 +523354,7 @@ var init_install = __esm(() => {
522756
523354
  const target = nonFlagArgs[0];
522757
523355
  const {
522758
523356
  unmount
522759
- } = await render(/* @__PURE__ */ jsx_dev_runtime491.jsxDEV(Install, {
523357
+ } = await render(/* @__PURE__ */ jsx_dev_runtime492.jsxDEV(Install, {
522760
523358
  onDone: (result, options) => {
522761
523359
  unmount();
522762
523360
  onDone(result, options);
@@ -522783,28 +523381,28 @@ async function setupTokenHandler(root2) {
522783
523381
  ConsoleOAuthFlow: ConsoleOAuthFlow2
522784
523382
  } = await Promise.resolve().then(() => (init_ConsoleOAuthFlow(), exports_ConsoleOAuthFlow));
522785
523383
  await new Promise((resolve40) => {
522786
- root2.render(/* @__PURE__ */ jsx_dev_runtime492.jsxDEV(AppStateProvider, {
523384
+ root2.render(/* @__PURE__ */ jsx_dev_runtime493.jsxDEV(AppStateProvider, {
522787
523385
  onChangeAppState,
522788
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(KeybindingSetup, {
522789
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
523386
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(KeybindingSetup, {
523387
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(ThemedBox_default, {
522790
523388
  flexDirection: "column",
522791
523389
  gap: 1,
522792
523390
  children: [
522793
- /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(WelcomeV2, {}, undefined, false, undefined, this),
522794
- showAuthWarning && /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedBox_default, {
523391
+ /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(WelcomeV2, {}, undefined, false, undefined, this),
523392
+ showAuthWarning && /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(ThemedBox_default, {
522795
523393
  flexDirection: "column",
522796
523394
  children: [
522797
- /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
523395
+ /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(ThemedText, {
522798
523396
  color: "warning",
522799
523397
  children: "Warning: You already have authentication configured via environment variable or API key helper."
522800
523398
  }, undefined, false, undefined, this),
522801
- /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ThemedText, {
523399
+ /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(ThemedText, {
522802
523400
  color: "warning",
522803
523401
  children: "The setup-token command will create a new OAuth token which you can use instead."
522804
523402
  }, undefined, false, undefined, this)
522805
523403
  ]
522806
523404
  }, undefined, true, undefined, this),
522807
- /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(ConsoleOAuthFlow2, {
523405
+ /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(ConsoleOAuthFlow2, {
522808
523406
  onDone: () => {
522809
523407
  resolve40();
522810
523408
  },
@@ -522827,9 +523425,9 @@ function DoctorWithPlugins(t0) {
522827
523425
  useManagePlugins();
522828
523426
  let t1;
522829
523427
  if ($3[0] !== onDone) {
522830
- t1 = /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(import_react334.default.Suspense, {
523428
+ t1 = /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(import_react334.default.Suspense, {
522831
523429
  fallback: null,
522832
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(DoctorLazy, {
523430
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(DoctorLazy, {
522833
523431
  onDone
522834
523432
  }, undefined, false, undefined, this)
522835
523433
  }, undefined, false, undefined, this);
@@ -522843,12 +523441,12 @@ function DoctorWithPlugins(t0) {
522843
523441
  async function doctorHandler(root2) {
522844
523442
  logEvent("tengu_doctor_command", {});
522845
523443
  await new Promise((resolve40) => {
522846
- root2.render(/* @__PURE__ */ jsx_dev_runtime492.jsxDEV(AppStateProvider, {
522847
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(KeybindingSetup, {
522848
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(MCPConnectionManager, {
523444
+ root2.render(/* @__PURE__ */ jsx_dev_runtime493.jsxDEV(AppStateProvider, {
523445
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(KeybindingSetup, {
523446
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(MCPConnectionManager, {
522849
523447
  dynamicMcpConfig: undefined,
522850
523448
  isStrictMcpConfig: false,
522851
- children: /* @__PURE__ */ jsx_dev_runtime492.jsxDEV(DoctorWithPlugins, {
523449
+ children: /* @__PURE__ */ jsx_dev_runtime493.jsxDEV(DoctorWithPlugins, {
522852
523450
  onDone: () => {
522853
523451
  resolve40();
522854
523452
  }
@@ -522880,7 +523478,7 @@ async function installHandler(target, options) {
522880
523478
  }, {}, args);
522881
523479
  });
522882
523480
  }
522883
- var import_react334, jsx_dev_runtime492, DoctorLazy;
523481
+ var import_react334, jsx_dev_runtime493, DoctorLazy;
522884
523482
  var init_util = __esm(() => {
522885
523483
  init_WelcomeV2();
522886
523484
  init_useManagePlugins();
@@ -522891,7 +523489,7 @@ var init_util = __esm(() => {
522891
523489
  init_onChangeAppState();
522892
523490
  init_auth2();
522893
523491
  import_react334 = __toESM(require_react(), 1);
522894
- jsx_dev_runtime492 = __toESM(require_jsx_dev_runtime(), 1);
523492
+ jsx_dev_runtime493 = __toESM(require_jsx_dev_runtime(), 1);
522895
523493
  DoctorLazy = import_react334.default.lazy(() => Promise.resolve().then(() => (init_Doctor(), exports_Doctor)).then((m2) => ({
522896
523494
  default: m2.Doctor
522897
523495
  })));
@@ -522958,7 +523556,7 @@ __export(exports_update, {
522958
523556
  });
522959
523557
  async function update() {
522960
523558
  logEvent("tengu_update_check", {});
522961
- writeToStdout(`Current version: ${"1.0.4"}
523559
+ writeToStdout(`Current version: ${"1.0.6"}
522962
523560
  `);
522963
523561
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
522964
523562
  writeToStdout(`Checking for updates to ${channel} version...
@@ -523033,8 +523631,8 @@ async function update() {
523033
523631
  writeToStdout(`localclawd is managed by Homebrew.
523034
523632
  `);
523035
523633
  const latest = await getLatestVersion(channel);
523036
- if (latest && !gte("1.0.4", latest)) {
523037
- writeToStdout(`Update available: ${"1.0.4"} → ${latest}
523634
+ if (latest && !gte("1.0.6", latest)) {
523635
+ writeToStdout(`Update available: ${"1.0.6"} → ${latest}
523038
523636
  `);
523039
523637
  writeToStdout(`
523040
523638
  `);
@@ -523050,8 +523648,8 @@ async function update() {
523050
523648
  writeToStdout(`localclawd is managed by winget.
523051
523649
  `);
523052
523650
  const latest = await getLatestVersion(channel);
523053
- if (latest && !gte("1.0.4", latest)) {
523054
- writeToStdout(`Update available: ${"1.0.4"} → ${latest}
523651
+ if (latest && !gte("1.0.6", latest)) {
523652
+ writeToStdout(`Update available: ${"1.0.6"} → ${latest}
523055
523653
  `);
523056
523654
  writeToStdout(`
523057
523655
  `);
@@ -523065,8 +523663,8 @@ async function update() {
523065
523663
  writeToStdout(`localclawd is managed by apk.
523066
523664
  `);
523067
523665
  const latest = await getLatestVersion(channel);
523068
- if (latest && !gte("1.0.4", latest)) {
523069
- writeToStdout(`Update available: ${"1.0.4"} → ${latest}
523666
+ if (latest && !gte("1.0.6", latest)) {
523667
+ writeToStdout(`Update available: ${"1.0.6"} → ${latest}
523070
523668
  `);
523071
523669
  writeToStdout(`
523072
523670
  `);
@@ -523131,11 +523729,11 @@ async function update() {
523131
523729
  `);
523132
523730
  await gracefulShutdown(1);
523133
523731
  }
523134
- if (result.latestVersion === "1.0.4") {
523135
- writeToStdout(source_default.green(`localclawd is up to date (${"1.0.4"})`) + `
523732
+ if (result.latestVersion === "1.0.6") {
523733
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.0.6"})`) + `
523136
523734
  `);
523137
523735
  } else {
523138
- writeToStdout(source_default.green(`Successfully updated from ${"1.0.4"} to version ${result.latestVersion}`) + `
523736
+ writeToStdout(source_default.green(`Successfully updated from ${"1.0.6"} to version ${result.latestVersion}`) + `
523139
523737
  `);
523140
523738
  await regenerateCompletionCache();
523141
523739
  }
@@ -523195,12 +523793,12 @@ async function update() {
523195
523793
  `);
523196
523794
  await gracefulShutdown(1);
523197
523795
  }
523198
- if (latestVersion === "1.0.4") {
523199
- writeToStdout(source_default.green(`localclawd is up to date (${"1.0.4"})`) + `
523796
+ if (latestVersion === "1.0.6") {
523797
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.0.6"})`) + `
523200
523798
  `);
523201
523799
  await gracefulShutdown(0);
523202
523800
  }
523203
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.0.4"})
523801
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.0.6"})
523204
523802
  `);
523205
523803
  writeToStdout(`Installing update...
523206
523804
  `);
@@ -523245,7 +523843,7 @@ async function update() {
523245
523843
  logForDebugging(`update: Installation status: ${status2}`);
523246
523844
  switch (status2) {
523247
523845
  case "success":
523248
- writeToStdout(source_default.green(`Successfully updated from ${"1.0.4"} to version ${latestVersion}`) + `
523846
+ writeToStdout(source_default.green(`Successfully updated from ${"1.0.6"} to version ${latestVersion}`) + `
523249
523847
  `);
523250
523848
  await regenerateCompletionCache();
523251
523849
  break;
@@ -523855,6 +524453,7 @@ ${getTmuxInstallInstructions2()}
523855
524453
  }
523856
524454
  }
523857
524455
  const isNonInteractiveSession = getIsNonInteractiveSession();
524456
+ const startupLoadingIndicator = !isNonInteractiveSession ? startStartupLoadingIndicator("Loading model and MCP configuration") : null;
523858
524457
  if (fallbackModel && options.model && fallbackModel === options.model) {
523859
524458
  process.stderr.write(source_default.red(`Error: Fallback model cannot be the same as the main model. Please specify a different model for --fallback-model.
523860
524459
  `));
@@ -524100,7 +524699,6 @@ ${hint}` : hint;
524100
524699
  }
524101
524700
  return allowed;
524102
524701
  }) : Promise.resolve({});
524103
- logForDebugging("[STARTUP] Loading MCP configs...");
524104
524702
  const mcpConfigStart = Date.now();
524105
524703
  let mcpConfigResolvedMs;
524106
524704
  const mcpConfigPromise = (strictMcpConfig || isBareMode() ? Promise.resolve({
@@ -524110,38 +524708,46 @@ ${hint}` : hint;
524110
524708
  return result;
524111
524709
  });
524112
524710
  if (inputFormat && inputFormat !== "text" && inputFormat !== "stream-json") {
524711
+ startupLoadingIndicator?.stop();
524113
524712
  console.error(`Error: Invalid input format "${inputFormat}".`);
524114
524713
  process.exit(1);
524115
524714
  }
524116
524715
  if (inputFormat === "stream-json" && outputFormat !== "stream-json") {
524716
+ startupLoadingIndicator?.stop();
524117
524717
  console.error(`Error: --input-format=stream-json requires output-format=stream-json.`);
524118
524718
  process.exit(1);
524119
524719
  }
524120
524720
  if (sdkUrl) {
524121
524721
  if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
524722
+ startupLoadingIndicator?.stop();
524122
524723
  console.error(`Error: --sdk-url requires both --input-format=stream-json and --output-format=stream-json.`);
524123
524724
  process.exit(1);
524124
524725
  }
524125
524726
  }
524126
524727
  if (options.replayUserMessages) {
524127
524728
  if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
524729
+ startupLoadingIndicator?.stop();
524128
524730
  console.error(`Error: --replay-user-messages requires both --input-format=stream-json and --output-format=stream-json.`);
524129
524731
  process.exit(1);
524130
524732
  }
524131
524733
  }
524132
524734
  if (effectiveIncludePartialMessages) {
524133
524735
  if (!isNonInteractiveSession || outputFormat !== "stream-json") {
524736
+ startupLoadingIndicator?.stop();
524134
524737
  writeToStderr(`Error: --include-partial-messages requires --print and --output-format=stream-json.`);
524135
524738
  process.exit(1);
524136
524739
  }
524137
524740
  }
524138
524741
  if (options.sessionPersistence === false && !isNonInteractiveSession) {
524742
+ startupLoadingIndicator?.stop();
524139
524743
  writeToStderr(`Error: --no-session-persistence can only be used with --print mode.`);
524140
524744
  process.exit(1);
524141
524745
  }
524142
524746
  const effectivePrompt = prompt || "";
524747
+ startupLoadingIndicator?.update("Reading startup input");
524143
524748
  let inputPrompt = await getInputPrompt(effectivePrompt, inputFormat ?? "text");
524144
524749
  profileCheckpoint("action_after_input_prompt");
524750
+ startupLoadingIndicator?.update("Checking available tools");
524145
524751
  maybeActivateProactive(options);
524146
524752
  let tools = getTools(toolPermissionContext);
524147
524753
  if (false) {}
@@ -524167,7 +524773,7 @@ ${hint}` : hint;
524167
524773
  }
524168
524774
  }
524169
524775
  profileCheckpoint("action_before_setup");
524170
- logForDebugging("[STARTUP] Running setup()...");
524776
+ startupLoadingIndicator?.update("Preparing workspace");
524171
524777
  const setupStart = Date.now();
524172
524778
  const {
524173
524779
  setup: setup2
@@ -524184,7 +524790,6 @@ ${hint}` : hint;
524184
524790
  commandsPromise?.catch(() => {});
524185
524791
  agentDefsPromise?.catch(() => {});
524186
524792
  await setupPromise;
524187
- logForDebugging(`[STARTUP] setup() completed in ${Date.now() - setupStart}ms`);
524188
524793
  profileCheckpoint("action_after_setup");
524189
524794
  let effectiveReplayUserMessages = !!options.replayUserMessages;
524190
524795
  if (false) {}
@@ -524203,10 +524808,9 @@ ${hint}` : hint;
524203
524808
  const userSpecifiedModel = options.model === "default" ? getDefaultMainLoopModel() : options.model;
524204
524809
  const userSpecifiedFallbackModel = fallbackModel === "default" ? getDefaultMainLoopModel() : fallbackModel;
524205
524810
  const currentCwd2 = worktreeEnabled ? getCwd() : preSetupCwd;
524206
- logForDebugging("[STARTUP] Loading commands and agents...");
524811
+ startupLoadingIndicator?.update("Loading commands and agents");
524207
524812
  const commandsStart = Date.now();
524208
524813
  const [commands, agentDefinitionsResult] = await Promise.all([commandsPromise ?? getCommands(currentCwd2), agentDefsPromise ?? getAgentDefinitionsWithOverrides(currentCwd2)]);
524209
- logForDebugging(`[STARTUP] Commands and agents loaded in ${Date.now() - commandsStart}ms`);
524210
524814
  profileCheckpoint("action_commands_loaded");
524211
524815
  let cliAgents = [];
524212
524816
  if (agentsJson) {
@@ -524274,12 +524878,14 @@ ${inputPrompt}` : mainThreadAgentDefinition.initialPrompt;
524274
524878
  if (advisorOption) {
524275
524879
  logForDebugging(`[AdvisorTool] --advisor ${advisorOption}`);
524276
524880
  if (!modelSupportsAdvisor(resolvedInitialModel)) {
524881
+ startupLoadingIndicator?.stop();
524277
524882
  process.stderr.write(source_default.red(`Error: The model "${resolvedInitialModel}" does not support the advisor tool.
524278
524883
  `));
524279
524884
  process.exit(1);
524280
524885
  }
524281
524886
  const normalizedAdvisorModel = normalizeModelStringForAPI(parseUserSpecifiedModel(advisorOption));
524282
524887
  if (!isValidAdvisorModel(normalizedAdvisorModel)) {
524888
+ startupLoadingIndicator?.stop();
524283
524889
  process.stderr.write(source_default.red(`Error: The model "${advisorOption}" cannot be used as an advisor.
524284
524890
  `));
524285
524891
  process.exit(1);
@@ -524326,6 +524932,7 @@ ${customInstructions}` : customInstructions;
524326
524932
  let getFpsMetrics;
524327
524933
  let stats2;
524328
524934
  if (!isNonInteractiveSession) {
524935
+ startupLoadingIndicator?.update("Launching dashboard");
524329
524936
  const ctx = getRenderContext(false);
524330
524937
  getFpsMetrics = ctx.getFpsMetrics;
524331
524938
  stats2 = ctx.stats;
@@ -524333,15 +524940,14 @@ ${customInstructions}` : customInstructions;
524333
524940
  const {
524334
524941
  createRoot: createRoot3
524335
524942
  } = await Promise.resolve().then(() => (init_ink2(), exports_ink));
524943
+ startupLoadingIndicator?.stop();
524336
524944
  root2 = await createRoot3(ctx.renderOptions);
524337
524945
  logEvent("tengu_timer", {
524338
524946
  event: "startup",
524339
524947
  durationMs: Math.round(process.uptime() * 1000)
524340
524948
  });
524341
- logForDebugging("[STARTUP] Running showSetupScreens()...");
524342
524949
  const setupScreensStart = Date.now();
524343
524950
  const onboardingShown = await showSetupScreens(root2, permissionMode, allowDangerouslySkipPermissions, commands, enableClaudeInChrome, devChannels);
524344
- logForDebugging(`[STARTUP] showSetupScreens() completed in ${Date.now() - setupScreensStart}ms`);
524345
524951
  if (false) {}
524346
524952
  if (false) {}
524347
524953
  if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
@@ -524487,7 +525093,7 @@ ${customInstructions}` : customInstructions;
524487
525093
  }
524488
525094
  }
524489
525095
  logForDiagnosticsNoPII("info", "started", {
524490
- version: "1.0.4",
525096
+ version: "1.0.6",
524491
525097
  is_native_binary: isInBundledMode()
524492
525098
  });
524493
525099
  registerCleanup(async () => {
@@ -525271,7 +525877,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
525271
525877
  pendingHookMessages
525272
525878
  }, renderAndRun);
525273
525879
  }
525274
- }).version("1.0.4 (localClawd)", "-v, --version", "Output the version number");
525880
+ }).version("1.0.6 (localClawd)", "-v, --version", "Output the version number");
525275
525881
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
525276
525882
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
525277
525883
  if (canUserConfigureAdvisor()) {
@@ -525728,6 +526334,7 @@ var init_main3 = __esm(() => {
525728
526334
  init_Shell();
525729
526335
  init_sessionRestore();
525730
526336
  init_constants2();
526337
+ init_startupLoading();
525731
526338
  init_stringUtils();
525732
526339
  init_state();
525733
526340
  init_migrateAutoUpdatesToSettings();
@@ -525778,7 +526385,7 @@ if (false) {}
525778
526385
  async function main2() {
525779
526386
  const args = process.argv.slice(2);
525780
526387
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
525781
- console.log(`${"1.0.4"} (localclawd)`);
526388
+ console.log(`${"1.0.6"} (localclawd)`);
525782
526389
  return;
525783
526390
  }
525784
526391
  const {
@@ -525862,4 +526469,4 @@ async function main2() {
525862
526469
  }
525863
526470
  main2();
525864
526471
 
525865
- //# debugId=D3D0E4362BAE45FC64756E2164756E21
526472
+ //# debugId=53D85FDAF878BEF864756E2164756E21