@rayu-dev/rayu-cli 1.2.23 → 1.2.24

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 +158 -94
  2. package/package.json +2 -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.23"}`;
147974
+ return `rayu/${"1.2.24"}`;
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.23"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148000
+ return `rayu/${"1.2.24"} (${"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.23"}${suffix}`;
148014
+ return `rayu/${"1.2.24"}${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.23",
148137
+ appVersion: "1.2.24",
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.23".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
181207
+ const match = "1.2.24".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.23",
181246
+ version: "1.2.24",
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.23"
181860
+ [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.2.24"
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.23");
181887
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.2.24");
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.23"}.${fingerprint}`;
217803
+ const version2 = `${"1.2.24"}.${fingerprint}`;
217804
217804
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
217805
217805
  const cch = "";
217806
217806
  const workload = getWorkload();
@@ -252845,8 +252845,12 @@ function modelSupportsAdaptiveThinking(model) {
252845
252845
  return provider === "anthropic" || provider === "foundry";
252846
252846
  }
252847
252847
  function shouldEnableThinkingByDefault() {
252848
- if (process.env.MAX_THINKING_TOKENS) {
252849
- return parseInt(process.env.MAX_THINKING_TOKENS, 10) > 0;
252848
+ const rawMaxThinkingTokens = process.env.MAX_THINKING_TOKENS;
252849
+ if (rawMaxThinkingTokens) {
252850
+ const parsed = parseInt(rawMaxThinkingTokens, 10);
252851
+ if (!Number.isNaN(parsed)) {
252852
+ return parsed > 0;
252853
+ }
252850
252854
  }
252851
252855
  const { settings } = getSettingsWithErrors();
252852
252856
  if (settings.alwaysThinkingEnabled === false) {
@@ -302318,7 +302322,7 @@ function getTelemetryAttributes() {
302318
302322
  attributes["session.id"] = sessionId;
302319
302323
  }
302320
302324
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
302321
- attributes["app.version"] = "1.2.23";
302325
+ attributes["app.version"] = "1.2.24";
302322
302326
  }
302323
302327
  const oauthAccount = getOauthAccountInfo();
302324
302328
  if (oauthAccount) {
@@ -412676,7 +412680,7 @@ function getInstallationEnv() {
412676
412680
  return;
412677
412681
  }
412678
412682
  function getClaudeCodeVersion() {
412679
- return "1.2.23";
412683
+ return "1.2.24";
412680
412684
  }
412681
412685
  async function getInstalledVSCodeExtensionVersion(command) {
412682
412686
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -417914,7 +417918,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
417914
417918
  const client4 = new Client({
417915
417919
  name: "claude-code",
417916
417920
  title: "RAYU",
417917
- version: "1.2.23",
417921
+ version: "1.2.24",
417918
417922
  description: "Anthropic's agentic coding tool",
417919
417923
  websiteUrl: PRODUCT_URL
417920
417924
  }, {
@@ -418231,7 +418235,7 @@ var init_client7 = __esm(() => {
418231
418235
  const client4 = new Client({
418232
418236
  name: "claude-code",
418233
418237
  title: "RAYU",
418234
- version: "1.2.23",
418238
+ version: "1.2.24",
418235
418239
  description: "Anthropic's agentic coding tool",
418236
418240
  websiteUrl: PRODUCT_URL
418237
418241
  }, {
@@ -433008,7 +433012,7 @@ function computeFingerprint(messageText, version2) {
433008
433012
  }
433009
433013
  function computeFingerprintFromMessages(messages) {
433010
433014
  const firstMessageText = extractFirstMessageText(messages);
433011
- return computeFingerprint(firstMessageText, "1.2.23");
433015
+ return computeFingerprint(firstMessageText, "1.2.24");
433012
433016
  }
433013
433017
  var FINGERPRINT_SALT = "59cf53e54c78";
433014
433018
  var init_fingerprint = () => {};
@@ -433050,7 +433054,7 @@ async function sideQuery(opts) {
433050
433054
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
433051
433055
  }
433052
433056
  const messageText = extractFirstUserMessageText(messages);
433053
- const fingerprint = computeFingerprint(messageText, "1.2.23");
433057
+ const fingerprint = computeFingerprint(messageText, "1.2.24");
433054
433058
  const attributionHeader = getAttributionHeader(fingerprint);
433055
433059
  const systemBlocks = [
433056
433060
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -443146,6 +443150,9 @@ function FileChangeReviewCard({
443146
443150
  dimColor: true,
443147
443151
  children: "Details: /review_detail, /keep, /undo [file_name]"
443148
443152
  }, undefined, false, undefined, this),
443153
+ /* @__PURE__ */ jsx_dev_runtime98.jsxDEV("span", {
443154
+ children: " "
443155
+ }, undefined, false, undefined, this),
443149
443156
  /* @__PURE__ */ jsx_dev_runtime98.jsxDEV(ThemedText, {
443150
443157
  dimColor: true,
443151
443158
  children: "Warning! /undo all (it undo all file changes) "
@@ -528012,7 +528019,7 @@ function Feedback({
528012
528019
  platform: env4.platform,
528013
528020
  gitRepo: envInfo.isGit,
528014
528021
  terminal: env4.terminal,
528015
- version: "1.2.23",
528022
+ version: "1.2.24",
528016
528023
  transcript: normalizeMessagesForAPI(messages),
528017
528024
  errors: sanitizedErrors,
528018
528025
  lastApiRequest: getLastAPIRequest(),
@@ -528204,7 +528211,7 @@ function Feedback({
528204
528211
  ", ",
528205
528212
  env4.terminal,
528206
528213
  ", v",
528207
- "1.2.23"
528214
+ "1.2.24"
528208
528215
  ]
528209
528216
  }, undefined, true, undefined, this)
528210
528217
  ]
@@ -528310,7 +528317,7 @@ ${sanitizedDescription}
528310
528317
  ` + `**Environment Info**
528311
528318
  ` + `- Platform: ${env4.platform}
528312
528319
  ` + `- Terminal: ${env4.terminal}
528313
- ` + `- Version: ${"1.2.23"}
528320
+ ` + `- Version: ${"1.2.24"}
528314
528321
  ` + `- Feedback ID: ${feedbackId}
528315
528322
  ` + `
528316
528323
  **Errors**
@@ -531149,9 +531156,9 @@ async function assertMinVersion() {
531149
531156
  if (false) {}
531150
531157
  try {
531151
531158
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
531152
- if (versionConfig.minVersion && lt("1.2.23", versionConfig.minVersion)) {
531159
+ if (versionConfig.minVersion && lt("1.2.24", versionConfig.minVersion)) {
531153
531160
  console.error(`
531154
- It looks like your version of RAYU (${"1.2.23"}) needs an update.
531161
+ It looks like your version of RAYU (${"1.2.24"}) needs an update.
531155
531162
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
531156
531163
 
531157
531164
  To update, please run:
@@ -531350,7 +531357,7 @@ async function installGlobalPackage(specificVersion) {
531350
531357
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
531351
531358
  logEvent("tengu_auto_updater_lock_contention", {
531352
531359
  pid: process.pid,
531353
- currentVersion: "1.2.23"
531360
+ currentVersion: "1.2.24"
531354
531361
  });
531355
531362
  return "in_progress";
531356
531363
  }
@@ -531359,7 +531366,7 @@ async function installGlobalPackage(specificVersion) {
531359
531366
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
531360
531367
  logError2(new Error("Windows NPM detected in WSL environment"));
531361
531368
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
531362
- currentVersion: "1.2.23"
531369
+ currentVersion: "1.2.24"
531363
531370
  });
531364
531371
  console.error(`
531365
531372
  Error: Windows NPM detected in WSL
@@ -531894,7 +531901,7 @@ function detectLinuxGlobPatternWarnings() {
531894
531901
  }
531895
531902
  async function getDoctorDiagnostic() {
531896
531903
  const installationType = await getCurrentInstallationType();
531897
- const version2 = typeof MACRO !== "undefined" ? "1.2.23" : "unknown";
531904
+ const version2 = typeof MACRO !== "undefined" ? "1.2.24" : "unknown";
531898
531905
  const installationPath = await getInstallationPath();
531899
531906
  const invokedBinary = getInvokedBinary();
531900
531907
  const multipleInstallations = await detectMultipleInstallations();
@@ -532689,8 +532696,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
532689
532696
  const maxVersion = await getMaxVersion();
532690
532697
  if (maxVersion && gt(version2, maxVersion)) {
532691
532698
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
532692
- if (gte("1.2.23", maxVersion)) {
532693
- logForDebugging(`Native installer: current version ${"1.2.23"} is already at or above maxVersion ${maxVersion}, skipping update`);
532699
+ if (gte("1.2.24", maxVersion)) {
532700
+ logForDebugging(`Native installer: current version ${"1.2.24"} is already at or above maxVersion ${maxVersion}, skipping update`);
532694
532701
  logEvent("tengu_native_update_skipped_max_version", {
532695
532702
  latency_ms: Date.now() - startTime,
532696
532703
  max_version: maxVersion,
@@ -532701,7 +532708,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
532701
532708
  version2 = maxVersion;
532702
532709
  }
532703
532710
  }
532704
- if (!forceReinstall && version2 === "1.2.23" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
532711
+ if (!forceReinstall && version2 === "1.2.24" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
532705
532712
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
532706
532713
  logEvent("tengu_native_update_complete", {
532707
532714
  latency_ms: Date.now() - startTime,
@@ -533897,7 +533904,7 @@ function buildPrimarySection() {
533897
533904
  }, undefined, false, undefined, this);
533898
533905
  return [{
533899
533906
  label: "Version",
533900
- value: "1.2.23"
533907
+ value: "1.2.24"
533901
533908
  }, {
533902
533909
  label: "Session name",
533903
533910
  value: nameValue
@@ -537588,7 +537595,7 @@ function Config({
537588
537595
  }
537589
537596
  }, undefined, false, undefined, this)
537590
537597
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
537591
- currentVersion: "1.2.23",
537598
+ currentVersion: "1.2.24",
537592
537599
  onChoice: (choice) => {
537593
537600
  setShowSubmenu(null);
537594
537601
  setTabsHidden(false);
@@ -537600,7 +537607,7 @@ function Config({
537600
537607
  autoUpdatesChannel: "stable"
537601
537608
  };
537602
537609
  if (choice === "stay") {
537603
- newSettings.minimumVersion = "1.2.23";
537610
+ newSettings.minimumVersion = "1.2.24";
537604
537611
  }
537605
537612
  updateSettingsForSource("userSettings", newSettings);
537606
537613
  setSettingsData((prev_27) => ({
@@ -545660,7 +545667,7 @@ function HelpV2(t0) {
545660
545667
  let t6;
545661
545668
  if ($3[31] !== tabs) {
545662
545669
  t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
545663
- title: `Rayu-CLI v${"1.2.23"}`,
545670
+ title: `Rayu-CLI v${"1.2.24"}`,
545664
545671
  color: "professionalBlue",
545665
545672
  defaultTab: "general",
545666
545673
  children: tabs
@@ -565624,7 +565631,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
565624
565631
  }
565625
565632
  return [];
565626
565633
  }
565627
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.23") {
565634
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.24") {
565628
565635
  if (false) {}
565629
565636
  const cachedChangelog = await getStoredChangelog();
565630
565637
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -565637,7 +565644,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.23")
565637
565644
  releaseNotes
565638
565645
  };
565639
565646
  }
565640
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.23") {
565647
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.24") {
565641
565648
  if (false) {}
565642
565649
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
565643
565650
  return {
@@ -565765,7 +565772,7 @@ function getRecentActivitySync() {
565765
565772
  return cachedActivity;
565766
565773
  }
565767
565774
  function getLogoDisplayData() {
565768
- const version2 = process.env.DEMO_VERSION ?? "1.2.23";
565775
+ const version2 = process.env.DEMO_VERSION ?? "1.2.24";
565769
565776
  const serverUrl = getDirectConnectServerUrl();
565770
565777
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
565771
565778
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -567046,7 +567053,7 @@ function LogoV2() {
567046
567053
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
567047
567054
  t2 = () => {
567048
567055
  const currentConfig = getGlobalConfig();
567049
- if (currentConfig.lastReleaseNotesSeen === "1.2.23") {
567056
+ if (currentConfig.lastReleaseNotesSeen === "1.2.24") {
567050
567057
  return;
567051
567058
  }
567052
567059
  saveGlobalConfig(_temp327);
@@ -567722,12 +567729,12 @@ function LogoV2() {
567722
567729
  return t41;
567723
567730
  }
567724
567731
  function _temp327(current) {
567725
- if (current.lastReleaseNotesSeen === "1.2.23") {
567732
+ if (current.lastReleaseNotesSeen === "1.2.24") {
567726
567733
  return current;
567727
567734
  }
567728
567735
  return {
567729
567736
  ...current,
567730
- lastReleaseNotesSeen: "1.2.23"
567737
+ lastReleaseNotesSeen: "1.2.24"
567731
567738
  };
567732
567739
  }
567733
567740
  function _temp241(s_0) {
@@ -574277,8 +574284,40 @@ Begin by stating the decomposition and your Wave 1 parallel exploration dispatch
574277
574284
  });
574278
574285
 
574279
574286
  // src/commands/ultrareview-local/index.ts
574280
- var command7, ultrareview_local_default;
574287
+ async function gatherBranchDiff() {
574288
+ try {
574289
+ if (!await getIsGit())
574290
+ return null;
574291
+ const base2 = await getDefaultBranch();
574292
+ let baseRef = base2;
574293
+ const mb = await execFileNoThrow(gitExe(), ["merge-base", "HEAD", base2], { timeout: GIT_TIMEOUT_MS2, preserveOutputOnError: false });
574294
+ if (mb.code === 0 && mb.stdout.trim()) {
574295
+ baseRef = mb.stdout.trim();
574296
+ }
574297
+ const diff2 = await execFileNoThrow(gitExe(), ["--no-optional-locks", "diff", baseRef], { timeout: GIT_TIMEOUT_MS2, preserveOutputOnError: false });
574298
+ if (diff2.code !== 0)
574299
+ return null;
574300
+ let text2 = diff2.stdout;
574301
+ if (!text2.trim())
574302
+ return "";
574303
+ if (text2.length > MAX_DIFF_CHARS) {
574304
+ text2 = text2.slice(0, MAX_DIFF_CHARS) + `
574305
+
574306
+ ... [diff truncated at ${MAX_DIFF_CHARS} characters. Inspect the remaining/largest changed files directly with \`git diff ${baseRef} -- <path>\`; consider committing in smaller chunks for a tighter review.]`;
574307
+ }
574308
+ return text2;
574309
+ } catch {
574310
+ return null;
574311
+ }
574312
+ }
574313
+ var MAX_DIFF_CHARS = 80000, GIT_TIMEOUT_MS2 = 15000, HOW_TO = `## How to ultrareview
574314
+ 1. Establish exactly which files and hunks changed, and group them by concern.
574315
+ 2. Hunt IN PARALLEL. In a SINGLE message, dispatch multiple subagents via the Agent tool to review different areas/concerns concurrently. Cover: correctness & logic errors, edge cases & error handling, security (use the SEC specialist for auth/input-handling/secrets), performance, and test coverage gaps. Use the Explore / general-purpose agents to read the actual changed files and trace how the changed code is used elsewhere — the diff alone is not enough context.
574316
+ 3. VERIFY every candidate bug before reporting it: trace the actual code path, check callers/usages, and confirm it's a genuine defect — discard false positives and anything that's merely stylistic.
574317
+ 4. Report a single prioritized list. For each finding: severity (critical / high / medium / low), \`file:line\`, a concise explanation of the bug and how it triggers, and a concrete suggested fix. If you found no verified bugs, say so plainly rather than inventing issues.`, command7, ultrareview_local_default;
574281
574318
  var init_ultrareview_local = __esm(() => {
574319
+ init_execFileNoThrow();
574320
+ init_git();
574282
574321
  command7 = {
574283
574322
  type: "prompt",
574284
574323
  name: "ultrareview",
@@ -574289,23 +574328,48 @@ var init_ultrareview_local = __esm(() => {
574289
574328
  source: "builtin",
574290
574329
  async getPromptForCommand(args) {
574291
574330
  const pr = (args ?? "").trim();
574292
- const scopeLine = pr ? `Review pull request #${pr}: get its diff with \`gh pr diff ${pr}\` (and \`gh pr view ${pr}\` for context).` : "Review the current branch: determine the diff against the base branch (try `git merge-base HEAD origin/main` / `origin/master`, falling back to `main`/`master`); also include uncommitted changes via `git diff` and `git diff --staged`.";
574331
+ if (pr) {
574332
+ return [
574333
+ {
574334
+ type: "text",
574335
+ text: `You are now in ULTRAREVIEW mode — a deep, multi-agent bug-hunt. Find real, verified bugs in the changed code. This is a review only: do NOT modify code.
574336
+
574337
+ ## Scope
574338
+ Review pull request #${pr}. First run \`gh pr diff ${pr}\` to get the diff and \`gh pr view ${pr}\` for context, and establish exactly which files/hunks changed before reviewing.
574339
+
574340
+ ${HOW_TO}
574341
+
574342
+ Begin by gathering the PR diff, then state your parallel review dispatch.`
574343
+ }
574344
+ ];
574345
+ }
574346
+ const diff2 = await gatherBranchDiff();
574347
+ if (diff2 === "") {
574348
+ return [
574349
+ {
574350
+ type: "text",
574351
+ text: `ULTRAREVIEW: there are no changes on the current branch relative to its base, so there is nothing to review. If you expected changes, tell the user you found an empty diff and ask whether they want to review a specific PR number or a different base.`
574352
+ }
574353
+ ];
574354
+ }
574355
+ const scopeSection = diff2 === null ? `## Scope
574356
+ Review the current branch. Determine the diff against the base branch yourself: find the merge-base (try \`git merge-base HEAD origin/main\` / \`origin/master\`, falling back to \`main\`/\`master\`) and run \`git diff <merge-base>\` (this includes committed and uncommitted changes). Establish exactly which files/hunks changed before reviewing.` : `## Scope
574357
+ Review the current branch. The changeset (committed + uncommitted, vs the merge-base with the default branch) has already been gathered for you below — treat it as the authoritative list of what changed, and use subagents to read the actual files for full context.
574358
+
574359
+ <branch_diff>
574360
+ ${diff2}
574361
+ </branch_diff>`;
574362
+ const opener = diff2 === null ? "Begin by gathering the diff, then state your parallel review dispatch." : "Begin by grouping the changed files from the diff above, then state your parallel review dispatch.";
574293
574363
  return [
574294
574364
  {
574295
574365
  type: "text",
574296
574366
  text: `You are now in ULTRAREVIEW mode — a deep, multi-agent bug-hunt. Find real, verified bugs in the changed code. This is a review only: do NOT modify code.
574297
574367
 
574298
- ## Scope
574299
- ${scopeLine}
574300
- First establish exactly which files and hunks changed before reviewing.
574368
+ ${scopeSection}
574301
574369
 
574302
- ## How to ultrareview
574303
- 1. Gather the diff and the list of changed files/areas. Briefly group them by concern.
574304
- 2. Hunt IN PARALLEL. In a SINGLE message, dispatch multiple subagents via the Agent tool to review different areas/concerns concurrently. Cover: correctness & logic errors, edge cases & error handling, security (use the SEC specialist for auth/input-handling/secrets), performance, and test coverage gaps. Use the Explore / general-purpose agents to trace how changed code is actually used elsewhere.
574305
- 3. VERIFY every candidate bug before reporting it: trace the actual code path, check callers/usages, and confirm it's a genuine defect — discard false positives and anything that's merely stylistic.
574306
- 4. Report a single prioritized list. For each finding: severity (critical / high / medium / low), \`file:line\`, a concise explanation of the bug and how it triggers, and a concrete suggested fix. If you found no verified bugs, say so plainly rather than inventing issues.
574370
+ ${HOW_TO}
574307
574371
 
574308
- Begin by gathering the diff, then state your parallel review dispatch.`
574372
+ ${opener}`
574309
574373
  }
574310
574374
  ];
574311
574375
  }
@@ -592472,7 +592536,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
592472
592536
  smapsRollup,
592473
592537
  platform: process.platform,
592474
592538
  nodeVersion: process.version,
592475
- ccVersion: "1.2.23"
592539
+ ccVersion: "1.2.24"
592476
592540
  };
592477
592541
  }
592478
592542
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -593000,7 +593064,7 @@ var init_bridge_kick = __esm(() => {
593000
593064
  var call47 = async () => {
593001
593065
  return {
593002
593066
  type: "text",
593003
- value: "1.2.23"
593067
+ value: "1.2.24"
593004
593068
  };
593005
593069
  }, version2, version_default;
593006
593070
  var init_version = __esm(() => {
@@ -601827,7 +601891,7 @@ function generateHtmlReport(data, insights) {
601827
601891
  </html>`;
601828
601892
  }
601829
601893
  function buildExportData(data, insights, facets, remoteStats) {
601830
- const version3 = typeof MACRO !== "undefined" ? "1.2.23" : "unknown";
601894
+ const version3 = typeof MACRO !== "undefined" ? "1.2.24" : "unknown";
601831
601895
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
601832
601896
  const facets_summary = {
601833
601897
  total: facets.size,
@@ -605759,7 +605823,7 @@ var init_sessionStorage = __esm(() => {
605759
605823
  init_settings2();
605760
605824
  init_slowOperations();
605761
605825
  init_uuid();
605762
- VERSION6 = typeof MACRO !== "undefined" ? "1.2.23" : "unknown";
605826
+ VERSION6 = typeof MACRO !== "undefined" ? "1.2.24" : "unknown";
605763
605827
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
605764
605828
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
605765
605829
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -606978,7 +607042,7 @@ var init_filesystem = __esm(() => {
606978
607042
  });
606979
607043
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
606980
607044
  const nonce = randomBytes18(16).toString("hex");
606981
- return join150(getClaudeTempDir(), "bundled-skills", "1.2.23", nonce);
607045
+ return join150(getClaudeTempDir(), "bundled-skills", "1.2.24", nonce);
606982
607046
  });
606983
607047
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
606984
607048
  });
@@ -612093,7 +612157,7 @@ __export(exports_update, {
612093
612157
  import { execFileSync as execFileSync3 } from "node:child_process";
612094
612158
  import { homedir as homedir33 } from "os";
612095
612159
  async function update() {
612096
- writeToStdout(`Current version: ${"1.2.23"}
612160
+ writeToStdout(`Current version: ${"1.2.24"}
612097
612161
  `);
612098
612162
  const isBundled = isInBundledMode();
612099
612163
  if (isBundled) {
@@ -612119,13 +612183,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
612119
612183
  process.exit(1);
612120
612184
  return;
612121
612185
  }
612122
- if (latestVersion === "1.2.23") {
612186
+ if (latestVersion === "1.2.24") {
612123
612187
  writeToStdout(source_default.green(`
612124
- Rayu CLI is up to date (${"1.2.23"})
612188
+ Rayu CLI is up to date (${"1.2.24"})
612125
612189
  `));
612126
612190
  process.exit(0);
612127
612191
  }
612128
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.23"})
612192
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.24"})
612129
612193
  `);
612130
612194
  writeToStdout(`Installing update...
612131
612195
 
@@ -612149,7 +612213,7 @@ Try manually:
612149
612213
  return;
612150
612214
  }
612151
612215
  writeToStdout(source_default.green(`
612152
- Successfully updated from ${"1.2.23"} to ${latestVersion}
612216
+ Successfully updated from ${"1.2.24"} to ${latestVersion}
612153
612217
  `));
612154
612218
  process.exit(0);
612155
612219
  }
@@ -612163,14 +612227,14 @@ async function updateNativeBinary() {
612163
612227
  } catch {
612164
612228
  latestVersion = "";
612165
612229
  }
612166
- if (latestVersion && latestVersion === "1.2.23") {
612230
+ if (latestVersion && latestVersion === "1.2.24") {
612167
612231
  writeToStdout(source_default.green(`
612168
- Rayu CLI is up to date (1.2.23)
612232
+ Rayu CLI is up to date (1.2.24)
612169
612233
  `));
612170
612234
  process.exit(0);
612171
612235
  }
612172
612236
  if (latestVersion) {
612173
- writeToStdout(`New version available: ${latestVersion} (current: 1.2.23)
612237
+ writeToStdout(`New version available: ${latestVersion} (current: 1.2.24)
612174
612238
  `);
612175
612239
  }
612176
612240
  writeToStdout(`Downloading and installing update...
@@ -612185,13 +612249,13 @@ Rayu CLI is up to date (1.2.23)
612185
612249
  return;
612186
612250
  }
612187
612251
  writeToStdout(source_default.green(`
612188
- Rayu CLI is up to date (1.2.23)
612252
+ Rayu CLI is up to date (1.2.24)
612189
612253
  `));
612190
612254
  process.exit(0);
612191
612255
  }
612192
612256
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
612193
612257
  writeToStdout(source_default.green(`
612194
- Successfully updated from 1.2.23 to ${updatedTo}
612258
+ Successfully updated from 1.2.24 to ${updatedTo}
612195
612259
  `));
612196
612260
  writeToStdout(`Restart your terminal to use the new version.
612197
612261
  `);
@@ -612222,7 +612286,7 @@ __export(exports_uninstall, {
612222
612286
  import { execFileSync as execFileSync4 } from "node:child_process";
612223
612287
  import { homedir as homedir34 } from "os";
612224
612288
  async function uninstall() {
612225
- writeToStdout(`Uninstalling Rayu CLI (${"1.2.23"})...
612289
+ writeToStdout(`Uninstalling Rayu CLI (${"1.2.24"})...
612226
612290
  `);
612227
612291
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
612228
612292
 
@@ -612245,7 +612309,7 @@ Try running manually:
612245
612309
  process.exit(1);
612246
612310
  }
612247
612311
  writeToStdout(source_default.green(`
612248
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.2.23"}
612312
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.2.24"}
612249
612313
  `));
612250
612314
  writeToStdout(`Thanks for using Rayu CLI!
612251
612315
  `);
@@ -612297,7 +612361,7 @@ function showFirstRunWelcome() {
612297
612361
  `);
612298
612362
  try {
612299
612363
  mkdirSync13(getRayuConfigHomeDir(), { recursive: true });
612300
- writeFileSync15(markerPath(), "1.2.23", "utf8");
612364
+ writeFileSync15(markerPath(), "1.2.24", "utf8");
612301
612365
  } catch {}
612302
612366
  }
612303
612367
  var init_firstRun = __esm(() => {
@@ -624140,7 +624204,7 @@ async function initializeBetaTracing(resource) {
624140
624204
  });
624141
624205
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
624142
624206
  setLoggerProvider(loggerProvider);
624143
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.23");
624207
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.24");
624144
624208
  setEventLogger(eventLogger);
624145
624209
  process.on("beforeExit", async () => {
624146
624210
  await loggerProvider?.forceFlush();
@@ -624180,7 +624244,7 @@ async function initializeTelemetry() {
624180
624244
  const platform4 = getPlatform();
624181
624245
  const baseAttributes = {
624182
624246
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
624183
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.2.23"
624247
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.2.24"
624184
624248
  };
624185
624249
  if (platform4 === "wsl") {
624186
624250
  const wslVersion = getWslVersion();
@@ -624225,7 +624289,7 @@ async function initializeTelemetry() {
624225
624289
  } catch {}
624226
624290
  };
624227
624291
  registerCleanup(shutdownTelemetry2);
624228
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.23");
624292
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.24");
624229
624293
  }
624230
624294
  const meterProvider = new import_sdk_metrics2.MeterProvider({
624231
624295
  resource,
@@ -624245,7 +624309,7 @@ async function initializeTelemetry() {
624245
624309
  });
624246
624310
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
624247
624311
  setLoggerProvider(loggerProvider);
624248
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.23");
624312
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.2.24");
624249
624313
  setEventLogger(eventLogger);
624250
624314
  logForDebugging("[3P telemetry] Event logger set successfully");
624251
624315
  process.on("beforeExit", async () => {
@@ -624307,7 +624371,7 @@ Current timeout: ${timeoutMs}ms
624307
624371
  }
624308
624372
  };
624309
624373
  registerCleanup(shutdownTelemetry);
624310
- return meterProvider.getMeter("com.anthropic.claude_code", "1.2.23");
624374
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.2.24");
624311
624375
  }
624312
624376
  async function flushTelemetry() {
624313
624377
  const meterProvider = getMeterProvider();
@@ -625820,7 +625884,7 @@ function buildSystemInitMessage(inputs) {
625820
625884
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625821
625885
  apiKeySource: getAnthropicApiKeyWithSource().source,
625822
625886
  betas: getSdkBetas(),
625823
- claude_code_version: "1.2.23",
625887
+ claude_code_version: "1.2.24",
625824
625888
  output_style: outputStyle2,
625825
625889
  agents: inputs.agents.map((agent) => agent.agentType),
625826
625890
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -642029,7 +642093,7 @@ var init_useVoiceEnabled = __esm(() => {
642029
642093
  function getSemverPart(version3) {
642030
642094
  return `${import_semver11.major(version3, { loose: true })}.${import_semver11.minor(version3, { loose: true })}.${import_semver11.patch(version3, { loose: true })}`;
642031
642095
  }
642032
- function useUpdateNotification(updatedVersion, initialVersion = "1.2.23") {
642096
+ function useUpdateNotification(updatedVersion, initialVersion = "1.2.24") {
642033
642097
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react218.useState(() => getSemverPart(initialVersion));
642034
642098
  if (!updatedVersion) {
642035
642099
  return null;
@@ -642069,7 +642133,7 @@ function AutoUpdater({
642069
642133
  return;
642070
642134
  }
642071
642135
  if (false) {}
642072
- const currentVersion = "1.2.23";
642136
+ const currentVersion = "1.2.24";
642073
642137
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
642074
642138
  let latestVersion = await getLatestVersion(channel);
642075
642139
  const isDisabled = isAutoUpdaterDisabled();
@@ -642282,12 +642346,12 @@ function NativeAutoUpdater({
642282
642346
  logEvent("tengu_native_auto_updater_start", {});
642283
642347
  try {
642284
642348
  const maxVersion = await getMaxVersion();
642285
- if (maxVersion && gt("1.2.23", maxVersion)) {
642349
+ if (maxVersion && gt("1.2.24", maxVersion)) {
642286
642350
  const msg = await getMaxVersionMessage();
642287
642351
  setMaxVersionIssue(msg ?? "affects your version");
642288
642352
  }
642289
642353
  const result = await installLatest(channel);
642290
- const currentVersion = "1.2.23";
642354
+ const currentVersion = "1.2.24";
642291
642355
  const latencyMs = Date.now() - startTime;
642292
642356
  if (result.lockFailed) {
642293
642357
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -642424,17 +642488,17 @@ function PackageManagerAutoUpdater(t0) {
642424
642488
  const maxVersion = await getMaxVersion();
642425
642489
  if (maxVersion && latest && gt(latest, maxVersion)) {
642426
642490
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
642427
- if (gte("1.2.23", maxVersion)) {
642428
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.23"} is already at or above maxVersion ${maxVersion}, skipping update`);
642491
+ if (gte("1.2.24", maxVersion)) {
642492
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.24"} is already at or above maxVersion ${maxVersion}, skipping update`);
642429
642493
  setUpdateAvailable(false);
642430
642494
  return;
642431
642495
  }
642432
642496
  latest = maxVersion;
642433
642497
  }
642434
- const hasUpdate = latest && !gte("1.2.23", latest) && !shouldSkipVersion(latest);
642498
+ const hasUpdate = latest && !gte("1.2.24", latest) && !shouldSkipVersion(latest);
642435
642499
  setUpdateAvailable(!!hasUpdate);
642436
642500
  if (hasUpdate) {
642437
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.23"} -> ${latest}`);
642501
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.24"} -> ${latest}`);
642438
642502
  }
642439
642503
  };
642440
642504
  $3[0] = t1;
@@ -642468,7 +642532,7 @@ function PackageManagerAutoUpdater(t0) {
642468
642532
  wrap: "truncate",
642469
642533
  children: [
642470
642534
  "currentVersion: ",
642471
- "1.2.23"
642535
+ "1.2.24"
642472
642536
  ]
642473
642537
  }, undefined, true, undefined, this);
642474
642538
  $3[3] = verbose;
@@ -650634,7 +650698,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
650634
650698
  project_dir: getOriginalCwd(),
650635
650699
  added_dirs: addedDirs
650636
650700
  },
650637
- version: "1.2.23",
650701
+ version: "1.2.24",
650638
650702
  output_style: {
650639
650703
  name: outputStyleName
650640
650704
  },
@@ -662004,7 +662068,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
662004
662068
  } catch {}
662005
662069
  const data = {
662006
662070
  trigger,
662007
- version: "1.2.23",
662071
+ version: "1.2.24",
662008
662072
  platform: process.platform,
662009
662073
  transcript,
662010
662074
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -674053,7 +674117,7 @@ function WelcomeV2() {
674053
674117
  dimColor: true,
674054
674118
  children: [
674055
674119
  "v",
674056
- "1.2.23"
674120
+ "1.2.24"
674057
674121
  ]
674058
674122
  }, undefined, true, undefined, this)
674059
674123
  ]
@@ -675770,7 +675834,7 @@ function completeOnboarding() {
675770
675834
  saveGlobalConfig((current) => ({
675771
675835
  ...current,
675772
675836
  hasCompletedOnboarding: true,
675773
- lastOnboardingVersion: "1.2.23"
675837
+ lastOnboardingVersion: "1.2.24"
675774
675838
  }));
675775
675839
  }
675776
675840
  function showDialog(root2, renderer) {
@@ -680070,7 +680134,7 @@ function appendToLog(path30, message) {
680070
680134
  cwd: getFsImplementation().cwd(),
680071
680135
  userType: "external",
680072
680136
  sessionId: getSessionId(),
680073
- version: "1.2.23"
680137
+ version: "1.2.24"
680074
680138
  };
680075
680139
  getLogWriter(path30).write(messageWithTimestamp);
680076
680140
  }
@@ -684174,8 +684238,8 @@ async function getEnvLessBridgeConfig() {
684174
684238
  }
684175
684239
  async function checkEnvLessBridgeMinVersion() {
684176
684240
  const cfg = await getEnvLessBridgeConfig();
684177
- if (cfg.min_version && lt("1.2.23", cfg.min_version)) {
684178
- return `Your version of RAYU (${"1.2.23"}) is too old for Remote Control.
684241
+ if (cfg.min_version && lt("1.2.24", cfg.min_version)) {
684242
+ return `Your version of RAYU (${"1.2.24"}) is too old for Remote Control.
684179
684243
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
684180
684244
  }
684181
684245
  return null;
@@ -684649,7 +684713,7 @@ async function initBridgeCore(params) {
684649
684713
  const rawApi = createBridgeApiClient({
684650
684714
  baseUrl,
684651
684715
  getAccessToken,
684652
- runnerVersion: "1.2.23",
684716
+ runnerVersion: "1.2.24",
684653
684717
  onDebug: logForDebugging,
684654
684718
  onAuth401,
684655
684719
  getTrustedDeviceToken
@@ -690011,7 +690075,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
690011
690075
  setCwd(cwd3);
690012
690076
  const server = new Server({
690013
690077
  name: "claude/tengu",
690014
- version: "1.2.23"
690078
+ version: "1.2.24"
690015
690079
  }, {
690016
690080
  capabilities: {
690017
690081
  tools: {}
@@ -692537,7 +692601,7 @@ ${customInstructions}` : customInstructions;
692537
692601
  }
692538
692602
  }
692539
692603
  logForDiagnosticsNoPII("info", "started", {
692540
- version: "1.2.23",
692604
+ version: "1.2.24",
692541
692605
  is_native_binary: isInBundledMode()
692542
692606
  });
692543
692607
  registerCleanup(async () => {
@@ -693255,7 +693319,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
693255
693319
  pendingHookMessages
693256
693320
  }, renderAndRun);
693257
693321
  }
693258
- }).version("1.2.23 (Rayu-CLI)", "-v, --version", "Output the version number");
693322
+ }).version("1.2.24 (Rayu-CLI)", "-v, --version", "Output the version number");
693259
693323
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
693260
693324
  program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
693261
693325
  if (canUserConfigureAdvisor()) {
@@ -693721,7 +693785,7 @@ if (false) {}
693721
693785
  async function main2() {
693722
693786
  const args = process.argv.slice(2);
693723
693787
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
693724
- console.log(`${"1.2.23"} (Rayu-CLI)`);
693788
+ console.log(`${"1.2.24"} (Rayu-CLI)`);
693725
693789
  return;
693726
693790
  }
693727
693791
  const {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayu-dev/rayu-cli",
3
- "version": "1.2.23",
3
+ "version": "1.2.24",
4
4
  "description": "Rayu-CLI — a multi-provider AI coding CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,6 +12,7 @@
12
12
  "scripts/preinstall.cjs",
13
13
  "scripts/postinstall.cjs"
14
14
  ],
15
+
15
16
  "scripts": {
16
17
  "preinstall": "node scripts/preinstall.cjs",
17
18
  "postinstall": "node scripts/postinstall.cjs",