localclawd 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.mjs +371 -152
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -89253,7 +89253,7 @@ var init_isEqual = __esm(() => {
89253
89253
 
89254
89254
  // src/utils/userAgent.ts
89255
89255
  function getClaudeCodeUserAgent() {
89256
- return `claude-code/${"1.0.8"}`;
89256
+ return `claude-code/${"1.0.9"}`;
89257
89257
  }
89258
89258
 
89259
89259
  // src/utils/workloadContext.ts
@@ -89275,7 +89275,7 @@ function getUserAgent() {
89275
89275
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
89276
89276
  const workload = getWorkload();
89277
89277
  const workloadSuffix = workload ? `, workload/${workload}` : "";
89278
- return `claude-cli/${"1.0.8"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89278
+ return `claude-cli/${"1.0.9"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
89279
89279
  }
89280
89280
  function getMCPUserAgent() {
89281
89281
  const parts = [];
@@ -89289,7 +89289,7 @@ function getMCPUserAgent() {
89289
89289
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
89290
89290
  }
89291
89291
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
89292
- return `claude-code/${"1.0.8"}${suffix}`;
89292
+ return `claude-code/${"1.0.9"}${suffix}`;
89293
89293
  }
89294
89294
  function getWebFetchUserAgent() {
89295
89295
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -99110,7 +99110,7 @@ function getAttributionHeader(fingerprint) {
99110
99110
  if (!isAttributionHeaderEnabled()) {
99111
99111
  return "";
99112
99112
  }
99113
- const version = `${"1.0.8"}.${fingerprint}`;
99113
+ const version = `${"1.0.9"}.${fingerprint}`;
99114
99114
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
99115
99115
  const cch = "";
99116
99116
  const workload = getWorkload();
@@ -132657,7 +132657,7 @@ var init_metadata = __esm(() => {
132657
132657
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
132658
132658
  WHITESPACE_REGEX = /\s+/;
132659
132659
  getVersionBase = memoize_default(() => {
132660
- const match = "1.0.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132660
+ const match = "1.0.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
132661
132661
  return match ? match[0] : undefined;
132662
132662
  });
132663
132663
  buildEnvContext = memoize_default(async () => {
@@ -132697,9 +132697,9 @@ var init_metadata = __esm(() => {
132697
132697
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
132698
132698
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
132699
132699
  isClaudeAiAuth: isClaudeAISubscriber(),
132700
- version: "1.0.8",
132700
+ version: "1.0.9",
132701
132701
  versionBase: getVersionBase(),
132702
- buildTime: "2026-04-05T20:46:26.460Z",
132702
+ buildTime: "2026-04-05T20:57:35.818Z",
132703
132703
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
132704
132704
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
132705
132705
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -197286,7 +197286,7 @@ function getTelemetryAttributes() {
197286
197286
  attributes["session.id"] = sessionId;
197287
197287
  }
197288
197288
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
197289
- attributes["app.version"] = "1.0.8";
197289
+ attributes["app.version"] = "1.0.9";
197290
197290
  }
197291
197291
  const oauthAccount = getOauthAccountInfo();
197292
197292
  if (oauthAccount) {
@@ -229347,7 +229347,7 @@ function getInstallationEnv() {
229347
229347
  return;
229348
229348
  }
229349
229349
  function getClaudeCodeVersion() {
229350
- return "1.0.8";
229350
+ return "1.0.9";
229351
229351
  }
229352
229352
  async function getInstalledVSCodeExtensionVersion(command) {
229353
229353
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -234949,7 +234949,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
234949
234949
  const client4 = new Client({
234950
234950
  name: "claude-code",
234951
234951
  title: "Claude Code",
234952
- version: "1.0.8",
234952
+ version: "1.0.9",
234953
234953
  description: "Anthropic's agentic coding tool",
234954
234954
  websiteUrl: PRODUCT_URL
234955
234955
  }, {
@@ -235302,7 +235302,7 @@ var init_client9 = __esm(() => {
235302
235302
  const client4 = new Client({
235303
235303
  name: "claude-code",
235304
235304
  title: "Claude Code",
235305
- version: "1.0.8",
235305
+ version: "1.0.9",
235306
235306
  description: "Anthropic's agentic coding tool",
235307
235307
  websiteUrl: PRODUCT_URL
235308
235308
  }, {
@@ -258493,7 +258493,7 @@ var init_user = __esm(() => {
258493
258493
  deviceId,
258494
258494
  sessionId: getSessionId(),
258495
258495
  email: getEmail(),
258496
- appVersion: "1.0.8",
258496
+ appVersion: "1.0.9",
258497
258497
  platform: getHostPlatformForAnalytics(),
258498
258498
  organizationUuid,
258499
258499
  accountUuid,
@@ -259817,7 +259817,7 @@ async function initializeBetaTracing(resource) {
259817
259817
  });
259818
259818
  logs.setGlobalLoggerProvider(loggerProvider);
259819
259819
  setLoggerProvider(loggerProvider);
259820
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.8");
259820
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.9");
259821
259821
  setEventLogger(eventLogger);
259822
259822
  process.on("beforeExit", async () => {
259823
259823
  await loggerProvider?.forceFlush();
@@ -259857,7 +259857,7 @@ async function initializeTelemetry() {
259857
259857
  const platform3 = getPlatform();
259858
259858
  const baseAttributes = {
259859
259859
  [ATTR_SERVICE_NAME5]: "claude-code",
259860
- [ATTR_SERVICE_VERSION5]: "1.0.8"
259860
+ [ATTR_SERVICE_VERSION5]: "1.0.9"
259861
259861
  };
259862
259862
  if (platform3 === "wsl") {
259863
259863
  const wslVersion = getWslVersion();
@@ -259902,7 +259902,7 @@ async function initializeTelemetry() {
259902
259902
  } catch {}
259903
259903
  };
259904
259904
  registerCleanup(shutdownTelemetry2);
259905
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.0.8");
259905
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.0.9");
259906
259906
  }
259907
259907
  const meterProvider = new MeterProvider5({
259908
259908
  resource,
@@ -259922,7 +259922,7 @@ async function initializeTelemetry() {
259922
259922
  });
259923
259923
  logs.setGlobalLoggerProvider(loggerProvider);
259924
259924
  setLoggerProvider(loggerProvider);
259925
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.8");
259925
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.0.9");
259926
259926
  setEventLogger(eventLogger);
259927
259927
  logForDebugging("[3P telemetry] Event logger set successfully");
259928
259928
  process.on("beforeExit", async () => {
@@ -259984,7 +259984,7 @@ Current timeout: ${timeoutMs}ms
259984
259984
  }
259985
259985
  };
259986
259986
  registerCleanup(shutdownTelemetry);
259987
- return meterProvider.getMeter("com.anthropic.claude_code", "1.0.8");
259987
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.0.9");
259988
259988
  }
259989
259989
  async function flushTelemetry() {
259990
259990
  const meterProvider = getMeterProvider();
@@ -261207,7 +261207,7 @@ function detectLinuxGlobPatternWarnings() {
261207
261207
  }
261208
261208
  async function getDoctorDiagnostic() {
261209
261209
  const installationType = await getCurrentInstallationType();
261210
- const version = typeof MACRO !== "undefined" ? "1.0.8" : "unknown";
261210
+ const version = typeof MACRO !== "undefined" ? "1.0.9" : "unknown";
261211
261211
  const installationPath = await getInstallationPath();
261212
261212
  const invokedBinary = getInvokedBinary();
261213
261213
  const multipleInstallations = await detectMultipleInstallations();
@@ -262148,8 +262148,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262148
262148
  const maxVersion = await getMaxVersion();
262149
262149
  if (maxVersion && gt(version, maxVersion)) {
262150
262150
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
262151
- if (gte("1.0.8", maxVersion)) {
262152
- logForDebugging(`Native installer: current version ${"1.0.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
262151
+ if (gte("1.0.9", maxVersion)) {
262152
+ logForDebugging(`Native installer: current version ${"1.0.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
262153
262153
  logEvent("tengu_native_update_skipped_max_version", {
262154
262154
  latency_ms: Date.now() - startTime,
262155
262155
  max_version: maxVersion,
@@ -262160,7 +262160,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
262160
262160
  version = maxVersion;
262161
262161
  }
262162
262162
  }
262163
- if (!forceReinstall && version === "1.0.8" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262163
+ if (!forceReinstall && version === "1.0.9" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
262164
262164
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
262165
262165
  logEvent("tengu_native_update_complete", {
262166
262166
  latency_ms: Date.now() - startTime,
@@ -333236,7 +333236,7 @@ function getAnthropicEnvMetadata() {
333236
333236
  function getBuildAgeMinutes() {
333237
333237
  if (false)
333238
333238
  ;
333239
- const buildTime = new Date("2026-04-05T20:46:26.460Z").getTime();
333239
+ const buildTime = new Date("2026-04-05T20:57:35.818Z").getTime();
333240
333240
  if (isNaN(buildTime))
333241
333241
  return;
333242
333242
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -356944,7 +356944,7 @@ function Feedback({
356944
356944
  platform: env4.platform,
356945
356945
  gitRepo: envInfo.isGit,
356946
356946
  terminal: env4.terminal,
356947
- version: "1.0.8",
356947
+ version: "1.0.9",
356948
356948
  transcript: normalizeMessagesForAPI(messages),
356949
356949
  errors: sanitizedErrors,
356950
356950
  lastApiRequest: getLastAPIRequest(),
@@ -357136,7 +357136,7 @@ function Feedback({
357136
357136
  ", ",
357137
357137
  env4.terminal,
357138
357138
  ", v",
357139
- "1.0.8"
357139
+ "1.0.9"
357140
357140
  ]
357141
357141
  }, undefined, true, undefined, this)
357142
357142
  ]
@@ -357242,7 +357242,7 @@ ${sanitizedDescription}
357242
357242
  ` + `**Environment Info**
357243
357243
  ` + `- Platform: ${env4.platform}
357244
357244
  ` + `- Terminal: ${env4.terminal}
357245
- ` + `- Version: ${"1.0.8"}
357245
+ ` + `- Version: ${"1.0.9"}
357246
357246
  ` + `- Feedback ID: ${feedbackId}
357247
357247
  ` + `
357248
357248
  **Errors**
@@ -360355,7 +360355,7 @@ function buildPrimarySection() {
360355
360355
  }, undefined, false, undefined, this);
360356
360356
  return [{
360357
360357
  label: "Version",
360358
- value: "1.0.8"
360358
+ value: "1.0.9"
360359
360359
  }, {
360360
360360
  label: "Session name",
360361
360361
  value: nameValue
@@ -361729,9 +361729,9 @@ var init_ModelPicker = __esm(() => {
361729
361729
  });
361730
361730
 
361731
361731
  // src/utils/model/scanModels.ts
361732
- async function fetchWithTimeout2(url3, options = {}) {
361732
+ async function fetchWithTimeout2(url3, options = {}, timeoutMs = MODEL_SCAN_TIMEOUT_MS) {
361733
361733
  const controller = new AbortController;
361734
- const timer = setTimeout(() => controller.abort(), SCAN_TIMEOUT_MS);
361734
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
361735
361735
  try {
361736
361736
  return await fetch(url3, { ...options, signal: controller.signal });
361737
361737
  } finally {
@@ -361807,7 +361807,58 @@ async function fetchAvailableModels(baseUrl, provider, apiKey) {
361807
361807
  return { ok: false, error: `Could not reach ${trimmed}: ${msg}` };
361808
361808
  }
361809
361809
  }
361810
- var SCAN_TIMEOUT_MS = 5000;
361810
+ async function probeVllmEndpoint(url3) {
361811
+ try {
361812
+ const controller = new AbortController;
361813
+ const timer = setTimeout(() => controller.abort(), NETWORK_PROBE_TIMEOUT_MS);
361814
+ let res;
361815
+ try {
361816
+ res = await fetch(`${url3}/models`, { signal: controller.signal });
361817
+ } finally {
361818
+ clearTimeout(timer);
361819
+ }
361820
+ if (!res.ok)
361821
+ return null;
361822
+ const json = await res.json();
361823
+ const models = (json.data ?? []).map((m2) => m2.id).filter(Boolean);
361824
+ return models.length > 0 ? models : null;
361825
+ } catch {
361826
+ return null;
361827
+ }
361828
+ }
361829
+ async function scanLocalNetworkForVllm(subnet = "192.168.1", cancelSignal, onProgress) {
361830
+ const found = [];
361831
+ const tasks = [];
361832
+ for (let host = 1;host <= 254; host++) {
361833
+ for (const port of VLLM_PORTS) {
361834
+ tasks.push({ host, port });
361835
+ }
361836
+ }
361837
+ const total = tasks.length;
361838
+ let scanned = 0;
361839
+ let taskIdx = 0;
361840
+ async function worker() {
361841
+ while (taskIdx < tasks.length) {
361842
+ if (cancelSignal.cancelled)
361843
+ return;
361844
+ const task = tasks[taskIdx++];
361845
+ const url3 = `http://${subnet}.${task.host}:${task.port}/v1`;
361846
+ const models = await probeVllmEndpoint(url3);
361847
+ scanned++;
361848
+ if (models) {
361849
+ found.push({ url: url3, models });
361850
+ }
361851
+ onProgress?.({ scanned, total, found: found.length });
361852
+ }
361853
+ }
361854
+ const workers = Array.from({ length: NETWORK_CONCURRENCY }, () => worker());
361855
+ await Promise.all(workers);
361856
+ return found;
361857
+ }
361858
+ var MODEL_SCAN_TIMEOUT_MS = 5000, NETWORK_PROBE_TIMEOUT_MS = 600, NETWORK_CONCURRENCY = 40, VLLM_PORTS;
361859
+ var init_scanModels = __esm(() => {
361860
+ VLLM_PORTS = [8000, 8080, 4000, 5000, 1234, 3000, 7860, 8888];
361861
+ });
361811
361862
 
361812
361863
  // src/components/LocalBackendSetup.tsx
361813
361864
  var exports_LocalBackendSetup = {};
@@ -361818,21 +361869,21 @@ function getProviderGuidance(provider) {
361818
361869
  switch (provider) {
361819
361870
  case "vllm":
361820
361871
  return {
361821
- baseUrl: "Use the URL for your local or remote vLLM server. Press Enter to keep the suggested /v1 endpoint.",
361822
- model: "Select a model discovered from your vLLM server, or type a name if you want to override.",
361823
- apiKey: "Leave blank for local servers without auth, or paste the gateway token if your deployment requires one."
361872
+ baseUrl: "Confirm or edit the vLLM server URL. Press Enter to accept, Esc to go back.",
361873
+ model: "Select a model discovered from your vLLM server, or type a name to override.",
361874
+ apiKey: "Leave blank for local servers without auth, or paste the gateway token if required."
361824
361875
  };
361825
361876
  case "ollama":
361826
361877
  return {
361827
- baseUrl: "Use your Ollama OpenAI-compatible endpoint. The default local address works for standard Ollama setups.",
361828
- model: "Select a model discovered from your Ollama server, or type a name if you want to override.",
361829
- apiKey: "Press Enter to keep the default local Ollama token, or replace it if your proxy expects a different value."
361878
+ baseUrl: "Confirm the Ollama OpenAI-compatible endpoint. The default works for standard local setups.",
361879
+ model: "Select a model discovered from your Ollama server, or type a name to override.",
361880
+ apiKey: "Press Enter to keep the default Ollama token, or replace it if your proxy expects a different value."
361830
361881
  };
361831
361882
  case "openai":
361832
361883
  return {
361833
- baseUrl: "Use the API base URL for OpenAI or any compatible hosted gateway. Press Enter to keep the suggested default.",
361834
- model: "Enter the exact hosted model ID your provider expects, such as gpt-4.1-mini or a gateway-specific alias.",
361835
- apiKey: "Paste the API key for your hosted provider. Leave blank only if your gateway is intentionally unauthenticated."
361884
+ baseUrl: "Use the API base URL for OpenAI or any compatible hosted gateway.",
361885
+ model: "Enter the exact model ID your provider expects, such as gpt-4.1-mini.",
361886
+ apiKey: "Paste the API key for your hosted provider."
361836
361887
  };
361837
361888
  }
361838
361889
  }
@@ -361854,10 +361905,61 @@ function LocalBackendSetup({
361854
361905
  const [error5, setError] = import_react99.useState(null);
361855
361906
  const [availableModels, setAvailableModels] = import_react99.useState([]);
361856
361907
  const [scanError, setScanError] = import_react99.useState(null);
361908
+ const [networkProgress, setNetworkProgress] = import_react99.useState(null);
361909
+ const [discoveredEndpoints, setDiscoveredEndpoints] = import_react99.useState([]);
361910
+ const [networkScanDone, setNetworkScanDone] = import_react99.useState(false);
361911
+ const networkCancelRef = import_react99.useRef({ cancelled: false });
361912
+ const modelScanAbortRef = import_react99.useRef(null);
361857
361913
  import_react99.useEffect(() => {
361858
361914
  const nextValue = step === "baseUrl" ? baseUrl : step === "model" ? model : apiKey;
361859
361915
  setCursorOffset(nextValue.length);
361860
361916
  }, [step, baseUrl, model, apiKey]);
361917
+ use_input_default((_input, key) => {
361918
+ if (!key.escape)
361919
+ return;
361920
+ if (step === "networkScan") {
361921
+ networkCancelRef.current.cancelled = true;
361922
+ goBack();
361923
+ } else if (step === "scanningModels") {
361924
+ modelScanAbortRef.current?.abort();
361925
+ goBack();
361926
+ }
361927
+ }, { isActive: step === "networkScan" || step === "scanningModels" });
361928
+ function goBack() {
361929
+ setError(null);
361930
+ switch (step) {
361931
+ case "provider":
361932
+ onCancel?.();
361933
+ break;
361934
+ case "networkScan":
361935
+ networkCancelRef.current.cancelled = true;
361936
+ setStep("provider");
361937
+ break;
361938
+ case "selectEndpoint":
361939
+ setStep("provider");
361940
+ break;
361941
+ case "baseUrl":
361942
+ if (provider === "vllm") {
361943
+ setStep("selectEndpoint");
361944
+ } else {
361945
+ setStep("provider");
361946
+ }
361947
+ break;
361948
+ case "scanningModels":
361949
+ modelScanAbortRef.current?.abort();
361950
+ setStep("baseUrl");
361951
+ break;
361952
+ case "model":
361953
+ setStep("baseUrl");
361954
+ break;
361955
+ case "apiKey":
361956
+ setStep("model");
361957
+ break;
361958
+ case "saveScope":
361959
+ setStep("apiKey");
361960
+ break;
361961
+ }
361962
+ }
361861
361963
  function applyProvider(nextProvider) {
361862
361964
  const defaults2 = getDefaultLocalLLMConfig(nextProvider);
361863
361965
  setProvider(nextProvider);
@@ -361867,7 +361969,42 @@ function LocalBackendSetup({
361867
361969
  setError(null);
361868
361970
  setScanError(null);
361869
361971
  setAvailableModels([]);
361870
- setStep("baseUrl");
361972
+ if (nextProvider === "vllm") {
361973
+ startNetworkScan(nextProvider);
361974
+ } else {
361975
+ setStep("baseUrl");
361976
+ }
361977
+ }
361978
+ function startNetworkScan(forProvider) {
361979
+ networkCancelRef.current = { cancelled: false };
361980
+ setDiscoveredEndpoints([]);
361981
+ setNetworkProgress(null);
361982
+ setNetworkScanDone(false);
361983
+ setStep("networkScan");
361984
+ scanLocalNetworkForVllm("192.168.1", networkCancelRef.current, (progress) => {
361985
+ setNetworkProgress(progress);
361986
+ }).then((endpoints) => {
361987
+ if (networkCancelRef.current.cancelled)
361988
+ return;
361989
+ setDiscoveredEndpoints(endpoints);
361990
+ setNetworkScanDone(true);
361991
+ setStep("selectEndpoint");
361992
+ }).catch(() => {
361993
+ if (networkCancelRef.current.cancelled)
361994
+ return;
361995
+ setDiscoveredEndpoints([]);
361996
+ setNetworkScanDone(true);
361997
+ setStep("selectEndpoint");
361998
+ });
361999
+ }
362000
+ function selectEndpoint(url3) {
362001
+ if (url3 === "__manual__") {
362002
+ setStep("baseUrl");
362003
+ return;
362004
+ }
362005
+ setBaseUrl(url3);
362006
+ setError(null);
362007
+ startModelScan(url3);
361871
362008
  }
361872
362009
  function submitBaseUrl(value) {
361873
362010
  const trimmed = value.trim();
@@ -361884,27 +362021,36 @@ function LocalBackendSetup({
361884
362021
  setBaseUrl(trimmed);
361885
362022
  setError(null);
361886
362023
  if (provider === "vllm" || provider === "ollama") {
361887
- setStep("scanningModels");
361888
- setScanError(null);
361889
- setAvailableModels([]);
361890
- fetchAvailableModels(trimmed, provider, apiKey).then((result) => {
361891
- if (result.ok) {
361892
- setAvailableModels(result.models);
361893
- setScanError(null);
361894
- } else {
361895
- setScanError(result.error);
361896
- setAvailableModels([]);
361897
- }
361898
- setStep("model");
361899
- }).catch((err2) => {
361900
- setScanError(`Unexpected error scanning models: ${err2 instanceof Error ? err2.message : String(err2)}`);
361901
- setAvailableModels([]);
361902
- setStep("model");
361903
- });
362024
+ startModelScan(trimmed);
361904
362025
  } else {
361905
362026
  setStep("model");
361906
362027
  }
361907
362028
  }
362029
+ function startModelScan(url3) {
362030
+ const abort = new AbortController;
362031
+ modelScanAbortRef.current = abort;
362032
+ setScanError(null);
362033
+ setAvailableModels([]);
362034
+ setStep("scanningModels");
362035
+ fetchAvailableModels(url3, provider, apiKey).then((result) => {
362036
+ if (abort.signal.aborted)
362037
+ return;
362038
+ if (result.ok) {
362039
+ setAvailableModels(result.models);
362040
+ setScanError(null);
362041
+ } else {
362042
+ setScanError(result.error);
362043
+ setAvailableModels([]);
362044
+ }
362045
+ setStep("model");
362046
+ }).catch((err2) => {
362047
+ if (abort.signal.aborted)
362048
+ return;
362049
+ setScanError(`Unexpected error scanning models: ${err2 instanceof Error ? err2.message : String(err2)}`);
362050
+ setAvailableModels([]);
362051
+ setStep("model");
362052
+ });
362053
+ }
361908
362054
  function submitModel(value) {
361909
362055
  const trimmed = value.trim();
361910
362056
  if (!trimmed) {
@@ -361916,32 +362062,32 @@ function LocalBackendSetup({
361916
362062
  setStep("apiKey");
361917
362063
  }
361918
362064
  function submitApiKey(value) {
361919
- const nextConfig = {
361920
- provider,
361921
- baseUrl,
361922
- model,
361923
- apiKey: value.trim()
361924
- };
362065
+ const nextConfig = { provider, baseUrl, model, apiKey: value.trim() };
361925
362066
  setApiKey(nextConfig.apiKey);
361926
362067
  setError(null);
361927
362068
  if (showSaveGloballyOption) {
361928
362069
  setStep("saveScope");
361929
362070
  return;
361930
362071
  }
361931
- onComplete(nextConfig, {
361932
- saveGlobally: true
361933
- });
362072
+ onComplete(nextConfig, { saveGlobally: true });
361934
362073
  }
361935
362074
  const providerLabel = getLocalLLMProviderLabel(provider);
361936
362075
  const baseUrlPlaceholder = getDefaultLocalLLMConfig(provider).baseUrl;
361937
362076
  const apiKeyPlaceholder = provider === "ollama" ? "ollama" : "Leave blank if your endpoint does not require auth";
361938
362077
  const guidance = getProviderGuidance(provider);
361939
362078
  const modelSelectOptions = availableModels.map((m2) => ({ label: m2, value: m2 }));
362079
+ const endpointSelectOptions = [
362080
+ ...discoveredEndpoints.map((ep) => ({
362081
+ label: `${ep.url} [${ep.models.slice(0, 2).join(", ")}${ep.models.length > 2 ? ", …" : ""}]`,
362082
+ value: ep.url
362083
+ })),
362084
+ { label: "Enter URL manually", value: "__manual__" }
362085
+ ];
361940
362086
  return /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedBox_default, {
361941
362087
  flexDirection: "column",
361942
362088
  gap: 1,
361943
362089
  paddingLeft: 1,
361944
- width: 80,
362090
+ width: 84,
361945
362091
  children: [
361946
362092
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
361947
362093
  bold: true,
@@ -361961,10 +362107,87 @@ function LocalBackendSetup({
361961
362107
  }, undefined, false, undefined, this),
361962
362108
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
361963
362109
  dimColor: true,
361964
- children: "Choose a local preset for self-hosted inference, or pick the hosted API option if you want to connect with an API key."
362110
+ children: "Esc exits setup. Choose a local preset for self-hosted inference, or the hosted API option for cloud providers."
362111
+ }, undefined, false, undefined, this)
362112
+ ]
362113
+ }, undefined, true, undefined, this) : null,
362114
+ step === "networkScan" ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedBox_default, {
362115
+ flexDirection: "column",
362116
+ gap: 1,
362117
+ children: [
362118
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362119
+ children: [
362120
+ "Scanning ",
362121
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362122
+ bold: true,
362123
+ children: "192.168.1.0/24"
362124
+ }, undefined, false, undefined, this),
362125
+ " for vLLM endpoints…"
362126
+ ]
362127
+ }, undefined, true, undefined, this),
362128
+ networkProgress ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362129
+ dimColor: true,
362130
+ children: [
362131
+ networkProgress.scanned,
362132
+ "/",
362133
+ networkProgress.total,
362134
+ " probed",
362135
+ networkProgress.found > 0 ? ` — ${networkProgress.found} found so far` : ""
362136
+ ]
362137
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362138
+ dimColor: true,
362139
+ children: "Starting scan…"
362140
+ }, undefined, false, undefined, this),
362141
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362142
+ dimColor: true,
362143
+ children: "Press Esc to skip network scan and enter URL manually."
362144
+ }, undefined, false, undefined, this)
362145
+ ]
362146
+ }, undefined, true, undefined, this) : null,
362147
+ step === "selectEndpoint" ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
362148
+ children: [
362149
+ discoveredEndpoints.length > 0 ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
362150
+ children: [
362151
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362152
+ children: [
362153
+ "Found ",
362154
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362155
+ bold: true,
362156
+ children: discoveredEndpoints.length
362157
+ }, undefined, false, undefined, this),
362158
+ " vLLM endpoint",
362159
+ discoveredEndpoints.length !== 1 ? "s" : "",
362160
+ " on your network"
362161
+ ]
362162
+ }, undefined, true, undefined, this),
362163
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362164
+ dimColor: true,
362165
+ children: "Select an endpoint to use, or enter the URL manually."
362166
+ }, undefined, false, undefined, this)
362167
+ ]
362168
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
362169
+ children: [
362170
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362171
+ children: "No vLLM endpoints found on 192.168.1.0/24"
362172
+ }, undefined, false, undefined, this),
362173
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362174
+ dimColor: true,
362175
+ children: "You can still enter the URL manually, or check that your server is running."
362176
+ }, undefined, false, undefined, this)
362177
+ ]
362178
+ }, undefined, true, undefined, this),
362179
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(Select, {
362180
+ options: endpointSelectOptions,
362181
+ onChange: (value) => selectEndpoint(value),
362182
+ onCancel: () => setStep("provider")
362183
+ }, undefined, false, undefined, this),
362184
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362185
+ dimColor: true,
362186
+ children: "Esc goes back to provider selection."
361965
362187
  }, undefined, false, undefined, this)
361966
362188
  ]
361967
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
362189
+ }, undefined, true, undefined, this) : null,
362190
+ step !== "provider" && step !== "networkScan" && step !== "selectEndpoint" ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
361968
362191
  children: [
361969
362192
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
361970
362193
  children: [
@@ -361988,9 +362211,9 @@ function LocalBackendSetup({
361988
362211
  value: baseUrl,
361989
362212
  onChange: setBaseUrl,
361990
362213
  onSubmit: submitBaseUrl,
361991
- onExit: onCancel,
362214
+ onExit: goBack,
361992
362215
  placeholder: baseUrlPlaceholder,
361993
- columns: 76,
362216
+ columns: 80,
361994
362217
  cursorOffset,
361995
362218
  onChangeCursorOffset: setCursorOffset,
361996
362219
  focus: true,
@@ -362014,7 +362237,7 @@ function LocalBackendSetup({
362014
362237
  }, undefined, true, undefined, this),
362015
362238
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362016
362239
  dimColor: true,
362017
- children: "Connecting to the endpoint to discover available models."
362240
+ children: "Press Esc to cancel and go back."
362018
362241
  }, undefined, false, undefined, this)
362019
362242
  ]
362020
362243
  }, undefined, true, undefined, this) : null,
@@ -362040,7 +362263,11 @@ function LocalBackendSetup({
362040
362263
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(Select, {
362041
362264
  options: modelSelectOptions,
362042
362265
  onChange: (value) => submitModel(value),
362043
- onCancel
362266
+ onCancel: goBack
362267
+ }, undefined, false, undefined, this),
362268
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362269
+ dimColor: true,
362270
+ children: "Esc goes back to the URL step."
362044
362271
  }, undefined, false, undefined, this)
362045
362272
  ]
362046
362273
  }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(jsx_dev_runtime171.Fragment, {
@@ -362053,9 +362280,9 @@ function LocalBackendSetup({
362053
362280
  value: model,
362054
362281
  onChange: setModel,
362055
362282
  onSubmit: submitModel,
362056
- onExit: onCancel,
362283
+ onExit: goBack,
362057
362284
  placeholder: provider === "openai" ? getDefaultLocalLLMConfig(provider).model : "",
362058
- columns: 76,
362285
+ columns: 80,
362059
362286
  cursorOffset,
362060
362287
  onChangeCursorOffset: setCursorOffset,
362061
362288
  focus: true,
@@ -362078,13 +362305,17 @@ function LocalBackendSetup({
362078
362305
  value: apiKey,
362079
362306
  onChange: setApiKey,
362080
362307
  onSubmit: submitApiKey,
362081
- onExit: onCancel,
362308
+ onExit: goBack,
362082
362309
  placeholder: apiKeyPlaceholder,
362083
- columns: 76,
362310
+ columns: 80,
362084
362311
  cursorOffset,
362085
362312
  onChangeCursorOffset: setCursorOffset,
362086
362313
  focus: true,
362087
362314
  showCursor: true
362315
+ }, undefined, false, undefined, this),
362316
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362317
+ dimColor: true,
362318
+ children: "Esc goes back to model selection."
362088
362319
  }, undefined, false, undefined, this)
362089
362320
  ]
362090
362321
  }, undefined, true, undefined, this) : null,
@@ -362096,43 +362327,30 @@ function LocalBackendSetup({
362096
362327
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362097
362328
  dimColor: true,
362098
362329
  wrap: "wrap",
362099
- 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."
362330
+ children: 'Save globally to make this the default every time localclawd starts. Choose "this launch only" for a temporary override.'
362100
362331
  }, undefined, false, undefined, this),
362101
362332
  /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(Select, {
362102
362333
  options: [
362103
- {
362104
- label: "Save as global default (recommended)",
362105
- value: "global"
362106
- },
362107
- {
362108
- label: "Use only for this launch",
362109
- value: "session"
362110
- }
362334
+ { label: "Save as global default (recommended)", value: "global" },
362335
+ { label: "Use only for this launch", value: "session" }
362111
362336
  ],
362112
362337
  onChange: (value) => {
362113
- onComplete({
362114
- provider,
362115
- baseUrl,
362116
- model,
362117
- apiKey
362118
- }, {
362119
- saveGlobally: value === "global"
362120
- });
362338
+ onComplete({ provider, baseUrl, model, apiKey }, { saveGlobally: value === "global" });
362121
362339
  },
362122
- onCancel: () => setStep("apiKey")
362340
+ onCancel: goBack
362341
+ }, undefined, false, undefined, this),
362342
+ /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362343
+ dimColor: true,
362344
+ children: "Esc goes back to API key."
362123
362345
  }, undefined, false, undefined, this)
362124
362346
  ]
362125
362347
  }, undefined, true, undefined, this) : null,
362126
362348
  error5 ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362127
362349
  color: "error",
362128
362350
  children: error5
362129
- }, undefined, false, undefined, this) : null,
362130
- step !== "scanningModels" && step !== "saveScope" && step !== "model" ? /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
362131
- dimColor: true,
362132
- children: "Enter confirms the current value. Esc cancels this setup step. Environment variables still override saved defaults when present."
362133
362351
  }, undefined, false, undefined, this) : null
362134
362352
  ]
362135
- }, undefined, true, undefined, this)
362353
+ }, undefined, true, undefined, this) : null
362136
362354
  ]
