@rayu-dev/rayu-cli 1.2.25 → 1.2.27

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 +203 -276
  2. package/package.json +1 -1
package/dist/rayu.js CHANGED
@@ -147971,7 +147971,7 @@ var init_auth = __esm(() => {
147971
147971
 
147972
147972
  // src/utils/userAgent.ts
147973
147973
  function getRayuUserAgent() {
147974
- return `rayu/${"1.2.25"}`;
147974
+ return `rayu/${"1.2.27"}`;
147975
147975
  }
147976
147976
  var getClaudeCodeUserAgent;
147977
147977
  var init_userAgent = __esm(() => {
@@ -147997,7 +147997,7 @@ function getUserAgent() {
147997
147997
  const clientApp = process.env.RAYU_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}` : "";
147998
147998
  const workload = getWorkload();
147999
147999
  const workloadSuffix = workload ? `, workload/${workload}` : "";
148000
- return `rayu/${"1.2.25"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148000
+ return `rayu/${"1.2.27"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148001
148001
  }
148002
148002
  function getMCPUserAgent() {
148003
148003
  const parts = [];
@@ -148011,7 +148011,7 @@ function getMCPUserAgent() {
148011
148011
  parts.push(`client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}`);
148012
148012
  }
148013
148013
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
148014
- return `rayu/${"1.2.25"}${suffix}`;
148014
+ return `rayu/${"1.2.27"}${suffix}`;
148015
148015
  }
148016
148016
  function getWebFetchUserAgent() {
148017
148017
  return `Rayu-User (${getRayuUserAgent()})`;
@@ -148134,7 +148134,7 @@ var init_user = __esm(() => {
148134
148134
  deviceId,
148135
148135
  sessionId: getSessionId(),
148136
148136
  email: getEmail(),
148137
- appVersion: "1.2.25",
148137
+ appVersion: "1.2.27",
148138
148138
  platform: getHostPlatformForAnalytics(),
148139
148139
  organizationUuid,
148140
148140
  accountUuid,
@@ -181204,7 +181204,7 @@ var init_metadata = __esm(() => {
181204
181204
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
181205
181205
  WHITESPACE_REGEX = /\s+/;
181206
181206
  getVersionBase = memoize_default(() => {
181207
- const match = "1.2.25".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
181207
+ const match = "1.2.27".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
181208
181208
  return match ? match[0] : undefined;
181209
181209
  });
181210
181210
  buildEnvContext = memoize_default(async () => {
@@ -181243,7 +181243,7 @@ var init_metadata = __esm(() => {
181243
181243
  },
181244
181244
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
181245
181245
  isRayuAction: isEnvTruthy(process.env.RAYU_ACTION),
181246
- version: "1.2.25",
181246
+ version: "1.2.27",
181247
181247
  versionBase: getVersionBase(),
181248
181248
  buildTime: "",
181249
181249
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
@@ -181857,7 +181857,7 @@ function initialize1PEventLogging() {
181857
181857
  const platform2 = getPlatform();
181858
181858
  const attributes = {
181859
181859
  [import_semantic_conventions.ATTR_SERVICE_NAME]: "rayu",
181860
- [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.2.25"
181860
+ [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.2.27"
181861
181861
  };
181862
181862
  if (platform2 === "wsl") {
181863
181863
  const wslVersion = getWslVersion();
@@ -181884,7 +181884,7 @@ function initialize1PEventLogging() {
181884
181884
  })
181885
181885
  ]
181886
181886
  });
181887
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.2.25");
181887
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.2.27");
181888
181888
  }
181889
181889
  async function reinitialize1PEventLoggingIfConfigChanged() {
181890
181890
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -217800,7 +217800,7 @@ function getAttributionHeader(fingerprint) {
217800
217800
  if (!isAttributionHeaderEnabled()) {
217801
217801
  return "";
217802
217802
  }
217803
- const version2 = `${"1.2.25"}.${fingerprint}`;
217803
+ const version2 = `${"1.2.27"}.${fingerprint}`;
217804
217804
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
217805
217805
  const cch = "";
217806
217806
  const workload = getWorkload();
@@ -302322,7 +302322,7 @@ function getTelemetryAttributes() {
302322
302322
  attributes["session.id"] = sessionId;
302323
302323
  }
302324
302324
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
302325
- attributes["app.version"] = "1.2.25";
302325
+ attributes["app.version"] = "1.2.27";
302326
302326
  }
302327
302327
  const oauthAccount = getOauthAccountInfo();
302328
302328
  if (oauthAccount) {
@@ -412680,7 +412680,7 @@ function getInstallationEnv() {
412680
412680
  return;
412681
412681
  }
412682
412682
  function getClaudeCodeVersion() {
412683
- return "1.2.25";
412683
+ return "1.2.27";
412684
412684
  }
412685
412685
  async function getInstalledVSCodeExtensionVersion(command) {
412686
412686
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -417918,7 +417918,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
417918
417918
  const client4 = new Client({
417919
417919
  name: "claude-code",
417920
417920
  title: "RAYU",
417921
- version: "1.2.25",
417921
+ version: "1.2.27",
417922
417922
  description: "Anthropic's agentic coding tool",
417923
417923
  websiteUrl: PRODUCT_URL
417924
417924
  }, {
@@ -418235,7 +418235,7 @@ var init_client7 = __esm(() => {
418235
418235
  const client4 = new Client({
418236
418236
  name: "claude-code",
418237
418237
  title: "RAYU",
418238
- version: "1.2.25",
418238
+ version: "1.2.27",
418239
418239
  description: "Anthropic's agentic coding tool",
418240
418240
  websiteUrl: PRODUCT_URL
418241
418241
  }, {
@@ -425019,11 +425019,14 @@ function keepPendingFileChanges(context, rawFileArg) {
425019
425019
  ...prev,
425020
425020
  pendingFileChanges: prev.pendingFileChanges.map((change) => ids.has(change.id) ? { ...change, status: "kept" } : change)
425021
425021
  }));
425022
+ const fileCount = uniqueDisplayPaths(match.changes).length;
425023
+ const editCount = match.changes.length;
425022
425024
  if (rawFileArg.trim()) {
425023
425025
  const uniquePaths = uniqueDisplayPaths(match.changes);
425024
- return `Kept ${match.changes.length} pending ${pluralize2("change", match.changes.length)} for ${uniquePaths.join(", ")}.`;
425026
+ const edits = editCount > fileCount ? ` (${editCount} ${pluralize2("edit", editCount)})` : "";
425027
+ return `Kept changes to ${uniquePaths.join(", ")}${edits}.`;
425025
425028
  }
425026
- return `Kept ${match.changes.length} pending file ${pluralize2("change", match.changes.length)}.`;
425029
+ return `Kept changes to ${describeFilesAndEdits(fileCount, editCount)}.`;
425027
425030
  }
425028
425031
  async function undoLatestPendingFileChange(context, rawArgs = "") {
425029
425032
  const fileArg = rawArgs.trim();
@@ -425037,9 +425040,10 @@ async function undoLatestPendingFileChange(context, rawArgs = "") {
425037
425040
  }
425038
425041
  return undoPendingChanges(context, match.changes, {
425039
425042
  emptyMessage: `No pending file changes match ${fileArg}.`,
425040
- successMessage: (count3) => {
425043
+ successMessage: (editCount, fileCount) => {
425041
425044
  const uniquePaths = uniqueDisplayPaths(match.changes);
425042
- return `Undid ${count3} pending ${pluralize2("change", count3)} for ${uniquePaths.join(", ")}.`;
425045
+ const edits = editCount > fileCount ? ` (${editCount} ${pluralize2("edit", editCount)})` : "";
425046
+ return `Undid changes to ${uniquePaths.join(", ")}${edits}.`;
425043
425047
  }
425044
425048
  });
425045
425049
  }
@@ -425058,58 +425062,75 @@ async function undoPendingFileChangesByIds(context, ids) {
425058
425062
  const changes = context.getAppState().pendingFileChanges.filter((change) => idSet.has(change.id) && change.status === "pending");
425059
425063
  return undoPendingChanges(context, changes, {
425060
425064
  emptyMessage: "No pending file changes from this review to undo.",
425061
- successMessage: (count3) => `Undid ${count3} pending ${pluralize2("change", count3)} from this review.`
425065
+ successMessage: (editCount, fileCount) => `Undid changes to ${describeFilesAndEdits(fileCount, editCount)} from this review.`
425062
425066
  });
425063
425067
  }
425064
425068
  async function undoAllPendingFileChanges(context) {
425065
425069
  const changes = context.getAppState().pendingFileChanges.filter((change) => change.status === "pending");
425066
425070
  return undoPendingChanges(context, changes, {
425067
425071
  emptyMessage: "No pending file changes to undo.",
425068
- successMessage: (count3) => `Undid all ${count3} pending ${pluralize2("change", count3)}.`
425072
+ successMessage: (editCount, fileCount) => `Undid all changes to ${describeFilesAndEdits(fileCount, editCount)}.`
425069
425073
  });
425070
425074
  }
425071
425075
  function buildFileChangeReviewSummary(changes) {
425072
425076
  const reviewChanges = changes.filter((change) => change.status === "pending");
425073
425077
  if (reviewChanges.length === 0)
425074
425078
  return null;
425075
- const files2 = new Map;
425079
+ const groups = new Map;
425076
425080
  for (const change of reviewChanges) {
425077
- const hunks = getReviewHunks(change);
425078
- const { additions, removals } = countPatchLines(hunks);
425079
- const existing = files2.get(change.filePath);
425080
- const firstLine = change.after.content.split(/\r?\n/, 1)[0] ?? null;
425081
+ const existing = groups.get(change.filePath);
425081
425082
  if (!existing) {
425082
- files2.set(change.filePath, {
425083
+ groups.set(change.filePath, {
425083
425084
  filePath: change.filePath,
425084
425085
  displayPath: change.displayPath,
425085
425086
  changeIds: [change.id],
425086
- additions,
425087
- removals,
425088
- hunks,
425089
- fileContent: change.after.content,
425090
- firstLine,
425091
- status: change.status,
425087
+ baselineBefore: change.before,
425088
+ latestAfter: change.after.content,
425092
425089
  createdAt: change.createdAt,
425093
- isCreated: !change.before.exists
425090
+ status: change.status
425094
425091
  });
425095
425092
  continue;
425096
425093
  }
425097
425094
  existing.changeIds.push(change.id);
425098
- existing.additions += additions;
425099
- existing.removals += removals;
425100
- existing.hunks.push(...hunks);
425101
- existing.fileContent = change.after.content;
425102
- existing.firstLine = firstLine;
425095
+ existing.latestAfter = change.after.content;
425103
425096
  existing.createdAt = Math.max(existing.createdAt, change.createdAt);
425104
425097
  existing.status = existing.status === change.status ? existing.status : "mixed";
425105
425098
  }
425106
- const fileSummaries = [...files2.values()];
425099
+ const files2 = [];
425100
+ for (const group of groups.values()) {
425101
+ const oldContent = group.baselineBefore.exists ? normalizeContent(group.baselineBefore.content) : "";
425102
+ const newContent = group.latestAfter;
425103
+ const hunks = getPatchFromContents({
425104
+ filePath: group.filePath,
425105
+ oldContent,
425106
+ newContent,
425107
+ singleHunk: true
425108
+ });
425109
+ const { additions, removals } = countPatchLines(hunks);
425110
+ if (additions === 0 && removals === 0)
425111
+ continue;
425112
+ files2.push({
425113
+ filePath: group.filePath,
425114
+ displayPath: group.displayPath,
425115
+ changeIds: group.changeIds,
425116
+ additions,
425117
+ removals,
425118
+ hunks,
425119
+ fileContent: newContent,
425120
+ firstLine: newContent.split(/\r?\n/, 1)[0] ?? null,
425121
+ status: group.status,
425122
+ createdAt: group.createdAt,
425123
+ isCreated: !group.baselineBefore.exists
425124
+ });
425125
+ }
425126
+ if (files2.length === 0)
425127
+ return null;
425107
425128
  return {
425108
- changeIds: reviewChanges.map((change) => change.id),
425109
- totalFiles: fileSummaries.length,
425110
- totalAdditions: fileSummaries.reduce((total, file2) => total + file2.additions, 0),
425111
- totalRemovals: fileSummaries.reduce((total, file2) => total + file2.removals, 0),
425112
- files: fileSummaries,
425129
+ changeIds: files2.flatMap((file2) => file2.changeIds),
425130
+ totalFiles: files2.length,
425131
+ totalAdditions: files2.reduce((total, file2) => total + file2.additions, 0),
425132
+ totalRemovals: files2.reduce((total, file2) => total + file2.removals, 0),
425133
+ files: files2,
425113
425134
  createdAt: Date.now()
425114
425135
  };
425115
425136
  }
@@ -425191,9 +425212,9 @@ async function undoPendingChanges(context, changes, messages) {
425191
425212
  }
425192
425213
  markPendingFileChangesStatus(context, pendingChanges.map((change) => change.id), "undone");
425193
425214
  if (pendingChanges.length === 1 && alreadyAbsentChange) {
425194
- return messages.alreadyAbsentMessage?.(alreadyAbsentChange) ?? messages.successMessage(pendingChanges.length);
425215
+ return messages.alreadyAbsentMessage?.(alreadyAbsentChange) ?? messages.successMessage(pendingChanges.length, uniqueDisplayPaths(pendingChanges).length);
425195
425216
  }
425196
- return messages.successMessage(pendingChanges.length);
425217
+ return messages.successMessage(pendingChanges.length, uniqueDisplayPaths(pendingChanges).length);
425197
425218
  }
425198
425219
  function preflightUndo(orderedChanges) {
425199
425220
  const simulated = new Map;
@@ -425265,18 +425286,6 @@ function normalizeContent(content) {
425265
425286
  `, `
425266
425287
  `);
425267
425288
  }
425268
- function getReviewHunks(change) {
425269
- if (change.structuredPatch.length > 0)
425270
- return change.structuredPatch;
425271
- if (change.before.exists)
425272
- return change.structuredPatch;
425273
- return getPatchFromContents({
425274
- filePath: change.filePath,
425275
- oldContent: "",
425276
- newContent: change.after.content,
425277
- singleHunk: true
425278
- });
425279
- }
425280
425289
  function countPatchLines(hunks) {
425281
425290
  let additions = 0;
425282
425291
  let removals = 0;
@@ -425303,6 +425312,12 @@ function uniqueDisplayPaths(changes) {
425303
425312
  function pluralize2(word, count3) {
425304
425313
  return count3 === 1 ? word : `${word}s`;
425305
425314
  }
425315
+ function describeFilesAndEdits(fileCount, editCount) {
425316
+ const filePhrase = `${fileCount} ${pluralize2("file", fileCount)}`;
425317
+ if (editCount === fileCount)
425318
+ return filePhrase;
425319
+ return `${filePhrase} (${editCount} ${pluralize2("edit", editCount)})`;
425320
+ }
425306
425321
  function unquote(value) {
425307
425322
  if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
425308
425323
  return value.slice(1, -1);
@@ -433012,7 +433027,7 @@ function computeFingerprint(messageText, version2) {
433012
433027
  }
433013
433028
  function computeFingerprintFromMessages(messages) {
433014
433029
  const firstMessageText = extractFirstMessageText(messages);
433015
- return computeFingerprint(firstMessageText, "1.2.25");
433030
+ return computeFingerprint(firstMessageText, "1.2.27");
433016
433031
  }
433017
433032
  var FINGERPRINT_SALT = "59cf53e54c78";
433018
433033
  var init_fingerprint = () => {};
@@ -433054,7 +433069,7 @@ async function sideQuery(opts) {
433054
433069
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
433055
433070
  }
433056
433071
  const messageText = extractFirstUserMessageText(messages);
433057
- const fingerprint = computeFingerprint(messageText, "1.2.25");
433072
+ const fingerprint = computeFingerprint(messageText, "1.2.27");
433058
433073
  const attributionHeader = getAttributionHeader(fingerprint);
433059
433074
  const systemBlocks = [
433060
433075
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -443145,17 +443160,15 @@ function FileChangeReviewCard({
443145
443160
  }, undefined, true, undefined, this),
443146
443161
  pendingChangeIds.length > 0 ? /* @__PURE__ */ jsx_dev_runtime98.jsxDEV(ThemedBox_default, {
443147
443162
  marginTop: 1,
443163
+ flexDirection: "column",
443148
443164
  children: [
443149
443165
  /* @__PURE__ */ jsx_dev_runtime98.jsxDEV(ThemedText, {
443150
443166
  dimColor: true,
443151
- children: "Details: /review_detail, /keep, /undo [file_name]"
443152
- }, undefined, false, undefined, this),
443153
- /* @__PURE__ */ jsx_dev_runtime98.jsxDEV("span", {
443154
- children: " "
443167
+ children: "Details: /review_detail, /keep, /undo [file_name]"
443155
443168
  }, undefined, false, undefined, this),
443156
443169
  /* @__PURE__ */ jsx_dev_runtime98.jsxDEV(ThemedText, {
443157
443170
  dimColor: true,
443158
- children: "Warning! /undo all (it undo all file changes) "
443171
+ children: "Warning! /undo all (it undoes all file changes)"
443159
443172
  }, undefined, false, undefined, this)
443160
443173
  ]
443161
443174
  }, undefined, true, undefined, this) : null,
@@ -527368,18 +527381,6 @@ var init_add_dir2 = __esm(() => {
527368
527381
  add_dir_default = addDir;
527369
527382
  });
527370
527383
 
527371
- // src/commands/autofix-pr/index.js
527372
- var autofix_pr_default;
527373
- var init_autofix_pr = __esm(() => {
527374
- autofix_pr_default = { isEnabled: () => false, isHidden: true, name: "stub" };
527375
- });
527376
-
527377
- // src/commands/backfill-sessions/index.js
527378
- var backfill_sessions_default;
527379
- var init_backfill_sessions = __esm(() => {
527380
- backfill_sessions_default = { isEnabled: () => false, isHidden: true, name: "stub" };
527381
- });
527382
-
527383
527384
  // src/ink/components/ScrollBox.tsx
527384
527385
  function ScrollBox({
527385
527386
  children,
@@ -527909,18 +527910,6 @@ var init_btw2 = __esm(() => {
527909
527910
  btw_default = btw;
527910
527911
  });
527911
527912
 
527912
- // src/commands/good-claude/index.js
527913
- var good_claude_default;
527914
- var init_good_claude = __esm(() => {
527915
- good_claude_default = { isEnabled: () => false, isHidden: true, name: "stub" };
527916
- });
527917
-
527918
- // src/commands/issue/index.js
527919
- var issue_default;
527920
- var init_issue = __esm(() => {
527921
- issue_default = { isEnabled: () => false, isHidden: true, name: "stub" };
527922
- });
527923
-
527924
527913
  // src/components/Feedback.tsx
527925
527914
  import { readFile as readFile38, stat as stat37 } from "fs/promises";
527926
527915
  function redactSensitiveInfo(text2) {
@@ -528019,7 +528008,7 @@ function Feedback({
528019
528008
  platform: env4.platform,
528020
528009
  gitRepo: envInfo.isGit,
528021
528010
  terminal: env4.terminal,
528022
- version: "1.2.25",
528011
+ version: "1.2.27",
528023
528012
  transcript: normalizeMessagesForAPI(messages),
528024
528013
  errors: sanitizedErrors,
528025
528014
  lastApiRequest: getLastAPIRequest(),
@@ -528211,7 +528200,7 @@ function Feedback({
528211
528200
  ", ",
528212
528201
  env4.terminal,
528213
528202
  ", v",
528214
- "1.2.25"
528203
+ "1.2.27"
528215
528204
  ]
528216
528205
  }, undefined, true, undefined, this)
528217
528206
  ]
@@ -528317,7 +528306,7 @@ ${sanitizedDescription}
528317
528306
  ` + `**Environment Info**
528318
528307
  ` + `- Platform: ${env4.platform}
528319
528308
  ` + `- Terminal: ${env4.terminal}
528320
- ` + `- Version: ${"1.2.25"}
528309
+ ` + `- Version: ${"1.2.27"}
528321
528310
  ` + `- Feedback ID: ${feedbackId}
528322
528311
  ` + `
528323
528312
  **Errors**
@@ -531156,9 +531145,9 @@ async function assertMinVersion() {
531156
531145
  if (false) {}
531157
531146
  try {
531158
531147
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
531159
- if (versionConfig.minVersion && lt("1.2.25", versionConfig.minVersion)) {
531148
+ if (versionConfig.minVersion && lt("1.2.27", versionConfig.minVersion)) {
531160
531149
  console.error(`
531161
- It looks like your version of RAYU (${"1.2.25"}) needs an update.
531150
+ It looks like your version of RAYU (${"1.2.27"}) needs an update.
531162
531151
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
531163
531152
 
531164
531153
  To update, please run:
@@ -531349,6 +531338,33 @@ async function getNpmDistTags() {
531349
531338
  async function getLatestVersionFromGcs(channel) {
531350
531339
  return getLatestVersionFromGitHub(channel === "stable" ? "stable" : "latest");
531351
531340
  }
531341
+ async function getLatestVersionFromNpm(channel) {
531342
+ try {
531343
+ const res = await axios_default.get(`https://registry.npmjs.org/${"@rayu-dev/rayu-cli"}`, {
531344
+ timeout: 5000,
531345
+ headers: { Accept: "application/vnd.npm.install-v1+json" },
531346
+ validateStatus: (s2) => s2 === 200
531347
+ });
531348
+ const distTags = res.data?.["dist-tags"];
531349
+ if (!distTags)
531350
+ return null;
531351
+ const tag = channel === "stable" ? "stable" : "latest";
531352
+ const version2 = distTags[tag] ?? distTags.latest;
531353
+ return typeof version2 === "string" && version2.length > 0 ? version2 : null;
531354
+ } catch (error54) {
531355
+ logForDebugging(`npm registry version check failed: ${error54}`);
531356
+ return null;
531357
+ }
531358
+ }
531359
+ async function cacheLatestNpmVersion(channel = "latest") {
531360
+ const version2 = await getLatestVersionFromNpm(channel);
531361
+ if (version2) {
531362
+ cachedLatestNpmVersion = version2;
531363
+ }
531364
+ }
531365
+ function getCachedLatestNpmVersionSync() {
531366
+ return cachedLatestNpmVersion;
531367
+ }
531352
531368
  async function getGcsDistTags() {
531353
531369
  return getGitHubDistTags();
531354
531370
  }
@@ -531357,7 +531373,7 @@ async function installGlobalPackage(specificVersion) {
531357
531373
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
531358
531374
  logEvent("tengu_auto_updater_lock_contention", {
531359
531375
  pid: process.pid,
531360
- currentVersion: "1.2.25"
531376
+ currentVersion: "1.2.27"
531361
531377
  });
531362
531378
  return "in_progress";
531363
531379
  }
@@ -531366,7 +531382,7 @@ async function installGlobalPackage(specificVersion) {
531366
531382
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
531367
531383
  logError2(new Error("Windows NPM detected in WSL environment"));
531368
531384
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
531369
- currentVersion: "1.2.25"
531385
+ currentVersion: "1.2.27"
531370
531386
  });
531371
531387
  console.error(`
531372
531388
  Error: Windows NPM detected in WSL
@@ -531421,8 +531437,9 @@ async function removeClaudeAliasesFromShellConfigs() {
531421
531437
  }
531422
531438
  }
531423
531439
  }
531424
- var GITHUB_RELEASES_DOC = "Native/standalone version checks resolve via GitHub Releases (see githubReleases.ts). npm-based updates use MACRO.PACKAGE_URL.", AutoUpdaterError, LOCK_TIMEOUT_MS;
531440
+ var GITHUB_RELEASES_DOC = "Native/standalone version checks resolve via GitHub Releases (see githubReleases.ts). npm-based updates use MACRO.PACKAGE_URL.", AutoUpdaterError, LOCK_TIMEOUT_MS, cachedLatestNpmVersion = null;
531425
531441
  var init_autoUpdater = __esm(() => {
531442
+ init_axios2();
531426
531443
  init_growthbook();
531427
531444
  init_analytics();
531428
531445
  init_config2();
@@ -531901,7 +531918,7 @@ function detectLinuxGlobPatternWarnings() {
531901
531918
  }
531902
531919
  async function getDoctorDiagnostic() {
531903
531920
  const installationType = await getCurrentInstallationType();
531904
- const version2 = typeof MACRO !== "undefined" ? "1.2.25" : "unknown";
531921
+ const version2 = typeof MACRO !== "undefined" ? "1.2.27" : "unknown";
531905
531922
  const installationPath = await getInstallationPath();
531906
531923
  const invokedBinary = getInvokedBinary();
531907
531924
  const multipleInstallations = await detectMultipleInstallations();
@@ -532696,8 +532713,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
532696
532713
  const maxVersion = await getMaxVersion();
532697
532714
  if (maxVersion && gt(version2, maxVersion)) {
532698
532715
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
532699
- if (gte("1.2.25", maxVersion)) {
532700
- logForDebugging(`Native installer: current version ${"1.2.25"} is already at or above maxVersion ${maxVersion}, skipping update`);
532716
+ if (gte("1.2.27", maxVersion)) {
532717
+ logForDebugging(`Native installer: current version ${"1.2.27"} is already at or above maxVersion ${maxVersion}, skipping update`);
532701
532718
  logEvent("tengu_native_update_skipped_max_version", {
532702
532719
  latency_ms: Date.now() - startTime,
532703
532720
  max_version: maxVersion,
@@ -532708,7 +532725,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
532708
532725
  version2 = maxVersion;
532709
532726
  }
532710
532727
  }
532711
- if (!forceReinstall && version2 === "1.2.25" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
532728
+ if (!forceReinstall && version2 === "1.2.27" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
532712
532729
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
532713
532730
  logEvent("tengu_native_update_complete", {
532714
532731
  latency_ms: Date.now() - startTime,
@@ -533904,7 +533921,7 @@ function buildPrimarySection() {
533904
533921
  }, undefined, false, undefined, this);
533905
533922
  return [{
533906
533923
  label: "Version",
533907
- value: "1.2.25"
533924
+ value: "1.2.27"
533908
533925
  }, {
533909
533926
  label: "Session name",
533910
533927
  value: nameValue
@@ -537595,7 +537612,7 @@ function Config({
537595
537612
  }
537596
537613
  }, undefined, false, undefined, this)
537597
537614
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
537598
- currentVersion: "1.2.25",
537615
+ currentVersion: "1.2.27",
537599
537616
  onChoice: (choice) => {
537600
537617
  setShowSubmenu(null);
537601
537618
  setTabsHidden(false);
@@ -537607,7 +537624,7 @@ function Config({
537607
537624
  autoUpdatesChannel: "stable"
537608
537625
  };
537609
537626
  if (choice === "stay") {
537610
- newSettings.minimumVersion = "1.2.25";
537627
+ newSettings.minimumVersion = "1.2.27";
537611
537628
  }
537612
537629
  updateSettingsForSource("userSettings", newSettings);
537613
537630
  setSettingsData((prev_27) => ({
@@ -541805,12 +541822,6 @@ var init_diff4 = __esm(() => {
541805
541822
  };
541806
541823
  });
541807
541824
 
541808
- // src/commands/ctx_viz/index.js
541809
- var ctx_viz_default;
541810
- var init_ctx_viz = __esm(() => {
541811
- ctx_viz_default = { isEnabled: () => false, isHidden: true, name: "stub" };
541812
- });
541813
-
541814
541825
  // src/components/KeybindingWarnings.tsx
541815
541826
  function KeybindingWarnings() {
541816
541827
  const $3 = import_compiler_runtime143.c(2);
@@ -545667,7 +545678,7 @@ function HelpV2(t0) {
545667
545678
  let t6;
545668
545679
  if ($3[31] !== tabs) {
545669
545680
  t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
545670
- title: `Rayu-CLI v${"1.2.25"}`,
545681
+ title: `Rayu-CLI v${"1.2.27"}`,
545671
545682
  color: "professionalBlue",
545672
545683
  defaultTab: "general",
545673
545684
  children: tabs
@@ -547205,12 +547216,6 @@ var init_keep2 = __esm(() => {
547205
547216
  keep_default = keep;
547206
547217
  });
547207
547218
 
547208
- // src/commands/break-cache/index.js
547209
- var break_cache_default;
547210
- var init_break_cache = __esm(() => {
547211
- break_cache_default = { isEnabled: () => false, isHidden: true, name: "stub" };
547212
- });
547213
-
547214
547219
  // src/components/mcp/MCPAgentServerMenu.tsx
547215
547220
  function MCPAgentServerMenu({
547216
547221
  agentServer,
@@ -564184,12 +564189,6 @@ var init_disconnect_index = __esm(() => {
564184
564189
  disconnect_index_default = disconnectTelegram;
564185
564190
  });
564186
564191
 
564187
- // src/commands/onboarding/index.js
564188
- var onboarding_default;
564189
- var init_onboarding = __esm(() => {
564190
- onboarding_default = { isEnabled: () => false, isHidden: true, name: "stub" };
564191
- });
564192
-
564193
564192
  // src/commands/createMovedToPluginCommand.ts
564194
564193
  function createMovedToPluginCommand({
564195
564194
  name,
@@ -565631,7 +565630,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
565631
565630
  }
565632
565631
  return [];
565633
565632
  }
565634
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.25") {
565633
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.27") {
565635
565634
  if (false) {}
565636
565635
  const cachedChangelog = await getStoredChangelog();
565637
565636
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -565644,7 +565643,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.25")
565644
565643
  releaseNotes
565645
565644
  };
565646
565645
  }
565647
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.25") {
565646
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.27") {
565648
565647
  if (false) {}
565649
565648
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
565650
565649
  return {
@@ -565652,7 +565651,7 @@ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.25") {
565652
565651
  releaseNotes
565653
565652
  };
565654
565653
  }
565655
- var import_semver8, MAX_RELEASE_NOTES_SHOWN = 5, RAW_CHANGELOG_URL = "https://raw.githubusercontent.com/anthropics/claude-code/refs/heads/main/CHANGELOG.md", changelogMemoryCache = null;
565654
+ var import_semver8, MAX_RELEASE_NOTES_SHOWN = 5, RAW_CHANGELOG_URL = "https://raw.githubusercontent.com/Choeng-Rayu/rayu-cli/main/rayu/CHANGELOG.md", changelogMemoryCache = null;
565656
565655
  var init_releaseNotes = __esm(() => {
565657
565656
  init_axios2();
565658
565657
  init_state();
@@ -565772,7 +565771,7 @@ function getRecentActivitySync() {
565772
565771
  return cachedActivity;
565773
565772
  }
565774
565773
  function getLogoDisplayData() {
565775
- const version2 = process.env.DEMO_VERSION ?? "1.2.25";
565774
+ const version2 = process.env.DEMO_VERSION ?? "1.2.27";
565776
565775
  const serverUrl = getDirectConnectServerUrl();
565777
565776
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
565778
565777
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -566277,6 +566276,17 @@ function createWhatsNewFeed(releaseNotes) {
566277
566276
  emptyMessage
566278
566277
  };
566279
566278
  }
566279
+ function createUpdateAvailableFeed(currentVersion, latestVersion) {
566280
+ return {
566281
+ title: "Update available",
566282
+ lines: [
566283
+ { text: `v${latestVersion} is available (current v${currentVersion})` },
566284
+ { text: "npm i -g @rayu-dev/rayu-cli@latest" }
566285
+ ],
566286
+ footer: undefined,
566287
+ emptyMessage: ""
566288
+ };
566289
+ }
566280
566290
  function createProjectOnboardingFeed(steps) {
566281
566291
  const enabledSteps = steps.filter(({
566282
566292
  isEnabled: isEnabled2
@@ -567053,7 +567063,7 @@ function LogoV2() {
567053
567063
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
567054
567064
  t2 = () => {
567055
567065
  const currentConfig = getGlobalConfig();
567056
- if (currentConfig.lastReleaseNotesSeen === "1.2.25") {
567066
+ if (currentConfig.lastReleaseNotesSeen === "1.2.27") {
567057
567067
  return;
567058
567068
  }
567059
567069
  saveGlobalConfig(_temp327);
@@ -567530,8 +567540,10 @@ function LogoV2() {
567530
567540
  } else {
567531
567541
  t24 = $3[61];
567532
567542
  }
567543
+ const _latestNpm = getCachedLatestNpmVersionSync();
567544
+ const _updateFeeds = _latestNpm && gt(_latestNpm, "1.2.27") ? [createUpdateAvailableFeed("1.2.27", _latestNpm)] : [];
567533
567545
  const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(FeedColumn, {
567534
- feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), createWhatsNewFeed(changelog)],
567546
+ feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
567535
567547
  maxWidth: rightWidth
567536
567548
  }, undefined, false, undefined, this);
567537
567549
  let t26;
@@ -567729,12 +567741,12 @@ function LogoV2() {
567729
567741
  return t41;
567730
567742
  }
567731
567743
  function _temp327(current) {
567732
- if (current.lastReleaseNotesSeen === "1.2.25") {
567744
+ if (current.lastReleaseNotesSeen === "1.2.27") {
567733
567745
  return current;
567734
567746
  }
567735
567747
  return {
567736
567748
  ...current,
567737
- lastReleaseNotesSeen: "1.2.25"
567749
+ lastReleaseNotesSeen: "1.2.27"
567738
567750
  };
567739
567751
  }
567740
567752
  function _temp241(s_0) {
@@ -567754,6 +567766,7 @@ var init_LogoV2 = __esm(() => {
567754
567766
  init_Clawd();
567755
567767
  init_FeedColumn();
567756
567768
  init_feedConfigs();
567769
+ init_autoUpdater();
567757
567770
  init_config2();
567758
567771
  init_settings2();
567759
567772
  init_debug();
@@ -580488,12 +580501,6 @@ var init_tasks4 = __esm(() => {
580488
580501
  tasks_default = tasks;
580489
580502
  });
580490
580503
 
580491
- // src/commands/teleport/index.js
580492
- var teleport_default;
580493
- var init_teleport2 = __esm(() => {
580494
- teleport_default = { isEnabled: () => false, isHidden: true, name: "stub" };
580495
- });
580496
-
580497
580504
  // src/commands/security-review.ts
580498
580505
  var SECURITY_REVIEW_MARKDOWN = `---
580499
580506
  allowed-tools: Bash(git diff:*), Bash(git status:*), Bash(git log:*), Bash(git show:*), Bash(git remote show:*), Read, Glob, Grep, LS, Task
@@ -580725,12 +580732,6 @@ var init_security_review = __esm(() => {
580725
580732
  });
580726
580733
  });
580727
580734
 
580728
- // src/commands/bughunter/index.js
580729
- var bughunter_default;
580730
- var init_bughunter = __esm(() => {
580731
- bughunter_default = { isEnabled: () => false, isHidden: true, name: "stub" };
580732
- });
580733
-
580734
580735
  // src/commands/terminalSetup/index.ts
580735
580736
  var NATIVE_CSIU_TERMINALS2, terminalSetup, terminalSetup_default;
580736
580737
  var init_terminalSetup2 = __esm(() => {
@@ -592536,7 +592537,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
592536
592537
  smapsRollup,
592537
592538
  platform: process.platform,
592538
592539
  nodeVersion: process.version,
592539
- ccVersion: "1.2.25"
592540
+ ccVersion: "1.2.27"
592540
592541
  };
592541
592542
  }
592542
592543
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -592641,12 +592642,6 @@ var init_heapdump2 = __esm(() => {
592641
592642
  heapdump_default = heapDump;
592642
592643
  });
592643
592644
 
592644
- // src/commands/mock-limits/index.js
592645
- var mock_limits_default;
592646
- var init_mock_limits = __esm(() => {
592647
- mock_limits_default = { isEnabled: () => false, isHidden: true, name: "stub" };
592648
- });
592649
-
592650
592645
  // src/bridge/bridgeApi.ts
592651
592646
  function validateBridgeId(id, label) {
592652
592647
  if (!id || !SAFE_ID_PATTERN.test(id)) {
@@ -593064,7 +593059,7 @@ var init_bridge_kick = __esm(() => {
593064
593059
  var call47 = async () => {
593065
593060
  return {
593066
593061
  type: "text",
593067
- value: "1.2.25"
593062
+ value: "1.2.27"
593068
593063
  };
593069
593064
  }, version2, version_default;
593070
593065
  var init_version = __esm(() => {
@@ -593079,32 +593074,6 @@ var init_version = __esm(() => {
593079
593074
  version_default = version2;
593080
593075
  });
593081
593076
 
593082
- // src/commands/summary/index.js
593083
- var summary_default;
593084
- var init_summary = __esm(() => {
593085
- summary_default = { isEnabled: () => false, isHidden: true, name: "stub" };
593086
- });
593087
-
593088
- // src/commands/reset-limits/index.js
593089
- var stub, resetLimits, resetLimitsNonInteractive;
593090
- var init_reset_limits = __esm(() => {
593091
- stub = { isEnabled: () => false, isHidden: true, name: "stub" };
593092
- resetLimits = stub;
593093
- resetLimitsNonInteractive = stub;
593094
- });
593095
-
593096
- // src/commands/ant-trace/index.js
593097
- var ant_trace_default;
593098
- var init_ant_trace = __esm(() => {
593099
- ant_trace_default = { isEnabled: () => false, isHidden: true, name: "stub" };
593100
- });
593101
-
593102
- // src/commands/perf-issue/index.js
593103
- var perf_issue_default;
593104
- var init_perf_issue = __esm(() => {
593105
- perf_issue_default = { isEnabled: () => false, isHidden: true, name: "stub" };
593106
- });
593107
-
593108
593077
  // src/components/sandbox/SandboxConfigTab.tsx
593109
593078
  function SandboxConfigTab() {
593110
593079
  const $3 = import_compiler_runtime242.c(3);
@@ -594590,12 +594559,6 @@ var init_bundledSkills = __esm(() => {
594590
594559
  SAFE_WRITE_FLAGS = process.platform === "win32" ? "wx" : fsConstants5.O_WRONLY | fsConstants5.O_CREAT | fsConstants5.O_EXCL | O_NOFOLLOW;
594591
594560
  });
594592
594561
 
594593
- // src/commands/env/index.js
594594
- var env_default;
594595
- var init_env2 = __esm(() => {
594596
- env_default = { isEnabled: () => false, isHidden: true, name: "stub" };
594597
- });
594598
-
594599
594562
  // src/components/WorktreeExitDialog.tsx
594600
594563
  function recordWorktreeExit() {
594601
594564
  (init_sessionStorage(), __toCommonJS(exports_sessionStorage)).saveWorktreeState(null);
@@ -600407,12 +600370,6 @@ var init_stats3 = __esm(() => {
600407
600370
  stats_default = stats2;
600408
600371
  });
600409
600372
 
600410
- // src/commands/debug-tool-call/index.js
600411
- var debug_tool_call_default;
600412
- var init_debug_tool_call = __esm(() => {
600413
- debug_tool_call_default = { isEnabled: () => false, isHidden: true, name: "stub" };
600414
- });
600415
-
600416
600373
  // src/types/command.ts
600417
600374
  function getCommandName(cmd) {
600418
600375
  return cmd.userFacingName?.() ?? cmd.name;
@@ -601891,7 +601848,7 @@ function generateHtmlReport(data, insights) {
601891
601848
  </html>`;
601892
601849
  }
601893
601850
  function buildExportData(data, insights, facets, remoteStats) {
601894
- const version3 = typeof MACRO !== "undefined" ? "1.2.25" : "unknown";
601851
+ const version3 = typeof MACRO !== "undefined" ? "1.2.27" : "unknown";
601895
601852
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
601896
601853
  const facets_summary = {
601897
601854
  total: facets.size,
@@ -602616,11 +602573,7 @@ function formatDescriptionWithSource(cmd) {
602616
602573
  var agentsPlatform = null, proactive = null, briefCommand = null, assistantCommand = null, forceSnip = null, workflowsCmd = null, clearSkillIndexCache2 = null, subscribePr = null, ultraplan = null, torch = null, peersCmd = null, forkCmd = null, buddy = null, usageReport2, INTERNAL_ONLY_COMMANDS2, COMMANDS, builtInCommandNames, getWorkflowCommands = null, loadAllCommands, getSkillToolCommands, getSlashCommandToolSkills, REMOTE_SAFE_COMMANDS, BRIDGE_SAFE_COMMANDS;
602617
602574
  var init_commands2 = __esm(() => {
602618
602575
  init_add_dir2();
602619
- init_autofix_pr();
602620
- init_backfill_sessions();
602621
602576
  init_btw2();
602622
- init_good_claude();
602623
- init_issue();
602624
602577
  init_feedback2();
602625
602578
  init_clear2();
602626
602579
  init_color3();
@@ -602631,7 +602584,6 @@ var init_commands2 = __esm(() => {
602631
602584
  init_config8();
602632
602585
  init_context4();
602633
602586
  init_diff4();
602634
- init_ctx_viz();
602635
602587
  init_doctor2();
602636
602588
  init_memory2();
602637
602589
  init_help2();
@@ -602641,11 +602593,9 @@ var init_commands2 = __esm(() => {
602641
602593
  init_swarm();
602642
602594
  init_keybindings2();
602643
602595
  init_keep2();
602644
- init_break_cache();
602645
602596
  init_mcp3();
602646
602597
  init_telegram_bot2();
602647
602598
  init_disconnect_index();
602648
- init_onboarding();
602649
602599
  init_pr_comments();
602650
602600
  init_rename2();
602651
602601
  init_review_detial2();
@@ -602660,9 +602610,7 @@ var init_commands2 = __esm(() => {
602660
602610
  init_skills5();
602661
602611
  init_status3();
602662
602612
  init_tasks4();
602663
- init_teleport2();
602664
602613
  init_security_review();
602665
- init_bughunter();
602666
602614
  init_terminalSetup2();
602667
602615
  init_undo3();
602668
602616
  init_theme4();
@@ -602679,13 +602627,8 @@ var init_commands2 = __esm(() => {
602679
602627
  init_reload_plugins2();
602680
602628
  init_rewind();
602681
602629
  init_heapdump2();
602682
- init_mock_limits();
602683
602630
  init_bridge_kick();
602684
602631
  init_version();
602685
- init_summary();
602686
- init_reset_limits();
602687
- init_ant_trace();
602688
- init_perf_issue();
602689
602632
  init_sandbox_toggle2();
602690
602633
  init_contactMe2();
602691
602634
  init_advisor2();
@@ -602697,7 +602640,6 @@ var init_commands2 = __esm(() => {
602697
602640
  init_builtinPlugins();
602698
602641
  init_loadPluginCommands();
602699
602642
  init_memoize();
602700
- init_env2();
602701
602643
  init_exit2();
602702
602644
  init_export2();
602703
602645
  init_connect2();
@@ -602711,7 +602653,6 @@ var init_commands2 = __esm(() => {
602711
602653
  init_statusline();
602712
602654
  init_effort3();
602713
602655
  init_stats3();
602714
- init_debug_tool_call();
602715
602656
  init_constants();
602716
602657
  usageReport2 = {
602717
602658
  type: "prompt",
@@ -602728,33 +602669,16 @@ var init_commands2 = __esm(() => {
602728
602669
  }
602729
602670
  };
602730
602671
  INTERNAL_ONLY_COMMANDS2 = [
602731
- backfill_sessions_default,
602732
- break_cache_default,
602733
- bughunter_default,
602734
602672
  commit_default,
602735
602673
  commit_push_pr_default,
602736
- ctx_viz_default,
602737
- good_claude_default,
602738
- issue_default,
602739
602674
  init_verifiers_default,
602740
602675
  swarm_default,
602741
602676
  ...forceSnip ? [forceSnip] : [],
602742
- mock_limits_default,
602743
602677
  bridge_kick_default,
602744
602678
  version_default,
602745
602679
  ...ultraplan ? [ultraplan] : [],
602746
602680
  ...subscribePr ? [subscribePr] : [],
602747
- resetLimits,
602748
- resetLimitsNonInteractive,
602749
- onboarding_default,
602750
- summary_default,
602751
- teleport_default,
602752
- ant_trace_default,
602753
- perf_issue_default,
602754
- env_default,
602755
- debug_tool_call_default,
602756
- agentsPlatform,
602757
- autofix_pr_default
602681
+ agentsPlatform
602758
602682
  ].filter(Boolean);
602759
602683
  COMMANDS = memoize_default(() => [
602760
602684
  add_dir_default,
@@ -602890,7 +602814,6 @@ var init_commands2 = __esm(() => {
602890
602814
  BRIDGE_SAFE_COMMANDS = new Set([
602891
602815
  compact_default,
602892
602816
  clear_default,
602893
- summary_default,
602894
602817
  files_default
602895
602818
  ].filter((c4) => c4 !== null));
602896
602819
  });
@@ -605823,7 +605746,7 @@ var init_sessionStorage = __esm(() => {
605823
605746
  init_settings2();
605824
605747
  init_slowOperations();
605825
605748
  init_uuid();
605826
- VERSION6 = typeof MACRO !== "undefined" ? "1.2.25" : "unknown";
605749
+ VERSION6 = typeof MACRO !== "undefined" ? "1.2.27" : "unknown";
605827
605750
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
605828
605751
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
605829
605752
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -607042,7 +606965,7 @@ var init_filesystem = __esm(() => {
607042
606965
  });
607043
606966
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
607044
606967
  const nonce = randomBytes18(16).toString("hex");
607045
- return join150(getClaudeTempDir(), "bundled-skills", "1.2.25", nonce);
606968
+ return join150(getClaudeTempDir(), "bundled-skills", "1.2.27", nonce);
607046
606969
  });
607047
606970
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
607048
606971
  });
@@ -612157,7 +612080,7 @@ __export(exports_update, {
612157
612080
  import { execFileSync as execFileSync3 } from "node:child_process";
612158
612081
  import { homedir as homedir33 } from "os";
612159
612082
  async function update() {
612160
- writeToStdout(`Current version: ${"1.2.25"}
612083
+ writeToStdout(`Current version: ${"1.2.27"}
612161
612084
  `);
612162
612085
  const isBundled = isInBundledMode();
612163
612086
  if (isBundled) {
@@ -612183,13 +612106,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
612183
612106
  process.exit(1);
612184
612107
  return;
612185
612108
  }
612186
- if (latestVersion === "1.2.25") {
612109
+ if (latestVersion === "1.2.27") {
612187
612110
  writeToStdout(source_default.green(`
612188
- Rayu CLI is up to date (${"1.2.25"})
612111
+ Rayu CLI is up to date (${"1.2.27"})
612189
612112
  `));
612190
612113
  process.exit(0);
612191
612114
  }
612192
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.25"})
612115
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.27"})
612193
612116
  `);
612194
612117
  writeToStdout(`Installing update...
612195
612118
 
@@ -612213,7 +612136,7 @@ Try manually:
612213
612136
  return;
612214
612137
  }
612215
612138
  writeToStdout(source_default.green(`
612216
- Successfully updated from ${"1.2.25"} to ${latestVersion}
612139
+ Successfully updated from ${"1.2.27"} to ${latestVersion}
612217
612140
  `));
612218
612141
  process.exit(0);
612219
612142
  }
@@ -612227,14 +612150,14 @@ async function updateNativeBinary() {
612227
612150
  } catch {
612228
612151
  latestVersion = "";
612229
612152
  }
612230
- if (latestVersion && latestVersion === "1.2.25") {
612153
+ if (latestVersion && latestVersion === "1.2.27") {
612231
612154
  writeToStdout(source_default.green(`
612232
- Rayu CLI is up to date (1.2.25)
612155
+ Rayu CLI is up to date (1.2.27)
612233
612156
  `));
612234
612157
  process.exit(0);
612235
612158
  }
612236
612159
  if (latestVersion) {
612237
- writeToStdout(`New version available: ${latestVersion} (current: 1.2.25)
612160
+ writeToStdout(`New version available: ${latestVersion} (current: 1.2.27)
612238
612161
  `);
612239
612162
  }
612240
612163
  writeToStdout(`Downloading and installing update...
@@ -612249,13 +612172,13 @@ Rayu CLI is up to date (1.2.25)
612249
612172
  return;
612250
612173
  }
612251
612174
  writeToStdout(source_default.green(`
612252
- Rayu CLI is up to date (1.2.25)
612175
+ Rayu CLI is up to date (1.2.27)
612253
612176
  `));
612254
612177
  process.exit(0);
612255
612178
  }
612256
612179
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
612257
612180
  writeToStdout(source_default.green(`
612258
- Successfully updated from 1.2.25 to ${updatedTo}
612181
+ Successfully updated from 1.2.27 to ${updatedTo}
612259
612182
  `));
612260
612183
  writeToStdout(`Restart your terminal to use the new version.
612261
612184
  `);
@@ -612286,7 +612209,7 @@ __export(exports_uninstall, {
612286
612209
  import { execFileSync as execFileSync4 } from "node:child_process";
612287
612210
  import { homedir as homedir34 } from "os";
612288
612211
  async function uninstall() {
612289
- writeToStdout(`Uninstalling Rayu CLI (${"1.2.25"})...
612212
+ writeToStdout(`Uninstalling Rayu CLI (${"1.2.27"})...
612290
612213
  `);
612291
612214
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
612292
612215
 
@@ -612309,7 +612232,7 @@ Try running manually:
612309
612232
  process.exit(1);
612310
612233
  }
612311
612234
  writeToStdout(source_default.green(`
612312
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.2.25"}
612235
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.2.27"}
612313
612236
  `));
612314
612237
  writeToStdout(`Thanks for using Rayu CLI!
612315
612238
  `);
@@ -612361,7 +612284,7 @@ function showFirstRunWelcome() {
612361
612284
  `);
612362
612285
  try {
612363
612286
  mkdirSync13(getRayuConfigHomeDir(), { recursive: true });
612364
- writeFileSync15(markerPath(), "1.2.25", "utf8");
612287
+ writeFileSync15(markerPath(), "1.2.27", "utf8");
612365
612288
  } catch {}
612366
612289
  }
612367
612290
  var init_firstRun = __esm(() => {
@@ -624204,7 +624127,7 @@ async function initializeBetaTracing(resource) {
624204
624127
  });
624205
624128
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
624206
624129
  setLoggerProvider(loggerProvider);
624207
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.25");
624130
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.27");
624208
624131
  setEventLogger(eventLogger);
624209
624132
  process.on("beforeExit", async () => {
624210
624133
  await loggerProvider?.forceFlush();
@@ -624244,7 +624167,7 @@ async function initializeTelemetry() {
624244
624167
  const platform4 = getPlatform();
624245
624168
  const baseAttributes = {
624246
624169
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
624247
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.2.25"
624170
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.2.27"
624248
624171
  };
624249
624172
  if (platform4 === "wsl") {
624250
624173
  const wslVersion = getWslVersion();
@@ -624289,7 +624212,7 @@ async function initializeTelemetry() {
624289
624212
  } catch {}
624290
624213
  };
624291
624214
  registerCleanup(shutdownTelemetry2);
624292
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.25");
624215
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.27");
624293
624216
  }
624294
624217
  const meterProvider = new import_sdk_metrics2.MeterProvider({
624295
624218
  resource,
@@ -624309,7 +624232,7 @@ async function initializeTelemetry() {
624309
624232
  });
624310
624233
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
624311
624234
  setLoggerProvider(loggerProvider);
624312
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.25");
624235
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.27");
624313
624236
  setEventLogger(eventLogger);
624314
624237
  logForDebugging("[3P telemetry] Event logger set successfully");
624315
624238
  process.on("beforeExit", async () => {
@@ -624371,7 +624294,7 @@ Current timeout: ${timeoutMs}ms
624371
624294
  }
624372
624295
  };
624373
624296
  registerCleanup(shutdownTelemetry);
624374
- return meterProvider.getMeter("com.anthropic.claude_code", "1.2.25");
624297
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.2.27");
624375
624298
  }
624376
624299
  async function flushTelemetry() {
624377
624300
  const meterProvider = getMeterProvider();
@@ -625884,7 +625807,7 @@ function buildSystemInitMessage(inputs) {
625884
625807
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625885
625808
  apiKeySource: getAnthropicApiKeyWithSource().source,
625886
625809
  betas: getSdkBetas(),
625887
- claude_code_version: "1.2.25",
625810
+ claude_code_version: "1.2.27",
625888
625811
  output_style: outputStyle2,
625889
625812
  agents: inputs.agents.map((agent) => agent.agentType),
625890
625813
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -642091,9 +642014,9 @@ var init_useVoiceEnabled = __esm(() => {
642091
642014
 
642092
642015
  // src/hooks/useUpdateNotification.ts
642093
642016
  function getSemverPart(version3) {
642094
- return `${import_semver11.major(version3, { loose: true })}.${import_semver11.minor(version3, { loose: true })}.${import_semver11.patch(version3, { loose: true })}`;
642017
+ return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
642095
642018
  }
642096
- function useUpdateNotification(updatedVersion, initialVersion = "1.2.25") {
642019
+ function useUpdateNotification(updatedVersion, initialVersion = "1.2.27") {
642097
642020
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react218.useState(() => getSemverPart(initialVersion));
642098
642021
  if (!updatedVersion) {
642099
642022
  return null;
@@ -642105,10 +642028,10 @@ function useUpdateNotification(updatedVersion, initialVersion = "1.2.25") {
642105
642028
  }
642106
642029
  return null;
642107
642030
  }
642108
- var import_react218, import_semver11;
642031
+ var import_react218, import_semver12;
642109
642032
  var init_useUpdateNotification = __esm(() => {
642110
642033
  import_react218 = __toESM(require_react(), 1);
642111
- import_semver11 = __toESM(require_semver3(), 1);
642034
+ import_semver12 = __toESM(require_semver3(), 1);
642112
642035
  });
642113
642036
 
642114
642037
  // src/components/AutoUpdater.tsx
@@ -642133,7 +642056,7 @@ function AutoUpdater({
642133
642056
  return;
642134
642057
  }
642135
642058
  if (false) {}
642136
- const currentVersion = "1.2.25";
642059
+ const currentVersion = "1.2.27";
642137
642060
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
642138
642061
  let latestVersion = await getLatestVersion(channel);
642139
642062
  const isDisabled = isAutoUpdaterDisabled();
@@ -642346,12 +642269,12 @@ function NativeAutoUpdater({
642346
642269
  logEvent("tengu_native_auto_updater_start", {});
642347
642270
  try {
642348
642271
  const maxVersion = await getMaxVersion();
642349
- if (maxVersion && gt("1.2.25", maxVersion)) {
642272
+ if (maxVersion && gt("1.2.27", maxVersion)) {
642350
642273
  const msg = await getMaxVersionMessage();
642351
642274
  setMaxVersionIssue(msg ?? "affects your version");
642352
642275
  }
642353
642276
  const result = await installLatest(channel);
642354
- const currentVersion = "1.2.25";
642277
+ const currentVersion = "1.2.27";
642355
642278
  const latencyMs = Date.now() - startTime;
642356
642279
  if (result.lockFailed) {
642357
642280
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -642484,21 +642407,21 @@ function PackageManagerAutoUpdater(t0) {
642484
642407
  }
642485
642408
  const [channel, pm] = await Promise.all([Promise.resolve(getInitialSettings()?.autoUpdatesChannel ?? "latest"), getPackageManager()]);
642486
642409
  setPackageManager(pm);
642487
- let latest = await getLatestVersionFromGcs(channel);
642410
+ let latest = await getLatestVersionFromNpm(channel) ?? await getLatestVersionFromGcs(channel);
642488
642411
  const maxVersion = await getMaxVersion();
642489
642412
  if (maxVersion && latest && gt(latest, maxVersion)) {
642490
642413
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
642491
- if (gte("1.2.25", maxVersion)) {
642492
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.25"} is already at or above maxVersion ${maxVersion}, skipping update`);
642414
+ if (gte("1.2.27", maxVersion)) {
642415
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.27"} is already at or above maxVersion ${maxVersion}, skipping update`);
642493
642416
  setUpdateAvailable(false);
642494
642417
  return;
642495
642418
  }
642496
642419
  latest = maxVersion;
642497
642420
  }
642498
- const hasUpdate = latest && !gte("1.2.25", latest) && !shouldSkipVersion(latest);
642421
+ const hasUpdate = latest && !gte("1.2.27", latest) && !shouldSkipVersion(latest);
642499
642422
  setUpdateAvailable(!!hasUpdate);
642500
642423
  if (hasUpdate) {
642501
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.25"} -> ${latest}`);
642424
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.27"} -> ${latest}`);
642502
642425
  }
642503
642426
  };
642504
642427
  $3[0] = t1;
@@ -642532,7 +642455,7 @@ function PackageManagerAutoUpdater(t0) {
642532
642455
  wrap: "truncate",
642533
642456
  children: [
642534
642457
  "currentVersion: ",
642535
- "1.2.25"
642458
+ "1.2.27"
642536
642459
  ]
642537
642460
  }, undefined, true, undefined, this);
642538
642461
  $3[3] = verbose;
@@ -650698,7 +650621,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
650698
650621
  project_dir: getOriginalCwd(),
650699
650622
  added_dirs: addedDirs
650700
650623
  },
650701
- version: "1.2.25",
650624
+ version: "1.2.27",
650702
650625
  output_style: {
650703
650626
  name: outputStyleName
650704
650627
  },
@@ -662068,7 +661991,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
662068
661991
  } catch {}
662069
661992
  const data = {
662070
661993
  trigger,
662071
- version: "1.2.25",
661994
+ version: "1.2.27",
662072
661995
  platform: process.platform,
662073
661996
  transcript,
662074
661997
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -663701,9 +663624,9 @@ async function getDesktopVersion() {
663701
663624
  const installDir = join161(localAppData, "AnthropicClaude");
663702
663625
  try {
663703
663626
  const entries = await readdir31(installDir);
663704
- const versions2 = entries.filter((e2) => e2.startsWith("app-")).map((e2) => e2.slice(4)).filter((v2) => import_semver15.coerce(v2) !== null).sort((a2, b3) => {
663705
- const ca = import_semver15.coerce(a2);
663706
- const cb = import_semver15.coerce(b3);
663627
+ const versions2 = entries.filter((e2) => e2.startsWith("app-")).map((e2) => e2.slice(4)).filter((v2) => import_semver16.coerce(v2) !== null).sort((a2, b3) => {
663628
+ const ca = import_semver16.coerce(a2);
663629
+ const cb = import_semver16.coerce(b3);
663707
663630
  return ca.compare(cb);
663708
663631
  });
663709
663632
  return versions2.length > 0 ? versions2[versions2.length - 1] : null;
@@ -663727,7 +663650,7 @@ async function getDesktopInstallStatus() {
663727
663650
  if (!version3) {
663728
663651
  return { status: "ready", version: "unknown" };
663729
663652
  }
663730
- const coerced = import_semver15.coerce(version3);
663653
+ const coerced = import_semver16.coerce(version3);
663731
663654
  if (!coerced || !gte(coerced.version, MIN_DESKTOP_VERSION)) {
663732
663655
  return { status: "version-too-old", version: version3 };
663733
663656
  }
@@ -663780,14 +663703,14 @@ async function openCurrentSessionInDesktop() {
663780
663703
  }
663781
663704
  return { success: true, deepLinkUrl };
663782
663705
  }
663783
- var import_semver15, MIN_DESKTOP_VERSION = "1.1.2396";
663706
+ var import_semver16, MIN_DESKTOP_VERSION = "1.1.2396";
663784
663707
  var init_desktopDeepLink = __esm(() => {
663785
663708
  init_state();
663786
663709
  init_cwd2();
663787
663710
  init_debug();
663788
663711
  init_execFileNoThrow();
663789
663712
  init_file2();
663790
- import_semver15 = __toESM(require_semver3(), 1);
663713
+ import_semver16 = __toESM(require_semver3(), 1);
663791
663714
  });
663792
663715
 
663793
663716
  // src/components/DesktopHandoff.tsx
@@ -674117,7 +674040,7 @@ function WelcomeV2() {
674117
674040
  dimColor: true,
674118
674041
  children: [
674119
674042
  "v",
674120
- "1.2.25"
674043
+ "1.2.27"
674121
674044
  ]
674122
674045
  }, undefined, true, undefined, this)
674123
674046
  ]
@@ -675834,7 +675757,7 @@ function completeOnboarding() {
675834
675757
  saveGlobalConfig((current) => ({
675835
675758
  ...current,
675836
675759
  hasCompletedOnboarding: true,
675837
- lastOnboardingVersion: "1.2.25"
675760
+ lastOnboardingVersion: "1.2.27"
675838
675761
  }));
675839
675762
  }
675840
675763
  function showDialog(root2, renderer) {
@@ -680134,7 +680057,7 @@ function appendToLog(path30, message) {
680134
680057
  cwd: getFsImplementation().cwd(),
680135
680058
  userType: "external",
680136
680059
  sessionId: getSessionId(),
680137
- version: "1.2.25"
680060
+ version: "1.2.27"
680138
680061
  };
680139
680062
  getLogWriter(path30).write(messageWithTimestamp);
680140
680063
  }
@@ -680608,6 +680531,9 @@ To attach: ${source_default.bold(`tmux attach -t ${tmuxSessionName}`)}`));
680608
680531
  if (hasReleaseNotes) {
680609
680532
  await getRecentActivity();
680610
680533
  }
680534
+ if (!getIsNonInteractiveSession()) {
680535
+ cacheLatestNpmVersion();
680536
+ }
680611
680537
  }
680612
680538
  if (permissionMode === "bypassPermissions" || allowDangerouslySkipPermissions) {
680613
680539
  if (process.platform !== "win32" && typeof process.getuid === "function" && process.getuid() === 0 && process.env.IS_SANDBOX !== "1" && !isEnvTruthy(process.env.CLAUDE_CODE_BUBBLEWRAP)) {
@@ -680642,6 +680568,7 @@ var init_setup2 = __esm(() => {
680642
680568
  init_analytics();
680643
680569
  init_cwd2();
680644
680570
  init_releaseNotes();
680571
+ init_autoUpdater();
680645
680572
  init_Shell();
680646
680573
  init_sinks();
680647
680574
  init_state();
@@ -684238,8 +684165,8 @@ async function getEnvLessBridgeConfig() {
684238
684165
  }
684239
684166
  async function checkEnvLessBridgeMinVersion() {
684240
684167
  const cfg = await getEnvLessBridgeConfig();
684241
- if (cfg.min_version && lt("1.2.25", cfg.min_version)) {
684242
- return `Your version of RAYU (${"1.2.25"}) is too old for Remote Control.
684168
+ if (cfg.min_version && lt("1.2.27", cfg.min_version)) {
684169
+ return `Your version of RAYU (${"1.2.27"}) is too old for Remote Control.
684243
684170
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
684244
684171
  }
684245
684172
  return null;
@@ -684713,7 +684640,7 @@ async function initBridgeCore(params) {
684713
684640
  const rawApi = createBridgeApiClient({
684714
684641
  baseUrl,
684715
684642
  getAccessToken,
684716
- runnerVersion: "1.2.25",
684643
+ runnerVersion: "1.2.27",
684717
684644
  onDebug: logForDebugging,
684718
684645
  onAuth401,
684719
684646
  getTrustedDeviceToken
@@ -690075,7 +690002,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
690075
690002
  setCwd(cwd3);
690076
690003
  const server = new Server({
690077
690004
  name: "claude/tengu",
690078
- version: "1.2.25"
690005
+ version: "1.2.27"
690079
690006
  }, {
690080
690007
  capabilities: {
690081
690008
  tools: {}
@@ -692601,7 +692528,7 @@ ${customInstructions}` : customInstructions;
692601
692528
  }
692602
692529
  }
692603
692530
  logForDiagnosticsNoPII("info", "started", {
692604
- version: "1.2.25",
692531
+ version: "1.2.27",
692605
692532
  is_native_binary: isInBundledMode()
692606
692533
  });
692607
692534
  registerCleanup(async () => {
@@ -693319,7 +693246,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
693319
693246
  pendingHookMessages
693320
693247
  }, renderAndRun);
693321
693248
  }
693322
- }).version("1.2.25 (Rayu-CLI)", "-v, --version", "Output the version number");
693249
+ }).version("1.2.27 (Rayu-CLI)", "-v, --version", "Output the version number");
693323
693250
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
693324
693251
  program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
693325
693252
  if (canUserConfigureAdvisor()) {
@@ -693785,7 +693712,7 @@ if (false) {}
693785
693712
  async function main2() {
693786
693713
  const args = process.argv.slice(2);
693787
693714
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
693788
- console.log(`${"1.2.25"} (Rayu-CLI)`);
693715
+ console.log(`${"1.2.27"} (Rayu-CLI)`);
693789
693716
  return;
693790
693717
  }
693791
693718
  const {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayu-dev/rayu-cli",
3
- "version": "1.2.25",
3
+ "version": "1.2.27",
4
4
  "description": "Rayu-CLI — a multi-provider AI coding CLI",
5
5
  "type": "module",
6
6
  "bin": {