@rayu-dev/rayu-cli 1.4.466 → 1.4.468

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.
package/dist/rayu.js CHANGED
@@ -40670,6 +40670,82 @@ var init_vertexAuth = __esm(() => {
40670
40670
  DEFAULT_TOKEN_TTL_MS = 60 * 60 * 1000;
40671
40671
  });
40672
40672
 
40673
+ // src/services/api/ollamaCloud.ts
40674
+ var exports_ollamaCloud = {};
40675
+ __export(exports_ollamaCloud, {
40676
+ fetchOllamaCloudModels: () => fetchOllamaCloudModels,
40677
+ fetchOllamaCloudModelContexts: () => fetchOllamaCloudModelContexts,
40678
+ OLLAMA_CLOUD_PROVIDER_ID: () => OLLAMA_CLOUD_PROVIDER_ID,
40679
+ OLLAMA_CLOUD_BASE_URL: () => OLLAMA_CLOUD_BASE_URL
40680
+ });
40681
+ function hostOf(baseURL) {
40682
+ return (baseURL || OLLAMA_CLOUD_BASE_URL).replace(/\/+$/, "");
40683
+ }
40684
+ function bearer(apiKey) {
40685
+ return apiKey ? { Authorization: `Bearer ${apiKey}` } : {};
40686
+ }
40687
+ async function fetchOllamaCloudModels(apiKey, baseURL) {
40688
+ const host = hostOf(baseURL);
40689
+ const headers = bearer(apiKey);
40690
+ const ids = new Set;
40691
+ try {
40692
+ const res = await fetch(`${host}/v1/models`, { headers, signal: AbortSignal.timeout(15000) });
40693
+ if (res.ok) {
40694
+ const json = await res.json();
40695
+ for (const m2 of json.data ?? []) {
40696
+ if (typeof m2.id === "string" && m2.id)
40697
+ ids.add(m2.id);
40698
+ }
40699
+ }
40700
+ } catch {}
40701
+ if (ids.size === 0) {
40702
+ try {
40703
+ const res = await fetch(`${host}/api/tags`, { headers, signal: AbortSignal.timeout(15000) });
40704
+ if (res.ok) {
40705
+ const json = await res.json();
40706
+ for (const m2 of json.models ?? []) {
40707
+ const id = m2.model || m2.name;
40708
+ if (typeof id === "string" && id)
40709
+ ids.add(id);
40710
+ }
40711
+ }
40712
+ } catch {}
40713
+ }
40714
+ return [...ids].sort();
40715
+ }
40716
+ async function fetchOllamaCloudModelContexts(apiKey, baseURL, models) {
40717
+ const host = hostOf(baseURL);
40718
+ const headers = { "Content-Type": "application/json", ...bearer(apiKey) };
40719
+ const out = {};
40720
+ const CONCURRENCY = 4;
40721
+ let next = 0;
40722
+ async function worker() {
40723
+ while (next < models.length) {
40724
+ const model = models[next++];
40725
+ try {
40726
+ const res = await fetch(`${host}/api/show`, {
40727
+ method: "POST",
40728
+ headers,
40729
+ body: JSON.stringify({ model }),
40730
+ signal: AbortSignal.timeout(1e4)
40731
+ });
40732
+ if (!res.ok)
40733
+ continue;
40734
+ const json = await res.json();
40735
+ for (const [k, v] of Object.entries(json.model_info ?? {})) {
40736
+ if (k.endsWith(".context_length") && typeof v === "number" && v > 0) {
40737
+ out[model] = v;
40738
+ break;
40739
+ }
40740
+ }
40741
+ } catch {}
40742
+ }
40743
+ }
40744
+ await Promise.all(Array.from({ length: Math.min(CONCURRENCY, Math.max(models.length, 1)) }, worker));
40745
+ return out;
40746
+ }
40747
+ var OLLAMA_CLOUD_PROVIDER_ID = "ollama-cloud", OLLAMA_CLOUD_BASE_URL = "https://ollama.com";
40748
+
40673
40749
  // src/utils/rayuProviders.ts
40674
40750
  var exports_rayuProviders = {};