362137
362355
  }, undefined, true, undefined, this);
362138
362356
  }
@@ -362140,6 +362358,7 @@ var import_react99, jsx_dev_runtime171, PROVIDER_OPTIONS;
362140
362358
  var init_LocalBackendSetup = __esm(() => {
362141
362359
  init_ink2();
362142
362360
  init_providers();
362361
+ init_scanModels();
362143
362362
  init_select();
362144
362363
  init_TextInput();
362145
362364
  import_react99 = __toESM(require_react(), 1);
@@ -364618,7 +364837,7 @@ function Config({
364618
364837
  }
364619
364838
  }, undefined, false, undefined, this)
364620
364839
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
364621
- currentVersion: "1.0.8",
364840
+ currentVersion: "1.0.9",
364622
364841
  onChoice: (choice) => {
364623
364842
  setShowSubmenu(null);
364624
364843
  setTabsHidden(false);
@@ -364630,7 +364849,7 @@ function Config({
364630
364849
  autoUpdatesChannel: "stable"
364631
364850
  };
364632
364851
  if (choice === "stay") {
364633
- newSettings.minimumVersion = "1.0.8";
364852
+ newSettings.minimumVersion = "1.0.9";
364634
364853
  }
364635
364854
  updateSettingsForSource("userSettings", newSettings);
364636
364855
  setSettingsData((prev_27) => ({
@@ -373177,7 +373396,7 @@ function HelpV2(t0) {
373177
373396
  let t6;
373178
373397
  if ($2[31] !== tabs) {
373179
373398
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
373180
- title: `localclawd v${"1.0.8"}`,
373399
+ title: `localclawd v${"1.0.9"}`,
373181
373400
  color: "professionalBlue",
373182
373401
  defaultTab: "general",
373183
373402
  children: tabs
@@ -397335,7 +397554,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
397335
397554
  return [];
397336
397555
  }
397337
397556
  }
397338
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.8") {
397557
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.9") {
397339
397558
  if (process.env.USER_TYPE === "ant") {
397340
397559
  const changelog = MACRO.VERSION_CHANGELOG;
397341
397560
  if (changelog) {
@@ -397362,7 +397581,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.8") {
397362
397581
  releaseNotes
397363
397582
  };
397364
397583
  }
397365
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.8") {
397584
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.9") {
397366
397585
  if (process.env.USER_TYPE === "ant") {
397367
397586
  const changelog = MACRO.VERSION_CHANGELOG;
397368
397587
  if (changelog) {
@@ -398529,7 +398748,7 @@ function getRecentActivitySync() {
398529
398748
  return cachedActivity;
398530
398749
  }
398531
398750
  function getLogoDisplayData() {
398532
- const version = process.env.DEMO_VERSION ?? "1.0.8";
398751
+ const version = process.env.DEMO_VERSION ?? "1.0.9";
398533
398752
  const serverUrl = getDirectConnectServerUrl();
398534
398753
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
398535
398754
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -399803,7 +400022,7 @@ function LogoV2() {
399803
400022
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
399804
400023
  t2 = () => {
399805
400024
  const currentConfig = getGlobalConfig();
399806
- if (currentConfig.lastReleaseNotesSeen === "1.0.8") {
400025
+ if (currentConfig.lastReleaseNotesSeen === "1.0.9") {
399807
400026
  return;
399808
400027
  }
399809
400028
  saveGlobalConfig(_temp327);
@@ -400479,12 +400698,12 @@ function LogoV2() {
400479
400698
  return t41;
400480
400699
  }
400481
400700
  function _temp327(current) {
400482
- if (current.lastReleaseNotesSeen === "1.0.8") {
400701
+ if (current.lastReleaseNotesSeen === "1.0.9") {
400483
400702
  return current;
400484
400703
  }
400485
400704
  return {
400486
400705
  ...current,
400487
- lastReleaseNotesSeen: "1.0.8"
400706
+ lastReleaseNotesSeen: "1.0.9"
400488
400707
  };
400489
400708
  }
400490
400709
  function _temp245(s_0) {
@@ -426692,7 +426911,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
426692
426911
  smapsRollup,
426693
426912
  platform: process.platform,
426694
426913
  nodeVersion: process.version,
426695
- ccVersion: "1.0.8"
426914
+ ccVersion: "1.0.9"
426696
426915
  };
426697
426916
  }
426698
426917
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -427277,7 +427496,7 @@ var init_bridge_kick = __esm(() => {
427277
427496
  var call57 = async () => {
427278
427497
  return {
427279
427498
  type: "text",
427280
- value: `${"1.0.8"} (built ${"2026-04-05T20:46:26.460Z"})`
427499
+ value: `${"1.0.9"} (built ${"2026-04-05T20:57:35.818Z"})`
427281
427500
  };
427282
427501
  }, version, version_default;
427283
427502
  var init_version = __esm(() => {
@@ -436213,7 +436432,7 @@ function generateHtmlReport(data, insights) {
436213
436432
  </html>`;
436214
436433
  }
436215
436434
  function buildExportData(data, insights, facets, remoteStats) {
436216
- const version2 = typeof MACRO !== "undefined" ? "1.0.8" : "unknown";
436435
+ const version2 = typeof MACRO !== "undefined" ? "1.0.9" : "unknown";
436217
436436
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
436218
436437
  const facets_summary = {
436219
436438
  total: facets.size,
@@ -440367,7 +440586,7 @@ var init_sessionStorage = __esm(() => {
440367
440586
  init_settings2();
440368
440587
  init_slowOperations();
440369
440588
  init_uuid();
440370
- VERSION5 = typeof MACRO !== "undefined" ? "1.0.8" : "unknown";
440589
+ VERSION5 = typeof MACRO !== "undefined" ? "1.0.9" : "unknown";
440371
440590
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
440372
440591
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
440373
440592
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -441569,7 +441788,7 @@ var init_filesystem = __esm(() => {
441569
441788
  });
441570
441789
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
441571
441790
  const nonce = randomBytes18(16).toString("hex");
441572
- return join128(getClaudeTempDir(), "bundled-skills", "1.0.8", nonce);
441791
+ return join128(getClaudeTempDir(), "bundled-skills", "1.0.9", nonce);
441573
441792
  });
441574
441793
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
441575
441794
  });
@@ -447567,7 +447786,7 @@ function computeFingerprint(messageText, version2) {
447567
447786
  }
447568
447787
  function computeFingerprintFromMessages(messages) {
447569
447788
  const firstMessageText = extractFirstMessageText(messages);
447570
- return computeFingerprint(firstMessageText, "1.0.8");
447789
+ return computeFingerprint(firstMessageText, "1.0.9");
447571
447790
  }
447572
447791
  var FINGERPRINT_SALT = "59cf53e54c78";
447573
447792
  var init_fingerprint = () => {};
@@ -449422,7 +449641,7 @@ async function sideQuery(opts) {
449422
449641
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
449423
449642
  }
449424
449643
  const messageText = extractFirstUserMessageText(messages);
449425
- const fingerprint = computeFingerprint(messageText, "1.0.8");
449644
+ const fingerprint = computeFingerprint(messageText, "1.0.9");
449426
449645
  const attributionHeader = getAttributionHeader(fingerprint);
449427
449646
  const systemBlocks = [
449428
449647
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -454220,7 +454439,7 @@ function buildSystemInitMessage(inputs) {
454220
454439
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
454221
454440
  apiKeySource: getAnthropicApiKeyWithSource().source,
454222
454441
  betas: getSdkBetas(),
454223
- claude_code_version: "1.0.8",
454442
+ claude_code_version: "1.0.9",
454224
454443
  output_style: outputStyle2,
454225
454444
  agents: inputs.agents.map((agent) => agent.agentType),
454226
454445
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -468799,7 +469018,7 @@ var init_useVoiceEnabled = __esm(() => {
468799
469018
  function getSemverPart(version2) {
468800
469019
  return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
468801
469020
  }
468802
- function useUpdateNotification(updatedVersion, initialVersion = "1.0.8") {
469021
+ function useUpdateNotification(updatedVersion, initialVersion = "1.0.9") {
468803
469022
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react227.useState(() => getSemverPart(initialVersion));
468804
469023
  if (!updatedVersion) {
468805
469024
  return null;
@@ -468839,7 +469058,7 @@ function AutoUpdater({
468839
469058
  return;
468840
469059
  }
468841
469060
  if (false) {}
468842
- const currentVersion = "1.0.8";
469061
+ const currentVersion = "1.0.9";
468843
469062
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
468844
469063
  let latestVersion = await getLatestVersion(channel);
468845
469064
  const isDisabled = isAutoUpdaterDisabled();
@@ -469050,12 +469269,12 @@ function NativeAutoUpdater({
469050
469269
  logEvent("tengu_native_auto_updater_start", {});
469051
469270
  try {
469052
469271
  const maxVersion = await getMaxVersion();
469053
- if (maxVersion && gt("1.0.8", maxVersion)) {
469272
+ if (maxVersion && gt("1.0.9", maxVersion)) {
469054
469273
  const msg = await getMaxVersionMessage();
469055
469274
  setMaxVersionIssue(msg ?? "affects your version");
469056
469275
  }
469057
469276
  const result = await installLatest(channel);
469058
- const currentVersion = "1.0.8";
469277
+ const currentVersion = "1.0.9";
469059
469278
  const latencyMs = Date.now() - startTime;
469060
469279
  if (result.lockFailed) {
469061
469280
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -469190,17 +469409,17 @@ function PackageManagerAutoUpdater(t0) {
469190
469409
  const maxVersion = await getMaxVersion();
469191
469410
  if (maxVersion && latest && gt(latest, maxVersion)) {
469192
469411
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
469193
- if (gte("1.0.8", maxVersion)) {
469194
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.0.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
469412
+ if (gte("1.0.9", maxVersion)) {
469413
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.0.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
469195
469414
  setUpdateAvailable(false);
469196
469415
  return;
469197
469416
  }
469198
469417
  latest = maxVersion;
469199
469418
  }
469200
- const hasUpdate = latest && !gte("1.0.8", latest) && !shouldSkipVersion(latest);
469419
+ const hasUpdate = latest && !gte("1.0.9", latest) && !shouldSkipVersion(latest);
469201
469420
  setUpdateAvailable(!!hasUpdate);
469202
469421
  if (hasUpdate) {
469203
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.0.8"} -> ${latest}`);
469422
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.0.9"} -> ${latest}`);
469204
469423
  }
469205
469424
  };
469206
469425
  $2[0] = t1;
@@ -469234,7 +469453,7 @@ function PackageManagerAutoUpdater(t0) {
469234
469453
  wrap: "truncate",
469235
469454
  children: [
469236
469455
  "currentVersion: ",
469237
- "1.0.8"
469456
+ "1.0.9"
469238
469457
  ]
469239
469458
  }, undefined, true, undefined, this);
469240
469459
  $2[3] = verbose;
@@ -476792,7 +477011,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
476792
477011
  project_dir: getOriginalCwd(),
476793
477012
  added_dirs: addedDirs
476794
477013
  },
476795
- version: "1.0.8",
477014
+ version: "1.0.9",
476796
477015
  output_style: {
476797
477016
  name: outputStyleName
476798
477017
  },
@@ -488338,7 +488557,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
488338
488557
  } catch {}
488339
488558
  const data = {
488340
488559
  trigger,
488341
- version: "1.0.8",
488560
+ version: "1.0.9",
488342
488561
  platform: process.platform,
488343
488562
  transcript,
488344
488563
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -499923,7 +500142,7 @@ function WelcomeV2() {
499923
500142
  dimColor: true,
499924
500143
  children: [
499925
500144
  "v",
499926
- "1.0.8"
500145
+ "1.0.9"
499927
500146
  ]
499928
500147
  }, undefined, true, undefined, this)
499929
500148
  ]
@@ -501300,7 +501519,7 @@ function completeOnboarding() {
501300
501519
  saveGlobalConfig((current) => ({
501301
501520
  ...current,
501302
501521
  hasCompletedOnboarding: true,
501303
- lastOnboardingVersion: "1.0.8"
501522
+ lastOnboardingVersion: "1.0.9"
501304
501523
  }));
501305
501524
  }
501306
501525
  function showDialog(root3, renderer) {
@@ -505854,7 +506073,7 @@ function appendToLog(path17, message) {
505854
506073
  cwd: getFsImplementation().cwd(),
505855
506074
  userType: process.env.USER_TYPE,
505856
506075
  sessionId: getSessionId(),
505857
- version: "1.0.8"
506076
+ version: "1.0.9"
505858
506077
  };
505859
506078
  getLogWriter(path17).write(messageWithTimestamp);
505860
506079
  }
@@ -509834,8 +510053,8 @@ async function getEnvLessBridgeConfig() {
509834
510053
  }
509835
510054
  async function checkEnvLessBridgeMinVersion() {
509836
510055
  const cfg = await getEnvLessBridgeConfig();
509837
- if (cfg.min_version && lt("1.0.8", cfg.min_version)) {
509838
- return `Your version of localclawd (${"1.0.8"}) is too old for Remote Control.
510056
+ if (cfg.min_version && lt("1.0.9", cfg.min_version)) {
510057
+ return `Your version of localclawd (${"1.0.9"}) is too old for Remote Control.
509839
510058
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
509840
510059
  }
509841
510060
  return null;
@@ -510307,7 +510526,7 @@ async function initBridgeCore(params) {
510307
510526
  const rawApi = createBridgeApiClient({
510308
510527
  baseUrl,
510309
510528
  getAccessToken,
510310
- runnerVersion: "1.0.8",
510529
+ runnerVersion: "1.0.9",
510311
510530
  onDebug: logForDebugging,
510312
510531
  onAuth401,
510313
510532
  getTrustedDeviceToken
@@ -515963,7 +516182,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
515963
516182
  setCwd(cwd3);
515964
516183
  const server = new Server({
515965
516184
  name: "claude/tengu",
515966
- version: "1.0.8"
516185
+ version: "1.0.9"
515967
516186
  }, {
515968
516187
  capabilities: {
515969
516188
  tools: {}
@@ -517568,7 +517787,7 @@ __export(exports_update, {
517568
517787
  });
517569
517788
  async function update() {
517570
517789
  logEvent("tengu_update_check", {});
517571
- writeToStdout(`Current version: ${"1.0.8"}
517790
+ writeToStdout(`Current version: ${"1.0.9"}
517572
517791
  `);
517573
517792
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
517574
517793
  writeToStdout(`Checking for updates to ${channel} version...
@@ -517643,8 +517862,8 @@ async function update() {
517643
517862
  writeToStdout(`localclawd is managed by Homebrew.
517644
517863
  `);
517645
517864
  const latest = await getLatestVersion(channel);
517646
- if (latest && !gte("1.0.8", latest)) {
517647
- writeToStdout(`Update available: ${"1.0.8"} → ${latest}
517865
+ if (latest && !gte("1.0.9", latest)) {
517866
+ writeToStdout(`Update available: ${"1.0.9"} → ${latest}
517648
517867
  `);
517649
517868
  writeToStdout(`
517650
517869
  `);
@@ -517660,8 +517879,8 @@ async function update() {
517660
517879
  writeToStdout(`localclawd is managed by winget.
517661
517880
  `);
517662
517881
  const latest = await getLatestVersion(channel);
517663
- if (latest && !gte("1.0.8", latest)) {
517664
- writeToStdout(`Update available: ${"1.0.8"} → ${latest}
517882
+ if (latest && !gte("1.0.9", latest)) {
517883
+ writeToStdout(`Update available: ${"1.0.9"} → ${latest}
517665
517884
  `);
517666
517885
  writeToStdout(`
517667
517886
  `);
@@ -517675,8 +517894,8 @@ async function update() {
517675
517894
  writeToStdout(`localclawd is managed by apk.
517676
517895
  `);
517677
517896
  const latest = await getLatestVersion(channel);
517678
- if (latest && !gte("1.0.8", latest)) {
517679
- writeToStdout(`Update available: ${"1.0.8"} → ${latest}
517897
+ if (latest && !gte("1.0.9", latest)) {
517898
+ writeToStdout(`Update available: ${"1.0.9"} → ${latest}
517680
517899
  `);
517681
517900
  writeToStdout(`
517682
517901
  `);
@@ -517741,11 +517960,11 @@ async function update() {
517741
517960
  `);
517742
517961
  await gracefulShutdown(1);
517743
517962
  }
517744
- if (result.latestVersion === "1.0.8") {
517745
- writeToStdout(source_default.green(`localclawd is up to date (${"1.0.8"})`) + `
517963
+ if (result.latestVersion === "1.0.9") {
517964
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.0.9"})`) + `
517746
517965
  `);
517747
517966
  } else {
517748
- writeToStdout(source_default.green(`Successfully updated from ${"1.0.8"} to version ${result.latestVersion}`) + `
517967
+ writeToStdout(source_default.green(`Successfully updated from ${"1.0.9"} to version ${result.latestVersion}`) + `
517749
517968
  `);
517750
517969
  await regenerateCompletionCache();
517751
517970
  }
@@ -517805,12 +518024,12 @@ async function update() {
517805
518024
  `);
517806
518025
  await gracefulShutdown(1);
517807
518026
  }
517808
- if (latestVersion === "1.0.8") {
517809
- writeToStdout(source_default.green(`localclawd is up to date (${"1.0.8"})`) + `
518027
+ if (latestVersion === "1.0.9") {
518028
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.0.9"})`) + `
517810
518029
  `);
517811
518030
  await gracefulShutdown(0);
517812
518031
  }
517813
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.0.8"})
518032
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.0.9"})
517814
518033
  `);
517815
518034
  writeToStdout(`Installing update...
517816
518035
  `);
@@ -517855,7 +518074,7 @@ async function update() {
517855
518074
  logForDebugging(`update: Installation status: ${status2}`);
517856
518075
  switch (status2) {
517857
518076
  case "success":
517858
- writeToStdout(source_default.green(`Successfully updated from ${"1.0.8"} to version ${latestVersion}`) + `
518077
+ writeToStdout(source_default.green(`Successfully updated from ${"1.0.9"} to version ${latestVersion}`) + `
517859
518078
  `);
517860
518079
  await regenerateCompletionCache();
517861
518080
  break;
@@ -519120,7 +519339,7 @@ ${customInstructions}` : customInstructions;
519120
519339
  }
519121
519340
  }
519122
519341
  logForDiagnosticsNoPII("info", "started", {
519123
- version: "1.0.8",
519342
+ version: "1.0.9",
519124
519343
  is_native_binary: isInBundledMode()
519125
519344
  });
519126
519345
  registerCleanup(async () => {
@@ -519904,7 +520123,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
519904
520123
  pendingHookMessages
519905
520124
  }, renderAndRun);
519906
520125
  }
519907
- }).version("1.0.8 (localClawd)", "-v, --version", "Output the version number");
520126
+ }).version("1.0.9 (localClawd)", "-v, --version", "Output the version number");
519908
520127
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
519909
520128
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
519910
520129
  if (canUserConfigureAdvisor()) {
@@ -520412,7 +520631,7 @@ if (false) {}
520412
520631
  async function main2() {
520413
520632
  const args = process.argv.slice(2);
520414
520633
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
520415
- console.log(`${"1.0.8"} (localclawd)`);
520634
+ console.log(`${"1.0.9"} (localclawd)`);
520416
520635
  return;
520417
520636
  }
520418
520637
  const {
@@ -520496,4 +520715,4 @@ async function main2() {
520496
520715
  }
520497
520716
  main2();
520498
520717
 
520499
- //# debugId=CFD97D6A042E5F1F64756E2164756E21
520718
+ //# debugId=CB0E9259CC339E3764756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",