@rayu-dev/rayu-cli 1.3.427 → 1.3.428

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/rayu.js +316 -135
  2. package/package.json +1 -1
package/dist/rayu.js CHANGED
@@ -35755,10 +35755,12 @@ var exports_rayuProviders = {};
35755
35755
  __export(exports_rayuProviders, {
35756
35756
  vertexHost: () => vertexHost,
35757
35757
  vertexBaseURL: () => vertexBaseURL,
35758
+ ollamaBaseURL: () => ollamaBaseURL,
35758
35759
  migrateEnvKeysToConfig: () => migrateEnvKeysToConfig,
35759
35760
  bedrockBaseURL: () => bedrockBaseURL,
35760
35761
  VERTEX_REGIONS: () => VERTEX_REGIONS,
35761
35762
  PROVIDER_PRESETS: () => PROVIDER_PRESETS,
35763
+ OLLAMA_DEFAULT_BASE_URL: () => OLLAMA_DEFAULT_BASE_URL,
35762
35764
  GEMINI_VERTEX_PROVIDER_ID: () => GEMINI_VERTEX_PROVIDER_ID,
35763
35765
  DEFAULT_VERTEX_REGION: () => DEFAULT_VERTEX_REGION,
35764
35766
  DEFAULT_BEDROCK_REGION: () => DEFAULT_BEDROCK_REGION,
@@ -35777,6 +35779,19 @@ function vertexBaseURL(project, region) {
35777
35779
  const p = project.trim();
35778
35780
  return `https://${vertexHost(r2)}/v1beta1/projects/${p}/locations/${r2}/endpoints/openapi`;
35779
35781
  }
35782
+ function ollamaBaseURL() {
35783
+ let raw = (process.env.OLLAMA_HOST || "").trim();
35784
+ if (!raw)
35785
+ return OLLAMA_DEFAULT_BASE_URL;
35786
+ if (/^\d+$/.test(raw))
35787
+ raw = `localhost:${raw}`;
35788
+ if (!/^https?:\/\//i.test(raw))
35789
+ raw = `http://${raw}`;
35790
+ raw = raw.replace(/\/+$/, "");
35791
+ if (!/\/v1(\/.*)?$/.test(raw))
35792
+ raw = `${raw}/v1`;
35793
+ return raw;
35794
+ }
35780
35795
  function migrateEnvKeysToConfig() {
35781
35796
  loadDotEnv();
35782
35797
  const cfg = loadRayuConfig();
@@ -35833,7 +35848,7 @@ function migrateEnvKeysToConfig() {
35833
35848
  saveRayuConfig(cfg);
35834
35849
  }
35835
35850
  }
35836
- var DEFAULT_BEDROCK_REGION = "us-east-1", BEDROCK_REGIONS, GEMINI_VERTEX_PROVIDER_ID = "gemini-vertex", DEFAULT_VERTEX_REGION = "global", VERTEX_REGIONS, PROVIDER_PRESETS;
35851
+ var DEFAULT_BEDROCK_REGION = "us-east-1", BEDROCK_REGIONS, GEMINI_VERTEX_PROVIDER_ID = "gemini-vertex", DEFAULT_VERTEX_REGION = "global", VERTEX_REGIONS, OLLAMA_DEFAULT_BASE_URL = "http://localhost:11434/v1", PROVIDER_PRESETS;
35837
35852
  var init_rayuProviders = __esm(() => {
35838
35853
  init_rayuConfig();
35839
35854
  init_envUtils();
@@ -36019,6 +36034,12 @@ var init_rayuProviders = __esm(() => {
36019
36034
  kind: "bedrock",
36020
36035
  bedrockApi: "anthropic"
36021
36036
  },
36037
+ {
36038
+ id: "ollama",
36039
+ label: "Ollama (local · auto-detect)",
36040
+ kind: "openai-compatible",
36041
+ baseURL: OLLAMA_DEFAULT_BASE_URL
36042
+ },
36022
36043
  {
36023
36044
  id: "local",
36024
36045
  label: "Local / custom OpenAI-compatible endpoint",
@@ -148070,7 +148091,7 @@ var init_auth = __esm(() => {
148070
148091
 
148071
148092
  // src/utils/userAgent.ts
148072
148093
  function getRayuUserAgent() {
148073
- return `rayu/${"1.3.427"}`;
148094
+ return `rayu/${"1.3.428"}`;
148074
148095
  }
148075
148096
  var getClaudeCodeUserAgent;
148076
148097
  var init_userAgent = __esm(() => {
@@ -148096,7 +148117,7 @@ function getUserAgent() {
148096
148117
  const clientApp = process.env.RAYU_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}` : "";
148097
148118
  const workload = getWorkload();
148098
148119
  const workloadSuffix = workload ? `, workload/${workload}` : "";
148099
- return `rayu/${"1.3.427"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148120
+ return `rayu/${"1.3.428"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148100
148121
  }
148101
148122
  function getMCPUserAgent() {
148102
148123
  const parts = [];
@@ -148110,7 +148131,7 @@ function getMCPUserAgent() {
148110
148131
  parts.push(`client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}`);
148111
148132
  }
148112
148133
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
148113
- return `rayu/${"1.3.427"}${suffix}`;
148134
+ return `rayu/${"1.3.428"}${suffix}`;
148114
148135
  }
148115
148136
  function getWebFetchUserAgent() {
148116
148137
  return `Rayu-User (${getRayuUserAgent()})`;
@@ -148233,7 +148254,7 @@ var init_user = __esm(() => {
148233
148254
  deviceId,
148234
148255
  sessionId: getSessionId(),
148235
148256
  email: getEmail(),
148236
- appVersion: "1.3.427",
148257
+ appVersion: "1.3.428",
148237
148258
  platform: getHostPlatformForAnalytics(),
148238
148259
  organizationUuid,
148239
148260
  accountUuid,
@@ -164309,6 +164330,54 @@ var init_openai = __esm(() => {
164309
164330
  init_azure();
164310
164331
  });
164311
164332
 
164333
+ // src/bridge/sessionIdCompat.ts
164334
+ var exports_sessionIdCompat = {};
164335
+ __export(exports_sessionIdCompat, {
164336
+ toInfraSessionId: () => toInfraSessionId,
164337
+ toCompatSessionId: () => toCompatSessionId,
164338
+ setCseShimGate: () => setCseShimGate
164339
+ });
164340
+ function setCseShimGate(gate) {
164341
+ _isCseShimEnabled = gate;
164342
+ }
164343
+ function toCompatSessionId(id) {
164344
+ if (!id.startsWith("cse_"))
164345
+ return id;
164346
+ if (_isCseShimEnabled && !_isCseShimEnabled())
164347
+ return id;
164348
+ return "session_" + id.slice("cse_".length);
164349
+ }
164350
+ function toInfraSessionId(id) {
164351
+ if (!id.startsWith("session_"))
164352
+ return id;
164353
+ return "cse_" + id.slice("session_".length);
164354
+ }
164355
+ var _isCseShimEnabled;
164356
+
164357
+ // src/constants/product.ts
164358
+ function isRemoteSessionStaging(sessionId, ingressUrl) {
164359
+ return sessionId?.includes("_staging_") === true || ingressUrl?.includes("staging") === true;
164360
+ }
164361
+ function isRemoteSessionLocal(sessionId, ingressUrl) {
164362
+ return sessionId?.includes("_local_") === true || ingressUrl?.includes("localhost") === true;
164363
+ }
164364
+ function getClaudeAiBaseUrl(sessionId, ingressUrl) {
164365
+ if (isRemoteSessionLocal(sessionId, ingressUrl)) {
164366
+ return CLAUDE_AI_LOCAL_BASE_URL;
164367
+ }
164368
+ if (isRemoteSessionStaging(sessionId, ingressUrl)) {
164369
+ return CLAUDE_AI_STAGING_BASE_URL;
164370
+ }
164371
+ return CLAUDE_AI_BASE_URL;
164372
+ }
164373
+ function getRemoteSessionUrl(sessionId, ingressUrl) {
164374
+ const { toCompatSessionId: toCompatSessionId2 } = __toCommonJS(exports_sessionIdCompat);
164375
+ const compatId = toCompatSessionId2(sessionId);
164376
+ const baseUrl = getClaudeAiBaseUrl(compatId, ingressUrl);
164377
+ return `${baseUrl}/code/${compatId}`;
164378
+ }
164379
+ var PRODUCT_NAME = "Rayu-CLI", PRODUCT_URL = "https://github.com/rayu-cli/rayu-cli", CLAUDE_AI_BASE_URL = "https://claude.ai", CLAUDE_AI_STAGING_BASE_URL = "https://claude-ai.staging.ant.dev", CLAUDE_AI_LOCAL_BASE_URL = "http://localhost:4000";
164380
+
164312
164381
  // src/services/api/openaiAdapter.ts
164313
164382
  var exports_openaiAdapter = {};
164314
164383
  __export(exports_openaiAdapter, {
@@ -164317,6 +164386,7 @@ __export(exports_openaiAdapter, {
164317
164386
  toBetaMessage: () => toBetaMessage,
164318
164387
  splitInlineThink: () => splitInlineThink,
164319
164388
  processInlineThink: () => processInlineThink,
164389
+ isToolUnsupported: () => isToolUnsupported,
164320
164390
  isReasoningModel: () => isReasoningModel,
164321
164391
  initialInlineThinkState: () => initialInlineThinkState,
164322
164392
  extractReasoningText: () => extractReasoningText,
@@ -164517,8 +164587,8 @@ function buildOpenAIRequest(params, options = {}) {
164517
164587
  req.max_tokens = params.max_tokens;
164518
164588
  }
164519
164589
  }
164520
- if (typeof params.temperature === "number" && !isReasoningModel(params.model)) {
164521
- req.temperature = params.temperature;
164590
+ if (!isReasoningModel(params.model)) {
164591
+ req.temperature = typeof params.temperature === "number" ? params.temperature : 1;
164522
164592
  }
164523
164593
  const tools = translateTools(params.tools);
164524
164594
  if (tools) {
@@ -164959,6 +165029,16 @@ function withoutTools(req) {
164959
165029
  const { tools: _tools, tool_choice: _tc, ...rest } = req;
164960
165030
  return rest;
164961
165031
  }
165032
+ function isToolUnsupported(e2, req) {
165033
+ if (e2?.status !== 400 || !req.tools)
165034
+ return false;
165035
+ const msg = String(e2?.message ?? "");
165036
+ return /does(n'?t| not) support tool|tool[\s_-]*(calling|use|s)\b[^.]*\bnot\s+support|function[\s_-]*call(ing)?\b[^.]*\bnot\s+support|no support for tool/i.test(msg);
165037
+ }
165038
+ function toolUnsupportedError(e2, model) {
165039
+ const message = `Model "${model}" does not support tools (function calling), which ${PRODUCT_NAME} needs ` + `to read/edit files, run commands, and search. Small local LLMs often lack tool support. ` + `Pick a tool-capable model with /model (e.g. qwen2.5-coder, llama3.1, qwen3, mistral-nemo), ` + `pull one with "ollama pull qwen2.5-coder", or use a hosted/Ollama Cloud model.`;
165040
+ return import_sdk2.APIError.generate(400, e2?.error, message, e2?.headers);
165041
+ }
164962
165042
  function normalizeError(e2) {
164963
165043
  if (e2 instanceof APIConnectionError) {
164964
165044
  return new import_sdk2.APIConnectionError({
@@ -165033,6 +165113,10 @@ function createOpenAICompatibleClientUncached(config2) {
165033
165113
  throw normalizeError(e22);
165034
165114
  }
165035
165115
  }
165116
+ if (isToolUnsupported(e2, request)) {
165117
+ reportIssue("openai_adapter.tool_unsupported", "model does not support tool calling", { model, status: 400 });
165118
+ throw toolUnsupportedError(e2, model);
165119
+ }
165036
165120
  reportIssue("openai_adapter.request_failed", "OpenAI-compatible request failed", { model, status: e2?.status, error: e2 instanceof Error ? e2.message : String(e2) });
165037
165121
  throw normalizeError(e2);
165038
165122
  }
@@ -165061,6 +165145,9 @@ function createOpenAICompatibleClientUncached(config2) {
165061
165145
  } catch (e22) {
165062
165146
  throw normalizeError(e22);
165063
165147
  }
165148
+ } else if (isToolUnsupported(e2, request)) {
165149
+ reportIssue("openai_adapter.tool_unsupported", "model does not support tool calling", { model, status: 400 });
165150
+ throw toolUnsupportedError(e2, model);
165064
165151
  } else {
165065
165152
  reportIssue("openai_adapter.stream_failed", "OpenAI-compatible streaming request failed", {
165066
165153
  model,
@@ -181962,7 +182049,7 @@ var init_metadata = __esm(() => {
181962
182049
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
181963
182050
  WHITESPACE_REGEX = /\s+/;
181964
182051
  getVersionBase = memoize_default(() => {
181965
- const match = "1.3.427".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
182052
+ const match = "1.3.428".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
181966
182053
  return match ? match[0] : undefined;
181967
182054
  });
181968
182055
  buildEnvContext = memoize_default(async () => {
@@ -182001,7 +182088,7 @@ var init_metadata = __esm(() => {
182001
182088
  },
182002
182089
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
182003
182090
  isRayuAction: isEnvTruthy(process.env.RAYU_ACTION),
182004
- version: "1.3.427",
182091
+ version: "1.3.428",
182005
182092
  versionBase: getVersionBase(),
182006
182093
  buildTime: "",
182007
182094
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
@@ -182615,7 +182702,7 @@ function initialize1PEventLogging() {
182615
182702
  const platform2 = getPlatform();
182616
182703
  const attributes = {
182617
182704
  [import_semantic_conventions.ATTR_SERVICE_NAME]: "rayu",
182618
- [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.3.427"
182705
+ [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.3.428"
182619
182706
  };
182620
182707
  if (platform2 === "wsl") {
182621
182708
  const wslVersion = getWslVersion();
@@ -182642,7 +182729,7 @@ function initialize1PEventLogging() {
182642
182729
  })
182643
182730
  ]
182644
182731
  });
182645
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.3.427");
182732
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.3.428");
182646
182733
  }
182647
182734
  async function reinitialize1PEventLoggingIfConfigChanged() {
182648
182735
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -218558,7 +218645,7 @@ function getAttributionHeader(fingerprint) {
218558
218645
  if (!isAttributionHeaderEnabled()) {
218559
218646
  return "";
218560
218647
  }
218561
- const version2 = `${"1.3.427"}.${fingerprint}`;
218648
+ const version2 = `${"1.3.428"}.${fingerprint}`;
218562
218649
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
218563
218650
  const cch = "";
218564
218651
  const workload = getWorkload();
@@ -303163,7 +303250,7 @@ function getTelemetryAttributes() {
303163
303250
  attributes["session.id"] = sessionId;
303164
303251
  }
303165
303252
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
303166
- attributes["app.version"] = "1.3.427";
303253
+ attributes["app.version"] = "1.3.428";
303167
303254
  }
303168
303255
  const oauthAccount = getOauthAccountInfo();
303169
303256
  if (oauthAccount) {
@@ -406029,54 +406116,6 @@ var init_p_map = __esm(() => {
406029
406116
  pMapSkip = Symbol("skip");
406030
406117
  });
406031
406118
 
406032
- // src/bridge/sessionIdCompat.ts
406033
- var exports_sessionIdCompat = {};
406034
- __export(exports_sessionIdCompat, {
406035
- toInfraSessionId: () => toInfraSessionId,
406036
- toCompatSessionId: () => toCompatSessionId,
406037
- setCseShimGate: () => setCseShimGate
406038
- });
406039
- function setCseShimGate(gate) {
406040
- _isCseShimEnabled = gate;
406041
- }
406042
- function toCompatSessionId(id) {
406043
- if (!id.startsWith("cse_"))
406044
- return id;
406045
- if (_isCseShimEnabled && !_isCseShimEnabled())
406046
- return id;
406047
- return "session_" + id.slice("cse_".length);
406048
- }
406049
- function toInfraSessionId(id) {
406050
- if (!id.startsWith("session_"))
406051
- return id;
406052
- return "cse_" + id.slice("session_".length);
406053
- }
406054
- var _isCseShimEnabled;
406055
-
406056
- // src/constants/product.ts
406057
- function isRemoteSessionStaging(sessionId, ingressUrl) {
406058
- return sessionId?.includes("_staging_") === true || ingressUrl?.includes("staging") === true;
406059
- }
406060
- function isRemoteSessionLocal(sessionId, ingressUrl) {
406061
- return sessionId?.includes("_local_") === true || ingressUrl?.includes("localhost") === true;
406062
- }
406063
- function getClaudeAiBaseUrl(sessionId, ingressUrl) {
406064
- if (isRemoteSessionLocal(sessionId, ingressUrl)) {
406065
- return CLAUDE_AI_LOCAL_BASE_URL;
406066
- }
406067
- if (isRemoteSessionStaging(sessionId, ingressUrl)) {
406068
- return CLAUDE_AI_STAGING_BASE_URL;
406069
- }
406070
- return CLAUDE_AI_BASE_URL;
406071
- }
406072
- function getRemoteSessionUrl(sessionId, ingressUrl) {
406073
- const { toCompatSessionId: toCompatSessionId2 } = __toCommonJS(exports_sessionIdCompat);
406074
- const compatId = toCompatSessionId2(sessionId);
406075
- const baseUrl = getClaudeAiBaseUrl(compatId, ingressUrl);
406076
- return `${baseUrl}/code/${compatId}`;
406077
- }
406078
- var PRODUCT_NAME = "Rayu-CLI", PRODUCT_URL = "https://github.com/rayu-cli/rayu-cli", CLAUDE_AI_BASE_URL = "https://claude.ai", CLAUDE_AI_STAGING_BASE_URL = "https://claude-ai.staging.ant.dev", CLAUDE_AI_LOCAL_BASE_URL = "http://localhost:4000";
406079
-
406080
406119
  // src/tools/ListMcpResourcesTool/prompt.ts
406081
406120
  var LIST_MCP_RESOURCES_TOOL_NAME = "ListMcpResourcesTool", DESCRIPTION6 = `
406082
406121
  Lists available resources from configured MCP servers.
@@ -413521,7 +413560,7 @@ function getInstallationEnv() {
413521
413560
  return;
413522
413561
  }
413523
413562
  function getClaudeCodeVersion() {
413524
- return "1.3.427";
413563
+ return "1.3.428";
413525
413564
  }
413526
413565
  async function getInstalledVSCodeExtensionVersion(command) {
413527
413566
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -418759,7 +418798,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
418759
418798
  const client4 = new Client({
418760
418799
  name: "claude-code",
418761
418800
  title: "RAYU",
418762
- version: "1.3.427",
418801
+ version: "1.3.428",
418763
418802
  description: "Anthropic's agentic coding tool",
418764
418803
  websiteUrl: PRODUCT_URL
418765
418804
  }, {
@@ -419076,7 +419115,7 @@ var init_client7 = __esm(() => {
419076
419115
  const client4 = new Client({
419077
419116
  name: "claude-code",
419078
419117
  title: "RAYU",
419079
- version: "1.3.427",
419118
+ version: "1.3.428",
419080
419119
  description: "Anthropic's agentic coding tool",
419081
419120
  websiteUrl: PRODUCT_URL
419082
419121
  }, {
@@ -433881,7 +433920,7 @@ function computeFingerprint(messageText, version2) {
433881
433920
  }
433882
433921
  function computeFingerprintFromMessages(messages) {
433883
433922
  const firstMessageText = extractFirstMessageText(messages);
433884
- return computeFingerprint(firstMessageText, "1.3.427");
433923
+ return computeFingerprint(firstMessageText, "1.3.428");
433885
433924
  }
433886
433925
  var FINGERPRINT_SALT = "59cf53e54c78";
433887
433926
  var init_fingerprint = () => {};
@@ -433923,7 +433962,7 @@ async function sideQuery(opts) {
433923
433962
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
433924
433963
  }
433925
433964
  const messageText = extractFirstUserMessageText(messages);
433926
- const fingerprint = computeFingerprint(messageText, "1.3.427");
433965
+ const fingerprint = computeFingerprint(messageText, "1.3.428");
433927
433966
  const attributionHeader = getAttributionHeader(fingerprint);
433928
433967
  const systemBlocks = [
433929
433968
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -528861,7 +528900,7 @@ function Feedback({
528861
528900
  platform: env4.platform,
528862
528901
  gitRepo: envInfo.isGit,
528863
528902
  terminal: env4.terminal,
528864
- version: "1.3.427",
528903
+ version: "1.3.428",
528865
528904
  transcript: normalizeMessagesForAPI(messages),
528866
528905
  errors: sanitizedErrors,
528867
528906
  lastApiRequest: getLastAPIRequest(),
@@ -529053,7 +529092,7 @@ function Feedback({
529053
529092
  ", ",
529054
529093
  env4.terminal,
529055
529094
  ", v",
529056
- "1.3.427"
529095
+ "1.3.428"
529057
529096
  ]
529058
529097
  }, undefined, true, undefined, this)
529059
529098
  ]
@@ -529159,7 +529198,7 @@ ${sanitizedDescription}
529159
529198
  ` + `**Environment Info**
529160
529199
  ` + `- Platform: ${env4.platform}
529161
529200
  ` + `- Terminal: ${env4.terminal}
529162
- ` + `- Version: ${"1.3.427"}
529201
+ ` + `- Version: ${"1.3.428"}
529163
529202
  ` + `- Feedback ID: ${feedbackId}
529164
529203
  ` + `
529165
529204
  **Errors**
@@ -531998,9 +532037,9 @@ async function assertMinVersion() {
531998
532037
  if (false) {}
531999
532038
  try {
532000
532039
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
532001
- if (versionConfig.minVersion && lt("1.3.427", versionConfig.minVersion)) {
532040
+ if (versionConfig.minVersion && lt("1.3.428", versionConfig.minVersion)) {
532002
532041
  console.error(`
532003
- It looks like your version of RAYU (${"1.3.427"}) needs an update.
532042
+ It looks like your version of RAYU (${"1.3.428"}) needs an update.
532004
532043
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
532005
532044
 
532006
532045
  To update, please run:
@@ -532226,7 +532265,7 @@ async function installGlobalPackage(specificVersion) {
532226
532265
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
532227
532266
  logEvent("tengu_auto_updater_lock_contention", {
532228
532267
  pid: process.pid,
532229
- currentVersion: "1.3.427"
532268
+ currentVersion: "1.3.428"
532230
532269
  });
532231
532270
  return "in_progress";
532232
532271
  }
@@ -532235,7 +532274,7 @@ async function installGlobalPackage(specificVersion) {
532235
532274
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
532236
532275
  logError2(new Error("Windows NPM detected in WSL environment"));
532237
532276
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
532238
- currentVersion: "1.3.427"
532277
+ currentVersion: "1.3.428"
532239
532278
  });
532240
532279
  console.error(`
532241
532280
  Error: Windows NPM detected in WSL
@@ -532771,7 +532810,7 @@ function detectLinuxGlobPatternWarnings() {
532771
532810
  }
532772
532811
  async function getDoctorDiagnostic() {
532773
532812
  const installationType = await getCurrentInstallationType();
532774
- const version2 = typeof MACRO !== "undefined" ? "1.3.427" : "unknown";
532813
+ const version2 = typeof MACRO !== "undefined" ? "1.3.428" : "unknown";
532775
532814
  const installationPath = await getInstallationPath();
532776
532815
  const invokedBinary = getInvokedBinary();
532777
532816
  const multipleInstallations = await detectMultipleInstallations();
@@ -533566,8 +533605,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
533566
533605
  const maxVersion = await getMaxVersion();
533567
533606
  if (maxVersion && gt(version2, maxVersion)) {
533568
533607
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
533569
- if (gte("1.3.427", maxVersion)) {
533570
- logForDebugging(`Native installer: current version ${"1.3.427"} is already at or above maxVersion ${maxVersion}, skipping update`);
533608
+ if (gte("1.3.428", maxVersion)) {
533609
+ logForDebugging(`Native installer: current version ${"1.3.428"} is already at or above maxVersion ${maxVersion}, skipping update`);
533571
533610
  logEvent("tengu_native_update_skipped_max_version", {
533572
533611
  latency_ms: Date.now() - startTime,
533573
533612
  max_version: maxVersion,
@@ -533578,7 +533617,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
533578
533617
  version2 = maxVersion;
533579
533618
  }
533580
533619
  }
533581
- if (!forceReinstall && version2 === "1.3.427" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
533620
+ if (!forceReinstall && version2 === "1.3.428" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
533582
533621
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
533583
533622
  logEvent("tengu_native_update_complete", {
533584
533623
  latency_ms: Date.now() - startTime,
@@ -534774,7 +534813,7 @@ function buildPrimarySection() {
534774
534813
  }, undefined, false, undefined, this);
534775
534814
  return [{
534776
534815
  label: "Version",
534777
- value: "1.3.427"
534816
+ value: "1.3.428"
534778
534817
  }, {
534779
534818
  label: "Session name",
534780
534819
  value: nameValue
@@ -538465,7 +538504,7 @@ function Config({
538465
538504
  }
538466
538505
  }, undefined, false, undefined, this)
538467
538506
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
538468
- currentVersion: "1.3.427",
538507
+ currentVersion: "1.3.428",
538469
538508
  onChoice: (choice) => {
538470
538509
  setShowSubmenu(null);
538471
538510
  setTabsHidden(false);
@@ -538477,7 +538516,7 @@ function Config({
538477
538516
  autoUpdatesChannel: "stable"
538478
538517
  };
538479
538518
  if (choice === "stay") {
538480
- newSettings.minimumVersion = "1.3.427";
538519
+ newSettings.minimumVersion = "1.3.428";
538481
538520
  }
538482
538521
  updateSettingsForSource("userSettings", newSettings);
538483
538522
  setSettingsData((prev_27) => ({
@@ -546539,7 +546578,7 @@ function HelpV2(t0) {
546539
546578
  let t6;
546540
546579
  if ($3[31] !== tabs) {
546541
546580
  t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
546542
- title: `Rayu-CLI v${"1.3.427"}`,
546581
+ title: `Rayu-CLI v${"1.3.428"}`,
546543
546582
  color: "professionalBlue",
546544
546583
  defaultTab: "general",
546545
546584
  children: tabs
@@ -566514,7 +566553,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
566514
566553
  }
566515
566554
  return [];
566516
566555
  }
566517
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.427") {
566556
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.428") {
566518
566557
  if (false) {}
566519
566558
  const cachedChangelog = await getStoredChangelog();
566520
566559
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -566527,7 +566566,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.427")
566527
566566
  releaseNotes
566528
566567
  };
566529
566568
  }
566530
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.427") {
566569
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.428") {
566531
566570
  if (false) {}
566532
566571
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
566533
566572
  return {
@@ -566655,7 +566694,7 @@ function getRecentActivitySync() {
566655
566694
  return cachedActivity;
566656
566695
  }
566657
566696
  function getLogoDisplayData() {
566658
- const version2 = process.env.DEMO_VERSION ?? "1.3.427";
566697
+ const version2 = process.env.DEMO_VERSION ?? "1.3.428";
566659
566698
  const serverUrl = getDirectConnectServerUrl();
566660
566699
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
566661
566700
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -567947,7 +567986,7 @@ function LogoV2() {
567947
567986
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
567948
567987
  t2 = () => {
567949
567988
  const currentConfig = getGlobalConfig();
567950
- if (currentConfig.lastReleaseNotesSeen === "1.3.427") {
567989
+ if (currentConfig.lastReleaseNotesSeen === "1.3.428") {
567951
567990
  return;
567952
567991
  }
567953
567992
  saveGlobalConfig(_temp327);
@@ -568425,7 +568464,7 @@ function LogoV2() {
568425
568464
  t24 = $3[61];
568426
568465
  }
568427
568466
  const _latestNpm = getCachedLatestNpmVersionSync();
568428
- const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.427") ? [createUpdateAvailableFeed("1.3.427", _latestNpm)] : [];
568467
+ const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.428") ? [createUpdateAvailableFeed("1.3.428", _latestNpm)] : [];
568429
568468
  const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(FeedColumn, {
568430
568469
  feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
568431
568470
  maxWidth: rightWidth
@@ -568625,12 +568664,12 @@ function LogoV2() {
568625
568664
  return t41;
568626
568665
  }
568627
568666
  function _temp327(current) {
568628
- if (current.lastReleaseNotesSeen === "1.3.427") {
568667
+ if (current.lastReleaseNotesSeen === "1.3.428") {
568629
568668
  return current;
568630
568669
  }
568631
568670
  return {
568632
568671
  ...current,
568633
- lastReleaseNotesSeen: "1.3.427"
568672
+ lastReleaseNotesSeen: "1.3.428"
568634
568673
  };
568635
568674
  }
568636
568675
  function _temp241(s_0) {
@@ -593422,7 +593461,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
593422
593461
  smapsRollup,
593423
593462
  platform: process.platform,
593424
593463
  nodeVersion: process.version,
593425
- ccVersion: "1.3.427"
593464
+ ccVersion: "1.3.428"
593426
593465
  };
593427
593466
  }
593428
593467
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -593944,7 +593983,7 @@ var init_bridge_kick = __esm(() => {
593944
593983
  var call47 = async () => {
593945
593984
  return {
593946
593985
  type: "text",
593947
- value: "1.3.427"
593986
+ value: "1.3.428"
593948
593987
  };
593949
593988
  }, version2, version_default;
593950
593989
  var init_version = __esm(() => {
@@ -596346,7 +596385,10 @@ function RayuProviderSetup({
596346
596385
  setBaseURL(p.baseURL ?? "");
596347
596386
  setModel(p.defaultModel ?? "");
596348
596387
  setCursor(0);
596349
- if (p.kind === "genai")
596388
+ if (p.id === "ollama") {
596389
+ setFetchError(null);
596390
+ setPhase("ollamaDetect");
596391
+ } else if (p.kind === "genai")
596350
596392
  setPhase("genaiLogin");
596351
596393
  else if (p.kind === "vertex" || p.requiresOAuth)
596352
596394
  setPhase("vertexAuth");
@@ -596569,7 +596611,51 @@ function RayuProviderSetup({
596569
596611
  cancelled = true;
596570
596612
  };
596571
596613
  }, [phase, apiKey, region]);
596614
+ import_react180.default.useEffect(() => {
596615
+ if (phase !== "ollamaDetect")
596616
+ return;
596617
+ let cancelled = false;
596618
+ setFetchError(null);
596619
+ (async () => {
596620
+ const baseURL2 = ollamaBaseURL();
596621
+ const base2 = {
596622
+ id: "ollama",
596623
+ kind: "openai-compatible",
596624
+ baseURL: baseURL2,
596625
+ apiKey: process.env.OLLAMA_API_KEY || "ollama"
596626
+ };
596627
+ const models = await fetchProviderModels(base2).catch(() => []);
596628
+ if (cancelled)
596629
+ return;
596630
+ if (models.length === 0) {
596631
+ setFetchError(`Couldn't reach Ollama at ${baseURL2.replace(/\/v1$/, "")}. Make sure it's running ("ollama serve") and you've pulled a model ("ollama pull llama3.2"). Set OLLAMA_HOST to use a different address.`);
596632
+ setPhase("ollamaError");
596633
+ return;
596634
+ }
596635
+ const chat2 = models.filter(isLikelyChatModel);
596636
+ const list = chat2.length > 0 ? chat2 : models;
596637
+ const preferred = list.find((m3) => /coder|code/i.test(m3)) ?? list.find((m3) => /qwen|llama|gemma|mistral|deepseek|phi|gpt/i.test(m3)) ?? list[0];
596638
+ upsertProvider({ ...base2, fetchedModels: list, defaultModel: preferred }, true);
596639
+ if (cancelled)
596640
+ return;
596641
+ onDone();
596642
+ })();
596643
+ return () => {
596644
+ cancelled = true;
596645
+ };
596646
+ }, [phase]);
596572
596647
  if (phase === "pick") {
596648
+ const localIds = new Set(["ollama", "local"]);
596649
+ const pickOptions = [
596650
+ ...PRESETS.filter((p) => !localIds.has(p.id)).map((p) => ({
596651
+ label: p.label,
596652
+ value: p.id
596653
+ })),
596654
+ {
596655
+ label: "Localhost (Ollama / custom OpenAI-compatible endpoint)",
596656
+ value: "__localhost__"
596657
+ }
596658
+ ];
596573
596659
  return /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedBox_default, {
596574
596660
  flexDirection: "column",
596575
596661
  gap: 1,
@@ -596588,8 +596674,12 @@ function RayuProviderSetup({
596588
596674
  children: "Choose a model provider. You can change or add more later with /model."
596589
596675
  }, undefined, false, undefined, this),
596590
596676
  /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(Select, {
596591
- options: PRESETS.map((p) => ({ label: p.label, value: p.id })),
596677
+ options: pickOptions,
596592
596678
  onChange: (v2) => {
596679
+ if (v2 === "__localhost__") {
596680
+ setPhase("localChoice");
596681
+ return;
596682
+ }
596593
596683
  const p = PRESETS.find((x4) => x4.id === v2);
596594
596684
  if (p)
596595
596685
  pick3(p);
@@ -596599,6 +596689,97 @@ function RayuProviderSetup({
596599
596689
  ]
596600
596690
  }, undefined, true, undefined, this);
596601
596691
  }
596692
+ if (phase === "localChoice") {
596693
+ return /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedBox_default, {
596694
+ flexDirection: "column",
596695
+ gap: 1,
596696
+ paddingLeft: 1,
596697
+ children: [
596698
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596699
+ bold: true,
596700
+ children: "Localhost provider"
596701
+ }, undefined, false, undefined, this),
596702
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596703
+ dimColor: true,
596704
+ children: "Run models on your own machine. Ollama is auto-detected; or point Rayu at any local OpenAI-compatible server."
596705
+ }, undefined, false, undefined, this),
596706
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(Select, {
596707
+ options: [
596708
+ {
596709
+ label: "Ollama — auto-detect running models (localhost:11434)",
596710
+ value: "ollama"
596711
+ },
596712
+ {
596713
+ label: "Custom OpenAI-compatible endpoint (LM Studio, llama.cpp, vLLM, …)",
596714
+ value: "local"
596715
+ }
596716
+ ],
596717
+ onChange: (v2) => {
596718
+ const p = PRESETS.find((x4) => x4.id === v2);
596719
+ if (p)
596720
+ pick3(p);
596721
+ },
596722
+ onCancel: () => setPhase("pick")
596723
+ }, undefined, false, undefined, this)
596724
+ ]
596725
+ }, undefined, true, undefined, this);
596726
+ }
596727
+ if (phase === "ollamaDetect") {
596728
+ return /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedBox_default, {
596729
+ flexDirection: "column",
596730
+ gap: 1,
596731
+ paddingLeft: 1,
596732
+ children: [
596733
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596734
+ bold: true,
596735
+ children: "Connecting to Ollama…"
596736
+ }, undefined, false, undefined, this),
596737
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596738
+ dimColor: true,
596739
+ children: [
596740
+ "Detecting models from ",
596741
+ ollamaBaseURL().replace(/\/v1$/, ""),
596742
+ "."
596743
+ ]
596744
+ }, undefined, true, undefined, this)
596745
+ ]
596746
+ }, undefined, true, undefined, this);
596747
+ }
596748
+ if (phase === "ollamaError") {
596749
+ return /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedBox_default, {
596750
+ flexDirection: "column",
596751
+ gap: 1,
596752
+ paddingLeft: 1,
596753
+ children: [
596754
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596755
+ bold: true,
596756
+ children: "Ollama not reachable"
596757
+ }, undefined, false, undefined, this),
596758
+ fetchError ? /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedText, {
596759
+ color: "yellow",
596760
+ children: fetchError
596761
+ }, undefined, false, undefined, this) : null,
596762
+ /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(Select, {
596763
+ options: [
596764
+ { label: "Retry detection", value: "retry" },
596765
+ { label: "Enter a custom endpoint instead", value: "local" },
596766
+ { label: "Cancel", value: "cancel" }
596767
+ ],
596768
+ onChange: (v2) => {
596769
+ if (v2 === "retry")
596770
+ setPhase("ollamaDetect");
596771
+ else if (v2 === "local") {
596772
+ const p = PRESETS.find((x4) => x4.id === "local");
596773
+ if (p)
596774
+ pick3(p);
596775
+ } else
596776
+ onDone();
596777
+ },
596778
+ onCancel: () => setPhase("localChoice")
596779
+ }, undefined, false, undefined, this)
596780
+ ]
596781
+ }, undefined, true, undefined, this);
596782
+ }
596602
596783
  if (phase === "baseURL") {
596603
596784
  return /* @__PURE__ */ jsx_dev_runtime325.jsxDEV(ThemedBox_default, {
596604
596785
  flexDirection: "column",
@@ -602841,7 +603022,7 @@ function generateHtmlReport(data, insights) {
602841
603022
  </html>`;
602842
603023
  }
602843
603024
  function buildExportData(data, insights, facets, remoteStats) {
602844
- const version3 = typeof MACRO !== "undefined" ? "1.3.427" : "unknown";
603025
+ const version3 = typeof MACRO !== "undefined" ? "1.3.428" : "unknown";
602845
603026
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
602846
603027
  const facets_summary = {
602847
603028
  total: facets.size,
@@ -606741,7 +606922,7 @@ var init_sessionStorage = __esm(() => {
606741
606922
  init_settings2();
606742
606923
  init_slowOperations();
606743
606924
  init_uuid();
606744
- VERSION6 = typeof MACRO !== "undefined" ? "1.3.427" : "unknown";
606925
+ VERSION6 = typeof MACRO !== "undefined" ? "1.3.428" : "unknown";
606745
606926
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
606746
606927
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
606747
606928
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -607962,7 +608143,7 @@ var init_filesystem = __esm(() => {
607962
608143
  });
607963
608144
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
607964
608145
  const nonce = randomBytes18(16).toString("hex");
607965
- return join150(getClaudeTempDir(), "bundled-skills", "1.3.427", nonce);
608146
+ return join150(getClaudeTempDir(), "bundled-skills", "1.3.428", nonce);
607966
608147
  });
607967
608148
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
607968
608149
  });
@@ -613077,7 +613258,7 @@ __export(exports_update, {
613077
613258
  import { execFileSync as execFileSync3 } from "node:child_process";
613078
613259
  import { homedir as homedir33 } from "os";
613079
613260
  async function update() {
613080
- writeToStdout(`Current version: ${"1.3.427"}
613261
+ writeToStdout(`Current version: ${"1.3.428"}
613081
613262
  `);
613082
613263
  const isBundled = isInBundledMode();
613083
613264
  if (isBundled) {
@@ -613103,13 +613284,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
613103
613284
  process.exit(1);
613104
613285
  return;
613105
613286
  }
613106
- if (latestVersion === "1.3.427") {
613287
+ if (latestVersion === "1.3.428") {
613107
613288
  writeToStdout(source_default.green(`
613108
- Rayu CLI is up to date (${"1.3.427"})
613289
+ Rayu CLI is up to date (${"1.3.428"})
613109
613290
  `));
613110
613291
  process.exit(0);
613111
613292
  }
613112
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.427"})
613293
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.428"})
613113
613294
  `);
613114
613295
  writeToStdout(`Installing update...
613115
613296
 
@@ -613133,7 +613314,7 @@ Try manually:
613133
613314
  return;
613134
613315
  }
613135
613316
  writeToStdout(source_default.green(`
613136
- Successfully updated from ${"1.3.427"} to ${latestVersion}
613317
+ Successfully updated from ${"1.3.428"} to ${latestVersion}
613137
613318
  `));
613138
613319
  process.exit(0);
613139
613320
  }
@@ -613147,14 +613328,14 @@ async function updateNativeBinary() {
613147
613328
  } catch {
613148
613329
  latestVersion = "";
613149
613330
  }
613150
- if (latestVersion && latestVersion === "1.3.427") {
613331
+ if (latestVersion && latestVersion === "1.3.428") {
613151
613332
  writeToStdout(source_default.green(`
613152
- Rayu CLI is up to date (1.3.427)
613333
+ Rayu CLI is up to date (1.3.428)
613153
613334
  `));
613154
613335
  process.exit(0);
613155
613336
  }
613156
613337
  if (latestVersion) {
613157
- writeToStdout(`New version available: ${latestVersion} (current: 1.3.427)
613338
+ writeToStdout(`New version available: ${latestVersion} (current: 1.3.428)
613158
613339
  `);
613159
613340
  }
613160
613341
  writeToStdout(`Downloading and installing update...
@@ -613169,13 +613350,13 @@ Rayu CLI is up to date (1.3.427)
613169
613350
  return;
613170
613351
  }
613171
613352
  writeToStdout(source_default.green(`
613172
- Rayu CLI is up to date (1.3.427)
613353
+ Rayu CLI is up to date (1.3.428)
613173
613354
  `));
613174
613355
  process.exit(0);
613175
613356
  }
613176
613357
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
613177
613358
  writeToStdout(source_default.green(`
613178
- Successfully updated from 1.3.427 to ${updatedTo}
613359
+ Successfully updated from 1.3.428 to ${updatedTo}
613179
613360
  `));
613180
613361
  writeToStdout(`Restart your terminal to use the new version.
613181
613362
  `);
@@ -613206,7 +613387,7 @@ __export(exports_uninstall, {
613206
613387
  import { execFileSync as execFileSync4 } from "node:child_process";
613207
613388
  import { homedir as homedir34 } from "os";
613208
613389
  async function uninstall() {
613209
- writeToStdout(`Uninstalling Rayu CLI (${"1.3.427"})...
613390
+ writeToStdout(`Uninstalling Rayu CLI (${"1.3.428"})...
613210
613391
  `);
613211
613392
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
613212
613393
 
@@ -613229,7 +613410,7 @@ Try running manually:
613229
613410
  process.exit(1);
613230
613411
  }
613231
613412
  writeToStdout(source_default.green(`
613232
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.427"}
613413
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.428"}
613233
613414
  `));
613234
613415
  writeToStdout(`Thanks for using Rayu CLI!
613235
613416
  `);
@@ -613281,7 +613462,7 @@ function showFirstRunWelcome() {
613281
613462
  `);
613282
613463
  try {
613283
613464
  mkdirSync13(getRayuConfigHomeDir(), { recursive: true });
613284
- writeFileSync15(markerPath(), "1.3.427", "utf8");
613465
+ writeFileSync15(markerPath(), "1.3.428", "utf8");
613285
613466
  } catch {}
613286
613467
  }
613287
613468
  var init_firstRun = __esm(() => {
@@ -625124,7 +625305,7 @@ async function initializeBetaTracing(resource) {
625124
625305
  });
625125
625306
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
625126
625307
  setLoggerProvider(loggerProvider);
625127
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.427");
625308
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.428");
625128
625309
  setEventLogger(eventLogger);
625129
625310
  process.on("beforeExit", async () => {
625130
625311
  await loggerProvider?.forceFlush();
@@ -625164,7 +625345,7 @@ async function initializeTelemetry() {
625164
625345
  const platform4 = getPlatform();
625165
625346
  const baseAttributes = {
625166
625347
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
625167
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.427"
625348
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.428"
625168
625349
  };
625169
625350
  if (platform4 === "wsl") {
625170
625351
  const wslVersion = getWslVersion();
@@ -625209,7 +625390,7 @@ async function initializeTelemetry() {
625209
625390
  } catch {}
625210
625391
  };
625211
625392
  registerCleanup(shutdownTelemetry2);
625212
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.427");
625393
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.428");
625213
625394
  }
625214
625395
  const meterProvider = new import_sdk_metrics2.MeterProvider({
625215
625396
  resource,
@@ -625229,7 +625410,7 @@ async function initializeTelemetry() {
625229
625410
  });
625230
625411
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
625231
625412
  setLoggerProvider(loggerProvider);
625232
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.427");
625413
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.428");
625233
625414
  setEventLogger(eventLogger);
625234
625415
  logForDebugging("[3P telemetry] Event logger set successfully");
625235
625416
  process.on("beforeExit", async () => {
@@ -625291,7 +625472,7 @@ Current timeout: ${timeoutMs}ms
625291
625472
  }
625292
625473
  };
625293
625474
  registerCleanup(shutdownTelemetry);
625294
- return meterProvider.getMeter("com.anthropic.claude_code", "1.3.427");
625475
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.3.428");
625295
625476
  }
625296
625477
  async function flushTelemetry() {
625297
625478
  const meterProvider = getMeterProvider();
@@ -626804,7 +626985,7 @@ function buildSystemInitMessage(inputs) {
626804
626985
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
626805
626986
  apiKeySource: getAnthropicApiKeyWithSource().source,
626806
626987
  betas: getSdkBetas(),
626807
- claude_code_version: "1.3.427",
626988
+ claude_code_version: "1.3.428",
626808
626989
  output_style: outputStyle2,
626809
626990
  agents: inputs.agents.map((agent) => agent.agentType),
626810
626991
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -643013,7 +643194,7 @@ var init_useVoiceEnabled = __esm(() => {
643013
643194
  function getSemverPart(version3) {
643014
643195
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
643015
643196
  }
643016
- function useUpdateNotification(updatedVersion, initialVersion = "1.3.427") {
643197
+ function useUpdateNotification(updatedVersion, initialVersion = "1.3.428") {
643017
643198
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react218.useState(() => getSemverPart(initialVersion));
643018
643199
  if (!updatedVersion) {
643019
643200
  return null;
@@ -643053,7 +643234,7 @@ function AutoUpdater({
643053
643234
  return;
643054
643235
  }
643055
643236
  if (false) {}
643056
- const currentVersion = "1.3.427";
643237
+ const currentVersion = "1.3.428";
643057
643238
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
643058
643239
  let latestVersion = await getLatestVersion(channel);
643059
643240
  const isDisabled = isAutoUpdaterDisabled();
@@ -643266,12 +643447,12 @@ function NativeAutoUpdater({
643266
643447
  logEvent("tengu_native_auto_updater_start", {});
643267
643448
  try {
643268
643449
  const maxVersion = await getMaxVersion();
643269
- if (maxVersion && gt("1.3.427", maxVersion)) {
643450
+ if (maxVersion && gt("1.3.428", maxVersion)) {
643270
643451
  const msg = await getMaxVersionMessage();
643271
643452
  setMaxVersionIssue(msg ?? "affects your version");
643272
643453
  }
643273
643454
  const result = await installLatest(channel);
643274
- const currentVersion = "1.3.427";
643455
+ const currentVersion = "1.3.428";
643275
643456
  const latencyMs = Date.now() - startTime;
643276
643457
  if (result.lockFailed) {
643277
643458
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -643408,17 +643589,17 @@ function PackageManagerAutoUpdater(t0) {
643408
643589
  const maxVersion = await getMaxVersion();
643409
643590
  if (maxVersion && latest && gt(latest, maxVersion)) {
643410
643591
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
643411
- if (gte("1.3.427", maxVersion)) {
643412
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.427"} is already at or above maxVersion ${maxVersion}, skipping update`);
643592
+ if (gte("1.3.428", maxVersion)) {
643593
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.428"} is already at or above maxVersion ${maxVersion}, skipping update`);
643413
643594
  setUpdateAvailable(false);
643414
643595
  return;
643415
643596
  }
643416
643597
  latest = maxVersion;
643417
643598
  }
643418
- const hasUpdate = latest && !gte("1.3.427", latest) && !shouldSkipVersion(latest);
643599
+ const hasUpdate = latest && !gte("1.3.428", latest) && !shouldSkipVersion(latest);
643419
643600
  setUpdateAvailable(!!hasUpdate);
643420
643601
  if (hasUpdate) {
643421
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.427"} -> ${latest}`);
643602
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.428"} -> ${latest}`);
643422
643603
  }
643423
643604
  };
643424
643605
  $3[0] = t1;
@@ -643452,7 +643633,7 @@ function PackageManagerAutoUpdater(t0) {
643452
643633
  wrap: "truncate",
643453
643634
  children: [
643454
643635
  "currentVersion: ",
643455
- "1.3.427"
643636
+ "1.3.428"
643456
643637
  ]
643457
643638
  }, undefined, true, undefined, this);
643458
643639
  $3[3] = verbose;
@@ -651617,7 +651798,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
651617
651798
  project_dir: getOriginalCwd(),
651618
651799
  added_dirs: addedDirs
651619
651800
  },
651620
- version: "1.3.427",
651801
+ version: "1.3.428",
651621
651802
  output_style: {
651622
651803
  name: outputStyleName
651623
651804
  },
@@ -662987,7 +663168,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
662987
663168
  } catch {}
662988
663169
  const data = {
662989
663170
  trigger,
662990
- version: "1.3.427",
663171
+ version: "1.3.428",
662991
663172
  platform: process.platform,
662992
663173
  transcript,
662993
663174
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -675036,7 +675217,7 @@ function WelcomeV2() {
675036
675217
  dimColor: true,
675037
675218
  children: [
675038
675219
  "v",
675039
- "1.3.427"
675220
+ "1.3.428"
675040
675221
  ]
675041
675222
  }, undefined, true, undefined, this)
675042
675223
  ]
@@ -676753,7 +676934,7 @@ function completeOnboarding() {
676753
676934
  saveGlobalConfig((current) => ({
676754
676935
  ...current,
676755
676936
  hasCompletedOnboarding: true,
676756
- lastOnboardingVersion: "1.3.427"
676937
+ lastOnboardingVersion: "1.3.428"
676757
676938
  }));
676758
676939
  }
676759
676940
  function showDialog(root2, renderer) {
@@ -681053,7 +681234,7 @@ function appendToLog(path30, message) {
681053
681234
  cwd: getFsImplementation().cwd(),
681054
681235
  userType: "external",
681055
681236
  sessionId: getSessionId(),
681056
- version: "1.3.427"
681237
+ version: "1.3.428"
681057
681238
  };
681058
681239
  getLogWriter(path30).write(messageWithTimestamp);
681059
681240
  }
@@ -685161,8 +685342,8 @@ async function getEnvLessBridgeConfig() {
685161
685342
  }
685162
685343
  async function checkEnvLessBridgeMinVersion() {
685163
685344
  const cfg = await getEnvLessBridgeConfig();
685164
- if (cfg.min_version && lt("1.3.427", cfg.min_version)) {
685165
- return `Your version of RAYU (${"1.3.427"}) is too old for Remote Control.
685345
+ if (cfg.min_version && lt("1.3.428", cfg.min_version)) {
685346
+ return `Your version of RAYU (${"1.3.428"}) is too old for Remote Control.
685166
685347
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
685167
685348
  }
685168
685349
  return null;
@@ -685636,7 +685817,7 @@ async function initBridgeCore(params) {
685636
685817
  const rawApi = createBridgeApiClient({
685637
685818
  baseUrl,
685638
685819
  getAccessToken,
685639
- runnerVersion: "1.3.427",
685820
+ runnerVersion: "1.3.428",
685640
685821
  onDebug: logForDebugging,
685641
685822
  onAuth401,
685642
685823
  getTrustedDeviceToken
@@ -690998,7 +691179,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
690998
691179
  setCwd(cwd3);
690999
691180
  const server = new Server({
691000
691181
  name: "claude/tengu",
691001
- version: "1.3.427"
691182
+ version: "1.3.428"
691002
691183
  }, {
691003
691184
  capabilities: {
691004
691185
  tools: {}
@@ -693524,7 +693705,7 @@ ${customInstructions}` : customInstructions;
693524
693705
  }
693525
693706
  }
693526
693707
  logForDiagnosticsNoPII("info", "started", {
693527
- version: "1.3.427",
693708
+ version: "1.3.428",
693528
693709
  is_native_binary: isInBundledMode()
693529
693710
  });
693530
693711
  registerCleanup(async () => {
@@ -694242,7 +694423,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
694242
694423
  pendingHookMessages
694243
694424
  }, renderAndRun);
694244
694425
  }
694245
- }).version("1.3.427 (Rayu-CLI)", "-v, --version", "Output the version number");
694426
+ }).version("1.3.428 (Rayu-CLI)", "-v, --version", "Output the version number");
694246
694427
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
694247
694428
  program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
694248
694429
  if (canUserConfigureAdvisor()) {
@@ -694708,7 +694889,7 @@ if (false) {}
694708
694889
  async function main2() {
694709
694890
  const args = process.argv.slice(2);
694710
694891
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
694711
- console.log(`${"1.3.427"} (Rayu-CLI)`);
694892
+ console.log(`${"1.3.428"} (Rayu-CLI)`);
694712
694893
  return;
694713
694894
  }
694714
694895
  const {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayu-dev/rayu-cli",
3
- "version": "1.3.427",
3
+ "version": "1.3.428",
4
4
  "description": "Rayu-CLI — a multi-provider AI coding CLI",
5
5
  "type": "module",
6
6
  "bin": {