40675
40751
  __export(exports_rayuProviders, {
@@ -40718,8 +40794,16 @@ function ollamaBaseURL() {
40718
40794
  raw = `${raw}/v1`;
40719
40795
  return raw;
40720
40796
  }
40797
+ function envMultiKeyProviderIds() {
40798
+ const raw = process.env.RAYU_MULTI_KEY_PROVIDERS;
40799
+ if (!raw)
40800
+ return [];
40801
+ return raw.split(/[\s,]+/).map((s2) => s2.trim()).filter(Boolean);
40802
+ }
40721
40803
  function supportsMultiApiKey(providerId) {
40722
- return !!providerId && MULTI_KEY_PROVIDER_IDS.has(providerId);
40804
+ if (!providerId)
40805
+ return false;
40806
+ return MULTI_KEY_PROVIDER_IDS.has(providerId) || envMultiKeyProviderIds().includes(providerId);
40723
40807
  }
40724
40808
  function migrateEnvKeysToConfig() {
40725
40809
  loadDotEnv();
@@ -40839,7 +40923,8 @@ var init_rayuProviders = __esm(() => {
40839
40923
  ];
40840
40924
  MULTI_KEY_PROVIDER_IDS = new Set([
40841
40925
  "nvidia",
40842
- "openrouter"
40926
+ "openrouter",
40927
+ "ollama-cloud"
40843
40928
  ]);
40844
40929
  PROVIDER_PRESETS = [
40845
40930
  {
@@ -40858,6 +40943,14 @@ var init_rayuProviders = __esm(() => {
40858
40943
  defaultModel: "LongCat-2.0",
40859
40944
  envKeys: ["LONGCAT_API_KEY"]
40860
40945
  },
40946
+ {
40947
+ id: OLLAMA_CLOUD_PROVIDER_ID,
40948
+ label: "Ollama Cloud (ollama.com) · hosted models · fetches your account models",
40949
+ kind: "anthropic-compatible",
40950
+ baseURL: OLLAMA_CLOUD_BASE_URL,
40951
+ defaultModel: "gpt-oss:120b-cloud",
40952
+ envKeys: ["OLLAMA_CLOUD_API_KEY"]
40953
+ },
40861
40954
  {
40862
40955
  id: "nvidia",
40863
40956
  label: "NVIDIA NIM (integrate.api.nvidia.com)",
@@ -41109,6 +41202,7 @@ var init_rayuProviders = __esm(() => {
41109
41202
  copilot: "GitHub Copilot",
41110
41203
  "rayu-hosted": "Rayu",
41111
41204
  ollama: "Ollama",
41205
+ "ollama-cloud": "Ollama Cloud",
41112
41206
  local: "Local"
41113
41207
  };
41114
41208
  });
@@ -41818,6 +41912,10 @@ async function fetchProviderModels(p) {
41818
41912
  const { fetchCopilotModels: fetchCopilotModels2 } = await Promise.resolve().then(() => (init_copilotAuth(), exports_copilotAuth));
41819
41913
  return fetchCopilotModels2(p.apiKey);
41820
41914
  }
41915
+ if (p.id === "ollama-cloud") {
41916
+ const { fetchOllamaCloudModels: fetchOllamaCloudModels2 } = await Promise.resolve().then(() => exports_ollamaCloud);
41917
+ return fetchOllamaCloudModels2(p.apiKey, p.baseURL);
41918
+ }
41821
41919
  if (p.kind !== "openai-compatible" || !p.baseURL)
41822
41920
  return [];
41823
41921
  const curated = CURATED_PROVIDER_MODELS[p.id] ?? [];
@@ -41850,7 +41948,7 @@ async function fetchProviderModels(p) {
41850
41948
  }
41851
41949
  async function refreshActiveProviderModels() {
41852
41950
  const p = getActiveProvider();
41853
- if (!p || p.kind !== "openai-compatible" && p.kind !== "bedrock" && p.kind !== "vertex" && p.kind !== "genai" && p.kind !== "kiro" && p.kind !== "copilot")
41951
+ if (!p || p.kind !== "openai-compatible" && p.kind !== "bedrock" && p.kind !== "vertex" && p.kind !== "genai" && p.kind !== "kiro" && p.kind !== "copilot" && p.kind !== "anthropic-compatible")
41854
41952
  return [];
41855
41953
  const models = await fetchProviderModels(p);
41856
41954
  if (models.length) {
@@ -41938,13 +42036,15 @@ var init_rayuConfig = __esm(() => {
41938
42036
  [/gpt-4\.1/i, 1048576],
41939
42037
  [/gemini[-.]?(1\.5|2|2\.5|3)/i, 1048576],
41940
42038
  [/gemini/i, 1048576],
41941
- [/deepseek[-/]?v4[-/]?(flash|pro)/i, 1e6],
42039
+ [/deepseek[-_/.]?v4/i, 1e6],
41942
42040
  [/longcat/i, 1e6],
41943
42041
  [/minimax[-_.]?m3/i, 1e6],
41944
- [/glm-5\.2/i, 1e6],
42042
+ [/glm-?5\.2/i, 1e6],
41945
42043
  [/fugu/i, 1e6],
42044
+ [/llama[-_.]?4/i, 1e6],
41946
42045
  [/kimi-k1|kimi.*long/i, 200000],
41947
42046
  [/kimi[-_.]?k2[-_.]?(thinking|\d{4}|[5-9])/i, 256000],
42047
+ [/kimi[-_.\s]?cod(e|ing)|kimi[-_.]?k?2[.\-_]?7/i, 256000],
41948
42048
  [/kimi|moonshot/i, 131072],
41949
42049
  [/qwen[-.]?3[-.]?(coder|next)/i, 256000],
41950
42050
  [/jamba/i, 256000],
@@ -41953,7 +42053,7 @@ var init_rayuConfig = __esm(() => {
41953
42053
  [/minimax/i, 204800],
41954
42054
  [/deepseek-(chat|reasoner|v3|coder)/i, 131072],
41955
42055
  [/deepseek-r1/i, 131072],
41956
- [/llama-3\.[1-3]|llama-3-70b|llama-4|nemotron/i, 131072],
42056
+ [/llama-3\.[1-3]|llama-3-70b|nemotron/i, 131072],
41957
42057
  [/qwen[-_.]?[23]|qwq/i, 131072],
41958
42058
  [/gemma-[234]/i, 131072],
41959
42059
  [/mixtral|mistral|ministral|codestral|devstral/i, 131072],
@@ -41990,6 +42090,7 @@ var exports_providers = {};
41990
42090
  __export(exports_providers, {
41991
42091
  isVertexGeminiActive: () => isVertexGeminiActive,
41992
42092
  isRayuNonAnthropicActive: () => isRayuNonAnthropicActive,
42093
+ isRayuAnthropicCompatibleActive: () => isRayuAnthropicCompatibleActive,
41993
42094
  isOpenAICompatibleActive: () => isOpenAICompatibleActive,
41994
42095
  isGeminiVertexConfigured: () => isGeminiVertexConfigured,
41995
42096
  isFirstPartyAnthropicBaseUrl: () => isFirstPartyAnthropicBaseUrl,
@@ -42019,6 +42120,14 @@ function isRayuNonAnthropicActive() {
42019
42120
  return false;
42020
42121
  }
42021
42122
  }
42123
+ function isRayuAnthropicCompatibleActive() {
42124
+ try {
42125
+ const { getActiveProvider: getActiveProvider2 } = (init_rayuConfig(), __toCommonJS(exports_rayuConfig));
42126
+ return getActiveProvider2()?.kind === "anthropic-compatible";
42127
+ } catch {
42128
+ return false;
42129
+ }
42130
+ }
42022
42131
  function isOpenAICompatibleActive() {
42023
42132
  if (isEnvTruthy(process.env.RAYU_OPENAI_COMPATIBLE)) {
42024
42133
  return true;
@@ -148855,7 +148964,7 @@ var init_isEqual = __esm(() => {
148855
148964
 
148856
148965
  // src/utils/userAgent.ts
148857
148966
  function getRayuUserAgent() {
148858
- return `rayu/${"1.4.466"}`;
148967
+ return `rayu/${"1.4.468"}`;
148859
148968
  }
148860
148969
  var getClaudeCodeUserAgent;
148861
148970
  var init_userAgent = __esm(() => {
@@ -148881,7 +148990,7 @@ function getUserAgent() {
148881
148990
  const clientApp = process.env.RAYU_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}` : "";
148882
148991
  const workload = getWorkload();
148883
148992
  const workloadSuffix = workload ? `, workload/${workload}` : "";
148884
- return `rayu/${"1.4.466"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148993
+ return `rayu/${"1.4.468"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148885
148994
  }
148886
148995
  function getMCPUserAgent() {
148887
148996
  const parts = [];
@@ -148895,7 +149004,7 @@ function getMCPUserAgent() {
148895
149004
  parts.push(`client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}`);
148896
149005
  }
148897
149006
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
148898
- return `rayu/${"1.4.466"}${suffix}`;
149007
+ return `rayu/${"1.4.468"}${suffix}`;
148899
149008
  }
148900
149009
  function getWebFetchUserAgent() {
148901
149010
  return `Rayu-User (${getRayuUserAgent()})`;
@@ -174790,16 +174899,16 @@ async function getKiroBearer(provider) {
174790
174899
  if (!profileArn) {
174791
174900
  profileArn = await fetchKiroProfileArn(creds.accessToken, region) ?? "";
174792
174901
  }
174793
- const bearer = {
174902
+ const bearer2 = {
174794
174903
  token: creds.accessToken,
174795
174904
  region,
174796
174905
  ...profileArn ? { profileArn } : {}
174797
174906
  };
174798
174907
  oauthCache.set(provider.id, {
174799
- bearer,
174908
+ bearer: bearer2,
174800
174909
  expiresAtMs: creds.expiresAt ? creds.expiresAt * 1000 : Date.now() + 1800000
174801
174910
  });
174802
- return bearer;
174911
+ return bearer2;
174803
174912
  }
174804
174913
  var TOKEN_VALIDITY_BUFFER_MS, DEFAULT_REGION2 = "us-east-1", TOKEN_KEYS, DEVICE_REG_KEYS, defaultRefreshHook = async (url3, body) => {
174805
174914
  const res = await fetch(url3, {
@@ -175252,12 +175361,12 @@ function createKiroClient(provider, maxRetries = 2) {
175252
175361
  });
175253
175362
  }
175254
175363
  for (let attempt = 0;attempt <= maxRetries; attempt++) {
175255
- const bearer = await getKiroBearer(provider);
175256
- if (bearer.profileArn)
175257
- payload.profileArn = bearer.profileArn;
175258
- const endpoint = `https://q.${bearer.region}.amazonaws.com/`;
175364
+ const bearer2 = await getKiroBearer(provider);
175365
+ if (bearer2.profileArn)
175366
+ payload.profileArn = bearer2.profileArn;
175367
+ const endpoint = `https://q.${bearer2.region}.amazonaws.com/`;
175259
175368
  const headers = {
175260
- Authorization: `Bearer ${bearer.token}`,
175369
+ Authorization: `Bearer ${bearer2.token}`,
175261
175370
  "Content-Type": "application/x-amz-json-1.0",
175262
175371
  Accept: "*/*",
175263
175372
  "X-Amz-Target": AMZ_TARGET,
@@ -175267,8 +175376,8 @@ function createKiroClient(provider, maxRetries = 2) {
175267
175376
  "amz-sdk-invocation-id": invocationId,
175268
175377
  "amz-sdk-request": `attempt=${attempt + 1}; max=${maxRetries + 1}`
175269
175378
  };
175270
- if (bearer.tokenType)
175271
- headers.TokenType = bearer.tokenType;
175379
+ if (bearer2.tokenType)
175380
+ headers.TokenType = bearer2.tokenType;
175272
175381
  const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
175273
175382
  const composite = signal && "any" in AbortSignal ? AbortSignal.any([signal, timeout]) : signal ?? timeout;
175274
175383
  let res;
@@ -175430,18 +175539,53 @@ var init_rayuHostedClient = __esm(() => {
175430
175539
  // src/services/api/anthropicCompatibleClient.ts
175431
175540
  var exports_anthropicCompatibleClient = {};
175432
175541
  __export(exports_anthropicCompatibleClient, {
175542
+ makeKeyRotatingFetch: () => makeKeyRotatingFetch,
175433
175543
  createAnthropicCompatibleClient: () => createAnthropicCompatibleClient
175434
175544
  });
175435
- function createAnthropicCompatibleClient(provider, maxRetries) {
175545
+ function makeKeyRotatingFetch(keys2, baseFetch) {
175546
+ let current = 0;
175547
+ const rotating = async (input, init) => {
175548
+ const n2 = keys2.length;
175549
+ let lastResp;
175550
+ for (let attempt = 0;attempt < n2; attempt++) {
175551
+ const idx = (current + attempt) % n2;
175552
+ const headers = new Headers(init?.headers);
175553
+ headers.set("Authorization", `Bearer ${keys2[idx]}`);
175554
+ const resp = await baseFetch(input, { ...init, headers });
175555
+ if (resp.ok || attempt === n2 - 1 || !ROTATABLE_KEY_STATUSES2.has(resp.status)) {
175556
+ if (resp.ok)
175557
+ current = idx;
175558
+ return resp;
175559
+ }
175560
+ try {
175561
+ await resp.body?.cancel();
175562
+ } catch {}
175563
+ lastResp = resp;
175564
+ }
175565
+ return lastResp;
175566
+ };
175567
+ return rotating;
175568
+ }
175569
+ function createAnthropicCompatibleClient(provider, maxRetries, transport = {}, apiKeys) {
175570
+ const keys2 = (apiKeys ?? []).map((k2) => k2?.trim()).filter((k2) => !!k2);
175571
+ const rotate = keys2.length > 1;
175572
+ const finalTransport = rotate ? {
175573
+ ...transport,
175574
+ fetch: makeKeyRotatingFetch(keys2, transport.fetch ?? globalThis.fetch)
175575
+ } : transport;
175436
175576
  return new Anthropic({
175577
+ dangerouslyAllowBrowser: true,
175578
+ ...finalTransport,
175437
175579
  apiKey: null,
175438
- authToken: provider.apiKey,
175580
+ authToken: keys2[0] ?? provider.apiKey,
175439
175581
  baseURL: provider.baseURL,
175440
175582
  maxRetries
175441
175583
  });
175442
175584
  }
175585
+ var ROTATABLE_KEY_STATUSES2;
175443
175586
  var init_anthropicCompatibleClient = __esm(() => {
175444
175587
  init_sdk();
175588
+ ROTATABLE_KEY_STATUSES2 = new Set([429, 402, 401, 403]);
175445
175589
  });
175446
175590
 
175447
175591
  // src/services/api/client.ts
@@ -175576,13 +175720,38 @@ async function getRayuHostedClient(maxRetries) {
175576
175720
  const { createRayuHostedClient: createRayuHostedClient2 } = await Promise.resolve().then(() => (init_rayuHostedClient(), exports_rayuHostedClient));
175577
175721
  return createRayuHostedClient2(active, maxRetries);
175578
175722
  }
175579
- async function getRayuAnthropicCompatibleClient(maxRetries) {
175580
- const { getActiveProvider: getActiveProvider2 } = await Promise.resolve().then(() => (init_rayuConfig(), exports_rayuConfig));
175723
+ function anthropicCompatibleTransport(source, fetchOverride2) {
175724
+ const customHeaders = getCustomHeaders();
175725
+ const defaultHeaders = {
175726
+ "x-app": "cli",
175727
+ "User-Agent": getUserAgent(),
175728
+ "X-Claude-Code-Session-Id": getSessionId(),
175729
+ ...customHeaders
175730
+ };
175731
+ const resolvedFetch = buildFetch(fetchOverride2, source);
175732
+ return {
175733
+ defaultHeaders,
175734
+ timeout: parseInt(process.env.API_TIMEOUT_MS || String(600000), 10),
175735
+ fetchOptions: getProxyFetchOptions({
175736
+ forAnthropicAPI: true
175737
+ }),
175738
+ ...resolvedFetch ? { fetch: resolvedFetch } : {},
175739
+ ...isDebugToStdErr() ? { logger: createStderrLogger() } : {}
175740
+ };
175741
+ }
175742
+ async function getRayuAnthropicCompatibleClient(maxRetries, source, fetchOverride2) {
175743
+ const { getActiveProvider: getActiveProvider2, getProviderApiKeys: getProviderApiKeys2 } = await Promise.resolve().then(() => (init_rayuConfig(), exports_rayuConfig));
175581
175744
  const active = getActiveProvider2();
175582
175745
  if (active?.kind !== "anthropic-compatible")
175583
175746
  return null;
175584
175747
  const { createAnthropicCompatibleClient: createAnthropicCompatibleClient2 } = await Promise.resolve().then(() => (init_anthropicCompatibleClient(), exports_anthropicCompatibleClient));
175585
- return createAnthropicCompatibleClient2(active, maxRetries);
175748
+ let apiKeys = getProviderApiKeys2(active);
175749
+ const { supportsMultiApiKey: supportsMultiApiKey2 } = await Promise.resolve().then(() => (init_rayuProviders(), exports_rayuProviders));
175750
+ const { isMultiApiKeyAllowed: isMultiApiKeyAllowed2 } = await Promise.resolve().then(() => (init_multiApiKeyFeature(), exports_multiApiKeyFeature));
175751
+ if (!supportsMultiApiKey2(active.id) || !isMultiApiKeyAllowed2()) {
175752
+ apiKeys = apiKeys.slice(0, 1);
175753
+ }
175754
+ return createAnthropicCompatibleClient2(active, maxRetries, anthropicCompatibleTransport(source, fetchOverride2), apiKeys);
175586
175755
  }
175587
175756
  async function buildClientForProvider(provider, maxRetries) {
175588
175757
  if (provider.kind === "bedrock" && provider.bedrockApi === "anthropic" && provider.apiKey) {
@@ -175624,7 +175793,14 @@ async function buildClientForProvider(provider, maxRetries) {
175624
175793
  }
175625
175794
  if (provider.kind === "anthropic-compatible") {
175626
175795
  const { createAnthropicCompatibleClient: createAnthropicCompatibleClient2 } = await Promise.resolve().then(() => (init_anthropicCompatibleClient(), exports_anthropicCompatibleClient));
175627
- return createAnthropicCompatibleClient2(provider, maxRetries);
175796
+ const { getProviderApiKeys: getProviderApiKeys2 } = await Promise.resolve().then(() => (init_rayuConfig(), exports_rayuConfig));
175797
+ const { supportsMultiApiKey: supportsMultiApiKey2 } = await Promise.resolve().then(() => (init_rayuProviders(), exports_rayuProviders));
175798
+ const { isMultiApiKeyAllowed: isMultiApiKeyAllowed2 } = await Promise.resolve().then(() => (init_multiApiKeyFeature(), exports_multiApiKeyFeature));
175799
+ let apiKeys = getProviderApiKeys2(provider);
175800
+ if (!supportsMultiApiKey2(provider.id) || !isMultiApiKeyAllowed2()) {
175801
+ apiKeys = apiKeys.slice(0, 1);
175802
+ }
175803
+ return createAnthropicCompatibleClient2(provider, maxRetries, anthropicCompatibleTransport(), apiKeys);
175628
175804
  }
175629
175805
  if ((provider.kind === "openai-compatible" || provider.kind === "bedrock") && provider.baseURL) {
175630
175806
  const { createOpenAICompatibleClient: createOpenAICompatibleClient2 } = await Promise.resolve().then(() => (init_openaiAdapter(), exports_openaiAdapter));
@@ -175699,7 +175875,7 @@ async function getAnthropicClient({
175699
175875
  if (rayuHostedClient) {
175700
175876
  return rayuHostedClient;
175701
175877
  }
175702
- const anthropicCompatibleClient = await getRayuAnthropicCompatibleClient(maxRetries);
175878
+ const anthropicCompatibleClient = await getRayuAnthropicCompatibleClient(maxRetries, source, fetchOverride2);
175703
175879
  if (anthropicCompatibleClient) {
175704
175880
  return anthropicCompatibleClient;
175705
175881
  }
@@ -205143,7 +205319,7 @@ function getAttributionHeader(fingerprint) {
205143
205319
  if (!isAttributionHeaderEnabled()) {
205144
205320
  return "";
205145
205321
  }
205146
- const version2 = `${"1.4.466"}.${fingerprint}`;
205322
+ const version2 = `${"1.4.468"}.${fingerprint}`;
205147
205323
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
205148
205324
  const cch = "";
205149
205325
  const workload = getWorkload();
@@ -240215,7 +240391,13 @@ function modelSupportsAdaptiveThinking(model) {
240215
240391
  if (supported3P !== undefined) {
240216
240392
  return supported3P;
240217
240393
  }
240218
- if (isOpenAICompatibleActive() || isRayuNonAnthropicActive()) {
240394
+ if (isOpenAICompatibleActive()) {
240395
+ return true;
240396
+ }
240397
+ if (isRayuAnthropicCompatibleActive()) {
240398
+ return false;
240399
+ }
240400
+ if (isRayuNonAnthropicActive()) {
240219
240401
  return true;
240220
240402
  }
240221
240403
  const canonical = getCanonicalName(model);
@@ -259106,7 +259288,7 @@ var init_metadata = __esm(() => {
259106
259288
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
259107
259289
  WHITESPACE_REGEX = /\s+/;
259108
259290
  getVersionBase = memoize_default(() => {
259109
- const match = "1.4.466".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
259291
+ const match = "1.4.468".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
259110
259292
  return match ? match[0] : undefined;
259111
259293
  });
259112
259294
  buildEnvContext = memoize_default(async () => {
@@ -259145,7 +259327,7 @@ var init_metadata = __esm(() => {
259145
259327
  },
259146
259328
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
259147
259329
  isRayuAction: isEnvTruthy(process.env.RAYU_ACTION),
259148
- version: "1.4.466",
259330
+ version: "1.4.468",
259149
259331
  versionBase: getVersionBase(),
259150
259332
  buildTime: "",
259151
259333
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
@@ -291159,7 +291341,7 @@ function getTelemetryAttributes() {
291159
291341
  attributes["session.id"] = sessionId;
291160
291342
  }
291161
291343
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
291162
- attributes["app.version"] = "1.4.466";
291344
+ attributes["app.version"] = "1.4.468";
291163
291345
  }
291164
291346
  const oauthAccount = getOauthAccountInfo();
291165
291347
  if (oauthAccount) {
@@ -401516,7 +401698,7 @@ function getInstallationEnv() {
401516
401698
  return;
401517
401699
  }
401518
401700
  function getClaudeCodeVersion() {
401519
- return "1.4.466";
401701
+ return "1.4.468";
401520
401702
  }
401521
401703
  async function getInstalledVSCodeExtensionVersion(command) {
401522
401704
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -406754,7 +406936,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
406754
406936
  const client3 = new Client({
406755
406937
  name: "claude-code",
406756
406938
  title: "RAYU",
406757
- version: "1.4.466",
406939
+ version: "1.4.468",
406758
406940
  description: "Anthropic's agentic coding tool",
406759
406941
  websiteUrl: PRODUCT_URL
406760
406942
  }, {
@@ -407071,7 +407253,7 @@ var init_client7 = __esm(() => {
407071
407253
  const client3 = new Client({
407072
407254
  name: "claude-code",
407073
407255
  title: "RAYU",
407074
- version: "1.4.466",
407256
+ version: "1.4.468",
407075
407257
  description: "Anthropic's agentic coding tool",
407076
407258
  websiteUrl: PRODUCT_URL
407077
407259
  }, {
@@ -421890,7 +422072,7 @@ function computeFingerprint(messageText, version2) {
421890
422072
  }
421891
422073
  function computeFingerprintFromMessages(messages) {
421892
422074
  const firstMessageText = extractFirstMessageText(messages);
421893
- return computeFingerprint(firstMessageText, "1.4.466");
422075
+ return computeFingerprint(firstMessageText, "1.4.468");
421894
422076
  }
421895
422077
  var FINGERPRINT_SALT = "59cf53e54c78";
421896
422078
  var init_fingerprint = () => {};
@@ -421932,7 +422114,7 @@ async function sideQuery(opts) {
421932
422114
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
421933
422115
  }
421934
422116
  const messageText = extractFirstUserMessageText(messages);
421935
- const fingerprint = computeFingerprint(messageText, "1.4.466");
422117
+ const fingerprint = computeFingerprint(messageText, "1.4.468");
421936
422118
  const attributionHeader = getAttributionHeader(fingerprint);
421937
422119
  const systemBlocks = [
421938
422120
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -521268,9 +521450,9 @@ async function assertMinVersion() {
521268
521450
  if (false) {}
521269
521451
  try {
521270
521452
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
521271
- if (versionConfig.minVersion && lt("1.4.466", versionConfig.minVersion)) {
521453
+ if (versionConfig.minVersion && lt("1.4.468", versionConfig.minVersion)) {
521272
521454
  console.error(`
521273
- It looks like your version of RAYU (${"1.4.466"}) needs an update.
521455
+ It looks like your version of RAYU (${"1.4.468"}) needs an update.
521274
521456
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
521275
521457
 
521276
521458
  To update, please run:
@@ -521496,7 +521678,7 @@ async function installGlobalPackage(specificVersion) {
521496
521678
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
521497
521679
  logEvent("tengu_auto_updater_lock_contention", {
521498
521680
  pid: process.pid,
521499
- currentVersion: "1.4.466"
521681
+ currentVersion: "1.4.468"
521500
521682
  });
521501
521683
  return "in_progress";
521502
521684
  }
@@ -521505,7 +521687,7 @@ async function installGlobalPackage(specificVersion) {
521505
521687
  if (!env3.isRunningWithBun() && env3.isNpmFromWindowsPath()) {
521506
521688
  logError2(new Error("Windows NPM detected in WSL environment"));
521507
521689
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
521508
- currentVersion: "1.4.466"
521690
+ currentVersion: "1.4.468"
521509
521691
  });
521510
521692
  console.error(`
521511
521693
  Error: Windows NPM detected in WSL
@@ -522036,7 +522218,7 @@ function detectLinuxGlobPatternWarnings() {
522036
522218
  }
522037
522219
  async function getDoctorDiagnostic() {
522038
522220
  const installationType = await getCurrentInstallationType();
522039
- const version2 = typeof MACRO !== "undefined" ? "1.4.466" : "unknown";
522221
+ const version2 = typeof MACRO !== "undefined" ? "1.4.468" : "unknown";
522040
522222
  const installationPath = await getInstallationPath();
522041
522223
  const invokedBinary = getInvokedBinary();
522042
522224
  const multipleInstallations = await detectMultipleInstallations();
@@ -522830,8 +523012,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
522830
523012
  const maxVersion = await getMaxVersion();
522831
523013
  if (maxVersion && gt(version2, maxVersion)) {
522832
523014
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
522833
- if (gte("1.4.466", maxVersion)) {
522834
- logForDebugging(`Native installer: current version ${"1.4.466"} is already at or above maxVersion ${maxVersion}, skipping update`);
523015
+ if (gte("1.4.468", maxVersion)) {
523016
+ logForDebugging(`Native installer: current version ${"1.4.468"} is already at or above maxVersion ${maxVersion}, skipping update`);
522835
523017
  logEvent("tengu_native_update_skipped_max_version", {
522836
523018
  latency_ms: Date.now() - startTime2,
522837
523019
  max_version: maxVersion,
@@ -522842,7 +523024,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
522842
523024
  version2 = maxVersion;
522843
523025
  }
522844
523026
  }
522845
- if (!forceReinstall && version2 === "1.4.466" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
523027
+ if (!forceReinstall && version2 === "1.4.468" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
522846
523028
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
522847
523029
  logEvent("tengu_native_update_complete", {
522848
523030
  latency_ms: Date.now() - startTime2,
@@ -524038,7 +524220,7 @@ function buildPrimarySection() {
524038
524220
  });
524039
524221
  return [{
524040
524222
  label: "Version",
524041
- value: "1.4.466"
524223
+ value: "1.4.468"
524042
524224
  }, {
524043
524225
  label: "Session name",
524044
524226
  value: nameValue
@@ -527709,7 +527891,7 @@ function Config({
527709
527891
  }
527710
527892
  })
527711
527893
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime168.jsx(ChannelDowngradeDialog, {
527712
- currentVersion: "1.4.466",
527894
+ currentVersion: "1.4.468",
527713
527895
  onChoice: (choice) => {
527714
527896
  setShowSubmenu(null);
527715
527897
  setTabsHidden(false);
@@ -527721,7 +527903,7 @@ function Config({
527721
527903
  autoUpdatesChannel: "stable"
527722
527904
  };
527723
527905
  if (choice === "stay") {
527724
- newSettings.minimumVersion = "1.4.466";
527906
+ newSettings.minimumVersion = "1.4.468";
527725
527907
  }
527726
527908
  updateSettingsForSource("userSettings", newSettings);
527727
527909
  setSettingsData((prev_27) => ({
@@ -535781,7 +535963,7 @@ function HelpV2(t0) {
535781
535963
  let t6;
535782
535964
  if ($3[31] !== tabs) {
535783
535965
  t6 = /* @__PURE__ */ jsx_runtime195.jsx(Tabs, {
535784
- title: `Rayu-CLI v${"1.4.466"}`,
535966
+ title: `Rayu-CLI v${"1.4.468"}`,
535785
535967
  color: "professionalBlue",
535786
535968
  defaultTab: "general",
535787
535969
  children: tabs
@@ -555864,7 +556046,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
555864
556046
  }
555865
556047
  return [];
555866
556048
  }
555867
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.4.466") {
556049
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.4.468") {
555868
556050
  if (false) {}
555869
556051
  const cachedChangelog = await getStoredChangelog();
555870
556052
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -555877,7 +556059,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.4.466")
555877
556059
  releaseNotes
555878
556060
  };
555879
556061
  }
555880
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.4.466") {
556062
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.4.468") {
555881
556063
  if (false) {}
555882
556064
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
555883
556065
  return {
@@ -556005,7 +556187,7 @@ function getRecentActivitySync() {
556005
556187
  return cachedActivity;
556006
556188
  }
556007
556189
  function getLogoDisplayData() {
556008
- const version2 = process.env.DEMO_VERSION ?? "1.4.466";
556190
+ const version2 = process.env.DEMO_VERSION ?? "1.4.468";
556009
556191
  const serverUrl = getDirectConnectServerUrl();
556010
556192
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
556011
556193
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -557169,7 +557351,7 @@ function LogoV2() {
557169
557351
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
557170
557352
  t2 = () => {
557171
557353
  const currentConfig = getGlobalConfig();
557172
- if (currentConfig.lastReleaseNotesSeen === "1.4.466") {
557354
+ if (currentConfig.lastReleaseNotesSeen === "1.4.468") {
557173
557355
  return;
557174
557356
  }
557175
557357
  saveGlobalConfig(_temp327);
@@ -557647,7 +557829,7 @@ function LogoV2() {
557647
557829
  t24 = $3[61];
557648
557830
  }
557649
557831
  const _latestNpm = getCachedLatestNpmVersionSync();
557650
- const _updateFeeds = _latestNpm && gt(_latestNpm, "1.4.466") ? [createUpdateAvailableFeed("1.4.466", _latestNpm)] : [];
557832
+ const _updateFeeds = _latestNpm && gt(_latestNpm, "1.4.468") ? [createUpdateAvailableFeed("1.4.468", _latestNpm)] : [];
557651
557833
  const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_runtime236.jsx(FeedColumn, {
557652
557834
  feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
557653
557835
  maxWidth: rightWidth
@@ -557847,12 +558029,12 @@ function LogoV2() {
557847
558029
  return t41;
557848
558030
  }
557849
558031
  function _temp327(current) {
557850
- if (current.lastReleaseNotesSeen === "1.4.466") {
558032
+ if (current.lastReleaseNotesSeen === "1.4.468") {
557851
558033
  return current;
557852
558034
  }
557853
558035
  return {
557854
558036
  ...current,
557855
- lastReleaseNotesSeen: "1.4.466"
558037
+ lastReleaseNotesSeen: "1.4.468"
557856
558038
  };
557857
558039
  }
557858
558040
  function _temp241(s_0) {
@@ -582850,7 +583032,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
582850
583032
  smapsRollup,
582851
583033
  platform: process.platform,
582852
583034
  nodeVersion: process.version,
582853
- ccVersion: "1.4.466"
583035
+ ccVersion: "1.4.468"
582854
583036
  };
582855
583037
  }
582856
583038
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -583372,7 +583554,7 @@ var init_bridge_kick = __esm(() => {
583372
583554
  var call50 = async () => {
583373
583555
  return {
583374
583556
  type: "text",
583375
- value: "1.4.466"
583557
+ value: "1.4.468"
583376
583558
  };
583377
583559
  }, version2, version_default;
583378
583560
  var init_version = __esm(() => {
@@ -586365,6 +586547,7 @@ function RayuProviderSetup({
586365
586547
  const [baseURL, setBaseURL] = import_react178.useState("");
586366
586548
  const [model, setModel] = import_react178.useState("");
586367
586549
  const [apiKey, setApiKey] = import_react178.useState("");
586550
+ const [multiKeys, setMultiKeys] = import_react178.useState([]);
586368
586551
  const [cursor, setCursor] = import_react178.useState(0);
586369
586552
  const [region, setRegion] = import_react178.useState(DEFAULT_BEDROCK_REGION);
586370
586553
  const [bedrockModels, setBedrockModels] = import_react178.useState([]);
@@ -586795,6 +586978,44 @@ ${r2.output.slice(-200)}`);
586795
586978
  cancelled = true;
586796
586979
  };
586797
586980
  }, [phase, kiroStep]);
586981
+ import_react178.default.useEffect(() => {
586982
+ if (phase !== "ollamaCloudFetching")
586983
+ return;
586984
+ let cancelled = false;
586985
+ (async () => {
586986
+ const { fetchOllamaCloudModelContexts: fetchOllamaCloudModelContexts2, OLLAMA_CLOUD_BASE_URL: OLLAMA_CLOUD_BASE_URL2 } = await Promise.resolve().then(() => exports_ollamaCloud);
586987
+ const keys2 = (multiKeys.length ? multiKeys : [apiKey]).map((k2) => k2.trim()).filter(Boolean);
586988
+ const base2 = {
586989
+ id: preset?.id ?? "ollama-cloud",
586990
+ kind: "anthropic-compatible",
586991
+ apiKey: keys2[0],
586992
+ ...keys2.length > 1 ? { apiKeys: keys2 } : {},
586993
+ baseURL: (baseURL || preset?.baseURL || OLLAMA_CLOUD_BASE_URL2).trim()
586994
+ };
586995
+ upsertProvider(base2, true);
586996
+ const models = await fetchProviderModels(base2).catch(() => []);
586997
+ if (cancelled)
586998
+ return;
586999
+ const chat2 = models.filter(isLikelyChatModel);
587000
+ const list = chat2.length ? chat2 : models;
587001
+ const contexts = list.length ? await fetchOllamaCloudModelContexts2(base2.apiKey, base2.baseURL, list).catch(() => ({})) : {};
587002
+ if (cancelled)
587003
+ return;
587004
+ const preferred = list.find((m3) => /qwen3-coder/i.test(m3)) ?? list.find((m3) => /glm-4\.[67]|glm-5/i.test(m3)) ?? list.find((m3) => /gpt-oss/i.test(m3)) ?? list.find((m3) => /cloud/i.test(m3)) ?? list[0] ?? "gpt-oss:120b-cloud";
587005
+ upsertProvider({
587006
+ ...base2,
587007
+ ...list.length ? { fetchedModels: list } : {},
587008
+ ...Object.keys(contexts).length ? { modelContextWindows: contexts } : {},
587009
+ defaultModel: preferred
587010
+ }, true);
587011
+ if (cancelled)
587012
+ return;
587013
+ onDone();
587014
+ })();
587015
+ return () => {
587016
+ cancelled = true;
587017
+ };
587018
+ }, [phase]);
586798
587019
  if (phase === "pick") {
586799
587020
  const localIds = new Set(["ollama", "local"]);
586800
587021
  const pickOptions = [
@@ -587019,6 +587240,23 @@ ${r2.output.slice(-200)}`);
587019
587240
  ]
587020
587241
  });
587021
587242
  }
587243
+ if (phase === "ollamaCloudFetching") {
587244
+ return /* @__PURE__ */ jsx_runtime324.jsxs(ThemedBox_default, {
587245
+ flexDirection: "column",
587246
+ gap: 1,
587247
+ paddingLeft: 1,
587248
+ children: [
587249
+ /* @__PURE__ */ jsx_runtime324.jsx(ThemedText, {
587250
+ bold: true,
587251
+ children: "Fetching your Ollama Cloud models…"
587252
+ }),
587253
+ /* @__PURE__ */ jsx_runtime324.jsx(ThemedText, {
587254
+ dimColor: true,
587255
+ children: "Listing the models available to your ollama.com account and their context sizes."
587256
+ })
587257
+ ]
587258
+ });
587259
+ }
587022
587260
  if (phase === "kiroChoice") {
587023
587261
  return /* @__PURE__ */ jsx_runtime324.jsxs(ThemedBox_default, {
587024
587262
  flexDirection: "column",
@@ -587640,11 +587878,21 @@ ${r2.output.slice(-200)}`);
587640
587878
  providerLabel: preset.label,
587641
587879
  maxKeys: getMaxStoredApiKeys(),
587642
587880
  initialKeys: existing,
587643
- onDone: finishMultiKey,
587881
+ onDone: (keys2) => {
587882
+ const cleaned = keys2.map((k2) => k2.trim()).filter(Boolean);
587883
+ if (preset.id === "ollama-cloud") {
587884
+ setMultiKeys(cleaned);
587885
+ setApiKey(cleaned[0] ?? "");
587886
+ setPhase("ollamaCloudFetching");
587887
+ return;
587888
+ }
587889
+ finishMultiKey(cleaned);
587890
+ },
587644
587891
  onCancel: onDone
587645
587892
  });
587646
587893
  }
587647
587894
  const isBedrock = preset?.kind === "bedrock";
587895
+ const isOllamaCloud = preset?.id === "ollama-cloud";
587648
587896
  const showMultiKeyUpsell = supportsMultiApiKey(preset?.id);
587649
587897
  return /* @__PURE__ */ jsx_runtime324.jsxs(ThemedBox_default, {
587650
587898
  flexDirection: "column",
@@ -587657,7 +587905,7 @@ ${r2.output.slice(-200)}`);
587657
587905
  }),
587658
587906
  /* @__PURE__ */ jsx_runtime324.jsx(ThemedText, {
587659
587907
  dimColor: true,
587660
- children: isBedrock ? "Bedrock API key (bearer token). Stored locally in ~/.rayu/providers.json (0600)." : "Stored locally in ~/.rayu/providers.json (0600). Leave blank to skip."
587908
+ children: isBedrock ? "Bedrock API key (bearer token). Stored locally in ~/.rayu/providers.json (0600)." : isOllamaCloud ? "Ollama Cloud API key (ollama.com → Settings → Keys). Stored locally in ~/.rayu/providers.json (0600)." : "Stored locally in ~/.rayu/providers.json (0600). Leave blank to skip."
587661
587909
  }),
587662
587910
  showMultiKeyUpsell ? /* @__PURE__ */ jsx_runtime324.jsxs(ThemedText, {
587663
587911
  dimColor: true,
@@ -587670,9 +587918,9 @@ ${r2.output.slice(-200)}`);
587670
587918
  /* @__PURE__ */ jsx_runtime324.jsx(TextInput, {
587671
587919
  value: apiKey,
587672
587920
  onChange: setApiKey,
587673
- onSubmit: () => isBedrock ? setPhase("region") : finish(apiKey),
587921
+ onSubmit: () => isBedrock ? setPhase("region") : isOllamaCloud ? setPhase("ollamaCloudFetching") : finish(apiKey),
587674
587922
  mask: "*",
587675
- placeholder: isBedrock ? "ABSK..." : "sk-...",
587923
+ placeholder: isBedrock ? "ABSK..." : isOllamaCloud ? "your ollama.com API key" : "sk-...",
587676
587924
  columns: 80,
587677
587925
  cursorOffset: cursor,
587678
587926
  onChangeCursorOffset: setCursor
@@ -593564,7 +593812,7 @@ function generateHtmlReport(data, insights) {
593564
593812
  </html>`;
593565
593813
  }
593566
593814
  function buildExportData(data, insights, facets, remoteStats) {
593567
- const version3 = typeof MACRO !== "undefined" ? "1.4.466" : "unknown";
593815
+ const version3 = typeof MACRO !== "undefined" ? "1.4.468" : "unknown";
593568
593816
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
593569
593817
  const facets_summary = {
593570
593818
  total: facets.size,
@@ -597474,7 +597722,7 @@ var init_sessionStorage = __esm(() => {
597474
597722
  init_settings2();
597475
597723
  init_slowOperations();
597476
597724
  init_uuid();
597477
- VERSION6 = typeof MACRO !== "undefined" ? "1.4.466" : "unknown";
597725
+ VERSION6 = typeof MACRO !== "undefined" ? "1.4.468" : "unknown";
597478
597726
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
597479
597727
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
597480
597728
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -598692,7 +598940,7 @@ var init_filesystem = __esm(() => {
598692
598940
  });
598693
598941
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
598694
598942
  const nonce = randomBytes19(16).toString("hex");
598695
- return join153(getClaudeTempDir(), "bundled-skills", "1.4.466", nonce);
598943
+ return join153(getClaudeTempDir(), "bundled-skills", "1.4.468", nonce);
598696
598944
  });
598697
598945
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
598698
598946
  });
@@ -603799,15 +604047,16 @@ var init_worktree = __esm(() => {
603799
604047
  ];
603800
604048
  });
603801
604049
 
603802
- // src/cli/update.ts
603803
- var exports_update = {};
603804
- __export(exports_update, {
603805
- update: () => update
603806
- });
604050
+ // src/utils/npmExec.ts
603807
604051
  import { execFileSync as execFileSync3 } from "node:child_process";
603808
604052
  import { homedir as homedir35 } from "os";
603809
604053
  function execNpmSync(npmArgs, options) {
603810
604054
  if (IS_WINDOWS2) {
604055
+ for (const a2 of npmArgs) {
604056
+ if (a2.includes('"')) {
604057
+ throw new Error(`execNpmSync: refusing to quote an argument containing a double quote on Windows (unsafe): ${JSON.stringify(a2)}`);
604058
+ }
604059
+ }
603811
604060
  const commandStr = `npm ${npmArgs.map((a2) => `"${a2}"`).join(" ")}`;
603812
604061
  return execFileSync3(commandStr, [], {
603813
604062
  encoding: "utf8",
@@ -603824,8 +604073,44 @@ function execNpmSync(npmArgs, options) {
603824
604073
  stdio: options.stdio
603825
604074
  });
603826
604075
  }
604076
+ function describeNpmError(err2) {
604077
+ if (!(err2 instanceof Error))
604078
+ return String(err2);
604079
+ const anyErr = err2;
604080
+ const parts = [];
604081
+ if (anyErr.code)
604082
+ parts.push(`code: ${anyErr.code}`);
604083
+ const stderrText = typeof anyErr.stderr === "string" ? anyErr.stderr : Buffer.isBuffer(anyErr.stderr) ? anyErr.stderr.toString("utf8") : "";
604084
+ const trimmedStderr = stderrText.trim();
604085
+ if (trimmedStderr) {
604086
+ parts.push(trimmedStderr);
604087
+ } else if (err2.message) {
604088
+ parts.push(err2.message);
604089
+ }
604090
+ return parts.join(`
604091
+ `);
604092
+ }
604093
+ function isLikelyEacces(err2) {
604094
+ if (!(err2 instanceof Error))
604095
+ return false;
604096
+ const anyErr = err2;
604097
+ if (anyErr.code === "EACCES" || anyErr.code === "EPERM")
604098
+ return true;
604099
+ const stderrText = typeof anyErr.stderr === "string" ? anyErr.stderr : Buffer.isBuffer(anyErr.stderr) ? anyErr.stderr.toString("utf8") : "";
604100
+ return /EACCES|permission denied/i.test(stderrText) || /EACCES|permission denied/i.test(err2.message);
604101
+ }
604102
+ var IS_WINDOWS2;
604103
+ var init_npmExec = __esm(() => {
604104
+ IS_WINDOWS2 = process.platform === "win32";
604105
+ });
604106
+
604107
+ // src/cli/update.ts
604108
+ var exports_update = {};
604109
+ __export(exports_update, {
604110
+ update: () => update
604111
+ });
603827
604112
  async function update() {
603828
- writeToStdout(`Current version: ${"1.4.466"}
604113
+ writeToStdout(`Current version: ${"1.4.468"}
603829
604114
  `);
603830
604115
  const isBundled = isInBundledMode();
603831
604116
  if (isBundled) {
@@ -603840,10 +604125,15 @@ async function updateNpmPackage() {
603840
604125
  let latestVersion;
603841
604126
  try {
603842
604127
  latestVersion = execNpmSync(["view", `${"@rayu-dev/rayu-cli"}@latest`, "version", "--prefer-online"], { timeout: 15000, stdio: ["pipe", "pipe", "pipe"] }).trim();
603843
- } catch {
604128
+ } catch (err2) {
603844
604129
  process.stderr.write(source_default.red(`Failed to check for updates
603845
604130
  `));
603846
604131
  process.stderr.write(`Unable to reach npm registry. Check your network.
604132
+ `);
604133
+ const detail = describeNpmError(err2);
604134
+ if (detail)
604135
+ process.stderr.write(`
604136
+ ${detail}
603847
604137
  `);
603848
604138
  process.stderr.write(`
603849
604139
  Manual check: npm view ${"@rayu-dev/rayu-cli"} version
@@ -603851,40 +604141,69 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
603851
604141
  process.exit(1);
603852
604142
  return;
603853
604143
  }
603854
- if (latestVersion === "1.4.466") {
604144
+ if (latestVersion === "1.4.468") {
603855
604145
  writeToStdout(source_default.green(`
603856
- Rayu CLI is up to date (${"1.4.466"})
604146
+ Rayu CLI is up to date (${"1.4.468"})
603857
604147
  `));
603858
604148
  process.exit(0);
603859
604149
  }
603860
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.4.466"})
604150
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.4.468"})
603861
604151
  `);
603862
604152
  writeToStdout(`Installing update...
603863
604153
 
603864
604154
  `);
603865
604155
  try {
603866
604156
  execNpmSync(["install", "-g", `${"@rayu-dev/rayu-cli"}@latest`], { stdio: "inherit" });
603867
- } catch {
604157
+ } catch (err2) {
603868
604158
  process.stderr.write(source_default.red(`
603869
604159
  Failed to install update
603870
604160
  `));
604161
+ const detail = describeNpmError(err2);
604162
+ if (detail)
604163
+ process.stderr.write(`${detail}
604164
+ `);
603871
604165
  process.stderr.write(`
603872
604166
  Try manually:
603873
604167
  `);
603874
604168
  process.stderr.write(source_default.bold(` npm install -g ${"@rayu-dev/rayu-cli"}@latest
603875
604169
  `));
603876
- process.stderr.write(`Or with sudo if you have permission issues:
604170
+ if (isLikelyEacces(err2)) {
604171
+ process.stderr.write(`
604172
+ This looks like a permissions error on npm's global install
604173
+ ` + `directory. If Node was installed via nvm, Homebrew, Volta, or fnm,
604174
+ ` + `do NOT use sudo — it installs into a root-owned path that will
604175
+ ` + `conflict with your user-owned Node version. Instead fix npm's
604176
+ ` + `global prefix, e.g.:
604177
+ ` + ` mkdir -p ~/.npm-global
604178
+ ` + ` npm config set prefix ~/.npm-global
604179
+ ` + ` export PATH=~/.npm-global/bin:$PATH # add to your shell rc file
604180
+ ` + `Only use sudo if Node was installed system-wide (e.g. via apt/yum
604181
+ ` + `or the nodejs.org installer):
604182
+ ` + ` sudo npm install -g ${"@rayu-dev/rayu-cli"}@latest
603877
604183
  `);
603878
- process.stderr.write(source_default.bold(` sudo npm install -g ${"@rayu-dev/rayu-cli"}@latest
604184
+ } else {
604185
+ process.stderr.write(`Or with sudo if you have permission issues:
604186
+ `);
604187
+ process.stderr.write(source_default.bold(` sudo npm install -g ${"@rayu-dev/rayu-cli"}@latest
603879
604188
  `));
604189
+ }
603880
604190
  process.exit(1);
603881
604191
  return;
603882
604192
  }
603883
604193
  writeToStdout(source_default.green(`
603884
- Successfully updated from ${"1.4.466"} to ${latestVersion}
604194
+ Successfully updated to ${getInstalledVersion() ?? latestVersion}
603885
604195
  `));
603886
604196
  process.exit(0);
603887
604197
  }
604198
+ function getInstalledVersion() {
604199
+ try {
604200
+ const output = execNpmSync(["list", "-g", "@rayu-dev/rayu-cli", "--depth=0", "--json"], { timeout: 1e4, stdio: ["pipe", "pipe", "pipe"] });
604201
+ const parsed = JSON.parse(output);
604202
+ return parsed.dependencies?.["@rayu-dev/rayu-cli"]?.version ?? null;
604203
+ } catch {
604204
+ return null;
604205
+ }
604206
+ }
603888
604207
  async function updateNativeBinary() {
603889
604208
  writeToStdout(`Checking for updates...
603890
604209
  `);
@@ -603895,14 +604214,14 @@ async function updateNativeBinary() {
603895
604214
  } catch {
603896
604215
  latestVersion = "";
603897
604216
  }
603898
- if (latestVersion && latestVersion === "1.4.466") {
604217
+ if (latestVersion && latestVersion === "1.4.468") {
603899
604218
  writeToStdout(source_default.green(`
603900
- Rayu CLI is up to date (1.4.466)
604219
+ Rayu CLI is up to date (1.4.468)
603901
604220
  `));
603902
604221
  process.exit(0);
603903
604222
  }
603904
604223
  if (latestVersion) {
603905
- writeToStdout(`New version available: ${latestVersion} (current: 1.4.466)
604224
+ writeToStdout(`New version available: ${latestVersion} (current: 1.4.468)
603906
604225
  `);
603907
604226
  }
603908
604227
  writeToStdout(`Downloading and installing update...
@@ -603917,13 +604236,13 @@ Rayu CLI is up to date (1.4.466)
603917
604236
  return;
603918
604237
  }
603919
604238
  writeToStdout(source_default.green(`
603920
- Rayu CLI is up to date (1.4.466)
604239
+ Rayu CLI is up to date (1.4.468)
603921
604240
  `));
603922
604241
  process.exit(0);
603923
604242
  }
603924
604243
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
603925
604244
  writeToStdout(source_default.green(`
603926
- Successfully updated from 1.4.466 to ${updatedTo}
604245
+ Successfully updated from 1.4.468 to ${updatedTo}
603927
604246
  `));
603928
604247
  writeToStdout(`Restart your terminal to use the new version.
603929
604248
  `);
@@ -603942,10 +604261,9 @@ Try manually:
603942
604261
  process.exit(1);
603943
604262
  }
603944
604263
  }
603945
- var IS_WINDOWS2;
603946
604264
  var init_update = __esm(() => {
603947
604265
  init_source2();
603948
- IS_WINDOWS2 = process.platform === "win32";
604266
+ init_npmExec();
603949
604267
  });
603950
604268
 
603951
604269
  // src/cli/uninstall.ts
@@ -603953,26 +604271,11 @@ var exports_uninstall = {};
603953
604271
  __export(exports_uninstall, {
603954
604272
  uninstall: () => uninstall
603955
604273
  });
603956
- import { execFileSync as execFileSync4 } from "node:child_process";
603957
604274
  import { rm as rm17 } from "node:fs/promises";
603958
604275
  import { existsSync as existsSync28 } from "node:fs";
603959
604276
  import { createInterface as createInterface3 } from "node:readline";
603960
- import { homedir as homedir36 } from "os";
603961
604277
  function execNpmUninstallSync() {
603962
- if (IS_WINDOWS3) {
603963
- execFileSync4(`npm uninstall -g "${"@rayu-dev/rayu-cli"}"`, [], {
603964
- encoding: "utf8",
603965
- cwd: homedir36(),
603966
- stdio: "inherit",
603967
- shell: true
603968
- });
603969
- return;
603970
- }
603971
- execFileSync4("npm", ["uninstall", "-g", "@rayu-dev/rayu-cli"], {
603972
- encoding: "utf8",
603973
- cwd: homedir36(),
603974
- stdio: "inherit"
603975
- });
604278
+ execNpmSync(["uninstall", "-g", "@rayu-dev/rayu-cli"], { stdio: "inherit" });
603976
604279
  }
603977
604280
  async function confirm(question, defaultYes) {
603978
604281
  if (!process.stdin.isTTY)
@@ -604004,14 +604307,14 @@ async function removeDataDir(dir) {
604004
604307
  async function uninstall(args = []) {
604005
604308
  const yes = args.includes("--yes") || args.includes("-y");
604006
604309
  const keepData = args.includes("--keep-data");
604007
- writeToStdout(`Uninstalling Rayu CLI (${"1.4.466"})...
604310
+ writeToStdout(`Uninstalling Rayu CLI (${"1.4.468"})...
604008
604311
  `);
604009
604312
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
604010
604313
 
604011
604314
  `);
604012
604315
  try {
604013
604316
  execNpmUninstallSync();
604014
- } catch {
604317
+ } catch (err2) {
604015
604318
  process.stderr.write(source_default.red(`
604016
604319
  Failed to uninstall ${"@rayu-dev/rayu-cli"}
604017
604320
  `));
@@ -604020,15 +604323,25 @@ Try running manually:
604020
604323
  `);
604021
604324
  process.stderr.write(source_default.bold(` npm uninstall -g ${"@rayu-dev/rayu-cli"}
604022
604325
  `));
604023
- process.stderr.write(`Or with sudo if you installed with elevated permissions:
604326
+ if (isLikelyEacces(err2)) {
604327
+ process.stderr.write(`
604328
+ This looks like a permissions error on npm's global install
604329
+ ` + `directory. If Node was installed via nvm, Homebrew, Volta, or fnm,
604330
+ ` + `do NOT use sudo. Only use sudo if Node was installed system-wide
604331
+ ` + `(e.g. via apt/yum or the nodejs.org installer):
604332
+ ` + ` sudo npm uninstall -g ${"@rayu-dev/rayu-cli"}
604024
604333
  `);
604025
- process.stderr.write(source_default.bold(` sudo npm uninstall -g ${"@rayu-dev/rayu-cli"}
604334
+ } else {
604335
+ process.stderr.write(`Or with sudo if you installed with elevated permissions:
604336
+ `);
604337
+ process.stderr.write(source_default.bold(` sudo npm uninstall -g ${"@rayu-dev/rayu-cli"}
604026
604338
  `));
604339
+ }
604027
604340
  process.exit(1);
604028
604341
  return;
604029
604342
  }
604030
604343
  writeToStdout(source_default.green(`
604031
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.4.466"}
604344
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.4.468"}
604032
604345
  `));
604033
604346
  const configDir = getRayuConfigHomeDir();
604034
604347
  const dataExists = existsSync28(configDir);
@@ -604063,11 +604376,10 @@ Thanks for using Rayu CLI!
604063
604376
  `);
604064
604377
  process.exit(0);
604065
604378
  }
604066
- var IS_WINDOWS3;
604067
604379
  var init_uninstall = __esm(() => {
604068
604380
  init_source2();
604069
604381
  init_envUtils();
604070
- IS_WINDOWS3 = process.platform === "win32";
604382
+ init_npmExec();
604071
604383
  });
604072
604384
 
604073
604385
  // src/utils/firstRun.ts
@@ -604112,7 +604424,7 @@ function showFirstRunWelcome() {
604112
604424
  `);
604113
604425
  try {
604114
604426
  mkdirSync16(getRayuConfigHomeDir(), { recursive: true });
604115
- writeFileSync18(markerPath(), "1.4.466", "utf8");
604427
+ writeFileSync18(markerPath(), "1.4.468", "utf8");
604116
604428
  } catch {}
604117
604429
  }
604118
604430
  var init_firstRun = __esm(() => {
@@ -620298,7 +620610,7 @@ async function initializeBetaTracing(resource) {
620298
620610
  });
620299
620611
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
620300
620612
  setLoggerProvider(loggerProvider);
620301
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.4.466");
620613
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.4.468");
620302
620614
  setEventLogger(eventLogger);
620303
620615
  process.on("beforeExit", async () => {
620304
620616
  await loggerProvider?.forceFlush();
@@ -620338,7 +620650,7 @@ async function initializeTelemetry() {
620338
620650
  const platform4 = getPlatform();
620339
620651
  const baseAttributes = {
620340
620652
  [import_semantic_conventions.ATTR_SERVICE_NAME]: "claude-code",
620341
- [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.4.466"
620653
+ [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.4.468"
620342
620654
  };
620343
620655
  if (platform4 === "wsl") {
620344
620656
  const wslVersion = getWslVersion();
@@ -620383,7 +620695,7 @@ async function initializeTelemetry() {
620383
620695
  } catch {}
620384
620696
  };
620385
620697
  registerCleanup(shutdownTelemetry2);
620386
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.4.466");
620698
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.4.468");
620387
620699
  }
620388
620700
  const meterProvider = new import_sdk_metrics2.MeterProvider({
620389
620701
  resource,
@@ -620403,7 +620715,7 @@ async function initializeTelemetry() {
620403
620715
  });
620404
620716
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
620405
620717
  setLoggerProvider(loggerProvider);
620406
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.4.466");
620718
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.4.468");
620407
620719
  setEventLogger(eventLogger);
620408
620720
  logForDebugging("[3P telemetry] Event logger set successfully");
620409
620721
  process.on("beforeExit", async () => {
@@ -620465,7 +620777,7 @@ Current timeout: ${timeoutMs}ms
620465
620777
  }
620466
620778
  };
620467
620779
  registerCleanup(shutdownTelemetry);
620468
- return meterProvider.getMeter("com.anthropic.claude_code", "1.4.466");
620780
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.4.468");
620469
620781
  }
620470
620782
  async function flushTelemetry() {
620471
620783
  const meterProvider = getMeterProvider();
@@ -621967,7 +622279,7 @@ function buildSystemInitMessage(inputs) {
621967
622279
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
621968
622280
  apiKeySource: getAnthropicApiKeyWithSource().source,
621969
622281
  betas: getSdkBetas(),
621970
- claude_code_version: "1.4.466",
622282
+ claude_code_version: "1.4.468",
621971
622283
  output_style: outputStyle2,
621972
622284
  agents: inputs.agents.map((agent) => agent.agentType),
621973
622285
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -629690,7 +630002,7 @@ var init_ShowInIDEPrompt = __esm(() => {
629690
630002
  });
629691
630003
 
629692
630004
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
629693
- import { homedir as homedir37 } from "os";
630005
+ import { homedir as homedir36 } from "os";
629694
630006
  import { basename as basename52, join as join158, sep as sep40 } from "path";
629695
630007
  function isInRayuFolder(filePath) {
629696
630008
  const absolutePath = expandPath(filePath);
@@ -629701,7 +630013,7 @@ function isInRayuFolder(filePath) {
629701
630013
  }
629702
630014
  function isInGlobalRayuFolder(filePath) {
629703
630015
  const absolutePath = expandPath(filePath);
629704
- const globalRayuFolderPath = join158(homedir37(), ".rayu");
630016
+ const globalRayuFolderPath = join158(homedir36(), ".rayu");
629705
630017
  const normalizedAbsolutePath = normalizeCaseForComparison2(absolutePath);
629706
630018
  const normalizedGlobalRayuFolderPath = normalizeCaseForComparison2(globalRayuFolderPath);
629707
630019
  return normalizedAbsolutePath.startsWith(normalizedGlobalRayuFolderPath + sep40.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalRayuFolderPath + "/");
@@ -638298,7 +638610,7 @@ var init_useVoiceEnabled = __esm(() => {
638298
638610
  function getSemverPart(version3) {
638299
638611
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
638300
638612
  }
638301
- function useUpdateNotification(updatedVersion, initialVersion = "1.4.466") {
638613
+ function useUpdateNotification(updatedVersion, initialVersion = "1.4.468") {
638302
638614
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react216.useState(() => getSemverPart(initialVersion));
638303
638615
  if (!updatedVersion) {
638304
638616
  return null;
@@ -638338,7 +638650,7 @@ function AutoUpdater({
638338
638650
  return;
638339
638651
  }
638340
638652
  if (false) {}
638341
- const currentVersion = "1.4.466";
638653
+ const currentVersion = "1.4.468";
638342
638654
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
638343
638655
  let latestVersion = await getLatestVersion(channel2);
638344
638656
  const isDisabled = isAutoUpdaterDisabled();
@@ -638551,12 +638863,12 @@ function NativeAutoUpdater({
638551
638863
  logEvent("tengu_native_auto_updater_start", {});
638552
638864
  try {
638553
638865
  const maxVersion = await getMaxVersion();
638554
- if (maxVersion && gt("1.4.466", maxVersion)) {
638866
+ if (maxVersion && gt("1.4.468", maxVersion)) {
638555
638867
  const msg = await getMaxVersionMessage();
638556
638868
  setMaxVersionIssue(msg ?? "affects your version");
638557
638869
  }
638558
638870
  const result = await installLatest(channel2);
638559
- const currentVersion = "1.4.466";
638871
+ const currentVersion = "1.4.468";
638560
638872
  const latencyMs = Date.now() - startTime2;
638561
638873
  if (result.lockFailed) {
638562
638874
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -638693,17 +639005,17 @@ function PackageManagerAutoUpdater(t0) {
638693
639005
  const maxVersion = await getMaxVersion();
638694
639006
  if (maxVersion && latest && gt(latest, maxVersion)) {
638695
639007
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
638696
- if (gte("1.4.466", maxVersion)) {
638697
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.4.466"} is already at or above maxVersion ${maxVersion}, skipping update`);
639008
+ if (gte("1.4.468", maxVersion)) {
639009
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.4.468"} is already at or above maxVersion ${maxVersion}, skipping update`);
638698
639010
  setUpdateAvailable(false);
638699
639011
  return;
638700
639012
  }
638701
639013
  latest = maxVersion;
638702
639014
  }
638703
- const hasUpdate = latest && !gte("1.4.466", latest) && !shouldSkipVersion(latest);
639015
+ const hasUpdate = latest && !gte("1.4.468", latest) && !shouldSkipVersion(latest);
638704
639016
  setUpdateAvailable(!!hasUpdate);
638705
639017
  if (hasUpdate) {
638706
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.4.466"} -> ${latest}`);
639018
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.4.468"} -> ${latest}`);
638707
639019
  }
638708
639020
  };
638709
639021
  $3[0] = t1;
@@ -638737,7 +639049,7 @@ function PackageManagerAutoUpdater(t0) {
638737
639049
  wrap: "truncate",
638738
639050
  children: [
638739
639051
  "currentVersion: ",
638740
- "1.4.466"
639052
+ "1.4.468"
638741
639053
  ]
638742
639054
  });
638743
639055
  $3[3] = verbose;
@@ -646901,7 +647213,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
646901
647213
  project_dir: getOriginalCwd(),
646902
647214
  added_dirs: addedDirs
646903
647215
  },
646904
- version: "1.4.466",
647216
+ version: "1.4.468",
646905
647217
  output_style: {
646906
647218
  name: outputStyleName
646907
647219
  },
@@ -649080,7 +649392,7 @@ var init_user = __esm(() => {
649080
649392
  deviceId,
649081
649393
  sessionId: getSessionId(),
649082
649394
  email: getEmail(),
649083
- appVersion: "1.4.466",
649395
+ appVersion: "1.4.468",
649084
649396
  platform: getHostPlatformForAnalytics(),
649085
649397
  organizationUuid,
649086
649398
  accountUuid,
@@ -658519,7 +658831,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
658519
658831
  } catch {}
658520
658832
  const data = {
658521
658833
  trigger,
658522
- version: "1.4.466",
658834
+ version: "1.4.468",
658523
658835
  platform: process.platform,
658524
658836
  transcript,
658525
658837
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -670486,7 +670798,7 @@ function WelcomeV2() {
670486
670798
  dimColor: true,
670487
670799
  children: [
670488
670800
  "v",
670489
- "1.4.466"
670801
+ "1.4.468"
670490
670802
  ]
670491
670803
  })
670492
670804
  ]
@@ -671025,7 +671337,7 @@ var exports_TrustDialog = {};
671025
671337
  __export(exports_TrustDialog, {
671026
671338
  TrustDialog: () => TrustDialog
671027
671339
  });
671028
- import { homedir as homedir38 } from "os";
671340
+ import { homedir as homedir37 } from "os";
671029
671341
  function TrustDialog(t0) {
671030
671342
  const $3 = import_compiler_runtime346.c(33);
671031
671343
  const {
@@ -671136,7 +671448,7 @@ function TrustDialog(t0) {
671136
671448
  let t13;
671137
671449
  if ($3[13] !== hasAnyBashExecution) {
671138
671450
  t12 = () => {
671139
- const isHomeDir = homedir38() === getCwd();
671451
+ const isHomeDir = homedir37() === getCwd();
671140
671452
  logEvent("tengu_trust_dialog_shown", {
671141
671453
  isHomeDir,
671142
671454
  hasMcpServers,
@@ -671165,7 +671477,7 @@ function TrustDialog(t0) {
671165
671477
  gracefulShutdownSync(1);
671166
671478
  return;
671167
671479
  }
671168
- const isHomeDir_0 = homedir38() === getCwd();
671480
+ const isHomeDir_0 = homedir37() === getCwd();
671169
671481
  logEvent("tengu_trust_dialog_accept", {
671170
671482
  isHomeDir: isHomeDir_0,
671171
671483
  hasMcpServers,
@@ -671493,7 +671805,7 @@ function completeOnboarding() {
671493
671805
  saveGlobalConfig((current) => ({
671494
671806
  ...current,
671495
671807
  hasCompletedOnboarding: true,
671496
- lastOnboardingVersion: "1.4.466"
671808
+ lastOnboardingVersion: "1.4.468"
671497
671809
  }));
671498
671810
  }
671499
671811
  function showDialog(root2, renderer) {
@@ -676426,7 +676738,7 @@ function appendToLog(path29, message) {
676426
676738
  cwd: getFsImplementation().cwd(),
676427
676739
  userType: "external",
676428
676740
  sessionId: getSessionId(),
676429
- version: "1.4.466"
676741
+ version: "1.4.468"
676430
676742
  };
676431
676743
  getLogWriter(path29).write(messageWithTimestamp);
676432
676744
  }
@@ -676716,7 +677028,7 @@ var init_sessionMemory = __esm(() => {
676716
677028
 
676717
677029
  // src/utils/iTermBackup.ts
676718
677030
  import { copyFile as copyFile12, stat as stat47 } from "fs/promises";
676719
- import { homedir as homedir39 } from "os";
677031
+ import { homedir as homedir38 } from "os";
676720
677032
  import { join as join167 } from "path";
676721
677033
  function markITerm2SetupComplete() {
676722
677034
  saveGlobalConfig((current) => ({
@@ -676732,7 +677044,7 @@ function getIterm2RecoveryInfo() {
676732
677044
  };
676733
677045
  }
676734
677046
  function getITerm2PlistPath() {
676735
- return join167(homedir39(), "Library", "Preferences", "com.googlecode.iterm2.plist");
677047
+ return join167(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
676736
677048
  }
676737
677049
  async function checkAndRestoreITerm2Backup() {
676738
677050
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -680531,8 +680843,8 @@ async function getEnvLessBridgeConfig() {
680531
680843
  }
680532
680844
  async function checkEnvLessBridgeMinVersion() {
680533
680845
  const cfg = await getEnvLessBridgeConfig();
680534
- if (cfg.min_version && lt("1.4.466", cfg.min_version)) {
680535
- return `Your version of RAYU (${"1.4.466"}) is too old for Remote Control.
680846
+ if (cfg.min_version && lt("1.4.468", cfg.min_version)) {
680847
+ return `Your version of RAYU (${"1.4.468"}) is too old for Remote Control.
680536
680848
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
680537
680849
  }
680538
680850
  return null;
@@ -681005,7 +681317,7 @@ async function initBridgeCore(params) {
681005
681317
  const rawApi = createBridgeApiClient({
681006
681318
  baseUrl,
681007
681319
  getAccessToken,
681008
- runnerVersion: "1.4.466",
681320
+ runnerVersion: "1.4.468",
681009
681321
  onDebug: logForDebugging,
681010
681322
  onAuth401,
681011
681323
  getTrustedDeviceToken
@@ -686360,7 +686672,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
686360
686672
  setCwd(cwd3);
686361
686673
  const server = new Server({
686362
686674
  name: "claude/tengu",
686363
- version: "1.4.466"
686675
+ version: "1.4.468"
686364
686676
  }, {
686365
686677
  capabilities: {
686366
686678
  tools: {}
@@ -687341,11 +687653,11 @@ var exports_install = {};
687341
687653
  __export(exports_install, {
687342
687654
  install: () => install
687343
687655
  });
687344
- import { homedir as homedir40 } from "node:os";
687656
+ import { homedir as homedir39 } from "node:os";
687345
687657
  import { join as join171 } from "node:path";
687346
687658
  function getInstallationPath2() {
687347
687659
  const isWindows2 = env3.platform === "win32";
687348
- const homeDir = homedir40();
687660
+ const homeDir = homedir39();
687349
687661
  if (isWindows2) {
687350
687662
  const windowsPath = join171(homeDir, ".local", "bin", "claude.exe");
687351
687663
  return windowsPath.replace(/\//g, "\\");
@@ -688886,7 +689198,7 @@ ${customInstructions}` : customInstructions;
688886
689198
  }
688887
689199
  }
688888
689200
  logForDiagnosticsNoPII("info", "started", {
688889
- version: "1.4.466",
689201
+ version: "1.4.468",
688890
689202
  is_native_binary: isInBundledMode()
688891
689203
  });
688892
689204
  registerCleanup(async () => {
@@ -689605,7 +689917,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
689605
689917
  pendingHookMessages
689606
689918
  }, renderAndRun);
689607
689919
  }
689608
- }).version(`1.4.466 (${PRODUCT_NAME})`, "-v, --version", "Output the version number");
689920
+ }).version(`1.4.468 (${PRODUCT_NAME})`, "-v, --version", "Output the version number");
689609
689921
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
689610
689922
  program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
689611
689923
  if (canUserConfigureAdvisor()) {
@@ -690065,7 +690377,7 @@ if (false) {}
690065
690377
  async function main2() {
690066
690378
  const args = process.argv.slice(2);
690067
690379
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
690068
- console.log(`${"1.4.466"} (Rayu-CLI)`);
690380
+ console.log(`${"1.4.468"} (Rayu-CLI)`);
690069
690381
  return;
690070
690382
  }
690071
690383
  if (!isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)) {